diff --git a/animation-server/src/AnimationServer.cpp b/animation-server/src/AnimationServer.cpp index ba07fac21a..6d493b62e5 100644 --- a/animation-server/src/AnimationServer.cpp +++ b/animation-server/src/AnimationServer.cpp @@ -832,7 +832,7 @@ void AnimationServer::readPendingDatagrams() { && (receivedBytes = nodeList->getNodeSocket().readDatagram((char*) packetData, MAX_PACKET_SIZE, nodeSockAddr.getAddressPointer(), nodeSockAddr.getPortPointer())) && - packetVersionMatch(packetData)) { + packetVersionMatch(packetData, nodeSockAddr)) { if (packetData[0] == PACKET_TYPE_JURISDICTION) { int headerBytes = numBytesForPacketHeader(packetData); diff --git a/assignment-client/src/AssignmentClient.cpp b/assignment-client/src/AssignmentClient.cpp index 3b209f2e57..fc8d2deffd 100644 --- a/assignment-client/src/AssignmentClient.cpp +++ b/assignment-client/src/AssignmentClient.cpp @@ -111,7 +111,7 @@ void AssignmentClient::readPendingDatagrams() { if ((receivedBytes = nodeList->getNodeSocket().readDatagram((char*) packetData, MAX_PACKET_SIZE, senderSockAddr.getAddressPointer(), senderSockAddr.getPortPointer())) - && packetVersionMatch(packetData)) { + && packetVersionMatch(packetData, senderSockAddr)) { if (_currentAssignment) { // have the threaded current assignment handle this datagram diff --git a/data-server/src/DataServer.cpp b/data-server/src/DataServer.cpp index 4362c8ace0..c59749ed08 100644 --- a/data-server/src/DataServer.cpp +++ b/data-server/src/DataServer.cpp @@ -54,14 +54,13 @@ void DataServer::readPendingDatagrams() { qint64 receivedBytes = 0; static unsigned char packetData[MAX_PACKET_SIZE]; - QHostAddress senderAddress; - quint16 senderPort; + HifiSockAddr senderSockAddr; while (_socket.hasPendingDatagrams() && (receivedBytes = _socket.readDatagram(reinterpret_cast(packetData), MAX_PACKET_SIZE, - &senderAddress, &senderPort))) { + senderSockAddr.getAddressPointer(), senderSockAddr.getPortPointer()))) { if ((packetData[0] == PACKET_TYPE_DATA_SERVER_PUT || packetData[0] == PACKET_TYPE_DATA_SERVER_GET) && - packetVersionMatch(packetData)) { + packetVersionMatch(packetData, senderSockAddr)) { int readBytes = numBytesForPacketHeader(packetData); @@ -126,7 +125,7 @@ void DataServer::readPendingDatagrams() { // which is the sent packet with the header replaced packetData[0] = PACKET_TYPE_DATA_SERVER_CONFIRM; _socket.writeDatagram(reinterpret_cast(packetData), receivedBytes, - senderAddress, senderPort); + senderSockAddr.getAddress(), senderSockAddr.getPort()); } freeReplyObject(reply); @@ -190,7 +189,7 @@ void DataServer::readPendingDatagrams() { // reply back with the send packet _socket.writeDatagram(reinterpret_cast(packetData), numSendPacketBytes, - senderAddress, senderPort); + senderSockAddr.getAddress(), senderSockAddr.getPort()); } diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 3e60d1509c..d9f6c74934 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -116,7 +116,7 @@ void DomainServer::readAvailableDatagrams() { if ((receivedBytes = nodeList->getNodeSocket().readDatagram((char*) packetData, MAX_PACKET_SIZE, senderSockAddr.getAddressPointer(), senderSockAddr.getPortPointer())) - && packetVersionMatch((unsigned char*) packetData)) { + && packetVersionMatch((unsigned char*) packetData, senderSockAddr)) { if (packetData[0] == PACKET_TYPE_DOMAIN_REPORT_FOR_DUTY || packetData[0] == PACKET_TYPE_DOMAIN_LIST_REQUEST) { // this is an RFD or domain list request packet, and there is a version match diff --git a/interface/src/DatagramProcessor.cpp b/interface/src/DatagramProcessor.cpp index 9a6c1bea05..ad18a11c98 100644 --- a/interface/src/DatagramProcessor.cpp +++ b/interface/src/DatagramProcessor.cpp @@ -39,7 +39,7 @@ void DatagramProcessor::processDatagrams() { _packetCount++; _byteCount += bytesReceived; - if (packetVersionMatch(incomingPacket)) { + if (packetVersionMatch(incomingPacket, senderSockAddr)) { // only process this packet if we have a match on the packet version switch (incomingPacket[0]) { case PACKET_TYPE_TRANSMITTER_DATA_V2: diff --git a/interface/src/VoxelPacketProcessor.cpp b/interface/src/VoxelPacketProcessor.cpp index fe50271ca4..6f51dc041d 100644 --- a/interface/src/VoxelPacketProcessor.cpp +++ b/interface/src/VoxelPacketProcessor.cpp @@ -45,7 +45,7 @@ void VoxelPacketProcessor::processPacket(const HifiSockAddr& senderSockAddr, uns if (messageLength > statsMessageLength) { packetData += statsMessageLength; messageLength -= statsMessageLength; - if (!packetVersionMatch(packetData)) { + if (!packetVersionMatch(packetData, senderSockAddr)) { return; // bail since piggyback data doesn't match our versioning } } else { diff --git a/libraries/shared/src/PacketHeaders.cpp b/libraries/shared/src/PacketHeaders.cpp index c512eac74d..817cf58438 100644 --- a/libraries/shared/src/PacketHeaders.cpp +++ b/libraries/shared/src/PacketHeaders.cpp @@ -64,13 +64,15 @@ PACKET_VERSION versionForPacketType(PACKET_TYPE type) { } } -bool packetVersionMatch(unsigned char* packetHeader) { +bool packetVersionMatch(unsigned char* packetHeader, const HifiSockAddr& senderSockAddr) { // currently this just checks if the version in the packet matches our return from versionForPacketType // may need to be expanded in the future for types and versions that take > than 1 byte if (packetHeader[1] == versionForPacketType(packetHeader[0]) || packetHeader[0] == PACKET_TYPE_STUN_RESPONSE) { return true; } else { - qDebug("There is a packet version mismatch for packet with header %c", packetHeader[0]); + qDebug() << "Packet version mismatch for" << packetHeader[0] << ". Sender" + << senderSockAddr << "sent" << packetHeader[1] << "but" << versionForPacketType(packetHeader[0]) + << "was expected."; return false; } } diff --git a/libraries/shared/src/PacketHeaders.h b/libraries/shared/src/PacketHeaders.h index 5d1c657d6b..a7176fccf8 100644 --- a/libraries/shared/src/PacketHeaders.h +++ b/libraries/shared/src/PacketHeaders.h @@ -12,6 +12,8 @@ #ifndef hifi_PacketHeaders_h #define hifi_PacketHeaders_h +#include "HifiSockAddr.h" + typedef char PACKET_TYPE; const PACKET_TYPE PACKET_TYPE_UNKNOWN = 0; const PACKET_TYPE PACKET_TYPE_STUN_RESPONSE = 1; @@ -55,7 +57,7 @@ typedef char PACKET_VERSION; PACKET_VERSION versionForPacketType(PACKET_TYPE type); -bool packetVersionMatch(unsigned char* packetHeader); +bool packetVersionMatch(unsigned char* packetHeader, const HifiSockAddr& senderSockAddr); int populateTypeAndVersion(unsigned char* destinationHeader, PACKET_TYPE type); int numBytesForPacketHeader(const unsigned char* packetHeader);