summaryrefslogtreecommitdiff
path: root/stun/stunmessage.c
diff options
context:
space:
mode:
authorYouness Alaoui <kakaroto@kakaroto.(none)>2008-07-30 23:33:39 -0400
committerYouness Alaoui <kakaroto@kakaroto.(none)>2008-07-30 23:33:39 -0400
commit1b76e28f777f87b99be4befb8ec2e23cf3de77c4 (patch)
tree70dc4834cb75da58b586024dc42bdcde90ef47cb /stun/stunmessage.c
parent77ff1d201da36b8fc03607d7fca25586a225421c (diff)
downloadlibnice-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.c37
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;