15 #ifndef hifi_PacketHeaders_h
16 #define hifi_PacketHeaders_h
23 #include <QtCore/QCryptographicHash>
24 #include <QtCore/QObject>
25 #include <QtCore/QSet>
26 #include <QtCore/QUuid>
30 class PacketTypeEnum {
43 enum class Value : uint8_t {
45 DomainConnectRequestPending,
53 MicrophoneAudioNoEcho,
54 MicrophoneAudioWithEcho,
60 DomainConnectionDenied,
63 DomainServerPathQuery,
64 DomainServerPathResponse,
65 DomainServerAddedNode,
66 ICEServerPeerInformation,
71 AssignmentClientStatus,
76 DomainServerRequireDTLS,
90 DomainServerConnectionToken,
91 DomainSettingsRequest,
99 DomainDisconnectRequest,
100 DomainServerRemovedNode,
104 ICEServerHeartbeatDenied,
105 AssetMappingOperation,
106 AssetMappingOperationReply,
107 ICEServerHeartbeatACK,
108 NegotiateAudioFormat,
114 UsernameFromIDRequest,
117 RequestsDomainListData,
119 EntityScriptGetStatus,
120 EntityScriptGetStatusReply,
121 ReloadEntityServerScript,
123 EntityServerScriptLog,
125 OctreeFileReplacement,
126 CollisionEventChanges,
127 ReplicatedMicrophoneAudioNoEcho,
128 ReplicatedMicrophoneAudioWithEcho,
129 ReplicatedInjectAudio,
130 ReplicatedSilentAudioFrame,
131 ReplicatedAvatarIdentity,
132 ReplicatedKillAvatar,
133 ReplicatedBulkAvatarData,
134 DomainContentReplacementFromUrl,
135 DropOnNextProtocolChange_1,
136 EntityScriptCallMethod,
137 DropOnNextProtocolChange_2,
138 DropOnNextProtocolChange_3,
139 OctreeDataFileRequest,
143 EntityQueryInitialResultsComplete,
155 const static QHash<PacketTypeEnum::Value, PacketTypeEnum::Value> getReplicatedPacketMapping() {
156 const static QHash<PacketTypeEnum::Value, PacketTypeEnum::Value> REPLICATED_PACKET_MAPPING {
157 { PacketTypeEnum::Value::MicrophoneAudioNoEcho, PacketTypeEnum::Value::ReplicatedMicrophoneAudioNoEcho },
158 { PacketTypeEnum::Value::MicrophoneAudioWithEcho, PacketTypeEnum::Value::ReplicatedMicrophoneAudioWithEcho },
159 { PacketTypeEnum::Value::InjectAudio, PacketTypeEnum::Value::ReplicatedInjectAudio },
160 { PacketTypeEnum::Value::SilentAudioFrame, PacketTypeEnum::Value::ReplicatedSilentAudioFrame },
161 { PacketTypeEnum::Value::AvatarIdentity, PacketTypeEnum::Value::ReplicatedAvatarIdentity },
162 { PacketTypeEnum::Value::KillAvatar, PacketTypeEnum::Value::ReplicatedKillAvatar },
163 { PacketTypeEnum::Value::BulkAvatarData, PacketTypeEnum::Value::ReplicatedBulkAvatarData }
165 return REPLICATED_PACKET_MAPPING;
168 const static QSet<PacketTypeEnum::Value> getNonVerifiedPackets() {
169 const static QSet<PacketTypeEnum::Value> NON_VERIFIED_PACKETS = QSet<PacketTypeEnum::Value>()
170 << PacketTypeEnum::Value::NodeJsonStats
171 << PacketTypeEnum::Value::EntityQuery
172 << PacketTypeEnum::Value::OctreeDataNack
173 << PacketTypeEnum::Value::EntityEditNack
174 << PacketTypeEnum::Value::DomainListRequest
175 << PacketTypeEnum::Value::StopNode
176 << PacketTypeEnum::Value::DomainDisconnectRequest
177 << PacketTypeEnum::Value::UsernameFromIDRequest
178 << PacketTypeEnum::Value::NodeKickRequest
179 << PacketTypeEnum::Value::NodeMuteRequest;
180 return NON_VERIFIED_PACKETS;
183 const static QSet<PacketTypeEnum::Value> getNonSourcedPackets() {
184 const static QSet<PacketTypeEnum::Value> NON_SOURCED_PACKETS = QSet<PacketTypeEnum::Value>()
185 << PacketTypeEnum::Value::DomainConnectRequestPending << PacketTypeEnum::Value::CreateAssignment
186 << PacketTypeEnum::Value::RequestAssignment << PacketTypeEnum::Value::DomainServerRequireDTLS
187 << PacketTypeEnum::Value::DomainConnectRequest << PacketTypeEnum::Value::DomainList
188 << PacketTypeEnum::Value::DomainConnectionDenied << PacketTypeEnum::Value::DomainServerPathQuery
189 << PacketTypeEnum::Value::DomainServerPathResponse << PacketTypeEnum::Value::DomainServerAddedNode
190 << PacketTypeEnum::Value::DomainServerConnectionToken << PacketTypeEnum::Value::DomainSettingsRequest
191 << PacketTypeEnum::Value::OctreeDataFileRequest << PacketTypeEnum::Value::OctreeDataFileReply
192 << PacketTypeEnum::Value::OctreeDataPersist << PacketTypeEnum::Value::DomainContentReplacementFromUrl
193 << PacketTypeEnum::Value::DomainSettings << PacketTypeEnum::Value::ICEServerPeerInformation
194 << PacketTypeEnum::Value::ICEServerQuery << PacketTypeEnum::Value::ICEServerHeartbeat
195 << PacketTypeEnum::Value::ICEServerHeartbeatACK << PacketTypeEnum::Value::ICEPing
196 << PacketTypeEnum::Value::ICEPingReply << PacketTypeEnum::Value::ICEServerHeartbeatDenied
197 << PacketTypeEnum::Value::AssignmentClientStatus << PacketTypeEnum::Value::StopNode
198 << PacketTypeEnum::Value::DomainServerRemovedNode << PacketTypeEnum::Value::UsernameFromIDReply
199 << PacketTypeEnum::Value::OctreeFileReplacement << PacketTypeEnum::Value::ReplicatedMicrophoneAudioNoEcho
200 << PacketTypeEnum::Value::ReplicatedMicrophoneAudioWithEcho << PacketTypeEnum::Value::ReplicatedInjectAudio
201 << PacketTypeEnum::Value::ReplicatedSilentAudioFrame << PacketTypeEnum::Value::ReplicatedAvatarIdentity
202 << PacketTypeEnum::Value::ReplicatedKillAvatar << PacketTypeEnum::Value::ReplicatedBulkAvatarData
203 << PacketTypeEnum::Value::AvatarZonePresence << PacketTypeEnum::Value::WebRTCSignaling;
204 return NON_SOURCED_PACKETS;
207 const static QSet<PacketTypeEnum::Value> getDomainSourcedPackets() {
208 const static QSet<PacketTypeEnum::Value> DOMAIN_SOURCED_PACKETS = QSet<PacketTypeEnum::Value>()
209 << PacketTypeEnum::Value::AssetMappingOperation
210 << PacketTypeEnum::Value::AssetGet
211 << PacketTypeEnum::Value::AssetUpload;
212 return DOMAIN_SOURCED_PACKETS;
215 const static QSet<PacketTypeEnum::Value> getDomainIgnoredVerificationPackets() {
216 const static QSet<PacketTypeEnum::Value> DOMAIN_IGNORED_VERIFICATION_PACKETS = QSet<PacketTypeEnum::Value>()
217 << PacketTypeEnum::Value::AssetMappingOperationReply
218 << PacketTypeEnum::Value::AssetGetReply
219 << PacketTypeEnum::Value::AssetUploadReply;
220 return DOMAIN_IGNORED_VERIFICATION_PACKETS;
224 using PacketType = PacketTypeEnum::Value;
226 const int NUM_BYTES_MD5_HASH = 16;
229 typedef uint8_t PacketVersion;
244 PacketVersion versionForPacketType(PacketType packetType);
259 QByteArray protocolVersionsSignature();
266 QString protocolVersionsSignatureBase64();
273 QString protocolVersionsSignatureHex();
282 QMap<PacketType, uint8_t> protocolVersionsSignatureMap();
285 #if (PR_BUILD || DEV_BUILD)
286 void sendWrongProtocolVersionsSignature(
bool sendWrongVersion);
289 uint qHash(
const PacketType& key, uint seed);
290 QDebug operator<<(QDebug debug,
const PacketType& type);
294 enum class EntityVersion : PacketVersion {
295 StrokeColorProperty = 0,
296 HasDynamicOwnershipTests,
298 StaticCertJsonVersionOne,
299 OwnershipChallengeFix,
300 ZoneLightInheritModes = 82,
307 CollisionMask16Bytes,
308 YieldSimulationOwnership,
314 FixedLightSerialization,
320 MissingTextProperties,
322 MorePropertiesCleanup,
323 FixPropertiesFromCleanup,
325 FixProtocolVersionBumpMismatch,
326 MigrateOverlayRenderProperties,
327 MissingWebEntityProperties,
331 ShowKeyboardFocusHighlight,
334 ReOrderParentIDProperties,
335 CertificateTypeProperty,
338 ParticleShapeTypeDeadlockFix,
341 ShadowBiasAndDistance,
343 ScriptServerKinematicMotion,
345 ScreenshareZoneUnused,
357 AnimationSmoothFrames,
362 TonemappingAndAmbientOcclusion,
365 TextVerticalAlignment,
368 NormalMapAttenuation,
377 LAST_PACKET_TYPE = NUM_PACKET_TYPE - 1
380 enum class EntityScriptCallMethodVersion : PacketVersion {
385 enum class EntityQueryPacketVersion: PacketVersion {
387 JSONFilterWithFamilyTree = 19,
388 ConnectionIdentifier = 20,
389 RemovedJurisdictions = 21,
390 MultiFrustumQuery = 22,
391 ConicalFrustums = 23,
395 enum class AssetServerPacketVersion: PacketVersion {
396 VegasCongestionControl = 19,
402 enum class AvatarMixerPacketVersion : PacketVersion {
403 TranslationSupport = 17,
404 SoftAttachmentSupport,
406 AbsoluteSixByteRotations,
408 HandControllerJoints,
412 ImmediateSessionDisplayNameUpdates,
415 StickAndBallDefaultAvatar,
416 IdentityPacketsIncludeUpdateTime,
417 AvatarIdentitySequenceId,
418 MannequinDefaultAvatar,
419 AvatarIdentitySequenceFront,
420 IsReplicatedInAvatarIdentity,
421 AvatarIdentityLookAtSnapping,
422 UpdatedMannequinDefaultAvatar,
423 AvatarJointDefaultPoseFlags,
424 FBXReaderNodeReparenting,
425 FixMannequinDefaultAvatarFeet,
426 ProceduralFaceMovementFlagsAndBlendshapes,
428 MigrateSkeletonURLToTraits,
429 MigrateAvatarEntitiesToTraits,
435 FasterAvatarEntities,
436 SendMaxTranslationDimension,
438 HandControllerSection,
439 SendVerificationFailed,
444 enum class DomainConnectRequestVersion : PacketVersion {
449 HasMachineFingerprint,
450 AlwaysHasMachineFingerprint,
454 HasCompressedSystemInfo,
458 enum class DomainListRequestVersion : PacketVersion {
463 enum class DomainConnectionDeniedVersion : PacketVersion {
464 ReasonMessageOnly = 17,
469 enum class DomainServerAddedNodeVersion : PacketVersion {
470 PrePermissionsGrid = 17,
475 enum class DomainListVersion : PacketVersion {
476 PrePermissionsGrid = 18,
478 GetUsernameFromUUIDSupport,
479 GetMachineFingerprintFromUUIDSupport,
480 AuthenticationOptional,
486 enum class AudioVersion : PacketVersion {
487 HasCompressedAudio = 17,
488 CodecNameInAudioPackets,
489 Exactly10msAudioPackets,
490 TerminatingStreamStats,
493 HighDynamicRangeVolume,
497 enum class MessageDataVersion : PacketVersion {
498 TextOrBinaryData = 18
501 enum class IcePingVersion : PacketVersion {
505 enum class PingVersion : PacketVersion {
506 IncludeConnectionID = 18
509 enum class AvatarQueryVersion : PacketVersion {
510 SendMultipleFrustums = 21,
@ Unknown
Socket type unknown or not set.