|
|
|
|
@ -20,6 +20,8 @@
|
|
|
|
|
#define STUN_XOR_MAPPED_ADDRESS 0x0020
|
|
|
|
|
#define STUN_FINGERPRINT 0x8028
|
|
|
|
|
|
|
|
|
|
#define STUN_CLASS_REQUEST 0x00
|
|
|
|
|
#define STUN_CLASS_INDICATION 0x01
|
|
|
|
|
#define STUN_BINDING_SUCCESS_RESPONSE 0x0101
|
|
|
|
|
#define STUN_BINDING_ERROR_RESPONSE 0x0111
|
|
|
|
|
|
|
|
|
|
@ -401,6 +403,8 @@ int stun(str *b, struct streamrelay *sr, struct sockaddr_in6 *sin) {
|
|
|
|
|
method = (method & 0xf) | ((method & 0xe0) >> 1) | ((method & 0x3e00) >> 2);
|
|
|
|
|
if (method != 0x1) /* binding */
|
|
|
|
|
return -1;
|
|
|
|
|
if (class == STUN_CLASS_INDICATION)
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
attr_str.s = &b->s[20];
|
|
|
|
|
attr_str.len = b->len - 20;
|
|
|
|
|
@ -413,8 +417,8 @@ int stun(str *b, struct streamrelay *sr, struct sockaddr_in6 *sin) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (class != 0x0)
|
|
|
|
|
return -1; /* XXX ? */
|
|
|
|
|
if (class != STUN_CLASS_REQUEST)
|
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
|
|
/* request */
|
|
|
|
|
if (!attrs.username.s || !attrs.msg_integrity.s || !attrs.fingerprint_attr)
|
|
|
|
|
|