gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r27133 - gnunet/src/transport
Date: Tue, 14 May 2013 17:50:59 +0200

Author: wachs
Date: 2013-05-14 17:50:59 +0200 (Tue, 14 May 2013)
New Revision: 27133

Modified:
   gnunet/src/transport/plugin_transport_udp.c
   gnunet/src/transport/test_transport_api_udp_peer1.conf
   gnunet/src/transport/test_transport_api_udp_peer2.conf
Log:
fixing udp bindto


Modified: gnunet/src/transport/plugin_transport_udp.c
===================================================================
--- gnunet/src/transport/plugin_transport_udp.c 2013-05-14 15:44:03 UTC (rev 
27132)
+++ gnunet/src/transport/plugin_transport_udp.c 2013-05-14 15:50:59 UTC (rev 
27133)
@@ -2660,10 +2660,12 @@
 
 
 static int
-setup_sockets (struct Plugin *plugin, struct sockaddr_in6 *serverAddrv6, 
struct sockaddr_in *serverAddrv4)
+setup_sockets (struct Plugin *plugin, struct sockaddr_in6 *bind_v6, struct 
sockaddr_in *bind_v4)
 {
   int tries;
   int sockets_created = 0;
+  struct sockaddr_in6 serverAddrv6;
+  struct sockaddr_in serverAddrv4;
   struct sockaddr *serverAddr;
   struct sockaddr *addrs[2];
   socklen_t addrlens[2];
@@ -2681,24 +2683,27 @@
     else
     {
 #if HAVE_SOCKADDR_IN_SIN_LEN
-      serverAddrv6->sin6_len = sizeof (struct sockaddr_in6);
+      serverAddrv6.sin6_len = sizeof (struct sockaddr_in6);
 #endif
-      serverAddrv6->sin6_family = AF_INET6;
-      serverAddrv6->sin6_addr = in6addr_any;
-      serverAddrv6->sin6_port = htons (plugin->port);
+      serverAddrv6.sin6_family = AF_INET6;
+      if (NULL != bind_v6)
+       serverAddrv6.sin6_addr = bind_v6->sin6_addr;
+      else
+       serverAddrv6.sin6_addr = in6addr_any;
+      serverAddrv6.sin6_port = htons (plugin->port);
       addrlen = sizeof (struct sockaddr_in6);
-      serverAddr = (struct sockaddr *) serverAddrv6;
-      LOG (GNUNET_ERROR_TYPE_DEBUG, "Binding to IPv6 port %d\n",
-           ntohs (serverAddrv6->sin6_port));
+      serverAddr = (struct sockaddr *) &serverAddrv6;
+      LOG (GNUNET_ERROR_TYPE_INFO, "Binding to IPv6 `%s'\n",
+           GNUNET_a2s (serverAddr, addrlen));
       tries = 0;
       while (GNUNET_OK != GNUNET_NETWORK_socket_bind (plugin->sockv6,
-                                                                               
                                                (struct sockaddr *) 
serverAddrv6,
+                                                                               
                                                (struct sockaddr *) 
&serverAddrv6,
                                                                                
                                                addrlen))
       {
-        serverAddrv6->sin6_port = htons (GNUNET_CRYPTO_random_u32 
(GNUNET_CRYPTO_QUALITY_STRONG, 33537) + 32000);        /* Find a good, non-root 
port */
+        serverAddrv6.sin6_port = htons (GNUNET_CRYPTO_random_u32 
(GNUNET_CRYPTO_QUALITY_STRONG, 33537) + 32000);        /* Find a good, non-root 
port */
         LOG (GNUNET_ERROR_TYPE_DEBUG,
              "IPv6 Binding failed, trying new port %d\n",
-             ntohs (serverAddrv6->sin6_port));
+             ntohs (serverAddrv6.sin6_port));
         tries++;
         if (tries > 10)
         {
@@ -2711,8 +2716,8 @@
       {
         LOG (GNUNET_ERROR_TYPE_DEBUG,
              "IPv6 socket created on port %d\n",
-             ntohs (serverAddrv6->sin6_port));
-        addrs[sockets_created] = (struct sockaddr *) serverAddrv6;
+             ntohs (serverAddrv6.sin6_port));
+        addrs[sockets_created] = (struct sockaddr *) &serverAddrv6;
         addrlens[sockets_created] = sizeof (struct sockaddr_in6);
         sockets_created++;
       }
@@ -2728,23 +2733,26 @@
   else
   {
 #if HAVE_SOCKADDR_IN_SIN_LEN
-    serverAddrv4->sin_len = sizeof (struct sockaddr_in);
+    serverAddrv4.sin_len = sizeof (struct sockaddr_in);
 #endif
-    serverAddrv4->sin_family = AF_INET;
-    serverAddrv4->sin_addr.s_addr = INADDR_ANY;
-    serverAddrv4->sin_port = htons (plugin->port);
+    serverAddrv4.sin_family = AF_INET;
+    if (NULL != bind_v4)
+       serverAddrv4.sin_addr = bind_v4->sin_addr;
+    else
+       serverAddrv4.sin_addr.s_addr = INADDR_ANY;
+    serverAddrv4.sin_port = htons (plugin->port);
     addrlen = sizeof (struct sockaddr_in);
-    serverAddr = (struct sockaddr *) serverAddrv4;
+    serverAddr = (struct sockaddr *) &serverAddrv4;
 
-    LOG (GNUNET_ERROR_TYPE_DEBUG, "Binding to IPv4 port %d\n",
-         ntohs (serverAddrv4->sin_port));
+    LOG (GNUNET_ERROR_TYPE_INFO, "Binding to IPv4 %s\n",
+         GNUNET_a2s (serverAddr, addrlen));
     tries = 0;
     while (GNUNET_NETWORK_socket_bind (plugin->sockv4, serverAddr, addrlen) !=
            GNUNET_OK)
     {
-      serverAddrv4->sin_port = htons (GNUNET_CRYPTO_random_u32 
(GNUNET_CRYPTO_QUALITY_STRONG, 33537) + 32000);   /* Find a good, non-root port 
*/
+      serverAddrv4.sin_port = htons (GNUNET_CRYPTO_random_u32 
(GNUNET_CRYPTO_QUALITY_STRONG, 33537) + 32000);   /* Find a good, non-root port 
*/
       LOG (GNUNET_ERROR_TYPE_DEBUG, "IPv4 Binding failed, trying new port 
%d\n",
-           ntohs (serverAddrv4->sin_port));
+           ntohs (serverAddrv4.sin_port));
       tries++;
       if (tries > 10)
       {
@@ -2755,7 +2763,7 @@
     }
     if (plugin->sockv4 != NULL)
     {
-      addrs[sockets_created] = (struct sockaddr *) serverAddrv4;
+      addrs[sockets_created] = (struct sockaddr *) &serverAddrv4;
       addrlens[sockets_created] = sizeof (struct sockaddr_in);
       sockets_created++;
     }
@@ -2822,6 +2830,8 @@
   struct sockaddr_in serverAddrv4;
   struct sockaddr_in6 serverAddrv6;
   int res;
+  int have_bind4;
+  int have_bind6;
 
   if (NULL == env->receive)
   {
@@ -2865,9 +2875,8 @@
     enable_v6 = GNUNET_YES;
 
   /* Addresses */
-  memset (&serverAddrv6, 0, sizeof (serverAddrv6));
+  have_bind4 = GNUNET_NO;
   memset (&serverAddrv4, 0, sizeof (serverAddrv4));
-
   if (GNUNET_YES ==
       GNUNET_CONFIGURATION_get_value_string (env->cfg, "transport-udp",
                                              "BINDTO", &bind4_address))
@@ -2880,8 +2889,10 @@
       MEMDEBUG_free (bind4_address, __LINE__);
       return NULL;
     }
+    have_bind4 = GNUNET_YES;
   }
-
+  have_bind6 = GNUNET_NO;
+  memset (&serverAddrv6, 0, sizeof (serverAddrv6));
   if (GNUNET_YES ==
       GNUNET_CONFIGURATION_get_value_string (env->cfg, "transport-udp",
                                              "BINDTO6", &bind6_address))
@@ -2898,6 +2909,7 @@
       MEMDEBUG_free (bind6_address, __LINE__);
       return NULL;
     }
+    have_bind6 = GNUNET_YES;
   }
 
   /* Enable neighbour discovery */
