add extra debugging to packet mismatch

This commit is contained in:
Stephen Birarda 2014-01-24 09:10:27 -08:00
parent 604f436d4b
commit 9d71671a52
8 changed files with 17 additions and 14 deletions

View file

@ -832,7 +832,7 @@ void AnimationServer::readPendingDatagrams() {
&& (receivedBytes = nodeList->getNodeSocket().readDatagram((char*) packetData, MAX_PACKET_SIZE, && (receivedBytes = nodeList->getNodeSocket().readDatagram((char*) packetData, MAX_PACKET_SIZE,
nodeSockAddr.getAddressPointer(), nodeSockAddr.getAddressPointer(),
nodeSockAddr.getPortPointer())) && nodeSockAddr.getPortPointer())) &&
packetVersionMatch(packetData)) { packetVersionMatch(packetData, nodeSockAddr)) {
if (packetData[0] == PACKET_TYPE_JURISDICTION) { if (packetData[0] == PACKET_TYPE_JURISDICTION) {
int headerBytes = numBytesForPacketHeader(packetData); int headerBytes = numBytesForPacketHeader(packetData);

View file

@ -111,7 +111,7 @@ void AssignmentClient::readPendingDatagrams() {
if ((receivedBytes = nodeList->getNodeSocket().readDatagram((char*) packetData, MAX_PACKET_SIZE, if ((receivedBytes = nodeList->getNodeSocket().readDatagram((char*) packetData, MAX_PACKET_SIZE,
senderSockAddr.getAddressPointer(), senderSockAddr.getAddressPointer(),
senderSockAddr.getPortPointer())) senderSockAddr.getPortPointer()))
&& packetVersionMatch(packetData)) { && packetVersionMatch(packetData, senderSockAddr)) {
if (_currentAssignment) { if (_currentAssignment) {
// have the threaded current assignment handle this datagram // have the threaded current assignment handle this datagram

View file

@ -54,14 +54,13 @@ void DataServer::readPendingDatagrams() {
qint64 receivedBytes = 0; qint64 receivedBytes = 0;
static unsigned char packetData[MAX_PACKET_SIZE]; static unsigned char packetData[MAX_PACKET_SIZE];
QHostAddress senderAddress; HifiSockAddr senderSockAddr;
quint16 senderPort;
while (_socket.hasPendingDatagrams() && while (_socket.hasPendingDatagrams() &&
(receivedBytes = _socket.readDatagram(reinterpret_cast<char*>(packetData), MAX_PACKET_SIZE, (receivedBytes = _socket.readDatagram(reinterpret_cast<char*>(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) && if ((packetData[0] == PACKET_TYPE_DATA_SERVER_PUT || packetData[0] == PACKET_TYPE_DATA_SERVER_GET) &&
packetVersionMatch(packetData)) { packetVersionMatch(packetData, senderSockAddr)) {
int readBytes = numBytesForPacketHeader(packetData); int readBytes = numBytesForPacketHeader(packetData);
@ -126,7 +125,7 @@ void DataServer::readPendingDatagrams() {
// which is the sent packet with the header replaced // which is the sent packet with the header replaced
packetData[0] = PACKET_TYPE_DATA_SERVER_CONFIRM; packetData[0] = PACKET_TYPE_DATA_SERVER_CONFIRM;
_socket.writeDatagram(reinterpret_cast<char*>(packetData), receivedBytes, _socket.writeDatagram(reinterpret_cast<char*>(packetData), receivedBytes,
senderAddress, senderPort); senderSockAddr.getAddress(), senderSockAddr.getPort());
} }
freeReplyObject(reply); freeReplyObject(reply);
@ -190,7 +189,7 @@ void DataServer::readPendingDatagrams() {
// reply back with the send packet // reply back with the send packet
_socket.writeDatagram(reinterpret_cast<char*>(packetData), numSendPacketBytes, _socket.writeDatagram(reinterpret_cast<char*>(packetData), numSendPacketBytes,
senderAddress, senderPort); senderSockAddr.getAddress(), senderSockAddr.getPort());
} }

View file

@ -116,7 +116,7 @@ void DomainServer::readAvailableDatagrams() {
if ((receivedBytes = nodeList->getNodeSocket().readDatagram((char*) packetData, MAX_PACKET_SIZE, if ((receivedBytes = nodeList->getNodeSocket().readDatagram((char*) packetData, MAX_PACKET_SIZE,
senderSockAddr.getAddressPointer(), senderSockAddr.getAddressPointer(),
senderSockAddr.getPortPointer())) 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) { 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 // this is an RFD or domain list request packet, and there is a version match

View file

@ -39,7 +39,7 @@ void DatagramProcessor::processDatagrams() {
_packetCount++; _packetCount++;
_byteCount += bytesReceived; _byteCount += bytesReceived;
if (packetVersionMatch(incomingPacket)) { if (packetVersionMatch(incomingPacket, senderSockAddr)) {
// only process this packet if we have a match on the packet version // only process this packet if we have a match on the packet version
switch (incomingPacket[0]) { switch (incomingPacket[0]) {
case PACKET_TYPE_TRANSMITTER_DATA_V2: case PACKET_TYPE_TRANSMITTER_DATA_V2:

View file

@ -45,7 +45,7 @@ void VoxelPacketProcessor::processPacket(const HifiSockAddr& senderSockAddr, uns
if (messageLength > statsMessageLength) { if (messageLength > statsMessageLength) {
packetData += statsMessageLength; packetData += statsMessageLength;
messageLength -= statsMessageLength; messageLength -= statsMessageLength;
if (!packetVersionMatch(packetData)) { if (!packetVersionMatch(packetData, senderSockAddr)) {
return; // bail since piggyback data doesn't match our versioning return; // bail since piggyback data doesn't match our versioning
} }
} else { } else {

View file

@ -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 // 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 // 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) { if (packetHeader[1] == versionForPacketType(packetHeader[0]) || packetHeader[0] == PACKET_TYPE_STUN_RESPONSE) {
return true; return true;
} else { } 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; return false;
} }
} }

View file

@ -12,6 +12,8 @@
#ifndef hifi_PacketHeaders_h #ifndef hifi_PacketHeaders_h
#define hifi_PacketHeaders_h #define hifi_PacketHeaders_h
#include "HifiSockAddr.h"
typedef char PACKET_TYPE; typedef char PACKET_TYPE;
const PACKET_TYPE PACKET_TYPE_UNKNOWN = 0; const PACKET_TYPE PACKET_TYPE_UNKNOWN = 0;
const PACKET_TYPE PACKET_TYPE_STUN_RESPONSE = 1; const PACKET_TYPE PACKET_TYPE_STUN_RESPONSE = 1;
@ -55,7 +57,7 @@ typedef char PACKET_VERSION;
PACKET_VERSION versionForPacketType(PACKET_TYPE type); 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 populateTypeAndVersion(unsigned char* destinationHeader, PACKET_TYPE type);
int numBytesForPacketHeader(const unsigned char* packetHeader); int numBytesForPacketHeader(const unsigned char* packetHeader);