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,