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 {
36 enum class Value : uint8_t {
38 DomainConnectRequestPending,
46 MicrophoneAudioNoEcho,
47 MicrophoneAudioWithEcho,
53 DomainConnectionDenied,
56 DomainServerPathQuery,
57 DomainServerPathResponse,
58 DomainServerAddedNode,
59 ICEServerPeerInformation,
64 AssignmentClientStatus,
69 DomainServerRequireDTLS,
83 DomainServerConnectionToken,
84 DomainSettingsRequest,
92 DomainDisconnectRequest,
93 DomainServerRemovedNode,
97 ICEServerHeartbeatDenied,
98 AssetMappingOperation,
99 AssetMappingOperationReply,
100 ICEServerHeartbeatACK,
101 NegotiateAudioFormat,
107 UsernameFromIDRequest,
110 RequestsDomainListData,
112 EntityScriptGetStatus,
113 EntityScriptGetStatusReply,
114 ReloadEntityServerScript,
116 EntityServerScriptLog,
118 OctreeFileReplacement,
119 CollisionEventChanges,
120 ReplicatedMicrophoneAudioNoEcho,
121 ReplicatedMicrophoneAudioWithEcho,
122 ReplicatedInjectAudio,
123 ReplicatedSilentAudioFrame,
124 ReplicatedAvatarIdentity,
125 ReplicatedKillAvatar,
126 ReplicatedBulkAvatarData,
127 DomainContentReplacementFromUrl,
128 DropOnNextProtocolChange_1,
129 EntityScriptCallMethod,
130 DropOnNextProtocolChange_2,
131 DropOnNextProtocolChange_3,
132 OctreeDataFileRequest,
136 EntityQueryInitialResultsComplete,
146 const static QHash<PacketTypeEnum::Value, PacketTypeEnum::Value> getReplicatedPacketMapping() {
147 const static QHash<PacketTypeEnum::Value, PacketTypeEnum::Value> REPLICATED_PACKET_MAPPING {
148 { PacketTypeEnum::Value::MicrophoneAudioNoEcho, PacketTypeEnum::Value::ReplicatedMicrophoneAudioNoEcho },
149 { PacketTypeEnum::Value::MicrophoneAudioWithEcho, PacketTypeEnum::Value::ReplicatedMicrophoneAudioWithEcho },
150 { PacketTypeEnum::Value::InjectAudio, PacketTypeEnum::Value::ReplicatedInjectAudio },
151 { PacketTypeEnum::Value::SilentAudioFrame, PacketTypeEnum::Value::ReplicatedSilentAudioFrame },
152 { PacketTypeEnum::Value::AvatarIdentity, PacketTypeEnum::Value::ReplicatedAvatarIdentity },
153 { PacketTypeEnum::Value::KillAvatar, PacketTypeEnum::Value::ReplicatedKillAvatar },
154 { PacketTypeEnum::Value::BulkAvatarData, PacketTypeEnum::Value::ReplicatedBulkAvatarData }
156 return REPLICATED_PACKET_MAPPING;
159 const static QSet<PacketTypeEnum::Value> getNonVerifiedPackets() {
160 const static QSet<PacketTypeEnum::Value> NON_VERIFIED_PACKETS = QSet<PacketTypeEnum::Value>()
161 << PacketTypeEnum::Value::NodeJsonStats
162 << PacketTypeEnum::Value::EntityQuery
163 << PacketTypeEnum::Value::OctreeDataNack
164 << PacketTypeEnum::Value::EntityEditNack
165 << PacketTypeEnum::Value::DomainListRequest
166 << PacketTypeEnum::Value::StopNode
167 << PacketTypeEnum::Value::DomainDisconnectRequest
168 << PacketTypeEnum::Value::UsernameFromIDRequest
169 << PacketTypeEnum::Value::NodeKickRequest
170 << PacketTypeEnum::Value::NodeMuteRequest;
171 return NON_VERIFIED_PACKETS;
174 const static QSet<PacketTypeEnum::Value> getNonSourcedPackets() {
175 const static QSet<PacketTypeEnum::Value> NON_SOURCED_PACKETS = QSet<PacketTypeEnum::Value>()
176 << PacketTypeEnum::Value::DomainConnectRequestPending << PacketTypeEnum::Value::CreateAssignment
177 << PacketTypeEnum::Value::RequestAssignment << PacketTypeEnum::Value::DomainServerRequireDTLS
178 << PacketTypeEnum::Value::DomainConnectRequest << PacketTypeEnum::Value::DomainList
179 << PacketTypeEnum::Value::DomainConnectionDenied << PacketTypeEnum::Value::DomainServerPathQuery
180 << PacketTypeEnum::Value::DomainServerPathResponse << PacketTypeEnum::Value::DomainServerAddedNode
181 << PacketTypeEnum::Value::DomainServerConnectionToken << PacketTypeEnum::Value::DomainSettingsRequest
182 << PacketTypeEnum::Value::OctreeDataFileRequest << PacketTypeEnum::Value::OctreeDataFileReply
183 << PacketTypeEnum::Value::OctreeDataPersist << PacketTypeEnum::Value::DomainContentReplacementFromUrl
184 << PacketTypeEnum::Value::DomainSettings << PacketTypeEnum::Value::ICEServerPeerInformation
185 << PacketTypeEnum::Value::ICEServerQuery << PacketTypeEnum::Value::ICEServerHeartbeat
186 << PacketTypeEnum::Value::ICEServerHeartbeatACK << PacketTypeEnum::Value::ICEPing
187 << PacketTypeEnum::Value::ICEPingReply << PacketTypeEnum::Value::ICEServerHeartbeatDenied
188 << PacketTypeEnum::Value::AssignmentClientStatus << PacketTypeEnum::Value::StopNode
189 << PacketTypeEnum::Value::DomainServerRemovedNode << PacketTypeEnum::Value::UsernameFromIDReply
190 << PacketTypeEnum::Value::OctreeFileReplacement << PacketTypeEnum::Value::ReplicatedMicrophoneAudioNoEcho
191 << PacketTypeEnum::Value::ReplicatedMicrophoneAudioWithEcho << PacketTypeEnum::Value::ReplicatedInjectAudio
192 << PacketTypeEnum::Value::ReplicatedSilentAudioFrame << PacketTypeEnum::Value::ReplicatedAvatarIdentity
193 << PacketTypeEnum::Value::ReplicatedKillAvatar << PacketTypeEnum::Value::ReplicatedBulkAvatarData
194 << PacketTypeEnum::Value::AvatarZonePresence << PacketTypeEnum::Value::WebRTCSignaling;
195 return NON_SOURCED_PACKETS;
198 const static QSet<PacketTypeEnum::Value> getDomainSourcedPackets() {
199 const static QSet<PacketTypeEnum::Value> DOMAIN_SOURCED_PACKETS = QSet<PacketTypeEnum::Value>()
200 << PacketTypeEnum::Value::AssetMappingOperation
201 << PacketTypeEnum::Value::AssetGet
202 << PacketTypeEnum::Value::AssetUpload;
203 return DOMAIN_SOURCED_PACKETS;
206 const static QSet<PacketTypeEnum::Value> getDomainIgnoredVerificationPackets() {
207 const static QSet<PacketTypeEnum::Value> DOMAIN_IGNORED_VERIFICATION_PACKETS = QSet<PacketTypeEnum::Value>()
208 << PacketTypeEnum::Value::AssetMappingOperationReply
209 << PacketTypeEnum::Value::AssetGetReply
210 << PacketTypeEnum::Value::AssetUploadReply;
211 return DOMAIN_IGNORED_VERIFICATION_PACKETS;
215 using PacketType = PacketTypeEnum::Value;
217 const int NUM_BYTES_MD5_HASH = 16;
220 typedef uint8_t PacketVersion;
222 PacketVersion versionForPacketType(PacketType packetType);
223 QByteArray protocolVersionsSignature();
224 QString protocolVersionsSignatureBase64();
226 #if (PR_BUILD || DEV_BUILD)
227 void sendWrongProtocolVersionsSignature(
bool sendWrongVersion);
230 uint qHash(
const PacketType& key, uint seed);
231 QDebug operator<<(QDebug debug,
const PacketType& type);
235 enum class EntityVersion : PacketVersion {
236 StrokeColorProperty = 0,
237 HasDynamicOwnershipTests,
239 StaticCertJsonVersionOne,
240 OwnershipChallengeFix,
241 ZoneLightInheritModes = 82,
248 CollisionMask16Bytes,
249 YieldSimulationOwnership,
255 FixedLightSerialization,
261 MissingTextProperties,
263 MorePropertiesCleanup,
264 FixPropertiesFromCleanup,
266 FixProtocolVersionBumpMismatch,
267 MigrateOverlayRenderProperties,
268 MissingWebEntityProperties,
272 ShowKeyboardFocusHighlight,
275 ReOrderParentIDProperties,
276 CertificateTypeProperty,
279 ParticleShapeTypeDeadlockFix,
282 ShadowBiasAndDistance,
284 ScriptServerKinematicMotion,
296 LAST_PACKET_TYPE = NUM_PACKET_TYPE - 1
299 enum class EntityScriptCallMethodVersion : PacketVersion {
304 enum class EntityQueryPacketVersion: PacketVersion {
306 JSONFilterWithFamilyTree = 19,
307 ConnectionIdentifier = 20,
308 RemovedJurisdictions = 21,
309 MultiFrustumQuery = 22,
313 enum class AssetServerPacketVersion: PacketVersion {
314 VegasCongestionControl = 19,
320 enum class AvatarMixerPacketVersion : PacketVersion {
321 TranslationSupport = 17,
322 SoftAttachmentSupport,
324 AbsoluteSixByteRotations,
326 HandControllerJoints,
330 ImmediateSessionDisplayNameUpdates,
333 StickAndBallDefaultAvatar,
334 IdentityPacketsIncludeUpdateTime,
335 AvatarIdentitySequenceId,
336 MannequinDefaultAvatar,
337 AvatarIdentitySequenceFront,
338 IsReplicatedInAvatarIdentity,
339 AvatarIdentityLookAtSnapping,
340 UpdatedMannequinDefaultAvatar,
341 AvatarJointDefaultPoseFlags,
342 FBXReaderNodeReparenting,
343 FixMannequinDefaultAvatarFeet,
344 ProceduralFaceMovementFlagsAndBlendshapes,
346 MigrateSkeletonURLToTraits,
347 MigrateAvatarEntitiesToTraits,
353 FasterAvatarEntities,
354 SendMaxTranslationDimension,
356 HandControllerSection,
357 SendVerificationFailed,
361 enum class DomainConnectRequestVersion : PacketVersion {
366 HasMachineFingerprint,
367 AlwaysHasMachineFingerprint,
371 HasCompressedSystemInfo,
375 enum class DomainListRequestVersion : PacketVersion {
380 enum class DomainConnectionDeniedVersion : PacketVersion {
381 ReasonMessageOnly = 17,
386 enum class DomainServerAddedNodeVersion : PacketVersion {
387 PrePermissionsGrid = 17,
392 enum class DomainListVersion : PacketVersion {
393 PrePermissionsGrid = 18,
395 GetUsernameFromUUIDSupport,
396 GetMachineFingerprintFromUUIDSupport,
397 AuthenticationOptional,
403 enum class AudioVersion : PacketVersion {
404 HasCompressedAudio = 17,
405 CodecNameInAudioPackets,
406 Exactly10msAudioPackets,
407 TerminatingStreamStats,
410 HighDynamicRangeVolume,
414 enum class MessageDataVersion : PacketVersion {
415 TextOrBinaryData = 18
418 enum class IcePingVersion : PacketVersion {
422 enum class PingVersion : PacketVersion {
423 IncludeConnectionID = 18
426 enum class AvatarQueryVersion : PacketVersion {
427 SendMultipleFrustums = 21,
@ Unknown
Socket type unknown or not set.