gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r20863 - gnunet/src/transport
Date: Mon, 2 Apr 2012 16:46:10 +0200

Author: wachs
Date: 2012-04-02 16:46:10 +0200 (Mon, 02 Apr 2012)
New Revision: 20863

Modified:
   gnunet/src/transport/gnunet-transport.c
Log:
- "fixing" mantis 0002211


Modified: gnunet/src/transport/gnunet-transport.c
===================================================================
--- gnunet/src/transport/gnunet-transport.c     2012-04-02 14:45:38 UTC (rev 
20862)
+++ gnunet/src/transport/gnunet-transport.c     2012-04-02 14:46:10 UTC (rev 
20863)
@@ -40,6 +40,7 @@
  * Should match NAT_SERVER_TIMEOUT in 'nat_test.c'.
  */
 #define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30)
+#define RESOLUTION_TIMEOUT GNUNET_TIME_relative_multiply 
(GNUNET_TIME_UNIT_SECONDS, 10)
 
 /**
  * Which peer should we connect to?
@@ -122,6 +123,8 @@
  */
 static GNUNET_SCHEDULER_TaskIdentifier end;
 
+static struct GNUNET_CONTAINER_MultiHashMap *peers;
+
 /**
  * Selected level of verbosity.
  */
@@ -444,19 +447,31 @@
   traffic_received += ntohs (message->size);
 }
 
+struct ResolutionContext
+{
+  struct GNUNET_HELLO_Address *addrcp;
+
+  int printed;
+};
+
 void
 process_string (void *cls, const char *address)
 {
-  struct GNUNET_HELLO_Address *addrcp = cls;
+  struct ResolutionContext *rc = cls;
+  struct GNUNET_HELLO_Address *addrcp = rc->addrcp;
 
-  if ((address != NULL))
+  if (address != NULL)
   {
     FPRINTF (stdout, _("Peer `%s': %s %s\n"), GNUNET_i2s (&addrcp->peer), 
addrcp->transport_name, address);
+    rc->printed = GNUNET_YES;
   }
   else
   {
     /* done */
-    GNUNET_free (addrcp);
+    if (GNUNET_NO == rc->printed)
+      FPRINTF (stdout, _("Peer `%s': %s <unable to resolve address>\n"), 
GNUNET_i2s (&addrcp->peer), addrcp->transport_name);
+    GNUNET_free (rc->addrcp);
+    GNUNET_free (rc);
   }
 }
 
@@ -472,6 +487,7 @@
                  const struct GNUNET_HELLO_Address *address)
 {
   const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
+  struct ResolutionContext *rc;
 
   if (peer == NULL)
   {
@@ -485,10 +501,16 @@
     return;
   }
 
+  rc = GNUNET_malloc(sizeof (struct ResolutionContext));
+  rc->addrcp = GNUNET_HELLO_address_copy(address);
+  rc->printed = GNUNET_NO;
+
+  GNUNET_assert (NULL != rc);
+
   /* Resolve address to string */
   GNUNET_TRANSPORT_address_to_string (cfg, address, numeric,
-                                      GNUNET_TIME_UNIT_MINUTES, 
&process_string,
-                                      GNUNET_HELLO_address_copy(address));
+                                      RESOLUTION_TIMEOUT, &process_string,
+                                      rc);
 }
 
 
@@ -505,7 +527,13 @@
 {
   struct GNUNET_TRANSPORT_PeerIterateContext *pic = cls;
 
-  GNUNET_TRANSPORT_peer_get_active_addresses_cancel (pic);  
+  GNUNET_TRANSPORT_peer_get_active_addresses_cancel (pic);
+
+  if (NULL != peers)
+  {
+    GNUNET_CONTAINER_multihashmap_destroy (peers);
+    peers = NULL;
+  }
 }
 
 
@@ -562,8 +590,9 @@
   }
   if (iterate_connections)
   {
+    peers = GNUNET_CONTAINER_multihashmap_create (20);
     GNUNET_TRANSPORT_peer_get_active_addresses (cfg, NULL, GNUNET_YES,
-                                                GNUNET_TIME_UNIT_MINUTES,
+                                                TIMEOUT,
                                                 &process_address, (void *) 
cfg);
   }
   if (monitor_connections)




reply via email to

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