Amazon Kinesis Webrtc C SDK
 
Loading...
Searching...
No Matches
Stun.h
Go to the documentation of this file.
1/*******************************************
2StunPackager internal include file
3*******************************************/
4#ifndef __KINESIS_VIDEO_WEBRTC_CLIENT_STUN_PACKAGER__
5#define __KINESIS_VIDEO_WEBRTC_CLIENT_STUN_PACKAGER__
6
7#pragma once
8
9#ifdef __cplusplus
10extern "C" {
11#endif
12
21#define STUN_HEADER_LEN (UINT16) 20
22#define STUN_HEADER_TYPE_LEN (UINT16) 2
23#define STUN_HEADER_DATA_LEN (UINT16) 2
24#define STUN_HEADER_MAGIC_COOKIE (UINT32) 0x2112A442
25#define STUN_HEADER_MAGIC_COOKIE_LE (UINT32) 0x42A41221
26#define STUN_HEADER_MAGIC_COOKIE_LEN SIZEOF(STUN_HEADER_MAGIC_COOKIE)
27#define STUN_HEADER_TRANSACTION_ID_LEN (UINT16) 12
28
35#define STUN_ATTRIBUTE_HEADER_TYPE_LEN (UINT16) 2
36#define STUN_ATTRIBUTE_HEADER_DATA_LEN (UINT16) 2
37#define STUN_ATTRIBUTE_HEADER_LEN (UINT16)(STUN_ATTRIBUTE_HEADER_TYPE_LEN + STUN_ATTRIBUTE_HEADER_DATA_LEN)
38
39#define STUN_ATTRIBUTE_ADDRESS_FAMILY_LEN (UINT16) 2
40#define STUN_ATTRIBUTE_ADDRESS_PORT_LEN (UINT16) 2
41#define STUN_ATTRIBUTE_ADDRESS_HEADER_LEN (UINT16)(STUN_ATTRIBUTE_ADDRESS_FAMILY_LEN + STUN_ATTRIBUTE_ADDRESS_PORT_LEN)
42
46#define STUN_ATTRIBUTE_FINGERPRINT_LEN (UINT16) 4
47
51#define STUN_ATTRIBUTE_PRIORITY_LEN (UINT16) 4
52
56#define STUN_ATTRIBUTE_LIFETIME_LEN (UINT16) 4
57
58#define STUN_ATTRIBUTE_CHANNEL_NUMBER_LEN (UINT16) 4
59
63#define STUN_ATTRIBUTE_CHANGE_REQUEST_FLAG_LEN (UINT16) 4
64
68#define STUN_ATTRIBUTE_ICE_CONTROL_LEN (UINT16) 8
69
73#define STUN_ATTRIBUTE_REQUESTED_TRANSPORT_PROTOCOL_LEN (UINT16) 4
74
78#define STUN_ATTRIBUTE_REQUESTED_ADDRESS_FAMILY_LEN (UINT16) 4
79
83#define STUN_ATTRIBUTE_FLAG_LEN (UINT16) 0
84
88#define STUN_TRANSACTION_ID_LEN (UINT16) 12
89
93#define STUN_HMAC_VALUE_LEN KVS_SHA1_DIGEST_LENGTH
94
98#define STUN_ATTRIBUTE_MAX_COUNT 20
99
103#define STUN_PACKET_ALLOCATION_SIZE 2048
104
105#define STUN_SEND_INDICATION_OVERHEAD_SIZE 36
106#define STUN_SEND_INDICATION_APPLICATION_DATA_OFFSET 36
107#define STUN_SEND_INDICATION_APPLICATION_DATA_LEN_OFFSET 34
108#define STUN_SEND_INDICATION_XOR_PEER_ADDRESS_OFFSET 28
109#define STUN_SEND_INDICATION_XOR_PEER_ADDRESS_PORT_OFFSET 26
110
115#define STUN_FINGERPRINT_ATTRIBUTE_XOR_VALUE (UINT32) 0x5354554e
116
117#define STUN_ERROR_CODE_PACKET_ERROR_CLASS_OFFSET 2
118#define STUN_ERROR_CODE_PACKET_ERROR_CODE_OFFSET 3
119#define STUN_ERROR_CODE_PACKET_ERROR_PHRASE_OFFSET 4
120#define STUN_PACKET_TRANSACTION_ID_OFFSET 8
121
125#define STUN_ATTRIBUTE_CHANGE_REQUEST_FLAG_CHANGE_IP 4
126#define STUN_ATTRIBUTE_CHANGE_REQUEST_FLAG_CHANGE_PORT 2
127
132#define GET_STUN_ERROR_CODE(pClass, pCode) ((UINT16) ((*(PUINT8) (pClass)) * 100 + *(PUINT8) (pCode)))
133
137#define PACKAGE_STUN_ATTR_HEADER(pBuf, type, dataLen) \
138 putInt16((PINT16) (pBuf), (UINT16) (type)); \
139 putInt16((PINT16) ((pBuf) + STUN_ATTRIBUTE_HEADER_TYPE_LEN), (UINT16) (dataLen));
140
169
170/*
171 * Taking a PBYTE pointing to a buffer containing stun packet, return whether the stun packet is error packet or not
172 */
173#define STUN_PACKET_IS_TYPE_ERROR(pPacketBuffer) \
174 ((getInt16(*(PINT16) pPacketBuffer) == STUN_PACKET_TYPE_BINDING_RESPONSE_ERROR) || \
175 (getInt16(*(PINT16) pPacketBuffer) == STUN_PACKET_TYPE_SHARED_SECRET_ERROR_RESPONSE) || \
176 (getInt16(*(PINT16) pPacketBuffer) == STUN_PACKET_TYPE_ALLOCATE_ERROR_RESPONSE) || \
177 (getInt16(*(PINT16) pPacketBuffer) == STUN_PACKET_TYPE_REFRESH_ERROR_RESPONSE) || \
178 (getInt16(*(PINT16) pPacketBuffer) == STUN_PACKET_TYPE_CREATE_PERMISSION_ERROR_RESPONSE) || \
179 (getInt16(*(PINT16) pPacketBuffer) == STUN_PACKET_TYPE_CHANNEL_BIND_ERROR_RESPONSE))
180
184typedef enum {
188
192typedef enum {
213 STUN_ATTRIBUTE_TYPE_DATA = (UINT16) 0x0013,
214 STUN_ATTRIBUTE_TYPE_REALM = (UINT16) 0x0014,
215 STUN_ATTRIBUTE_TYPE_NONCE = (UINT16) 0x0015,
222
224
235typedef struct {
239 BYTE transactionId[STUN_TRANSACTION_ID_LEN];
241
242typedef struct {
243 // Type of the STUN attribute
244 UINT16 type;
245
246 // Length of the value
247 UINT16 length;
249
254
255typedef struct {
256 // Encapsulating the attribute header
258
259 // Padded with 0 - 3 bytes to be 32-bit aligned
261
262 // NOTE: User name which might or might not be NULL terminated will follow the attribute header
263 // NOTE: This will contain the padded bits as well
264 PCHAR userName;
266
271
276
280
285
290
295
296typedef struct {
297 // Encapsulating the attribute header
299
300 // Padded with 0 - 3 bytes to be 32-bit aligned
302
303 // NOTE: User name which might or might not be NULL terminated will follow the attribute header
304 // NOTE: This will contain the padded bits as well
305 PCHAR realm;
307
312
313typedef struct {
315
316 // Padded with 0 - 3 bytes to be 32-bit aligned
318
319 PBYTE nonce;
321
322typedef struct {
324
325 UINT16 errorCode;
326
327 // Padded with 0 - 3 bytes to be 32-bit aligned
329
332
338
339typedef struct {
341
342 // Padded with 0 - 3 bytes to be multiple of 4
344
345 PBYTE data;
347
355
356typedef struct {
358
359 /* only two bit of changeFlag is used. 0x00000002 means change ip. 0x00000004 means change port */
362
368typedef struct {
369 // Stun header
371
372 // Number of attributes in the list
374
375 // The entire structure allocation size
377
378 // Stun attributes
381
382STATUS serializeStunPacket(PStunPacket, PBYTE, UINT32, BOOL, BOOL, PBYTE, PUINT32);
383STATUS deserializeStunPacket(PBYTE, UINT32, PBYTE, UINT32, PStunPacket*);
394STATUS appendStunNonceAttribute(PStunPacket, PBYTE, UINT16);
395STATUS updateStunNonceAttribute(PStunPacket, PBYTE, UINT16);
396STATUS appendStunErrorCodeAttribute(PStunPacket, PCHAR, UINT16);
398STATUS appendStunDataAttribute(PStunPacket, PBYTE, UINT16);
401
408
412STATUS xorIpAddress(PKvsIpAddress, PBYTE);
413//
414// Internal functions
415//
419
420#ifdef __cplusplus
421}
422#endif
423#endif /* __KINESIS_VIDEO_WEBRTC_CLIENT_STUN_PACKAGER__ */
KVS_IP_FAMILY_TYPE
Definition Include_i.h:99
struct StunAttributeFingerprint * PStunAttributeFingerprint
STUN_ERROR_CODE
Definition Stun.h:184
@ STUN_ERROR_STALE_NONCE
Definition Stun.h:186
@ STUN_ERROR_UNAUTHORIZED
Definition Stun.h:185
STATUS appendStunUsernameAttribute(PStunPacket, PCHAR)
Definition Stun.c:1181
STATUS appendStunChannelNumberAttribute(PStunPacket, UINT16)
Definition Stun.c:1708
STUN_ATTRIBUTE_TYPE
Definition Stun.h:192
@ STUN_ATTRIBUTE_TYPE_ICE_CONTROLLING
Definition Stun.h:209
@ STUN_ATTRIBUTE_TYPE_XOR_MAPPED_ADDRESS
Definition Stun.h:204
@ STUN_ATTRIBUTE_TYPE_USE_CANDIDATE
Definition Stun.h:206
@ STUN_ATTRIBUTE_TYPE_DONT_FRAGMENT
Definition Stun.h:220
@ STUN_ATTRIBUTE_TYPE_EVEN_PORT
Definition Stun.h:218
@ STUN_ATTRIBUTE_TYPE_ERROR_CODE
Definition Stun.h:201
@ STUN_ATTRIBUTE_TYPE_NONCE
Definition Stun.h:215
@ STUN_ATTRIBUTE_TYPE_PASSWORD
Definition Stun.h:199
@ STUN_ATTRIBUTE_TYPE_RESPONSE_ADDRESS
Definition Stun.h:194
@ STUN_ATTRIBUTE_TYPE_REFLECTED_FROM
Definition Stun.h:203
@ STUN_ATTRIBUTE_TYPE_REALM
Definition Stun.h:214
@ STUN_ATTRIBUTE_TYPE_REQUESTED_ADDRESS_FAMILY
Definition Stun.h:217
@ STUN_ATTRIBUTE_TYPE_CHANGED_ADDRESS
Definition Stun.h:197
@ STUN_ATTRIBUTE_TYPE_UNKNOWN_ATTRIBUTES
Definition Stun.h:202
@ STUN_ATTRIBUTE_TYPE_LIFETIME
Definition Stun.h:211
@ STUN_ATTRIBUTE_TYPE_REQUESTED_TRANSPORT
Definition Stun.h:219
@ STUN_ATTRIBUTE_TYPE_XOR_RELAYED_ADDRESS
Definition Stun.h:216
@ STUN_ATTRIBUTE_TYPE_DATA
Definition Stun.h:213
@ STUN_ATTRIBUTE_TYPE_CHANNEL_NUMBER
Definition Stun.h:210
@ STUN_ATTRIBUTE_TYPE_XOR_PEER_ADDRESS
Definition Stun.h:212
@ STUN_ATTRIBUTE_TYPE_USERNAME
Definition Stun.h:198
@ STUN_ATTRIBUTE_TYPE_MAPPED_ADDRESS
Definition Stun.h:193
@ STUN_ATTRIBUTE_TYPE_SOURCE_ADDRESS
Definition Stun.h:196
@ STUN_ATTRIBUTE_TYPE_PRIORITY
Definition Stun.h:205
@ STUN_ATTRIBUTE_TYPE_RESERVATION_TOKEN
Definition Stun.h:221
@ STUN_ATTRIBUTE_TYPE_MESSAGE_INTEGRITY
Definition Stun.h:200
@ STUN_ATTRIBUTE_TYPE_FINGERPRINT
Definition Stun.h:207
@ STUN_ATTRIBUTE_TYPE_CHANGE_REQUEST
Definition Stun.h:195
@ STUN_ATTRIBUTE_TYPE_ICE_CONTROLLED
Definition Stun.h:208
struct StunAttributeRequestedTransport * PStunAttributeRequestedTransport
STATUS xorIpAddress(PKvsIpAddress, PBYTE)
Definition Stun.c:1251
STATUS appendStunAllocationAddressFamily(PStunPacket, KVS_IP_FAMILY_TYPE)
Definition Stun.c:1481
STATUS freeStunPacket(PStunPacket *)
Definition Stun.c:1088
struct StunAttributeIceControl * PStunAttributeIceControl
STATUS appendStunIceControllAttribute(PStunPacket, STUN_ATTRIBUTE_TYPE, UINT64)
Definition Stun.c:1632
struct StunAttributeAddress * PStunAttributeAddress
STATUS appendStunRealmAttribute(PStunPacket, PCHAR)
Definition Stun.c:1438
struct StunAttributeData * PStunAttributeData
struct StunAttributeFlag * PStunAttributeFlag
struct StunAttributeNonce * PStunAttributeNonce
struct StunAttributeHeader * PStunAttributeHeader
struct StunAttributePriority * PStunAttributePriority
STATUS serializeStunPacket(PStunPacket, PBYTE, UINT32, BOOL, BOOL, PBYTE, PUINT32)
Definition Stun.c:70
STATUS appendStunFlagAttribute(PStunPacket, STUN_ATTRIBUTE_TYPE)
Definition Stun.c:1313
struct StunAttributeChangeRequest * PStunAttributeChangeRequest
STATUS appendStunNonceAttribute(PStunPacket, PBYTE, UINT16)
Definition Stun.c:1517
#define STUN_HMAC_VALUE_LEN
Definition Stun.h:93
STATUS updateStunNonceAttribute(PStunPacket, PBYTE, UINT16)
Definition Stun.c:1559
STATUS getFirstAvailableStunAttribute(PStunPacket, PStunAttributeHeader *)
Definition Stun.c:1800
struct StunPacket * PStunPacket
struct StunAttributeAllocationAddressFamily * PStunAttributeAllocationAddressFamily
struct StunHeader * PStunHeader
UINT16 getPackagedStunAttributeSize(PStunAttributeHeader)
Definition Stun.c:1741
STATUS appendStunErrorCodeAttribute(PStunPacket, PCHAR, UINT16)
Definition Stun.c:1587
STATUS getStunAttribute(PStunPacket, STUN_ATTRIBUTE_TYPE, PStunAttributeHeader *)
Definition Stun.c:1226
struct StunAttributeMessageIntegrity * PStunAttributeMessageIntegrity
STATUS appendStunAddressAttribute(PStunPacket, STUN_ATTRIBUTE_TYPE, PKvsIpAddress)
Definition Stun.c:1148
STATUS appendStunChangeRequestAttribute(PStunPacket, UINT32)
Definition Stun.c:1373
STATUS appendStunPriorityAttribute(PStunPacket, UINT32)
Definition Stun.c:1281
struct StunAttributeRealm * PStunAttributeRealm
STUN_PACKET_TYPE
Definition Stun.h:144
@ STUN_PACKET_TYPE_REFRESH_SUCCESS_RESPONSE
Definition Stun.h:159
@ STUN_PACKET_TYPE_ALLOCATE_ERROR_RESPONSE
Definition Stun.h:164
@ STUN_PACKET_TYPE_BINDING_INDICATION
Definition Stun.h:153
@ STUN_PACKET_TYPE_SEND_INDICATION
Definition Stun.h:154
@ STUN_PACKET_TYPE_BINDING_RESPONSE_ERROR
Definition Stun.h:162
@ STUN_PACKET_TYPE_CREATE_PERMISSION_ERROR_RESPONSE
Definition Stun.h:166
@ STUN_PACKET_TYPE_ALLOCATE_SUCCESS_RESPONSE
Definition Stun.h:158
@ STUN_PACKET_TYPE_SHARED_SECRET_RESPONSE
Definition Stun.h:157
@ STUN_PACKET_TYPE_SEND
Definition Stun.h:149
@ STUN_PACKET_TYPE_SHARED_SECRET_REQUEST
Definition Stun.h:146
@ STUN_PACKET_TYPE_DATA_INDICATION
Definition Stun.h:155
@ STUN_PACKET_TYPE_ALLOCATE
Definition Stun.h:147
@ STUN_PACKET_TYPE_DATA
Definition Stun.h:150
@ STUN_PACKET_TYPE_REFRESH
Definition Stun.h:148
@ STUN_PACKET_TYPE_SHARED_SECRET_ERROR_RESPONSE
Definition Stun.h:163
@ STUN_PACKET_TYPE_CHANNEL_BIND_ERROR_RESPONSE
Definition Stun.h:167
@ STUN_PACKET_TYPE_BINDING_REQUEST
Definition Stun.h:145
@ STUN_PACKET_TYPE_CREATE_PERMISSION
Definition Stun.h:151
@ STUN_PACKET_TYPE_CHANNEL_BIND_REQUEST
Definition Stun.h:152
@ STUN_PACKET_TYPE_BINDING_RESPONSE_SUCCESS
Definition Stun.h:156
@ STUN_PACKET_TYPE_CREATE_PERMISSION_SUCCESS_RESPONSE
Definition Stun.h:160
@ STUN_PACKET_TYPE_CHANNEL_BIND_SUCCESS_RESPONSE
Definition Stun.h:161
@ STUN_PACKET_TYPE_REFRESH_ERROR_RESPONSE
Definition Stun.h:165
STATUS stunPackageIpAddr(PStunHeader, STUN_ATTRIBUTE_TYPE, PKvsIpAddress, PBYTE, PUINT32)
Definition Stun.c:4
STATUS appendStunDataAttribute(PStunPacket, PBYTE, UINT16)
Definition Stun.c:1666
struct StunAttributeChannelNumber * PStunAttributeChannelNumber
STATUS createStunPacket(STUN_PACKET_TYPE, PBYTE, PStunPacket *)
Definition Stun.c:1103
struct StunAttributeErrorCode * PStunAttributeErrorCode
STATUS appendStunRequestedTransportAttribute(PStunPacket, UINT8)
Definition Stun.c:1405
struct StunAttributeUsername * PStunAttributeUsername
STATUS deserializeStunPacket(PBYTE, UINT32, PBYTE, UINT32, PStunPacket *)
Definition Stun.c:539
struct StunAttributeLifetime * PStunAttributeLifetime
#define STUN_TRANSACTION_ID_LEN
Definition Stun.h:88
STATUS appendStunLifetimeAttribute(PStunPacket, UINT32)
Definition Stun.c:1341
Definition Include_i.h:105
Definition Stun.h:250
StunAttributeHeader attribute
Definition Stun.h:251
KvsIpAddress address
Definition Stun.h:252
StunAttributeHeader attribute
Definition Stun.h:309
Definition Stun.h:356
StunAttributeHeader attribute
Definition Stun.h:357
UINT32 changeFlag
Definition Stun.h:360
Definition Stun.h:348
StunAttributeHeader attribute
Definition Stun.h:349
UINT16 channelNumber
Definition Stun.h:351
UINT16 reserve
Definition Stun.h:353
Definition Stun.h:339
PBYTE data
Definition Stun.h:345
UINT16 paddedLength
Definition Stun.h:343
StunAttributeHeader attribute
Definition Stun.h:340
Definition Stun.h:322
UINT16 paddedLength
Definition Stun.h:328
StunAttributeHeader attribute
Definition Stun.h:323
PCHAR errorPhrase
Definition Stun.h:330
UINT16 errorCode
Definition Stun.h:325
Definition Stun.h:267
StunAttributeHeader attribute
Definition Stun.h:268
UINT32 crc32Fingerprint
Definition Stun.h:269
Definition Stun.h:277
StunAttributeHeader attribute
Definition Stun.h:278
Definition Stun.h:242
UINT16 type
Definition Stun.h:244
UINT16 length
Definition Stun.h:247
Definition Stun.h:333
UINT64 tieBreaker
Definition Stun.h:336
StunAttributeHeader attribute
Definition Stun.h:334
Definition Stun.h:286
UINT32 lifetime
Definition Stun.h:288
StunAttributeHeader attribute
Definition Stun.h:287
Definition Stun.h:281
StunAttributeHeader attribute
Definition Stun.h:282
Definition Stun.h:313
UINT16 paddedLength
Definition Stun.h:317
PBYTE nonce
Definition Stun.h:319
StunAttributeHeader attribute
Definition Stun.h:314
Definition Stun.h:272
StunAttributeHeader attribute
Definition Stun.h:273
UINT32 priority
Definition Stun.h:274
Definition Stun.h:296
PCHAR realm
Definition Stun.h:305
UINT16 paddedLength
Definition Stun.h:301
StunAttributeHeader attribute
Definition Stun.h:298
Definition Stun.h:291
StunAttributeHeader attribute
Definition Stun.h:292
Definition Stun.h:255
PCHAR userName
Definition Stun.h:264
StunAttributeHeader attribute
Definition Stun.h:257
UINT16 paddedLength
Definition Stun.h:260
Definition Stun.h:235
UINT16 messageLength
Definition Stun.h:237
UINT16 stunMessageType
Definition Stun.h:236
UINT32 magicCookie
Definition Stun.h:238
Definition Stun.h:368
StunHeader header
Definition Stun.h:370
UINT32 allocationSize
Definition Stun.h:376
UINT32 attributesCount
Definition Stun.h:373
PStunAttributeHeader * attributeList
Definition Stun.h:379