@@ -2955,7 +2967,8 @@
   api->send = &udp_plugin_send;
 
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Setting up sockets\n");
-  res = setup_sockets (p, &serverAddrv6, &serverAddrv4);
+  res = setup_sockets (p, (GNUNET_YES == have_bind6) ? &serverAddrv6 : NULL,
+                                                                               
                (GNUNET_YES == have_bind4) ? &serverAddrv4 : NULL);
   if ((res == 0) || ((p->sockv4 == NULL) && (p->sockv6 == NULL)))
   {
     LOG (GNUNET_ERROR_TYPE_ERROR, "Failed to create network sockets, plugin 
failed\n");

Modified: gnunet/src/transport/test_transport_api_udp_peer1.conf
===================================================================
--- gnunet/src/transport/test_transport_api_udp_peer1.conf      2013-05-14 
15:44:03 UTC (rev 27132)
+++ gnunet/src/transport/test_transport_api_udp_peer1.conf      2013-05-14 
15:50:59 UTC (rev 27133)
@@ -7,6 +7,8 @@
 BROADCAST = NO
 BROADCAST_INTERVAL = 30000
 MAX_BPS = 50000000
+BINDTO = 127.0.0.1
+BINDTO6 = ::1
 
 [arm]
 PORT = 12045

Modified: gnunet/src/transport/test_transport_api_udp_peer2.conf
===================================================================
--- gnunet/src/transport/test_transport_api_udp_peer2.conf      2013-05-14 
15:44:03 UTC (rev 27132)
+++ gnunet/src/transport/test_transport_api_udp_peer2.conf      2013-05-14 
15:50:59 UTC (rev 27133)
@@ -6,6 +6,8 @@
 PORT = 12050
 BROADCAST = NO
 MAX_BPS = 50000000
+BINDTO = 127.0.0.1
+BINDTO6 = ::1
 
 [arm]
 PORT = 12055




reply via email to

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