From e96ed2bcbdb030981428eea09d30253cf6b23147 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 11 Jul 2013 13:35:39 -0700 Subject: [PATCH 1/2] fix environment packet header length --- voxel-server/src/main.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/voxel-server/src/main.cpp b/voxel-server/src/main.cpp index 875626991d..d2eff35904 100644 --- a/voxel-server/src/main.cpp +++ b/voxel-server/src/main.cpp @@ -261,9 +261,8 @@ void deepestLevelVoxelDistributor(NodeList* nodeList, } // send the environment packet if (shouldSendEnvironments) { - int envPacketLength = 1; - int numBytesPacketHeader = populateTypeAndVersion(tempOutputBuffer, PACKET_TYPE_ENVIRONMENT_DATA); + int envPacketLength = numBytesPacketHeader; for (int i = 0; i < sizeof(environmentData) / numBytesPacketHeader; i++) { envPacketLength += environmentData[i].getBroadcastData(tempOutputBuffer + envPacketLength); From 4cf0b7ea663b0dc8dbd5cbc3446588dc1fd719a1 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 11 Jul 2013 13:40:29 -0700 Subject: [PATCH 2/2] switch back to statics for domain server check in, fix environment packets --- libraries/shared/src/NodeList.cpp | 26 ++++++++++++++------------ libraries/shared/src/NodeList.h | 4 ---- voxel-server/src/main.cpp | 2 +- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/libraries/shared/src/NodeList.cpp b/libraries/shared/src/NodeList.cpp index 445b1f7699..391e22a915 100644 --- a/libraries/shared/src/NodeList.cpp +++ b/libraries/shared/src/NodeList.cpp @@ -63,10 +63,7 @@ NodeList::NodeList(char newOwnerType, unsigned int newSocketListenPort) : _ownerType(newOwnerType), _nodeTypesOfInterest(NULL), _ownerID(UNKNOWN_NODE_ID), - _lastNodeID(0), - _printedDomainServerIP(false), - _checkInPacket(NULL), - _checkInPacketSize(0) { + _lastNodeID(0) { pthread_mutex_init(&mutex, 0); } @@ -221,6 +218,8 @@ void NodeList::setNodeTypesOfInterest(const char* nodeTypesOfInterest, int numNo } void NodeList::sendDomainServerCheckIn() { + static bool printedDomainServerIP = false; + // Lookup the IP address of the domain server if we need to if (atoi(DOMAIN_IP) == 0) { struct hostent* pHostInfo; @@ -232,13 +231,16 @@ void NodeList::sendDomainServerCheckIn() { } else { printLog("Failed domain server lookup\n"); } - } else if (!_printedDomainServerIP) { + } else if (!printedDomainServerIP) { printLog("Domain Server IP: %s\n", DOMAIN_IP); - _printedDomainServerIP = true; + printedDomainServerIP = true; } + static unsigned char* checkInPacket = NULL; + static int checkInPacketSize = 0; + // construct the DS check in packet if we need to - if (!_checkInPacket) { + if (!checkInPacket) { int numBytesNodesOfInterest = _nodeTypesOfInterest ? strlen((char*) _nodeTypesOfInterest) : 0; const int IP_ADDRESS_BYTES = 4; @@ -247,8 +249,8 @@ void NodeList::sendDomainServerCheckIn() { int numPacketBytes = sizeof(PACKET_TYPE) + sizeof(PACKET_VERSION) + sizeof(NODE_TYPE) + sizeof(uint16_t) + IP_ADDRESS_BYTES + numBytesNodesOfInterest + sizeof(unsigned char); - _checkInPacket = new unsigned char[numPacketBytes]; - unsigned char* packetPosition = _checkInPacket; + checkInPacket = new unsigned char[numPacketBytes]; + unsigned char* packetPosition = checkInPacket; PACKET_TYPE nodePacketType = (memchr(SOLO_NODE_TYPES, _ownerType, sizeof(SOLO_NODE_TYPES))) ? PACKET_TYPE_DOMAIN_REPORT_FOR_DUTY @@ -259,7 +261,7 @@ void NodeList::sendDomainServerCheckIn() { *(packetPosition++) = _ownerType; - packetPosition += packSocket(_checkInPacket + numHeaderBytes + sizeof(NODE_TYPE), + packetPosition += packSocket(checkInPacket + numHeaderBytes + sizeof(NODE_TYPE), getLocalAddress(), htons(_nodeSocket.getListeningPort())); @@ -274,10 +276,10 @@ void NodeList::sendDomainServerCheckIn() { packetPosition += numBytesNodesOfInterest; } - _checkInPacketSize = packetPosition - _checkInPacket; + checkInPacketSize = packetPosition - checkInPacket; } - _nodeSocket.send(DOMAIN_IP, DOMAINSERVER_PORT, _checkInPacket, _checkInPacketSize); + _nodeSocket.send(DOMAIN_IP, DOMAINSERVER_PORT, checkInPacket, checkInPacketSize); } int NodeList::processDomainServerList(unsigned char* packetData, size_t dataBytes) { diff --git a/libraries/shared/src/NodeList.h b/libraries/shared/src/NodeList.h index 6f4249f33b..da9c4a556a 100644 --- a/libraries/shared/src/NodeList.h +++ b/libraries/shared/src/NodeList.h @@ -113,10 +113,6 @@ private: pthread_t checkInWithDomainServerThread; pthread_mutex_t mutex; - bool _printedDomainServerIP; - unsigned char* _checkInPacket; - int _checkInPacketSize; - void handlePingReply(sockaddr *nodeAddress); void timePingReply(sockaddr *nodeAddress, unsigned char *packetData); }; diff --git a/voxel-server/src/main.cpp b/voxel-server/src/main.cpp index d2eff35904..fbd76d0508 100644 --- a/voxel-server/src/main.cpp +++ b/voxel-server/src/main.cpp @@ -264,7 +264,7 @@ void deepestLevelVoxelDistributor(NodeList* nodeList, int numBytesPacketHeader = populateTypeAndVersion(tempOutputBuffer, PACKET_TYPE_ENVIRONMENT_DATA); int envPacketLength = numBytesPacketHeader; - for (int i = 0; i < sizeof(environmentData) / numBytesPacketHeader; i++) { + for (int i = 0; i < sizeof(environmentData) / sizeof(EnvironmentData); i++) { envPacketLength += environmentData[i].getBroadcastData(tempOutputBuffer + envPacketLength); }