Start implementing support for changing the socket name and password.

This commit is contained in:
Andrius Štikonas 2015-01-31 15:28:34 +00:00
parent e17074384a
commit 06aeb187d5
3 changed files with 121 additions and 57 deletions

View File

@ -29,7 +29,7 @@ int main(int argc, char *argv[])
QUdpSocket *udpSocketGet = new QUdpSocket();
udpSocketSend->connectToHost(QHostAddress::Broadcast, 10000);
udpSocketGet->bind(QHostAddress::Any, 10000);
udpSocketGet->bind(QHostAddress::Any, 10000, QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint);
udpSocketSend->write(discover);
udpSocketSend->disconnectFromHost();
@ -45,13 +45,19 @@ int main(int argc, char *argv[])
while (cont)
{
listSockets(sockets);
std::cout << "d - show table data\ns - pick another socket (default is 1)\np - toggle power state\nq - quit" << std::endl;
std::cout << "d - update table data\nn - change socket name\ns - pick another socket (default is 1)\np - toggle power state\nq - quit" << std::endl;
std::cin >> command;
switch (command)
{
case 'd':
sockets[number].tableData();
break;
case 'n':
// std::cout << "Enter new name (max 16 characters)" << std::endl;
// string name;
// std::cin >> name;
sockets[number].changeSocketName();
break;
case 'p':
sockets[number].toggle();
break;
@ -73,6 +79,9 @@ void listSockets(std::vector<Socket> const &sockets)
{
for (std::vector<Socket>::const_iterator i = sockets.begin() ; i != sockets.end(); ++i)
{
std::cout << "___________________________________________________________________________\n" << std::endl;
std::cout << "IP Address: " << i->ip.toString().toStdString() << "\t MAC Address: " << i->mac.toHex().toStdString() << "\t Power: " << (i->powered ? "On" : "Off") << std::endl;
std::cout << "Socket Name: " << i->name.toStdString() << "\t Remote Password: " << i->remotePassword.toStdString() << std::endl;
}
std::cout << "___________________________________________________________________________\n" << std::endl;
}

File diff suppressed because one or more lines are too long

View File

@ -25,21 +25,25 @@ public:
Socket(QHostAddress, QByteArray);
void toggle();
void tableData();
void changeSocketName(/*QString name*/);
bool parseReply(QByteArray);
QHostAddress ip;
QHostAddress ip, localIP;
QByteArray mac;
bool powered;
QString name, remotePassword;
private:
enum Datagram {Subscribe, PowerOff, PowerOn, TableData, SocketData, TimingData, MaxCommands};
enum Datagram {Subscribe, PowerOff, PowerOn, TableData, SocketData, TimingData, WriteSocketData, MaxCommands};
void sendDatagram(Datagram);
void readDatagrams(QUdpSocket *udpSocketGet, Datagram d);
void readDatagrams(QUdpSocket *udpSocketGet);
QByteArray fromIP(unsigned char, unsigned char, unsigned char, unsigned char);
QByteArray commandID[MaxCommands];
QByteArray datagram[MaxCommands];
QByteArray rmac; // Reveresed mac
QByteArray socketTableNumber, socketTableVersion, timingTableNumber, timingTableVersion;
const QByteArray magicKey = QByteArray::fromHex("68 64"); // recognize datagrams from the socket
const QByteArray twenties = QByteArray::fromHex("20 20 20 20 20 20"); // mac address padding