summaryrefslogtreecommitdiff
path: root/stun/usages
diff options
context:
space:
mode:
authorYouness Alaoui <youness.alaoui@collabora.co.uk>2014-04-08 03:58:15 -0400
committerOlivier CrĂȘte <olivier.crete@ocrete.ca>2014-05-15 09:43:15 -0400
commit60cf169b05253606fd04a9074cab2c8ad2c5d7a4 (patch)
tree35ab9aabbf91708970450ffe018e996c3e428b91 /stun/usages
parent714c9603ac3cc56c4e4da1c09949dc6fd8316ea2 (diff)
downloadlibnice-60cf169b05253606fd04a9074cab2c8ad2c5d7a4.tar.gz
Add support for MS-TURN in OC2007 compatibility turn usage
Diffstat (limited to 'stun/usages')
-rw-r--r--stun/usages/turn.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/stun/usages/turn.c b/stun/usages/turn.c
index 1297944..554b8e7 100644
--- a/stun/usages/turn.c
+++ b/stun/usages/turn.c
@@ -343,8 +343,7 @@ StunUsageTurnReturn stun_usage_turn_process (StunMessage *msg,
stun_debug (" No MAPPED-ADDRESS: %d\n", val);
return STUN_USAGE_TURN_RETURN_ERROR;
}
- } else if (compatibility == STUN_USAGE_TURN_COMPATIBILITY_MSN ||
- compatibility == STUN_USAGE_TURN_COMPATIBILITY_OC2007) {
+ } else if (compatibility == STUN_USAGE_TURN_COMPATIBILITY_MSN) {
val = stun_message_find_addr (msg,
STUN_ATTRIBUTE_MSN_MAPPED_ADDRESS, addr, addrlen);
@@ -357,6 +356,29 @@ StunUsageTurnReturn stun_usage_turn_process (StunMessage *msg,
stun_debug (" No MAPPED-ADDRESS: %d\n", val);
return STUN_USAGE_TURN_RETURN_ERROR;
}
+ } else if (compatibility == STUN_USAGE_TURN_COMPATIBILITY_OC2007) {
+ union {
+ StunTransactionId id;
+ uint32_t u32[4];
+ } transid;
+ uint32_t magic_cookie;
+
+ stun_message_id (msg, transid.id);
+ magic_cookie = transid.u32[0];
+
+ val = stun_message_find_xor_addr_full (msg,
+ STUN_ATTRIBUTE_MS_XOR_MAPPED_ADDRESS, addr, addrlen,
+ htonl (magic_cookie));
+
+ if (val == STUN_MESSAGE_RETURN_SUCCESS)
+ ret = STUN_USAGE_TURN_RETURN_MAPPED_SUCCESS;
+
+ val = stun_message_find_addr (msg,
+ STUN_ATTRIBUTE_MAPPED_ADDRESS, relay_addr, relay_addrlen);
+ if (val != STUN_MESSAGE_RETURN_SUCCESS) {
+ stun_debug (" No MAPPED-ADDRESS: %d\n", val);
+ return STUN_USAGE_TURN_RETURN_ERROR;
+ }
}
stun_message_find32 (msg, STUN_ATTRIBUTE_LIFETIME, lifetime);