44 #define BINDING_REQUEST 0x0001
45 #define BINDING_RESPONSE 0x0101
46 #define BINDING_ERROR_RESPONSE 0x0111
47 #define SHARED_SECRET_REQUEST 0x0002
48 #define SHARED_SECRET_RESPONSE 0x0102
49 #define SHARED_SECRET_ERROR_RESPONSE 0x0112
52 #define MAPPED_ADDRESS 0x0001
53 #define RESPONSE_ADDRESS 0x0002
54 #define CHANGE_REQUEST 0x0003
55 #define SOURCE_ADDRESS 0x0004
56 #define CHANGED_ADDRESS 0x0005
57 #define USERNAME 0x0006
58 #define PASSWORD 0x0007
59 #define MESSAGE_INTEGRITY 0x0008
60 #define ERROR_CODE 0x0009
61 #define UNKNOWN_ATTRIBUTES 0x000a
62 #define REFLECTED_FROM 0x000b
63 #define STUN_A_REALM 0x0014
64 #define STUN_A_NONCE 0x0015
65 #define STUN_A_XOR_MAPPED_ADDRESS 0x0020
66 #define STUN_A_FINGERPRINT 0x0023
67 #define STUN_A_SERVER 0x8022
68 #define STUN_A_ALTERNATE_SERVER 0x8023
69 #define STUN_A_REFRESH_INTERVAL 0x8024
72 #define STUN_A_LAST_MANDATORY 0x0023
75 #define STUN_A_OPTIONAL 0x7fff
78 #define STUN_A_ALTERNATE_SERVER_DEP 0x000e
79 #define STUN_A_BUGGYSERVER_XORONLY 0x0021
80 #define STUN_A_BUGGYSERVER_SERVER 0x0022
81 #define LARGEST_ATTRIBUTE STUN_A_LAST_MANDATORY
82 #define OPTIONAL_ATTRIBUTE STUN_A_OPTIONAL
85 #define STUN_400_BAD_REQUEST 400
86 #define STUN_401_UNAUTHORIZED 401
87 #define STUN_420_UNKNOWN_ATTRIBUTE 420
88 #define STUN_430_STALE_CREDENTIALS 430
89 #define STUN_431_INTEGRITY_CHECK_FAILURE 431
90 #define STUN_432_MISSING_USERNAME 432
91 #define STUN_433_USE_TLS 433
92 #define STUN_500_SERVER_ERROR 500
93 #define STUN_600_GLOBAL_FAILURE 600
96 #define STUN_CR_CHANGE_IP 0x0004
97 #define STUN_CR_CHANGE_PORT 0x0002
100 #define STUN_EC_CLASS 0x0070
101 #define STUN_EC_NUM 0x000F
103 #define RAND_MAX_16 65535
105 #define STUN_TID_BYTES 16
108 #define STUN_MAX_RETRX 5
109 #define STUN_MAX_RETRX_INT 1600
111 #define STUN_DEFAULT_PORT 3478
128 struct stun_buffer_s {
133 typedef struct stun_buffer_s stun_buffer_t;
141 typedef struct stun_attr_s {
144 stun_buffer_t enc_buf;
145 struct stun_attr_s *next;
150 stun_attr_t *stun_attr;
151 stun_buffer_t enc_buf;
162 typedef struct sockaddr_in stun_attr_sockaddr_t;
165 typedef struct stun_attr_uint32_s {
167 } stun_attr_uint32_t;
169 typedef stun_attr_uint32_t stun_attr_changerequest_t;
175 } stun_attr_errorcode_t;
182 typedef stun_buffer_t stun_attr_username_t;
185 typedef stun_buffer_t stun_attr_password_t;
188 typedef struct stun_attr_unknownattributes_s{
190 struct stun_attr_unknownattributes_s *next;
191 } stun_attr_unknownattributes_t;
194 int stun_parse_message(stun_msg_t *msg);
195 int stun_parse_attribute(stun_msg_t *msg,
unsigned char *p,
size_t left_len);
196 int stun_parse_attr_address(stun_attr_t *attr,
const unsigned char *p,
unsigned len);
197 int stun_parse_attr_error_code(stun_attr_t *attr,
const unsigned char *p,
unsigned len);
198 int stun_parse_attr_unknown_attributes(stun_attr_t *attr,
const unsigned char *p,
unsigned len);
199 int stun_parse_attr_uint32(stun_attr_t *attr,
const unsigned char *p,
unsigned len);
200 int stun_parse_attr_buffer(stun_attr_t *attr,
const unsigned char *p,
unsigned len);
205 int stun_encode_uint32(stun_attr_t *attr);
206 int stun_encode_buffer(stun_attr_t *attr);
207 int stun_encode_error_code(stun_attr_t *attr);
208 int stun_encode_message_integrity(stun_attr_t *attr,
unsigned char *buf,
int len, stun_buffer_t *pwd);
210 int stun_encode_response_address(stun_attr_t *attr);
214 int stun_copy_buffer(stun_buffer_t *p, stun_buffer_t *p2);
215 void stun_init_buffer(stun_buffer_t *p);
216 int stun_free_buffer(stun_buffer_t *p);
217 int stun_free_message(stun_msg_t *msg);
219 int stun_init_message(stun_msg_t *msg);
223 char const *stun_response_phrase(
int status);
224 void debug_print(stun_buffer_t *buf);
225 char const *stun_attr_phrase(
uint16_t type);
int stun_encode_type_len(stun_attr_t *attr, uint16_t len)
this function allocates the enc_buf, fills in type, length
Definition: stun_common.c:500
int stun_encode_address(stun_attr_t *attr)
The set of functions encodes the corresponding attribute to network format, and save the result to th...
Definition: stun_common.c:377
stun_attr_t * stun_get_attr(stun_attr_t *attr, uint16_t attr_type)
scan thru attribute list and return the next requested attr
Definition: stun_common.c:313
char * stun_determine_ip_address(int family)
Determines and returns local IP address.
Definition: stun_common.c:788
int stun_encode_message(stun_msg_t *msg, stun_buffer_t *pwd)
Send a STUN message.
Definition: stun_common.c:685
int stun_validate_message_integrity(stun_msg_t *msg, stun_buffer_t *pwd)
Validate the message integrity based on given STUN password 'pwd'.
Definition: stun_common.c:521