diff options
author | Youness Alaoui <youness.alaoui@collabora.co.uk> | 2014-04-08 03:58:15 -0400 |
---|---|---|
committer | Olivier CrĂȘte <olivier.crete@ocrete.ca> | 2014-05-15 09:43:15 -0400 |
commit | 60cf169b05253606fd04a9074cab2c8ad2c5d7a4 (patch) | |
tree | 35ab9aabbf91708970450ffe018e996c3e428b91 /stun/usages | |
parent | 714c9603ac3cc56c4e4da1c09949dc6fd8316ea2 (diff) | |
download | libnice-60cf169b05253606fd04a9074cab2c8ad2c5d7a4.tar.gz |
Add support for MS-TURN in OC2007 compatibility turn usage
Diffstat (limited to 'stun/usages')
-rw-r--r-- | stun/usages/turn.c | 26 |
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); |