76 #include <ortp/port.h>
77 #include <ortp/stun_udp.h>
86 #define STUN_VERSION "0.99"
88 #define STUN_MAX_STRING 256
89 #define STUN_MAX_UNKNOWN_ATTRIBUTES 8
90 #define STUN_MAX_MESSAGE_SIZE 2048
92 #define STUN_PORT 3478
95 typedef unsigned char UInt8;
96 typedef unsigned short UInt16;
97 typedef unsigned int UInt32;
98 #if defined(WIN32) || defined(_WIN32_WCE)
99 typedef unsigned __int64 UInt64;
101 typedef unsigned long long UInt64;
103 typedef struct {
unsigned char octet[12]; }
UInt96;
106 #define IPv4Family 0x01
107 #define IPv6Family 0x02
110 #define ChangeIpFlag 0x04
111 #define ChangePortFlag 0x02
114 #define SA_MAPPEDADDRESS 0x0001
115 #define SA_RESPONSEADDRESS 0x0002
116 #define SA_CHANGEREQUEST 0x0003
117 #define SA_SOURCEADDRESS 0x0004
118 #define SA_CHANGEDADDRESS 0x0005
119 #define SA_USERNAME 0x0006
120 #define SA_PASSWORD 0x0007
121 #define SA_MESSAGEINTEGRITY 0x0008
122 #define SA_ERRORCODE 0x0009
123 #define SA_UNKNOWNATTRIBUTE 0x000A
124 #define SA_REFLECTEDFROM 0x000B
125 #define SA_REALM 0x0014
126 #define SA_NONCE 0x0015
127 #define SA_XORMAPPEDADDRESS 0x0020
129 #define SA_XORMAPPEDADDRESS2 0x8020
130 #define SA_XORONLY 0x0021
131 #define SA_SECONDARYADDRESS 0x0050
133 #define SA_SOFTWARE 0x8022
134 #define SA_ALTERNATESERVER 0x8023
135 #define SA_FINGERPRINT 0x8028
138 #define TA_CHANNELNUMBER 0x000C
139 #define TA_LIFETIME 0x000D
140 #define TA_DEPRECATEDBANDWIDTH 0x0010
141 #define TA_XORPEERADDRESS 0x0012
142 #define TA_DATA 0x0013
143 #define TA_XORRELAYEDADDRESS 0x0016
144 #define TA_EVENPORT 0x0018
145 #define TA_REQUESTEDTRANSPORT 0x0019
146 #define TA_DONTFRAGMENT 0x001A
147 #define TA_DEPRECATEDTIMERVAL 0x0021
148 #define TA_RESERVATIONTOKEN 0x0022
150 #define ICEA_PRIORITY 0x0024
151 #define ICEA_USECANDIDATE 0x0025
152 #define ICEA_ICECONTROLLED 0x8029
153 #define ICEA_ICECONTROLLING 0x802a
155 #define STUN_REQUEST 0x0000
156 #define STUN_INDICATION 0x0010
157 #define STUN_SUCCESS_RESP 0x0100
158 #define STUN_ERR_RESP 0x0110
160 #define STUN_IS_REQUEST(msg_type) (((msg_type) & 0x0110) == 0x0000)
161 #define STUN_IS_INDICATION(msg_type) (((msg_type) & 0x0110) == 0x0010)
162 #define STUN_IS_SUCCESS_RESP(msg_type) (((msg_type) & 0x0110) == 0x0100)
163 #define STUN_IS_ERR_RESP(msg_type) (((msg_type) & 0x0110) == 0x0110)
166 #define STUN_METHOD_BINDING 0x0001
167 #define TURN_MEDHOD_ALLOCATE 0x0003 //(only request/response semantics defined)
168 #define TURN_METHOD_REFRESH 0x0004 //(only request/response semantics defined)
169 #define TURN_METHOD_CREATEPERMISSION 0x0008 //(only request/response semantics defined
170 #define TURN_METHOD_CHANNELBIND 0x0009 //(only request/response semantics defined)
174 #define SharedSecretRequestMsg 0x0002
175 #define SharedSecretResponseMsg 0x0102
176 #define SharedSecretErrorResponseMsg 0x0112
178 #define TURN_INDICATION_SEND 0x0006 //(only indication semantics defined)
179 #define TURN_INDICATION_DATA 0x0007 //(only indication semantics defined)
219 char reason[STUN_MAX_STRING];
225 UInt16 attrType[STUN_MAX_UNKNOWN_ATTRIBUTES];
226 UInt16 numAttributes;
231 UInt16 channelNumber;
267 char value[STUN_MAX_STRING];
298 UInt16 attrType[STUN_MAX_UNKNOWN_ATTRIBUTES];
299 UInt16 numAttributes;
306 bool_t hasMappedAddress;
309 bool_t hasResponseAddress;
312 bool_t hasChangeRequest;
315 bool_t hasSourceAddress;
318 bool_t hasChangedAddress;
327 bool_t hasMessageIntegrity;
333 bool_t hasUnknownAttributes;
336 bool_t hasReflectedFrom;
345 bool_t hasXorMappedAddress;
351 bool_t hasXorPeerAddress;
354 bool_t hasXorRelayedAddress;
357 bool_t hasFingerprint;
361 bool_t hasChannelNumberAttributes;
364 bool_t hasLifetimeAttributes;
370 bool_t hasRequestedTransport;
373 bool_t hasDontFragment;
375 bool_t hasReservationToken;
381 bool_t hasUseCandidate;
383 bool_t hasIceControlled;
386 bool_t hasIceControlling;
397 StunTypeRestrictedNat,
398 StunTypePortRestrictedNat,
406 #define MAX_MEDIA_RELAYS 500
407 #define MAX_RTP_MSG_SIZE 1500
408 #define MEDIA_RELAY_TIMEOUT 3*60
431 stunCalculateIntegrity_longterm(
char* hmac,
const char* input,
int length,
432 const char *username,
const char *realm,
const char *password);
434 stunCalculateIntegrity_shortterm(
char* hmac,
const char* input,
int length,
const char* key);
436 stunCalculateFingerprint(
const char* input,
int length);
439 stunParseMessage(
char* buf,
446 bool_t changePort, bool_t changeIp,
unsigned int id );
469 stunGetSystemTimeSecs(
void);
473 stunParseServerName(
const char* serverName,
StunAddress4 *stunServerAddr);
476 stunParseHostName(
const char* peerName,
479 UInt16 defaultPort );
494 stunFindLocalInterfaces(UInt32* addresses,
int maxSize );
501 bool_t* preservePort,
508 stunServerProcessMsg(
char* buf,