add packet version handling for DS packets

This commit is contained in:
Stephen Birarda 2013-07-08 11:17:29 -07:00
parent d112edab64
commit 047d5b5cab
3 changed files with 12 additions and 8 deletions

View file

@ -71,6 +71,7 @@ int main(int argc, const char * argv[])
unsigned char broadcastPacket[MAX_PACKET_SIZE];
broadcastPacket[0] = PACKET_HEADER_DOMAIN;
broadcastPacket[1] = packetVersion(broadcastPacket[0]);
unsigned char* currentBufferPos;
unsigned char* startPointer;
@ -86,11 +87,13 @@ int main(int argc, const char * argv[])
while (true) {
if (nodeList->getNodeSocket()->receive((sockaddr *)&nodePublicAddress, packetData, &receivedBytes) &&
(packetData[0] == PACKET_HEADER_DOMAIN_REPORT_FOR_DUTY || packetData[0] == PACKET_HEADER_DOMAIN_LIST_REQUEST)) {
(packetData[0] == PACKET_HEADER_DOMAIN_REPORT_FOR_DUTY || packetData[0] == PACKET_HEADER_DOMAIN_LIST_REQUEST) &&
packetVersion(packetData[0]) == packetData[1]) {
// this is an RFD or domain list request packet, and there is a version match
std::map<char, Node *> newestSoloNodes;
nodeType = packetData[1];
int numBytesSocket = unpackSocket(packetData + sizeof(PACKET_HEADER) + sizeof(NODE_TYPE),
int numBytesSocket = unpackSocket(packetData + sizeof(PACKET_HEADER) + sizeof(PACKET_VERSION) + sizeof(NODE_TYPE),
(sockaddr*) &nodeLocalAddress);
sockaddr* destinationSocket = (sockaddr*) &nodePublicAddress;
@ -116,10 +119,10 @@ int main(int argc, const char * argv[])
nodeList->increaseNodeID();
}
currentBufferPos = broadcastPacket + sizeof(PACKET_HEADER);
currentBufferPos = broadcastPacket + sizeof(PACKET_HEADER) + sizeof(PACKET_VERSION);
startPointer = currentBufferPos;
unsigned char* nodeTypesOfInterest = packetData + sizeof(PACKET_HEADER) + sizeof(NODE_TYPE)
unsigned char* nodeTypesOfInterest = packetData + sizeof(PACKET_HEADER) + sizeof(PACKET_VERSION) + sizeof(NODE_TYPE)
+ numBytesSocket + sizeof(unsigned char);
int numInterestTypes = *(nodeTypesOfInterest - 1);

View file

@ -2914,7 +2914,7 @@ void* Application::networkReceive(void* args) {
NodeList::getInstance()->processNodeData(&senderAddress, app->_incomingPacket, bytesReceived);
break;
}
}
}
} else if (!app->_enableNetworkThread) {
break;
}

View file

@ -237,8 +237,8 @@ void NodeList::sendDomainServerCheckIn() {
int numBytesNodesOfInterest = _nodeTypesOfInterest ? strlen((char*) _nodeTypesOfInterest) : 0;
// check in packet has header, node type, port, IP, node types of interest, null termination
int numPacketBytes = sizeof(PACKET_HEADER) + sizeof(NODE_TYPE) + sizeof(uint16_t) + (sizeof(char) * 4) +
numBytesNodesOfInterest + sizeof(unsigned char);
int numPacketBytes = sizeof(PACKET_HEADER) + sizeof(PACKET_VERSION) + sizeof(NODE_TYPE) + sizeof(uint16_t) +
(sizeof(char) * 4) + numBytesNodesOfInterest + sizeof(unsigned char);
checkInPacket = new unsigned char[numPacketBytes];
unsigned char* packetPosition = checkInPacket;
@ -246,9 +246,10 @@ void NodeList::sendDomainServerCheckIn() {
*(packetPosition++) = (memchr(SOLO_NODE_TYPES, _ownerType, sizeof(SOLO_NODE_TYPES)))
? PACKET_HEADER_DOMAIN_REPORT_FOR_DUTY
: PACKET_HEADER_DOMAIN_LIST_REQUEST;
*(packetPosition++) = packetVersion(*(packetPosition - 1));
*(packetPosition++) = _ownerType;
packetPosition += packSocket(checkInPacket + sizeof(PACKET_HEADER) + sizeof(NODE_TYPE),
packetPosition += packSocket(checkInPacket + sizeof(PACKET_HEADER) + sizeof(PACKET_VERSION) + sizeof(NODE_TYPE),
getLocalAddress(),
htons(_nodeSocket.getListeningPort()));