From 1dfa592a134d4a6f1c01831e2249d6ca70549f4e Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 2 Jul 2015 16:31:33 -0700 Subject: [PATCH] use new enum across PacketHeaders --- libraries/networking/src/PacketHeaders.cpp | 198 +++++++++++---------- libraries/networking/src/PacketHeaders.h | 54 +++--- 2 files changed, 128 insertions(+), 124 deletions(-) diff --git a/libraries/networking/src/PacketHeaders.cpp b/libraries/networking/src/PacketHeaders.cpp index 42ee9f3025..3e254c29f6 100644 --- a/libraries/networking/src/PacketHeaders.cpp +++ b/libraries/networking/src/PacketHeaders.cpp @@ -15,6 +15,22 @@ #include +using namespace PacketType; + +const QSet NON_VERIFIED_PACKETS = QSet() + << DomainServerRequireDTLS << DomainConnectRequest + << DomainList << DomainListRequest << DomainConnectionDenied + << CreateAssignment << RequestAssignment << StunResponse + << NodeJsonStats << EntityQuery + << OctreeDataNack << EntityEditNack + << IceServerHeartbeat << IceServerPeerInformation + << IceServerQuery << UnverifiedPing + << UnverifiedPingReply << StopNode + << DomainServerPathQuery << DomainServerPathResponse + << DomainServerAddedNode; + +const QSet SEQUENCE_NUMBERED_PACKETS = QSet() << AvatarData; + int arithmeticCodingValueFromBuffer(const char* checkValue) { if (((uchar) *checkValue) < 255) { return *checkValue; @@ -43,43 +59,43 @@ int packArithmeticallyCodedValue(int value, char* destination) { } } -PacketVersion versionForPacketType(PacketType packetType) { +PacketVersion versionForPacketType(PacketType::Value packetType) { switch (packetType) { - case PacketTypeMicrophoneAudioNoEcho: - case PacketTypeMicrophoneAudioWithEcho: + case MicrophoneAudioNoEcho: + case MicrophoneAudioWithEcho: return 2; - case PacketTypeSilentAudioFrame: + case SilentAudioFrame: return 4; - case PacketTypeMixedAudio: + case MixedAudio: return 1; - case PacketTypeInjectAudio: + case InjectAudio: return 1; - case PacketTypeAvatarData: + case AvatarData: return 6; - case PacketTypeAvatarIdentity: + case AvatarIdentity: return 1; - case PacketTypeEnvironmentData: + case EnvironmentData: return 2; - case PacketTypeDomainList: - case PacketTypeDomainListRequest: + case DomainList: + case DomainListRequest: return 5; - case PacketTypeCreateAssignment: - case PacketTypeRequestAssignment: + case CreateAssignment: + case RequestAssignment: return 2; - case PacketTypeOctreeStats: + case OctreeStats: return 1; - case PacketTypeStopNode: + case StopNode: return 1; - case PacketTypeEntityAdd: - case PacketTypeEntityEdit: - case PacketTypeEntityData: + case EntityAdd: + case EntityEdit: + case EntityData: return VERSION_ENTITIES_HAVE_SIMULATION_OWNER_AND_ACTIONS_OVER_WIRE; - case PacketTypeEntityErase: + case EntityErase: return 2; - case PacketTypeAudioStreamStats: + case AudioStreamStats: return 1; - case PacketTypeIceServerHeartbeat: - case PacketTypeIceServerQuery: + case IceServerHeartbeat: + case IceServerQuery: return 1; default: return 0; @@ -88,53 +104,53 @@ PacketVersion versionForPacketType(PacketType packetType) { #define PACKET_TYPE_NAME_LOOKUP(x) case x: return QString(#x); -QString nameForPacketType(PacketType packetType) { +QString nameForPacketType(PacketType::Value packetType) { switch (packetType) { - PACKET_TYPE_NAME_LOOKUP(PacketTypeUnknown); - PACKET_TYPE_NAME_LOOKUP(PacketTypeStunResponse); - PACKET_TYPE_NAME_LOOKUP(PacketTypeDomainList); - PACKET_TYPE_NAME_LOOKUP(PacketTypePing); - PACKET_TYPE_NAME_LOOKUP(PacketTypePingReply); - PACKET_TYPE_NAME_LOOKUP(PacketTypeKillAvatar); - PACKET_TYPE_NAME_LOOKUP(PacketTypeAvatarData); - PACKET_TYPE_NAME_LOOKUP(PacketTypeInjectAudio); - PACKET_TYPE_NAME_LOOKUP(PacketTypeMixedAudio); - PACKET_TYPE_NAME_LOOKUP(PacketTypeMicrophoneAudioNoEcho); - PACKET_TYPE_NAME_LOOKUP(PacketTypeMicrophoneAudioWithEcho); - PACKET_TYPE_NAME_LOOKUP(PacketTypeBulkAvatarData); - PACKET_TYPE_NAME_LOOKUP(PacketTypeSilentAudioFrame); - PACKET_TYPE_NAME_LOOKUP(PacketTypeEnvironmentData); - PACKET_TYPE_NAME_LOOKUP(PacketTypeDomainListRequest); - PACKET_TYPE_NAME_LOOKUP(PacketTypeRequestAssignment); - PACKET_TYPE_NAME_LOOKUP(PacketTypeCreateAssignment); - PACKET_TYPE_NAME_LOOKUP(PacketTypeDomainConnectionDenied); - PACKET_TYPE_NAME_LOOKUP(PacketTypeMuteEnvironment); - PACKET_TYPE_NAME_LOOKUP(PacketTypeAudioStreamStats); - PACKET_TYPE_NAME_LOOKUP(PacketTypeDataServerConfirm); - PACKET_TYPE_NAME_LOOKUP(PacketTypeOctreeStats); - PACKET_TYPE_NAME_LOOKUP(PacketTypeJurisdiction); - PACKET_TYPE_NAME_LOOKUP(PacketTypeJurisdictionRequest); - PACKET_TYPE_NAME_LOOKUP(PacketTypeAvatarIdentity); - PACKET_TYPE_NAME_LOOKUP(PacketTypeAvatarBillboard); - PACKET_TYPE_NAME_LOOKUP(PacketTypeDomainConnectRequest); - PACKET_TYPE_NAME_LOOKUP(PacketTypeDomainServerRequireDTLS); - PACKET_TYPE_NAME_LOOKUP(PacketTypeNodeJsonStats); - PACKET_TYPE_NAME_LOOKUP(PacketTypeEntityQuery); - PACKET_TYPE_NAME_LOOKUP(PacketTypeEntityData); - PACKET_TYPE_NAME_LOOKUP(PacketTypeEntityErase); - PACKET_TYPE_NAME_LOOKUP(PacketTypeOctreeDataNack); - PACKET_TYPE_NAME_LOOKUP(PacketTypeStopNode); - PACKET_TYPE_NAME_LOOKUP(PacketTypeAudioEnvironment); - PACKET_TYPE_NAME_LOOKUP(PacketTypeEntityEditNack); - PACKET_TYPE_NAME_LOOKUP(PacketTypeSignedTransactionPayment); - PACKET_TYPE_NAME_LOOKUP(PacketTypeIceServerHeartbeat); - PACKET_TYPE_NAME_LOOKUP(PacketTypeDomainServerAddedNode); - PACKET_TYPE_NAME_LOOKUP(PacketTypeIceServerQuery); - PACKET_TYPE_NAME_LOOKUP(PacketTypeIceServerPeerInformation); - PACKET_TYPE_NAME_LOOKUP(PacketTypeUnverifiedPing); - PACKET_TYPE_NAME_LOOKUP(PacketTypeUnverifiedPingReply); - PACKET_TYPE_NAME_LOOKUP(PacketTypeEntityAdd); - PACKET_TYPE_NAME_LOOKUP(PacketTypeEntityEdit); + PACKET_TYPE_NAME_LOOKUP(Unknown); + PACKET_TYPE_NAME_LOOKUP(StunResponse); + PACKET_TYPE_NAME_LOOKUP(DomainList); + PACKET_TYPE_NAME_LOOKUP(Ping); + PACKET_TYPE_NAME_LOOKUP(PingReply); + PACKET_TYPE_NAME_LOOKUP(KillAvatar); + PACKET_TYPE_NAME_LOOKUP(AvatarData); + PACKET_TYPE_NAME_LOOKUP(InjectAudio); + PACKET_TYPE_NAME_LOOKUP(MixedAudio); + PACKET_TYPE_NAME_LOOKUP(MicrophoneAudioNoEcho); + PACKET_TYPE_NAME_LOOKUP(MicrophoneAudioWithEcho); + PACKET_TYPE_NAME_LOOKUP(BulkAvatarData); + PACKET_TYPE_NAME_LOOKUP(SilentAudioFrame); + PACKET_TYPE_NAME_LOOKUP(EnvironmentData); + PACKET_TYPE_NAME_LOOKUP(DomainListRequest); + PACKET_TYPE_NAME_LOOKUP(RequestAssignment); + PACKET_TYPE_NAME_LOOKUP(CreateAssignment); + PACKET_TYPE_NAME_LOOKUP(DomainConnectionDenied); + PACKET_TYPE_NAME_LOOKUP(MuteEnvironment); + PACKET_TYPE_NAME_LOOKUP(AudioStreamStats); + PACKET_TYPE_NAME_LOOKUP(DataServerConfirm); + PACKET_TYPE_NAME_LOOKUP(OctreeStats); + PACKET_TYPE_NAME_LOOKUP(Jurisdiction); + PACKET_TYPE_NAME_LOOKUP(JurisdictionRequest); + PACKET_TYPE_NAME_LOOKUP(AvatarIdentity); + PACKET_TYPE_NAME_LOOKUP(AvatarBillboard); + PACKET_TYPE_NAME_LOOKUP(DomainConnectRequest); + PACKET_TYPE_NAME_LOOKUP(DomainServerRequireDTLS); + PACKET_TYPE_NAME_LOOKUP(NodeJsonStats); + PACKET_TYPE_NAME_LOOKUP(EntityQuery); + PACKET_TYPE_NAME_LOOKUP(EntityData); + PACKET_TYPE_NAME_LOOKUP(EntityErase); + PACKET_TYPE_NAME_LOOKUP(OctreeDataNack); + PACKET_TYPE_NAME_LOOKUP(StopNode); + PACKET_TYPE_NAME_LOOKUP(AudioEnvironment); + PACKET_TYPE_NAME_LOOKUP(EntityEditNack); + PACKET_TYPE_NAME_LOOKUP(SignedTransactionPayment); + PACKET_TYPE_NAME_LOOKUP(IceServerHeartbeat); + PACKET_TYPE_NAME_LOOKUP(DomainServerAddedNode); + PACKET_TYPE_NAME_LOOKUP(IceServerQuery); + PACKET_TYPE_NAME_LOOKUP(IceServerPeerInformation); + PACKET_TYPE_NAME_LOOKUP(UnverifiedPing); + PACKET_TYPE_NAME_LOOKUP(UnverifiedPingReply); + PACKET_TYPE_NAME_LOOKUP(EntityAdd); + PACKET_TYPE_NAME_LOOKUP(EntityEdit); default: return QString("Type: ") + QString::number((int)packetType); } @@ -143,13 +159,13 @@ QString nameForPacketType(PacketType packetType) { -QByteArray byteArrayWithUUIDPopulatedHeader(PacketType packetType, const QUuid& connectionUUID) { +QByteArray byteArrayWithUUIDPopulatedHeader(PacketType::Value packetType, const QUuid& connectionUUID) { QByteArray freshByteArray(MAX_PACKET_HEADER_BYTES, 0); freshByteArray.resize(populatePacketHeaderWithUUID(freshByteArray, packetType, connectionUUID)); return freshByteArray; } -int populatePacketHeaderWithUUID(QByteArray& packet, PacketType packetType, const QUuid& connectionUUID) { +int populatePacketHeaderWithUUID(QByteArray& packet, PacketType::Value packetType, const QUuid& connectionUUID) { if (packet.size() < numBytesForPacketHeaderGivenPacketType(packetType)) { packet.resize(numBytesForPacketHeaderGivenPacketType(packetType)); } @@ -157,7 +173,7 @@ int populatePacketHeaderWithUUID(QByteArray& packet, PacketType packetType, cons return populatePacketHeaderWithUUID(packet.data(), packetType, connectionUUID); } -int populatePacketHeaderWithUUID(char* packet, PacketType packetType, const QUuid& connectionUUID) { +int populatePacketHeaderWithUUID(char* packet, PacketType::Value packetType, const QUuid& connectionUUID) { int numTypeBytes = packArithmeticallyCodedValue(packetType, packet); packet[numTypeBytes] = versionForPacketType(packetType); @@ -185,31 +201,31 @@ int populatePacketHeaderWithUUID(char* packet, PacketType packetType, const QUui } int numBytesForPacketHeader(const QByteArray& packet) { - PacketType packetType = packetTypeForPacket(packet); + PacketType::Value packetType = packetTypeForPacket(packet); return numBytesForPacketHeaderGivenPacketType(packetType); } int numBytesForPacketHeader(const char* packet) { - PacketType packetType = packetTypeForPacket(packet); + PacketType::Value packetType = packetTypeForPacket(packet); return numBytesForPacketHeaderGivenPacketType(packetType); } -int numBytesForArithmeticCodedPacketType(PacketType packetType) { +int numBytesForArithmeticCodedPacketType(PacketType::Value packetType) { return (int) ceilf((float) packetType / 255); } -int numBytesForPacketHeaderGivenPacketType(PacketType packetType) { +int numBytesForPacketHeaderGivenPacketType(PacketType::Value packetType) { return numBytesForArithmeticCodedPacketType(packetType) + numHashBytesForType(packetType) + numSequenceNumberBytesForType(packetType) + NUM_STATIC_HEADER_BYTES; } -int numHashBytesForType(PacketType packetType) { +int numHashBytesForType(PacketType::Value packetType) { return (NON_VERIFIED_PACKETS.contains(packetType) ? 0 : NUM_BYTES_MD5_HASH); } -int numSequenceNumberBytesForType(PacketType packetType) { +int numSequenceNumberBytesForType(PacketType::Value packetType) { return (SEQUENCE_NUMBERED_PACKETS.contains(packetType) ? sizeof(PacketSequenceNumber) : 0); } @@ -218,11 +234,11 @@ QUuid uuidFromPacketHeader(const QByteArray& packet) { NUM_BYTES_RFC4122_UUID)); } -int hashOffsetForPacketType(PacketType packetType) { +int hashOffsetForPacketType(PacketType::Value packetType) { return numBytesForArithmeticCodedPacketType(packetType) + NUM_STATIC_HEADER_BYTES; } -int sequenceNumberOffsetForPacketType(PacketType packetType) { +int sequenceNumberOffsetForPacketType(PacketType::Value packetType) { return numBytesForPacketHeaderGivenPacketType(packetType) - sizeof(PacketSequenceNumber); } @@ -235,8 +251,8 @@ QByteArray hashForPacketAndConnectionUUID(const QByteArray& packet, const QUuid& QCryptographicHash::Md5); } -PacketSequenceNumber sequenceNumberFromHeader(const QByteArray& packet, PacketType packetType) { - if (packetType == PacketTypeUnknown) { +PacketSequenceNumber sequenceNumberFromHeader(const QByteArray& packet, PacketType::Value packetType) { + if (packetType == PacketType::Unknown) { packetType = packetTypeForPacket(packet); } @@ -249,8 +265,8 @@ PacketSequenceNumber sequenceNumberFromHeader(const QByteArray& packet, PacketTy return result; } -void replaceHashInPacket(QByteArray& packet, const QUuid& connectionUUID, PacketType packetType) { - if (packetType == PacketTypeUnknown) { +void replaceHashInPacket(QByteArray& packet, const QUuid& connectionUUID, PacketType::Value packetType) { + if (packetType == PacketType::Unknown) { packetType = packetTypeForPacket(packet); } @@ -258,8 +274,8 @@ void replaceHashInPacket(QByteArray& packet, const QUuid& connectionUUID, Packet hashForPacketAndConnectionUUID(packet, connectionUUID)); } -void replaceSequenceNumberInPacket(QByteArray& packet, PacketSequenceNumber sequenceNumber, PacketType packetType) { - if (packetType == PacketTypeUnknown) { +void replaceSequenceNumberInPacket(QByteArray& packet, PacketSequenceNumber sequenceNumber, PacketType::Value packetType) { + if (packetType == PacketType::Unknown) { packetType = packetTypeForPacket(packet); } @@ -268,8 +284,8 @@ void replaceSequenceNumberInPacket(QByteArray& packet, PacketSequenceNumber sequ } void replaceHashAndSequenceNumberInPacket(QByteArray& packet, const QUuid& connectionUUID, PacketSequenceNumber sequenceNumber, - PacketType packetType) { - if (packetType == PacketTypeUnknown) { + PacketType::Value packetType) { + if (packetType == PacketType::Unknown) { packetType = packetTypeForPacket(packet); } @@ -277,10 +293,10 @@ void replaceHashAndSequenceNumberInPacket(QByteArray& packet, const QUuid& conne replaceSequenceNumberInPacket(packet, sequenceNumber, packetType); } -PacketType packetTypeForPacket(const QByteArray& packet) { - return (PacketType) arithmeticCodingValueFromBuffer(packet.data()); +PacketType::Value packetTypeForPacket(const QByteArray& packet) { + return (PacketType::Value) arithmeticCodingValueFromBuffer(packet.data()); } -PacketType packetTypeForPacket(const char* packet) { - return (PacketType) arithmeticCodingValueFromBuffer(packet); +PacketType::Value packetTypeForPacket(const char* packet) { + return (PacketType::Value) arithmeticCodingValueFromBuffer(packet); } diff --git a/libraries/networking/src/PacketHeaders.h b/libraries/networking/src/PacketHeaders.h index d2ee278d43..4ac7167c83 100644 --- a/libraries/networking/src/PacketHeaders.h +++ b/libraries/networking/src/PacketHeaders.h @@ -89,51 +89,39 @@ typedef char PacketVersion; typedef uint16_t PacketSequenceNumber; const PacketSequenceNumber DEFAULT_SEQUENCE_NUMBER = 0; -typedef std::map PacketTypeSequenceMap; +typedef std::map PacketTypeSequenceMap; -const QSet NON_VERIFIED_PACKETS = QSet() - << PacketTypeDomainServerRequireDTLS << PacketTypeDomainConnectRequest - << PacketTypeDomainList << PacketTypeDomainListRequest << PacketTypeDomainConnectionDenied - << PacketTypeCreateAssignment << PacketTypeRequestAssignment << PacketTypeStunResponse - << PacketTypeNodeJsonStats << PacketTypeEntityQuery - << PacketTypeOctreeDataNack << PacketTypeEntityEditNack - << PacketTypeIceServerHeartbeat << PacketTypeIceServerPeerInformation - << PacketTypeIceServerQuery << PacketTypeUnverifiedPing - << PacketTypeUnverifiedPingReply << PacketTypeStopNode - << PacketTypeDomainServerPathQuery << PacketTypeDomainServerPathResponse - << PacketTypeDomainServerAddedNode; - -const QSet SEQUENCE_NUMBERED_PACKETS = QSet() -<< PacketTypeAvatarData; +extern const QSet NON_VERIFIED_PACKETS; +extern const QSet SEQUENCE_NUMBERED_PACKETS; const int NUM_BYTES_MD5_HASH = 16; const int NUM_STATIC_HEADER_BYTES = sizeof(PacketVersion) + NUM_BYTES_RFC4122_UUID; -const int MAX_PACKET_HEADER_BYTES = sizeof(PacketType) + NUM_BYTES_MD5_HASH + NUM_STATIC_HEADER_BYTES; +const int MAX_PACKET_HEADER_BYTES = sizeof(PacketType::Value) + NUM_BYTES_MD5_HASH + NUM_STATIC_HEADER_BYTES; -PacketType packetTypeForPacket(const QByteArray& packet); -PacketType packetTypeForPacket(const char* packet); +PacketType::Value packetTypeForPacket(const QByteArray& packet); +PacketType::Value packetTypeForPacket(const char* packet); -PacketVersion versionForPacketType(PacketType packetType); -QString nameForPacketType(PacketType packetType); +PacketVersion versionForPacketType(PacketType::Value packetType); +QString nameForPacketType(PacketType::Value packetType); const QUuid nullUUID = QUuid(); -QByteArray byteArrayWithUUIDPopulatedHeader(PacketType packetType, const QUuid& connectionUUID); -int populatePacketHeaderWithUUID(QByteArray& packet, PacketType packetType, const QUuid& connectionUUID); -int populatePacketHeaderWithUUID(char* packet, PacketType packetType, const QUuid& connectionUUID); +QByteArray byteArrayWithUUIDPopulatedHeader(PacketType::Value packetType, const QUuid& connectionUUID); +int populatePacketHeaderWithUUID(QByteArray& packet, PacketType::Value packetType, const QUuid& connectionUUID); +int populatePacketHeaderWithUUID(char* packet, PacketType::Value packetType, const QUuid& connectionUUID); -int numHashBytesForType(PacketType packetType); -int numSequenceNumberBytesForType(PacketType packetType); +int numHashBytesForType(PacketType::Value packetType); +int numSequenceNumberBytesForType(PacketType::Value packetType); int numBytesForPacketHeader(const QByteArray& packet); int numBytesForPacketHeader(const char* packet); -int numBytesForArithmeticCodedPacketType(PacketType packetType); -int numBytesForPacketHeaderGivenPacketType(PacketType packetType); +int numBytesForArithmeticCodedPacketType(PacketType::Value packetType); +int numBytesForPacketHeaderGivenPacketType(PacketType::Value packetType); QUuid uuidFromPacketHeader(const QByteArray& packet); -int hashOffsetForPacketType(PacketType packetType); -int sequenceNumberOffsetForPacketType(PacketType packetType); +int hashOffsetForPacketType(PacketType::Value packetType); +int sequenceNumberOffsetForPacketType(PacketType::Value packetType); QByteArray hashFromPacketHeader(const QByteArray& packet); QByteArray hashForPacketAndConnectionUUID(const QByteArray& packet, const QUuid& connectionUUID); @@ -141,15 +129,15 @@ QByteArray hashForPacketAndConnectionUUID(const QByteArray& packet, const QUuid& // NOTE: The following four methods accept a PacketType which defaults to PacketTypeUnknown. // If the caller has already looked at the packet type and can provide it then the methods below won't have to look it up. -PacketSequenceNumber sequenceNumberFromHeader(const QByteArray& packet, PacketType packetType = PacketTypeUnknown); +PacketSequenceNumber sequenceNumberFromHeader(const QByteArray& packet, PacketType::Value packetType = PacketTypeUnknown); -void replaceHashInPacket(QByteArray& packet, const QUuid& connectionUUID, PacketType packetType = PacketTypeUnknown); +void replaceHashInPacket(QByteArray& packet, const QUuid& connectionUUID, PacketType::Value packetType = PacketTypeUnknown); void replaceSequenceNumberInPacket(QByteArray& packet, PacketSequenceNumber sequenceNumber, - PacketType packetType = PacketTypeUnknown); + PacketType::Value packetType = PacketTypeUnknown); void replaceHashAndSequenceNumberInPacket(QByteArray& packet, const QUuid& connectionUUID, PacketSequenceNumber sequenceNumber, - PacketType packetType = PacketTypeUnknown); + PacketType::Value packetType = PacketTypeUnknown); int arithmeticCodingValueFromBuffer(const char* checkValue); int numBytesArithmeticCodingFromBuffer(const char* checkValue);