77#include <ortp/stun_udp.h>
80 #include "TargetConditionals.h"
89#define STUN_VERSION "0.99"
91#define STUN_MAX_STRING 514
92#define STUN_MAX_UNKNOWN_ATTRIBUTES 8
93#define STUN_MAX_MESSAGE_SIZE 2048
99typedef unsigned char uint8_t;
100typedef unsigned short uint16_t;
101typedef unsigned int uint32_t;
103#if defined(WIN32) || defined(_WIN32_WCE)
104typedef unsigned __int64 uint64_t;
106typedef unsigned long long uint64_t;
109typedef struct {
unsigned char octet[12]; }
UInt96;
112#define IPv4Family 0x01
113#define IPv6Family 0x02
116#define ChangeIpFlag 0x04
117#define ChangePortFlag 0x02
120#define SA_MAPPEDADDRESS 0x0001
121#define SA_RESPONSEADDRESS 0x0002
122#define SA_CHANGEREQUEST 0x0003
123#define SA_SOURCEADDRESS 0x0004
124#define SA_CHANGEDADDRESS 0x0005
125#define SA_USERNAME 0x0006
126#define SA_PASSWORD 0x0007
127#define SA_MESSAGEINTEGRITY 0x0008
128#define SA_ERRORCODE 0x0009
129#define SA_UNKNOWNATTRIBUTE 0x000A
130#define SA_REFLECTEDFROM 0x000B
131#define SA_REALM 0x0014
132#define SA_NONCE 0x0015
133#define SA_XORMAPPEDADDRESS 0x0020
135#define SA_XORMAPPEDADDRESS2 0x8020
136#define SA_XORONLY 0x0021
137#define SA_SECONDARYADDRESS 0x0050
139#define SA_SOFTWARE 0x8022
140#define SA_ALTERNATESERVER 0x8023
141#define SA_FINGERPRINT 0x8028
144#define TA_CHANNELNUMBER 0x000C
145#define TA_LIFETIME 0x000D
146#define TA_DEPRECATEDBANDWIDTH 0x0010
147#define TA_XORPEERADDRESS 0x0012
148#define TA_DATA 0x0013
149#define TA_XORRELAYEDADDRESS 0x0016
150#define TA_EVENPORT 0x0018
151#define TA_REQUESTEDTRANSPORT 0x0019
152#define TA_DONTFRAGMENT 0x001A
153#define TA_DEPRECATEDTIMERVAL 0x0021
154#define TA_RESERVATIONTOKEN 0x0022
156#define ICEA_PRIORITY 0x0024
157#define ICEA_USECANDIDATE 0x0025
158#define ICEA_ICECONTROLLED 0x8029
159#define ICEA_ICECONTROLLING 0x802a
161#define STUN_REQUEST 0x0000
162#define STUN_INDICATION 0x0010
163#define STUN_SUCCESS_RESP 0x0100
164#define STUN_ERR_RESP 0x0110
166#define STUN_IS_REQUEST(msg_type) (((msg_type) & 0x0110) == 0x0000)
167#define STUN_IS_INDICATION(msg_type) (((msg_type) & 0x0110) == 0x0010)
168#define STUN_IS_SUCCESS_RESP(msg_type) (((msg_type) & 0x0110) == 0x0100)
169#define STUN_IS_ERR_RESP(msg_type) (((msg_type) & 0x0110) == 0x0110)
172#define STUN_METHOD_BINDING 0x0001
173#define TURN_MEDHOD_ALLOCATE 0x0003
174#define TURN_METHOD_REFRESH 0x0004
175#define TURN_METHOD_CREATEPERMISSION 0x0008
176#define TURN_METHOD_CHANNELBIND 0x0009
180#define SharedSecretRequestMsg 0x0002
181#define SharedSecretResponseMsg 0x0102
182#define SharedSecretErrorResponseMsg 0x0112
184#define TURN_INDICATION_SEND 0x0006
185#define TURN_INDICATION_DATA 0x0007
191 uint32_t magic_cookie;
225 char reason[STUN_MAX_STRING];
231 uint16_t attrType[STUN_MAX_UNKNOWN_ATTRIBUTES];
232 uint16_t numAttributes;
237 uint16_t channelNumber;
267 uint32_t fingerprint;
273 char value[STUN_MAX_STRING];
304 uint16_t attrType[STUN_MAX_UNKNOWN_ATTRIBUTES];
305 uint16_t numAttributes;
312 bool_t hasMappedAddress;
315 bool_t hasResponseAddress;
318 bool_t hasChangeRequest;
321 bool_t hasSourceAddress;
324 bool_t hasChangedAddress;
333 bool_t hasMessageIntegrity;
339 bool_t hasUnknownAttributes;
342 bool_t hasReflectedFrom;
351 bool_t hasXorMappedAddress;
357 bool_t hasXorPeerAddress;
360 bool_t hasXorRelayedAddress;
363 bool_t hasFingerprint;
367 bool_t hasChannelNumberAttributes;
370 bool_t hasLifetimeAttributes;
376 bool_t hasRequestedTransport;
379 bool_t hasDontFragment;
381 bool_t hasReservationToken;
387 bool_t hasUseCandidate;
389 bool_t hasIceControlled;
392 bool_t hasIceControlling;
403 StunTypeRestrictedNat,
404 StunTypePortRestrictedNat,
412#define MAX_MEDIA_RELAYS 500
413#define MAX_RTP_MSG_SIZE 1500
414#define MEDIA_RELAY_TIMEOUT 3*60
437stunCalculateIntegrity_longterm(
char* hmac,
const char* input,
int length,
438 const char *username,
const char *realm,
const char *password);
440stunCalculateIntegrity_shortterm(
char* hmac,
const char* input,
int length,
const char* key);
442stunCalculateFingerprint(
const char* input,
int length);
445stunParseMessage(
char* buf,
452 bool_t changePort, bool_t changeIp,
unsigned int id );
454ORTP_PUBLIC
unsigned int
475stunGetSystemTimeSecs(
void);
479stunParseServerName(
const char* serverName,
StunAddress4 *stunServerAddr);
482stunParseHostName(
const char* peerName,
485 uint16_t defaultPort );
500stunFindLocalInterfaces(uint32_t* addresses,
int maxSize );
507 bool_t* preservePort,
514stunServerProcessMsg(
char* buf,