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_message(stun_msg_t *msg, stun_buffer_t *pwd)
Send a STUN message.
Definition: stun_common.c:685
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
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
char * stun_determine_ip_address(int family)
Determines and returns local IP address.
Definition: stun_common.c:788
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