- improved nat handling
authorMatthias Wachs <wachs@net.in.tum.de>
Mon, 27 Feb 2012 15:23:32 +0000 (15:23 +0000)
committerMatthias Wachs <wachs@net.in.tum.de>
Mon, 27 Feb 2012 15:23:32 +0000 (15:23 +0000)
src/transport/plugin_transport_udp.c

index 6f190de20aa94d77359e17dd7e2fe828ed2cc3c8..7141563a2353ef0d04de76f6c10c5c07e7c4186e 100644 (file)
@@ -762,6 +762,8 @@ udp_plugin_get_session (void *cls,
 {
   struct Session * s = NULL;
   struct Plugin * plugin = cls;
+  struct IPv6UdpAddress * udp_a6;
+  struct IPv4UdpAddress * udp_a4;
 
   GNUNET_assert (plugin != NULL);
   GNUNET_assert (address != NULL);
@@ -775,14 +777,23 @@ udp_plugin_get_session (void *cls,
     return NULL;
   }
 
-  if ((address->address_length == sizeof (struct IPv4UdpAddress)) &&
-      (plugin->sockv4 == NULL))
-    return NULL;
-
-  if ((address->address_length == sizeof (struct IPv6UdpAddress)) &&
-      (plugin->sockv6 == NULL))
-    return NULL;
+  if (address->address_length == sizeof (struct IPv4UdpAddress))
+  {
+    if (plugin->sockv4 == NULL)
+      return NULL;
+    udp_a4 = (struct IPv4UdpAddress *) address->address;
+    if (udp_a4->u4_port == 0)
+      return NULL;
+  }
 
+  if (address->address_length == sizeof (struct IPv6UdpAddress))
+  {
+    if (plugin->sockv6 == NULL)
+      return NULL;
+    udp_a6 = (struct IPv6UdpAddress *) address->address;
+    if (udp_a6->u6_port == 0)
+      return NULL;
+  }
 
   /* check if session already exists */
   struct SessionCompareContext cctx;