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,
nodeSockAddr.getAddressPointer(),
nodeSockAddr.getPortPointer())) &&
packetVersionMatch(packetData)) {
packetVersionMatch(packetData, nodeSockAddr)) {
if (packetData[0] == PACKET_TYPE_JURISDICTION) {
int headerBytes = numBytesForPacketHeader(packetData);

View file

@ -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

View file

@ -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<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) &&
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<char*>(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<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,
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

View file

@ -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:

View file

@ -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 {

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
// 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;
}
}

View file

@ -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);