|
|
|
@ -22,8 +22,20 @@
|
|
|
|
|
|
|
|
|
|
#define STUN_CLASS_REQUEST 0x00
|
|
|
|
|
#define STUN_CLASS_INDICATION 0x01
|
|
|
|
|
#define STUN_BINDING_SUCCESS_RESPONSE 0x0101
|
|
|
|
|
#define STUN_BINDING_ERROR_RESPONSE 0x0111
|
|
|
|
|
#define STUN_CLASS_SUCCESS 0x02
|
|
|
|
|
#define STUN_CLASS_ERROR 0x03
|
|
|
|
|
|
|
|
|
|
#define STUN_METHOD_BINDING 0x01
|
|
|
|
|
|
|
|
|
|
#define STUN_MESSAGE_TYPE(method, class) \
|
|
|
|
|
(((method) & 0xf) | (((method) & 0x70) << 1) \
|
|
|
|
|
| (((method) & 0x0f80) << 2) | (((class) & 0x1) << 4) \
|
|
|
|
|
| (((class) & 0x2) << 7))
|
|
|
|
|
|
|
|
|
|
#define STUN_BINDING_SUCCESS_RESPONSE \
|
|
|
|
|
STUN_MESSAGE_TYPE(STUN_METHOD_BINDING, STUN_CLASS_SUCCESS)
|
|
|
|
|
#define STUN_BINDING_ERROR_RESPONSE \
|
|
|
|
|
STUN_MESSAGE_TYPE(STUN_METHOD_BINDING, STUN_CLASS_ERROR)
|
|
|
|
|
|
|
|
|
|
#define UNKNOWNS_COUNT 16
|
|
|
|
|
|
|
|
|
@ -401,7 +413,7 @@ int stun(str *b, struct streamrelay *sr, struct sockaddr_in6 *sin) {
|
|
|
|
|
class = method = ntohs(req->msg_type);
|
|
|
|
|
class = ((class & 0x10) >> 4) | ((class & 0x100) >> 7);
|
|
|
|
|
method = (method & 0xf) | ((method & 0xe0) >> 1) | ((method & 0x3e00) >> 2);
|
|
|
|
|
if (method != 0x1) /* binding */
|
|
|
|
|
if (method != STUN_METHOD_BINDING)
|
|
|
|
|
return -1;
|
|
|
|
|
if (class == STUN_CLASS_INDICATION)
|
|
|
|
|
return 0;
|
|
|
|
|