From 5c091a51a60e2e7376646426c16b27e89028acb8 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 16 Apr 2013 11:51:36 -0700 Subject: [PATCH] change signature of parseData to use unsigned char*, include packet header always --- audio-mixer/src/main.cpp | 2 +- avatar-mixer/src/main.cpp | 2 +- interface/src/Head.cpp | 2 +- interface/src/Head.h | 4 ++-- interface/src/VoxelSystem.cpp | 16 ++++++++-------- interface/src/VoxelSystem.h | 2 +- interface/src/main.cpp | 2 +- libraries/avatars/src/AvatarData.cpp | 15 ++++++++------- libraries/avatars/src/AvatarData.h | 2 +- libraries/shared/src/AgentData.h | 2 +- libraries/shared/src/AgentList.cpp | 6 +++--- libraries/shared/src/AgentList.h | 8 ++++---- libraries/shared/src/AudioRingBuffer.cpp | 12 +++++------- libraries/shared/src/AudioRingBuffer.h | 2 +- voxel-server/src/VoxelAgentData.h | 2 +- voxel-server/src/main.cpp | 2 +- 16 files changed, 40 insertions(+), 41 deletions(-) diff --git a/audio-mixer/src/main.cpp b/audio-mixer/src/main.cpp index 9f77bbc9bb..0d571d1c74 100644 --- a/audio-mixer/src/main.cpp +++ b/audio-mixer/src/main.cpp @@ -309,7 +309,7 @@ int main(int argc, const char * argv[]) agentList->increaseAgentId(); } - agentList->updateAgentWithData(agentAddress, (void *)packetData, receivedBytes); + agentList->updateAgentWithData(agentAddress, packetData, receivedBytes); } else { memcpy(loopbackAudioPacket, packetData + 1 + (sizeof(float) * 4), 1024); agentList->getAgentSocket().send(agentAddress, loopbackAudioPacket, 1024); diff --git a/avatar-mixer/src/main.cpp b/avatar-mixer/src/main.cpp index 439da691a0..b92cff6783 100644 --- a/avatar-mixer/src/main.cpp +++ b/avatar-mixer/src/main.cpp @@ -77,7 +77,7 @@ int main(int argc, char* argv[]) switch (packetData[0]) { case PACKET_HEADER_HEAD_DATA: // this is positional data from an agent - agentList->updateAgentWithData(agentAddress, (void *)(packetData + 1), receivedBytes); + agentList->updateAgentWithData(agentAddress, packetData, receivedBytes); currentBufferPosition = broadcastPacket + 1; agentIndex = 0; diff --git a/interface/src/Head.cpp b/interface/src/Head.cpp index 2e679763f0..4589636f77 100644 --- a/interface/src/Head.cpp +++ b/interface/src/Head.cpp @@ -1174,7 +1174,7 @@ void Head::SetNewHeadTarget(float pitch, float yaw) { YawTarget = yaw; } -void Head::processTransmitterData(char *packetData, int numBytes) { +void Head::processTransmitterData(unsigned char *packetData, int numBytes) { // Read a packet from a transmitter app, process the data float accX, accY, accZ, graX, graY, graZ, diff --git a/interface/src/Head.h b/interface/src/Head.h index 5b3c7eeeff..ad4f1f665f 100644 --- a/interface/src/Head.h +++ b/interface/src/Head.h @@ -139,7 +139,7 @@ class Head : public AvatarData { void renderBody(); void renderHead( int faceToFace, int isMine ); - void renderOrientationDirections( glm::vec3 position, Orientation orientation, float size ); + void renderOrientataionDirections( glm::vec3 position, Orientation orientation, float size ); void simulate(float); @@ -166,7 +166,7 @@ class Head : public AvatarData { // Related to getting transmitter UDP data used to animate the avatar hand // - void processTransmitterData(char * packetData, int numBytes); + void processTransmitterData(unsigned char * packetData, int numBytes); float getTransmitterHz() { return transmitterHz; }; private: diff --git a/interface/src/VoxelSystem.cpp b/interface/src/VoxelSystem.cpp index 33b063ef38..ba12218f45 100644 --- a/interface/src/VoxelSystem.cpp +++ b/interface/src/VoxelSystem.cpp @@ -112,33 +112,33 @@ long int VoxelSystem::getVoxelsBytesReadRunningAverage() { } -void VoxelSystem::parseData(void *data, int size) { +void VoxelSystem::parseData(unsigned char* sourceBuffer, int numBytes) { - unsigned char command = *(unsigned char*)data; - unsigned char *voxelData = (unsigned char *) data + 1; + unsigned char command = *sourceBuffer; + unsigned char *voxelData = sourceBuffer + 1; switch(command) { case PACKET_HEADER_VOXEL_DATA: // ask the VoxelTree to read the bitstream into the tree - tree->readBitstreamToTree(voxelData, size - 1); + tree->readBitstreamToTree(voxelData, numBytes - 1); break; case PACKET_HEADER_ERASE_VOXEL: // ask the tree to read the "remove" bitstream - tree->processRemoveVoxelBitstream((unsigned char*)data,size); + tree->processRemoveVoxelBitstream(sourceBuffer, numBytes); break; case PACKET_HEADER_Z_COMMAND: // the Z command is a special command that allows the sender to send high level semantic // requests, like erase all, or add sphere scene, different receivers may handle these // messages differently - char* packetData =(char*)data; + char* packetData = (char *)sourceBuffer; char* command = &packetData[1]; // start of the command int commandLength = strlen(command); // commands are null terminated strings int totalLength = 1+commandLength+1; - printf("got Z message len(%d)= %s\n",size,command); + printf("got Z message len(%d)= %s\n", numBytes, command); - while (totalLength <= size) { + while (totalLength <= numBytes) { if (0==strcmp(command,(char*)"erase all")) { printf("got Z message == erase all\n"); tree->eraseAllVoxels(); diff --git a/interface/src/VoxelSystem.h b/interface/src/VoxelSystem.h index f49b57d612..a8bfd376c5 100644 --- a/interface/src/VoxelSystem.h +++ b/interface/src/VoxelSystem.h @@ -26,7 +26,7 @@ public: VoxelSystem(); ~VoxelSystem(); - void parseData(void *data, int size); + void parseData(unsigned char* sourceBuffer, int numBytes); VoxelSystem* clone() const; void init(); diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 9df332a25e..75bf28cc26 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -1260,7 +1260,7 @@ void *networkReceive(void *args) { sockaddr senderAddress; ssize_t bytesReceived; - char *incomingPacket = new char[MAX_PACKET_SIZE]; + unsigned char *incomingPacket = new unsigned char[MAX_PACKET_SIZE]; while (!stopNetworkReceiveThread) { if (AgentList::getInstance()->getAgentSocket().receive(&senderAddress, incomingPacket, &bytesReceived)) { diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 40695766c3..73641fe94c 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -60,16 +60,17 @@ int AvatarData::getBroadcastData(char* destinationBuffer) { } // called on the other agents - assigns it to my views of the others -void AvatarData::parseData(void *sourceBuffer, int numBytes) { +void AvatarData::parseData(unsigned char* sourceBuffer, int numBytes) { - char* bufferPointer = (char*) sourceBuffer ; + // increment to push past the packet header + sourceBuffer++; - memcpy(&_bodyPosition, bufferPointer, sizeof(float) * 3); - bufferPointer += sizeof(float) * 3; + memcpy(&_bodyPosition, sourceBuffer, sizeof(float) * 3); + sourceBuffer += sizeof(float) * 3; - bufferPointer += unpackFloatAngleFromTwoByte((uint16_t*)bufferPointer, &_bodyYaw); - bufferPointer += unpackFloatAngleFromTwoByte((uint16_t*)bufferPointer, &_bodyPitch); - bufferPointer += unpackFloatAngleFromTwoByte((uint16_t*)bufferPointer, &_bodyRoll); + sourceBuffer += unpackFloatAngleFromTwoByte((uint16_t *)sourceBuffer, &_bodyYaw); + sourceBuffer += unpackFloatAngleFromTwoByte((uint16_t *)sourceBuffer, &_bodyPitch); + sourceBuffer += unpackFloatAngleFromTwoByte((uint16_t *)sourceBuffer, &_bodyRoll); } glm::vec3 AvatarData::getBodyPosition() { diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 9dbc04a1f7..464927a98c 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -26,7 +26,7 @@ public: void setBodyPosition(glm::vec3 bodyPosition); int getBroadcastData(char* destinationBuffer); - void parseData(void *sourceBuffer, int numBytes); + void parseData(unsigned char* sourceBuffer, int numBytes); float getBodyYaw(); void setBodyYaw(float bodyYaw); diff --git a/libraries/shared/src/AgentData.h b/libraries/shared/src/AgentData.h index 9db7535521..640798b52b 100644 --- a/libraries/shared/src/AgentData.h +++ b/libraries/shared/src/AgentData.h @@ -12,7 +12,7 @@ class AgentData { public: virtual ~AgentData() = 0; - virtual void parseData(void * data, int size) = 0; + virtual void parseData(unsigned char* sourceBuffer, int numBytes) = 0; virtual AgentData* clone() const = 0; }; diff --git a/libraries/shared/src/AgentList.cpp b/libraries/shared/src/AgentList.cpp index 346785ab61..092ce6de3f 100644 --- a/libraries/shared/src/AgentList.cpp +++ b/libraries/shared/src/AgentList.cpp @@ -98,7 +98,7 @@ void AgentList::processAgentData(sockaddr *senderAddress, void *packetData, size } } -void AgentList::processBulkAgentData(sockaddr *senderAddress, void *packetData, int numTotalBytes, int numBytesPerAgent) { +void AgentList::processBulkAgentData(sockaddr *senderAddress, unsigned char *packetData, int numTotalBytes, int numBytesPerAgent) { // find the avatar mixer in our agent list and update the lastRecvTime from it int bulkSendAgentIndex = indexOfMatchingAgent(senderAddress); @@ -131,7 +131,7 @@ void AgentList::processBulkAgentData(sockaddr *senderAddress, void *packetData, delete[] packetHolder; } -void AgentList::updateAgentWithData(sockaddr *senderAddress, void *packetData, size_t dataBytes) { +void AgentList::updateAgentWithData(sockaddr *senderAddress, unsigned char *packetData, size_t dataBytes) { // find the agent by the sockaddr int agentIndex = indexOfMatchingAgent(senderAddress); @@ -140,7 +140,7 @@ void AgentList::updateAgentWithData(sockaddr *senderAddress, void *packetData, s } } -void AgentList::updateAgentWithData(Agent *agent, void *packetData, int dataBytes) { +void AgentList::updateAgentWithData(Agent *agent, unsigned char *packetData, int dataBytes) { agent->setLastRecvTimeUsecs(usecTimestampNow()); if (agent->getLinkedData() == NULL) { diff --git a/libraries/shared/src/AgentList.h b/libraries/shared/src/AgentList.h index 454d02ea1a..8c77b557de 100644 --- a/libraries/shared/src/AgentList.h +++ b/libraries/shared/src/AgentList.h @@ -49,11 +49,11 @@ public: bool addOrUpdateAgent(sockaddr *publicSocket, sockaddr *localSocket, char agentType, uint16_t agentId); - void processAgentData(sockaddr *senderAddress, void *packetData, size_t dataBytes); - void processBulkAgentData(sockaddr *senderAddress, void *packetData, int numTotalBytes, int numBytesPerAgent); + void processAgentData(sockaddr *senderAddress, unsigned char *packetData, size_t dataBytes); + void processBulkAgentData(sockaddr *senderAddress, unsigned char *packetData, int numTotalBytes, int numBytesPerAgent); - void updateAgentWithData(sockaddr *senderAddress, void *packetData, size_t dataBytes); - void updateAgentWithData(Agent *agent, void *packetData, int dataBytes); + void updateAgentWithData(sockaddr *senderAddress, unsigned char *packetData, size_t dataBytes); + void updateAgentWithData(Agent *agent, unsigned char *packetData, int dataBytes); void broadcastToAgents(char *broadcastData, size_t dataBytes, const char* agentTypes, int numAgentTypes); char getOwnerType(); diff --git a/libraries/shared/src/AudioRingBuffer.cpp b/libraries/shared/src/AudioRingBuffer.cpp index 6dd18de520..2197d03706 100644 --- a/libraries/shared/src/AudioRingBuffer.cpp +++ b/libraries/shared/src/AudioRingBuffer.cpp @@ -105,12 +105,10 @@ void AudioRingBuffer::setBearing(float newBearing) { bearing = newBearing; } -void AudioRingBuffer::parseData(void *data, int size) { - unsigned char *audioDataStart = (unsigned char *) data; - - if (size > (bufferLengthSamples * sizeof(int16_t))) { +void AudioRingBuffer::parseData(unsigned char* sourceBuffer, int numBytes) { + if (numBytes > (bufferLengthSamples * sizeof(int16_t))) { - unsigned char *dataPtr = audioDataStart + 1; + unsigned char *dataPtr = sourceBuffer + 1; for (int p = 0; p < 3; p ++) { memcpy(&position[p], dataPtr, sizeof(float)); @@ -123,7 +121,7 @@ void AudioRingBuffer::parseData(void *data, int size) { memcpy(&bearing, dataPtr, sizeof(float)); dataPtr += sizeof(float); - audioDataStart = dataPtr; + sourceBuffer = dataPtr; } if (endOfLastWrite == NULL) { @@ -134,7 +132,7 @@ void AudioRingBuffer::parseData(void *data, int size) { started = false; } - memcpy(endOfLastWrite, audioDataStart, bufferLengthSamples * sizeof(int16_t)); + memcpy(endOfLastWrite, sourceBuffer, bufferLengthSamples * sizeof(int16_t)); endOfLastWrite += bufferLengthSamples; diff --git a/libraries/shared/src/AudioRingBuffer.h b/libraries/shared/src/AudioRingBuffer.h index 6b214a5f8f..65f28ff737 100644 --- a/libraries/shared/src/AudioRingBuffer.h +++ b/libraries/shared/src/AudioRingBuffer.h @@ -19,7 +19,7 @@ class AudioRingBuffer : public AgentData { ~AudioRingBuffer(); AudioRingBuffer(const AudioRingBuffer &otherRingBuffer); - void parseData(void *data, int size); + void parseData(unsigned char* sourceBuffer, int numBytes); AudioRingBuffer* clone() const; int16_t* getNextOutput(); diff --git a/voxel-server/src/VoxelAgentData.h b/voxel-server/src/VoxelAgentData.h index 3ab7670a93..98ec7e9ed7 100644 --- a/voxel-server/src/VoxelAgentData.h +++ b/voxel-server/src/VoxelAgentData.h @@ -22,7 +22,7 @@ public: ~VoxelAgentData(); VoxelAgentData(const VoxelAgentData &otherAgentData); - void parseData(void *data, int size); + void parseData(unsigned char* sourceBuffer, int numBytes); VoxelAgentData* clone() const; }; diff --git a/voxel-server/src/main.cpp b/voxel-server/src/main.cpp index d012f23995..44993eb8c7 100644 --- a/voxel-server/src/main.cpp +++ b/voxel-server/src/main.cpp @@ -385,7 +385,7 @@ int main(int argc, const char * argv[]) agentList->increaseAgentId(); } - agentList->updateAgentWithData(&agentPublicAddress, (void *)packetData, receivedBytes); + agentList->updateAgentWithData(&agentPublicAddress, packetData, receivedBytes); } } }