76 #include <ortp/port.h>
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
95 #define STUN_PORT 3478
99 typedef unsigned char uint8_t;
100 typedef unsigned short uint16_t;
101 typedef unsigned int uint32_t;
103 #if defined(WIN32) || defined(_WIN32_WCE)
104 typedef unsigned __int64 uint64_t;
106 typedef unsigned long long uint64_t;
109 typedef 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 //(only request/response semantics defined)
174 #define TURN_METHOD_REFRESH 0x0004 //(only request/response semantics defined)
175 #define TURN_METHOD_CREATEPERMISSION 0x0008 //(only request/response semantics defined
176 #define TURN_METHOD_CHANNELBIND 0x0009 //(only request/response semantics defined)
180 #define SharedSecretRequestMsg 0x0002
181 #define SharedSecretResponseMsg 0x0102
182 #define SharedSecretErrorResponseMsg 0x0112
184 #define TURN_INDICATION_SEND 0x0006 //(only indication semantics defined)
185 #define TURN_INDICATION_DATA 0x0007 //(only indication semantics defined)
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
437 stunCalculateIntegrity_longterm(
char* hmac,
const char* input,
int length,
438 const char *username,
const char *realm,
const char *password);
440 stunCalculateIntegrity_shortterm(
char* hmac,
const char* input,
int length,
const char* key);
442 stunCalculateFingerprint(
const char* input,
int length);
445 stunParseMessage(
char* buf,
452 bool_t changePort, bool_t changeIp,
unsigned int id );
454 ORTP_PUBLIC
unsigned int
475 stunGetSystemTimeSecs(
void);
479 stunParseServerName(
const char* serverName,
StunAddress4 *stunServerAddr);
482 stunParseHostName(
const char* peerName,
485 uint16_t defaultPort );
500 stunFindLocalInterfaces(uint32_t* addresses,
int maxSize );
507 bool_t* preservePort,
514 stunServerProcessMsg(
char* buf,