aboutsummaryrefslogtreecommitdiff
path: root/src/nat/nat.c
diff options
context:
space:
mode:
authorMoon <moon@140774ce-b5e7-0310-ab8b-a85725594a96>2009-10-26 11:09:08 +0000
committerMoon <moon@140774ce-b5e7-0310-ab8b-a85725594a96>2009-10-26 11:09:08 +0000
commitb345c3944f70c14f0576c472c9cd55b551797c42 (patch)
treedfca7009ebd87b878a05eaf3f373d028f1b50ae3 /src/nat/nat.c
parentce7d5f88fdbb4094571d436c509d7f42c03ab12a (diff)
downloadgnunet-b345c3944f70c14f0576c472c9cd55b551797c42.tar.gz
gnunet-b345c3944f70c14f0576c472c9cd55b551797c42.zip
fix handling of NULL addr argument
Diffstat (limited to 'src/nat/nat.c')
-rw-r--r--src/nat/nat.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/nat/nat.c b/src/nat/nat.c
index dbe4ef643..c7a1fd858 100644
--- a/src/nat/nat.c
+++ b/src/nat/nat.c
@@ -312,17 +312,25 @@ GNUNET_NAT_register (struct GNUNET_SCHEDULER_Handle *sched,
312 { 312 {
313 GNUNET_assert (addr->sa_family == AF_INET 313 GNUNET_assert (addr->sa_family == AF_INET
314 || addr->sa_family == AF_INET6); 314 || addr->sa_family == AF_INET6);
315 nat->local_addr = GNUNET_malloc (addrlen);
316 memcpy (nat->local_addr, addr, addrlen);
317
315 if (addr->sa_family == AF_INET) 318 if (addr->sa_family == AF_INET)
316 { 319 {
317 nat->public_port = ntohs (((struct sockaddr_in *) addr)->sin_port); 320 nat->public_port = ntohs (((struct sockaddr_in *) addr)->sin_port);
318// ((struct sockaddr_in *) addr)->sin_port = 0; 321 ((struct sockaddr_in *) nat->local_addr)->sin_port = 0;
319 } 322 }
320 else if (addr->sa_family == AF_INET6) 323 else if (addr->sa_family == AF_INET6)
321 { 324 {
322 nat->public_port = ntohs (((struct sockaddr_in6 *) addr)->sin6_port); 325 nat->public_port = ntohs (((struct sockaddr_in6 *) addr)->sin6_port);
323// ((struct sockaddr_in6 *) addr)->sin6_port = 0; 326 ((struct sockaddr_in6 *) nat->local_addr)->sin6_port = 0;
324 } 327 }
325 } 328 }
329 else
330 {
331 nat->local_addr = NULL;
332 nat->public_port = 0;
333 }
326 334
327 nat->should_change = GNUNET_YES; 335 nat->should_change = GNUNET_YES;
328 nat->sched = sched; 336 nat->sched = sched;
@@ -333,8 +341,6 @@ GNUNET_NAT_register (struct GNUNET_SCHEDULER_Handle *sched,
333 nat->callback_cls = callback_cls; 341 nat->callback_cls = callback_cls;
334 nat->ext_addr = NULL; 342 nat->ext_addr = NULL;
335 nat->contact_addr = NULL; 343 nat->contact_addr = NULL;
336 nat->local_addr = GNUNET_malloc (addrlen);
337 memcpy (nat->local_addr, addr, addrlen);
338 nat->natpmp = GNUNET_NAT_NATPMP_init (nat->local_addr, addrlen, nat->public_port); 344 nat->natpmp = GNUNET_NAT_NATPMP_init (nat->local_addr, addrlen, nat->public_port);
339 nat->upnp = GNUNET_NAT_UPNP_init (nat->local_addr, addrlen, nat->public_port); 345 nat->upnp = GNUNET_NAT_UPNP_init (nat->local_addr, addrlen, nat->public_port);
340 346