75 #include <ortp/port.h>
76 #include <ortp/stun_udp.h>
79 #include "TargetConditionals.h"
87 #define STUN_VERSION "5.2.0"
95 #define STUN_MAX_STRING 763
96 #define STUN_MAX_UNKNOWN_ATTRIBUTES 8
97 #define STUN_MAX_MESSAGE_SIZE 2048
99 #define STUN_PORT 3478
103 typedef unsigned char uint8_t;
104 typedef unsigned short uint16_t;
105 typedef unsigned int uint32_t;
107 #if defined(WIN32) || defined(_WIN32_WCE)
108 typedef unsigned __int64 uint64_t;
110 typedef unsigned long long uint64_t;
115 #define IPv4Family 0x01
116 #define IPv6Family 0x02
119 #define ChangeIpFlag 0x04
120 #define ChangePortFlag 0x02
122 #define NoReservation 0x00
123 #define ReserveNextPort 0x80
126 #define SA_MAPPEDADDRESS 0x0001
127 #define SA_RESPONSEADDRESS 0x0002
128 #define SA_CHANGEREQUEST 0x0003
129 #define SA_SOURCEADDRESS 0x0004
130 #define SA_CHANGEDADDRESS 0x0005
131 #define SA_USERNAME 0x0006
132 #define SA_PASSWORD 0x0007
133 #define SA_MESSAGEINTEGRITY 0x0008
134 #define SA_ERRORCODE 0x0009
135 #define SA_UNKNOWNATTRIBUTE 0x000A
136 #define SA_REFLECTEDFROM 0x000B
137 #define SA_REALM 0x0014
138 #define SA_NONCE 0x0015
139 #define SA_XORMAPPEDADDRESS 0x0020
141 #define SA_XORMAPPEDADDRESS2 0x8020
142 #define SA_XORONLY 0x0021
143 #define SA_SECONDARYADDRESS 0x0050
145 #define SA_SOFTWARE 0x8022
146 #define SA_ALTERNATESERVER 0x8023
147 #define SA_FINGERPRINT 0x8028
150 #define TA_CHANNELNUMBER 0x000C
151 #define TA_LIFETIME 0x000D
152 #define TA_DEPRECATEDBANDWIDTH 0x0010
153 #define TA_XORPEERADDRESS 0x0012
154 #define TA_DATA 0x0013
155 #define TA_XORRELAYEDADDRESS 0x0016
156 #define RFC6156A_REQUESTADDRESSFAMILY 0x0017
157 #define TA_EVENPORT 0x0018
158 #define TA_REQUESTEDTRANSPORT 0x0019
159 #define TA_DONTFRAGMENT 0x001A
160 #define TA_DEPRECATEDTIMERVAL 0x0021
161 #define TA_RESERVATIONTOKEN 0x0022
163 #define ICEA_PRIORITY 0x0024
164 #define ICEA_USECANDIDATE 0x0025
165 #define ICEA_ICECONTROLLED 0x8029
166 #define ICEA_ICECONTROLLING 0x802a
168 #define RFC5780_RESPONSE_ORIGIN 0x802b
169 #define RFC5780_OTHER_ADDRESS 0x802c
171 #define ICE_NETWORK_COST 0xc057
173 #define STUN_REQUEST 0x0000
174 #define STUN_INDICATION 0x0010
175 #define STUN_SUCCESS_RESP 0x0100
176 #define STUN_ERR_RESP 0x0110
178 #define STUN_IS_REQUEST(msg_type) (((msg_type) &0x0110) == 0x0000)
179 #define STUN_IS_INDICATION(msg_type) (((msg_type) &0x0110) == 0x0010)
180 #define STUN_IS_SUCCESS_RESP(msg_type) (((msg_type) &0x0110) == 0x0100)
181 #define STUN_IS_ERR_RESP(msg_type) (((msg_type) &0x0110) == 0x0110)
184 #define STUN_METHOD_BINDING 0x0001
185 #define TURN_MEDHOD_ALLOCATE 0x0003
186 #define TURN_METHOD_REFRESH 0x0004
187 #define TURN_METHOD_CREATEPERMISSION 0x0008
188 #define TURN_METHOD_CHANNELBIND 0x0009
192 #define SharedSecretRequestMsg 0x0002
193 #define SharedSecretResponseMsg 0x0102
194 #define SharedSecretErrorResponseMsg 0x0112
196 #define TURN_INDICATION_SEND 0x0006
197 #define TURN_INDICATION_DATA 0x0007
199 #define TURN_DEFAULT_ALLOCATION_LIFETIME 600
200 #define TURN_PERMISSION_LIFETIME 300
201 #define TURN_PERMISSION_LIFETIME_RETRANSMISSION 3
202 #define TURN_CHAN_BINDING_LIFETIME 600
207 uint32_t magic_cookie;
229 char reason[STUN_MAX_STRING];
234 uint16_t attrType[STUN_MAX_UNKNOWN_ATTRIBUTES];
235 uint16_t numAttributes;
239 uint16_t channelNumber;
264 uint32_t fingerprint;
268 char value[STUN_MAX_STRING];
284 typedef enum { HmacUnkown = 0, HmacOK, HmacBadUserName, HmacUnkownUserName, HmacFailed } StunHmacStatus;
287 uint16_t attrType[STUN_MAX_UNKNOWN_ATTRIBUTES];
288 uint16_t numAttributes;
307 uint16_t networkcost;
313 bool_t hasMappedAddress;
316 bool_t hasResponseAddress;
319 bool_t hasChangeRequest;
322 bool_t hasSourceAddress;
325 bool_t hasChangedAddress;
334 bool_t hasMessageIntegrity;
340 bool_t hasUnknownAttributes;
343 bool_t hasReflectedFrom;
352 bool_t hasXorMappedAddress;
358 bool_t hasXorPeerAddress;
361 bool_t hasXorRelayedAddress;
364 bool_t hasFingerprint;
368 bool_t hasChannelNumberAttributes;
371 bool_t hasLifetimeAttributes;
377 bool_t hasRequestedTransport;
380 bool_t hasDontFragment;
382 bool_t hasReservationToken;
388 bool_t hasUseCandidate;
390 bool_t hasIceControlled;
393 bool_t hasIceControlling;
396 bool_t hasResponseOrigin;
399 bool_t hasOtherAddress;
405 bool_t hasRequestAddressFamily;
408 bool_t hasNetworkCost;
413 typedef enum { StunTypeUnknown = 0, StunTypeOpen, StunTypeConeNat, StunTypeRestrictedNat, StunTypePortRestrictedNat, StunTypeSymNat, StunTypeSymFirewall, StunTypeBlocked, StunTypeFailure } NatType;
415 #define MAX_MEDIA_RELAYS 500
416 #define MAX_RTP_MSG_SIZE 1500
417 #define MEDIA_RELAY_TIMEOUT 3 * 60
437 void stunCalculateIntegrity_longterm(
char* hmac,
const char* input,
int length,
const char* username,
const char* realm,
const char* password);
438 void stunCalculateIntegrity_shortterm(
char* hmac,
const char* input,
int length,
const char* key);
439 uint32_t stunCalculateFingerprint(
const char* input,
int length);
441 bool_t stunParseMessage(
char* buf,
unsigned int bufLen,
StunMessage* message);
443 void stunBuildReqSimple(
StunMessage* msg,
const StunAtrString* username, bool_t changePort, bool_t changeIp,
unsigned int id);
445 unsigned int stunEncodeMessage(
const StunMessage* message,
char* buf,
unsigned int bufLen,
const StunAtrString* password);
447 uint64_t stunGetSystemTimeSecs(
void);
449 NatType stunNatType(
StunIPAddress* dest, bool_t* preservePort,
Definition: stun_udp.h:95
Definition: stun_udp.h:103