gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r18166 - gnunet/src/transport


From: gnunet
Subject: [GNUnet-SVN] r18166 - gnunet/src/transport
Date: Tue, 15 Nov 2011 18:33:15 +0100

Author: wachs
Date: 2011-11-15 18:33:15 +0100 (Tue, 15 Nov 2011)
New Revision: 18166

Modified:
   gnunet/src/transport/plugin_transport_http.c
Log:
check for natted peer address


Modified: gnunet/src/transport/plugin_transport_http.c
===================================================================
--- gnunet/src/transport/plugin_transport_http.c        2011-11-15 17:19:28 UTC 
(rev 18165)
+++ gnunet/src/transport/plugin_transport_http.c        2011-11-15 17:33:15 UTC 
(rev 18166)
@@ -534,6 +534,7 @@
     GNUNET_assert ((addrlen == sizeof (struct IPv4HttpAddress)) ||
                    (addrlen == sizeof (struct IPv6HttpAddress)));
 
+
   /* look for existing connection */
   s = lookup_session (plugin, target, session, addr, addrlen, 1);
 #if DEBUG_HTTP
@@ -561,13 +562,36 @@
                      "Initiiating new connection to peer `%s'\n",
                      GNUNET_i2s (target));
 #endif
-    s = create_session (plugin, target, addr, addrlen, cont, cont_cls);
-    GNUNET_CONTAINER_DLL_insert (plugin->head, plugin->tail, s);
-    // initiate new connection
-    if (GNUNET_SYSERR == (res = client_connect (s)))
+    int res = GNUNET_OK;
+
+    if (addrlen == sizeof (struct IPv4HttpAddress))
     {
-      GNUNET_CONTAINER_DLL_remove (plugin->head, plugin->tail, s);
-      delete_session (s);
+      struct IPv4HttpAddress * a4 = (struct IPv4HttpAddress *) addr;
+      if (ntohs(a4->u4_port) == 0)
+          res = GNUNET_SYSERR;
+    }
+    if (addrlen == sizeof (struct IPv6HttpAddress))
+    {
+      struct IPv6HttpAddress * a6 = (struct IPv6HttpAddress *) addr;
+      if (ntohs(a6->u6_port) == 0)
+          res = GNUNET_SYSERR;
+    }
+    if (res == GNUNET_OK)
+    {
+      s = create_session (plugin, target, addr, addrlen, cont, cont_cls);
+      GNUNET_CONTAINER_DLL_insert (plugin->head, plugin->tail, s);
+      // initiate new connection
+      res = client_connect (s);
+    }
+    if (res == GNUNET_SYSERR)
+    {
+      if (s != NULL)
+      {
+        GNUNET_CONTAINER_DLL_remove (plugin->head, plugin->tail, s);
+        delete_session (s);
+      }
+      if (cont != NULL)
+        cont (cont_cls, target, GNUNET_SYSERR);
       return GNUNET_SYSERR;
     }
   }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]