strcpy(vdrserver.ip, server);
vdrserver.name = new char[1];
vdrserver.name[0] = '\0';
+ vdrserver.port = 3024; // FIXME
servers.push_back(vdrserver);
}
else
return;
}
- logger->log("VConnect", Log::NOTICE, "Connecting to server at %s", servers[selectedServer].ip);
+ logger->log("VConnect", Log::NOTICE, "Connecting to server at %s %u", servers[selectedServer].ip, servers[selectedServer].port);
Wol::getInstance()->setWakeUpIP(servers[selectedServer].ip);
vdr->setServerIP(servers[selectedServer].ip);
-
+ vdr->setServerPort(servers[selectedServer].port);
+
// Clear the serverIPs vector
for(UINT k = 0; k < servers.size(); k++)
{
{
Wol* wol = Wol::getInstance();
findingServer = 1;
- char* message = "VOMP";
+ char message[15];
+ memset(message, 0, 15);
+ strcpy(message, "VDP-0001");
+ /*tcp->getMAC(&message[9]); put mac here when TCP modified to do this*/
- DatagramSocket ds(port);
+ DatagramSocket ds(0);
int haveAtLeastOne = 0;
int retval;
int waitType = 1;
ds.shutdown();
ds.init();
logger->log("VDR", Log::NOTICE, "Broadcasting for server");
- ds.send("255.255.255.255", 3024, message, strlen(message));
+ ds.send("255.255.255.255", 51051, message, 15);
+ ds.send("255.255.255.255", 51052, message, 15);
+ ds.send("255.255.255.255", 51053, message, 15);
+ ds.send("255.255.255.255", 51054, message, 15);
+ ds.send("255.255.255.255", 51055, message, 15);
if(!firstloop) wol->doWakeUp();
}
retval = ds.waitforMessage(waitType);
if (retval == 2) // we got a reply
{
- if (!strcmp(ds.getData(), "VOMP")) // echo.....
- {
- waitType = 2;
- }
- else
+ waitType = 2;
+
+ char* vdpreply = ds.getData();
+ if ((ds.getDataLength() >= 24) && !strncmp(vdpreply, "VDP-0002", 8))
{
VDRServer newServer;
+ // FIXME upgrade this to look for a return IP in the reply packet
newServer.ip = new char[16];
strcpy(newServer.ip, ds.getFromIPA());
- if (ds.getDataLength() == 0)
- {
- newServer.name = new char[1];
- newServer.name[0] = '\0';
- }
- else
- {
- newServer.name = new char[strlen(ds.getData())+1];
- strcpy(newServer.name, ds.getData());
- }
+ USHORT newServerPort;
+ memcpy(&newServerPort, &vdpreply[26], 2);
+ newServer.port = ntohs(newServerPort);
+
+ ULONG newServerVersion;
+ memcpy(&newServerVersion, &vdpreply[28], 4);
+ newServer.version = ntohl(newServerVersion);
+
+ int newServerNameLength = ds.getDataLength() - 32;
+ newServer.name = new char[newServerNameLength];
+ strcpy(newServer.name, &vdpreply[32]);
servers.push_back(newServer);
- waitType = 2;
haveAtLeastOne = 1;
}
}
strcpy(serverIP, newIP);
}
+void VDR::setServerPort(USHORT newPort)
+{
+ serverPort = newPort;
+}
+
int VDR::connect()
{
maxChannelNumber = 0;
if (tcp) delete tcp;
tcp = new TCP();
- if (tcp->connectTo(serverIP, 3024))
+ if (tcp->connectTo(serverIP, serverPort))
{
connected = true;
threadStart();
logger->log("VDR", Log::DEBUG, "RR unsleep");
// Woken because a response packet has arrived, mutex will be locked
+ logger->log("VDR", Log::DEBUG, "Packet delivered to me, requestID: %lu", vdrpr.save_vresp->getRequestID());
edUnlock();
return vdrpr.save_vresp;
*(ULONG*)&buffer[4] = htonl(stringLength);
strcpy(&buffer[8], logString);
- if ((ULONG)tcp->sendData(buffer, packetLength) != packetLength) {
- delete [] buffer;
- return false;
+ if (tcp->sendData(buffer, packetLength) != packetLength)
+ {
+ delete [] buffer;
+ return false;
}
delete [] buffer;
return true;