diff options
author | Youness Alaoui <kakaroto@kakaroto.(none)> | 2008-07-30 23:33:39 -0400 |
---|---|---|
committer | Youness Alaoui <kakaroto@kakaroto.(none)> | 2008-07-30 23:33:39 -0400 |
commit | 1b76e28f777f87b99be4befb8ec2e23cf3de77c4 (patch) | |
tree | 70dc4834cb75da58b586024dc42bdcde90ef47cb /stun/stunmessage.c | |
parent | 77ff1d201da36b8fc03607d7fca25586a225421c (diff) | |
download | libnice-1b76e28f777f87b99be4befb8ec2e23cf3de77c4.tar.gz |
Adding the ability to change the XOR value for the XOR-MAPPED-ADDRESS
Diffstat (limited to 'stun/stunmessage.c')
-rw-r--r-- | stun/stunmessage.c | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/stun/stunmessage.c b/stun/stunmessage.c index 48e817f..289d3b4 100644 --- a/stun/stunmessage.c +++ b/stun/stunmessage.c @@ -266,7 +266,19 @@ stun_message_find_xor_addr (const StunMessage *msg, stun_attr_type_t type, if (val) return val; - return stun_xor_address (msg, addr, *addrlen); + return stun_xor_address (msg, addr, *addrlen, STUN_MAGIC_COOKIE); +} + +int +stun_message_find_xor_addr_full (const StunMessage *msg, stun_attr_type_t type, + struct sockaddr *restrict addr, socklen_t *restrict addrlen, + uint32_t magic_cookie) +{ + int val = stun_message_find_addr (msg, type, addr, addrlen); + if (val) + return val; + + return stun_xor_address (msg, addr, *addrlen, magic_cookie); } int stun_message_find_error (const StunMessage *msg, int *restrict code) @@ -444,7 +456,28 @@ int stun_message_append_xor_addr (StunMessage *msg, stun_attr_type_t type, addrlen = sizeof (xor); memcpy (&xor, addr, addrlen); - val = stun_xor_address (msg, (struct sockaddr *)&xor, addrlen); + val = stun_xor_address (msg, (struct sockaddr *)&xor, addrlen, + STUN_MAGIC_COOKIE); + if (val) + return val; + + return stun_message_append_addr (msg, type, (struct sockaddr *)&xor, + addrlen); +} + +int stun_message_append_xor_addr_full (StunMessage *msg, stun_attr_type_t type, + const struct sockaddr *restrict addr, socklen_t addrlen, + uint32_t magic_cookie) +{ + int val; + /* Must be big enough to hold any supported address: */ + struct sockaddr_storage xor; + + if (addrlen > sizeof (xor)) + addrlen = sizeof (xor); + memcpy (&xor, addr, addrlen); + + val = stun_xor_address (msg, (struct sockaddr *)&xor, addrlen, magic_cookie); if (val) return val; |