From 3349419c688662c110c4da45dffe13adc0dd7f42 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 28 Jun 2013 16:23:35 -0700 Subject: [PATCH] inital changes to add a version byte to packets --- avatar-mixer/src/main.cpp | 3 +- interface/src/Application.cpp | 64 ++++++++++++++------------ libraries/shared/src/PacketHeaders.cpp | 17 +++++++ libraries/shared/src/PacketHeaders.h | 2 + 4 files changed, 55 insertions(+), 31 deletions(-) create mode 100644 libraries/shared/src/PacketHeaders.cpp diff --git a/avatar-mixer/src/main.cpp b/avatar-mixer/src/main.cpp index aace967564..d97cbd799d 100644 --- a/avatar-mixer/src/main.cpp +++ b/avatar-mixer/src/main.cpp @@ -74,6 +74,7 @@ int main(int argc, const char* argv[]) { unsigned char *broadcastPacket = new unsigned char[MAX_PACKET_SIZE]; *broadcastPacket = PACKET_HEADER_BULK_AVATAR_DATA; + *(broadcastPacket + 1) = version(*broadcastPacket); unsigned char* currentBufferPosition = NULL; @@ -104,7 +105,7 @@ int main(int argc, const char* argv[]) { // parse positional data from an agent agentList->updateAgentWithData(avatarAgent, packetData, receivedBytes); case PACKET_HEADER_INJECT_AUDIO: - currentBufferPosition = broadcastPacket + 1; + currentBufferPosition = broadcastPacket + sizeof(PACKET_HEADER) + sizeof(PACKET_VERSION); // send back a packet with other active agent data to this agent for (AgentList::iterator agent = agentList->begin(); agent != agentList->end(); agent++) { diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 776fbfc9bb..561c81e149 100755 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2702,36 +2702,40 @@ void* Application::networkReceive(void* args) { app->_packetCount++; app->_bytesCount += bytesReceived; - switch (app->_incomingPacket[0]) { - case PACKET_HEADER_TRANSMITTER_DATA_V2: - // V2 = IOS transmitter app - app->_myTransmitter.processIncomingData(app->_incomingPacket, bytesReceived); - - break; - case PACKET_HEADER_MIXED_AUDIO: - app->_audio.addReceivedAudioToBuffer(app->_incomingPacket, bytesReceived); - break; - case PACKET_HEADER_VOXEL_DATA: - case PACKET_HEADER_VOXEL_DATA_MONOCHROME: - case PACKET_HEADER_Z_COMMAND: - case PACKET_HEADER_ERASE_VOXEL: - app->_voxels.parseData(app->_incomingPacket, bytesReceived); - break; - case PACKET_HEADER_ENVIRONMENT_DATA: - app->_environment.parseData(&senderAddress, app->_incomingPacket, bytesReceived); - break; - case PACKET_HEADER_BULK_AVATAR_DATA: - AgentList::getInstance()->processBulkAgentData(&senderAddress, - app->_incomingPacket, - bytesReceived); - break; - case PACKET_HEADER_AVATAR_VOXEL_URL: - processAvatarVoxelURLMessage(app->_incomingPacket, bytesReceived); - break; - default: - AgentList::getInstance()->processAgentData(&senderAddress, app->_incomingPacket, bytesReceived); - break; - } + if (app->_incomingPacket[1] == packetVersion(app->_incomingPacket[0])) { + // only process this packet if we have a match on the packet version + + switch (app->_incomingPacket[0]) { + case PACKET_HEADER_TRANSMITTER_DATA_V2: + // V2 = IOS transmitter app + app->_myTransmitter.processIncomingData(app->_incomingPacket, bytesReceived); + + break; + case PACKET_HEADER_MIXED_AUDIO: + app->_audio.addReceivedAudioToBuffer(app->_incomingPacket, bytesReceived); + break; + case PACKET_HEADER_VOXEL_DATA: + case PACKET_HEADER_VOXEL_DATA_MONOCHROME: + case PACKET_HEADER_Z_COMMAND: + case PACKET_HEADER_ERASE_VOXEL: + app->_voxels.parseData(app->_incomingPacket, bytesReceived); + break; + case PACKET_HEADER_ENVIRONMENT_DATA: + app->_environment.parseData(&senderAddress, app->_incomingPacket, bytesReceived); + break; + case PACKET_HEADER_BULK_AVATAR_DATA: + AgentList::getInstance()->processBulkAgentData(&senderAddress, + app->_incomingPacket, + bytesReceived); + break; + case PACKET_HEADER_AVATAR_VOXEL_URL: + processAvatarVoxelURLMessage(app->_incomingPacket, bytesReceived); + break; + default: + AgentList::getInstance()->processAgentData(&senderAddress, app->_incomingPacket, bytesReceived); + break; + } + } } else if (!app->_enableNetworkThread) { break; } diff --git a/libraries/shared/src/PacketHeaders.cpp b/libraries/shared/src/PacketHeaders.cpp new file mode 100644 index 0000000000..fff453abdc --- /dev/null +++ b/libraries/shared/src/PacketHeaders.cpp @@ -0,0 +1,17 @@ +// +// PacketHeaders.cpp +// hifi +// +// Created by Stephen Birarda on 6/28/13. +// Copyright (c) 2013 HighFidelity, Inc. All rights reserved. +// + +#include "PacketHeaders.h" + +PACKET_VERSION packetVersion(PACKET_HEADER header) { + switch (header) { + default: + return 0; + break; + } +} \ No newline at end of file diff --git a/libraries/shared/src/PacketHeaders.h b/libraries/shared/src/PacketHeaders.h index 89f6fbaf54..7f69e09668 100644 --- a/libraries/shared/src/PacketHeaders.h +++ b/libraries/shared/src/PacketHeaders.h @@ -34,6 +34,8 @@ const PACKET_HEADER PACKET_HEADER_ENVIRONMENT_DATA = 'e'; const PACKET_HEADER PACKET_HEADER_DOMAIN_LIST_REQUEST = 'L'; const PACKET_HEADER PACKET_HEADER_DOMAIN_REPORT_FOR_DUTY = 'C'; +typedef char PACKET_VERSION; +PACKET_VERSION packetVersion(PACKET_HEADER header); // These are supported Z-Command #define ERASE_ALL_COMMAND "erase all"