Merge branch 'master' of git://github.com/worklist/hifi

This commit is contained in:
Brad Hefta-Gaub 2014-01-24 09:53:19 -08:00
commit 7c507b44eb
9 changed files with 19 additions and 16 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

@ -81,7 +81,7 @@ bool HifiSockAddr::operator==(const HifiSockAddr &rhsSockAddr) const {
QDebug operator<<(QDebug debug, const HifiSockAddr &hifiSockAddr) {
debug.nospace() << hifiSockAddr._address.toString().toLocal8Bit().constData() << ":" << hifiSockAddr._port;
return debug;
return debug.space();
}
quint32 getHostOrderLocalAddress() {

View file

@ -20,7 +20,7 @@ PACKET_VERSION versionForPacketType(PACKET_TYPE type) {
return 2;
case PACKET_TYPE_HEAD_DATA:
return 16;
return 17;
case PACKET_TYPE_OCTREE_STATS:
return 2;
@ -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 mismatch on" << packetHeader[0] << "- Sender"
<< senderSockAddr << "sent" << qPrintable(QString::number(packetHeader[1])) << "but"
<< qPrintable(QString::number(versionForPacketType(packetHeader[0]))) << "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);