Add missing include
[oweals/gnunet.git] / src / transport / gnunet-transport.c
index 94e4656e3d5a3da5c3bbecb4850e2618c0dc28df..cbda8ac6eb31c80206b2d53eec3c3d7ecd7e26e2 100644 (file)
@@ -59,6 +59,10 @@ static char *cpid;
  */
 static struct GNUNET_TRANSPORT_Handle *handle;
 
+/**
+ * Configuration handle
+ */
+static struct GNUNET_CONFIGURATION_Handle *cfg;
 
 /**
  * Try_connect handle
@@ -162,8 +166,6 @@ static GNUNET_SCHEDULER_TaskIdentifier end;
 static GNUNET_SCHEDULER_TaskIdentifier op_timeout;
 
 
-static struct GNUNET_CONTAINER_MultiHashMap *peers;
-
 /**
  * Selected level of verbosity.
  */
@@ -251,23 +253,18 @@ shutdown_task (void *cls,
     GNUNET_TRANSPORT_disconnect(handle);
     handle = NULL;
   }
-  if (NULL != peers)
-  {
-    GNUNET_CONTAINER_multihashmap_destroy (peers);
-    peers = NULL;
-  }
   if (benchmark_send)
   {
     duration = GNUNET_TIME_absolute_get_duration (start_time);
     FPRINTF (stdout, _("Transmitted %llu bytes/s (%llu bytes in %s)\n"),
-             1000 * traffic_sent / (1 + duration.rel_value), traffic_sent,
+             1000LL * 1000LL * traffic_sent / (1 + duration.rel_value_us), traffic_sent,
              GNUNET_STRINGS_relative_time_to_string (duration, GNUNET_YES));
   }
   if (benchmark_receive)
   {
     duration = GNUNET_TIME_absolute_get_duration (start_time);
     FPRINTF (stdout, _("Received %llu bytes/s (%llu bytes in %s)\n"),
-             1000 * traffic_received / (1 + duration.rel_value),
+             1000LL * 1000LL * traffic_received / (1 + duration.rel_value_us),
              traffic_received,
              GNUNET_STRINGS_relative_time_to_string (duration, GNUNET_YES));
   }
@@ -296,7 +293,7 @@ operation_timeout (void *cls,
   if ((try_connect) || (benchmark_send) ||
                (benchmark_receive))
   {
-      FPRINTF (stdout, _("Failed to connect to `%s'\n"), GNUNET_h2s_full (&pid.hashPubKey));
+      FPRINTF (stdout, _("Failed to connect to `%s'\n"), GNUNET_i2s_full (&pid));
       if (GNUNET_SCHEDULER_NO_TASK != end)
         GNUNET_SCHEDULER_cancel (end);
       end = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
@@ -318,7 +315,7 @@ operation_timeout (void *cls,
                                GNUNET_free (cur);
 
                }
-               FPRINTF (stdout, _("Failed to list connections, timeout occured\n"));
+               FPRINTF (stdout, "%s", _("Failed to list connections, timeout occured\n"));
       if (GNUNET_SCHEDULER_NO_TASK != end)
         GNUNET_SCHEDULER_cancel (end);
       end = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
@@ -511,12 +508,9 @@ transmit_data (void *cls, size_t size, void *buf)
  *
  * @param cls closure
  * @param peer the peer that connected
- * @param ats performance data
- * @param ats_count number of entries in ats (excluding 0-termination)
  */
 static void
-notify_connect (void *cls, const struct GNUNET_PeerIdentity *peer,
-                const struct GNUNET_ATS_Information *ats, uint32_t ats_count)
+notify_connect (void *cls, const struct GNUNET_PeerIdentity *peer)
 {
   if (0 != memcmp (&pid, peer, sizeof (struct GNUNET_PeerIdentity)))
     return;
@@ -524,7 +518,9 @@ notify_connect (void *cls, const struct GNUNET_PeerIdentity *peer,
   if (try_connect)
   {
       /* all done, terminate instantly */
-      FPRINTF (stdout, _("Successfully connected to `%s'\n"), GNUNET_h2s_full (&peer->hashPubKey));
+      FPRINTF (stdout,
+              _("Successfully connected to `%s'\n"),
+              GNUNET_i2s_full (peer));
       ret = 0;
 
       if (GNUNET_SCHEDULER_NO_TASK != op_timeout)
@@ -594,12 +590,9 @@ notify_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer)
  *
  * @param cls closure
  * @param peer the peer that connected
- * @param ats performance data
- * @param ats_count number of entries in ats (excluding 0-termination)
  */
 static void
-monitor_notify_connect (void *cls, const struct GNUNET_PeerIdentity *peer,
-                const struct GNUNET_ATS_Information *ats, uint32_t ats_count)
+monitor_notify_connect (void *cls, const struct GNUNET_PeerIdentity *peer)
 {
   monitor_connect_counter ++;
   struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get();
@@ -644,13 +637,10 @@ monitor_notify_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer)
  * @param cls closure
  * @param peer (claimed) identity of the other peer
  * @param message the message
- * @param ats performance data
- * @param ats_count number of entries in ats
  */
 static void
 notify_receive (void *cls, const struct GNUNET_PeerIdentity *peer,
-                const struct GNUNET_MessageHeader *message,
-                const struct GNUNET_ATS_Information *ats, uint32_t ats_count)
+                const struct GNUNET_MessageHeader *message)
 {
   if (benchmark_receive)
   {
@@ -668,6 +658,10 @@ notify_receive (void *cls, const struct GNUNET_PeerIdentity *peer,
 }
 
 
+static void resolve_address (const struct GNUNET_HELLO_Address *address,
+                                                                                                                int numeric);
+
+
 static void
 process_string (void *cls, const char *address)
 {
@@ -685,7 +679,14 @@ process_string (void *cls, const char *address)
     GNUNET_assert (address_resolutions > 0);
     address_resolutions --;
     if (GNUNET_NO == rc->printed)
-      FPRINTF (stdout, _("Peer `%s': %s <unable to resolve address>\n"), GNUNET_i2s (&addrcp->peer), addrcp->transport_name);
+    {
+       if (numeric == GNUNET_NO)
+       {
+               resolve_address (rc->addrcp, GNUNET_YES ); /* Failed to resolve address, try numeric lookup */
+       }
+       else
+       FPRINTF (stdout, _("Peer `%s': %s <unable to resolve address>\n"), GNUNET_i2s (&addrcp->peer), addrcp->transport_name);
+    }
     GNUNET_free (rc->addrcp);
     GNUNET_CONTAINER_DLL_remove (rc_head, rc_tail, rc);
     GNUNET_free (rc);
@@ -705,7 +706,24 @@ process_string (void *cls, const char *address)
         end = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
     }
   }
+}
+
+static void resolve_address (const struct GNUNET_HELLO_Address *address,
+                                                                                                                int numeric)
+{
+  struct ResolutionContext *rc;
 
+  rc = GNUNET_malloc(sizeof (struct ResolutionContext));
+  GNUNET_assert (NULL != rc);
+  GNUNET_CONTAINER_DLL_insert (rc_head, rc_tail, rc);
+  address_resolutions ++;
+
+  rc->addrcp = GNUNET_HELLO_address_copy(address);
+  rc->printed = GNUNET_NO;
+  /* Resolve address to string */
+  rc->asc = GNUNET_TRANSPORT_address_to_string (cfg, address, numeric,
+                                      RESOLUTION_TIMEOUT, &process_string,
+                                      rc);
 }
 
 /**
@@ -719,14 +737,14 @@ static void
 process_address (void *cls, const struct GNUNET_PeerIdentity *peer,
                  const struct GNUNET_HELLO_Address *address)
 {
-  const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
-  struct ResolutionContext *rc;
-
   if (peer == NULL)
   {
     /* done */
     address_resolution_in_progress = GNUNET_NO;
     pic = NULL;
+    if (GNUNET_SCHEDULER_NO_TASK != end)
+      GNUNET_SCHEDULER_cancel (end);
+    end = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
     return;
   }
   if (address == NULL)
@@ -740,18 +758,9 @@ process_address (void *cls, const struct GNUNET_PeerIdentity *peer,
   op_timeout = GNUNET_SCHEDULER_add_delayed (OP_TIMEOUT,
                                              &operation_timeout, NULL);
 
-  rc = GNUNET_malloc(sizeof (struct ResolutionContext));
-  GNUNET_assert (NULL != rc);
-  GNUNET_CONTAINER_DLL_insert (rc_head, rc_tail, rc);
-  address_resolutions ++;
-
-  rc->addrcp = GNUNET_HELLO_address_copy(address);
-  rc->printed = GNUNET_NO;
-  /* Resolve address to string */
-  rc->asc = GNUNET_TRANSPORT_address_to_string (cfg, address, numeric,
-                                      RESOLUTION_TIMEOUT, &process_string,
-                                      rc);
-
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received address for peer `%s': %s\n",
+               GNUNET_i2s (peer), address->transport_name);
+  resolve_address (address, numeric);
 }
 
 void try_connect_cb (void *cls,
@@ -778,24 +787,34 @@ void try_connect_cb (void *cls,
 }
 
 
+/**
+ * Function called with the result of the check if the 'transport'
+ * service is running.
+ *
+ * @param cls closure with our configuration
+ * @param result GNUNET_YES if transport is running
+ */
 static void
 testservice_task (void *cls,
-                  const struct GNUNET_SCHEDULER_TaskContext *tc)
+                  int result)
 {
-  struct GNUNET_CONFIGURATION_Handle *cfg = cls;
   int counter = 0;
   ret = 1;
 
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_TIMEOUT))
+  if (GNUNET_YES != result)
   {
-      FPRINTF (stderr, _("Service `%s' is not running\n"), "transport");
-      return;
+    FPRINTF (stderr,
+            _("Service `%s' is not running\n"), "transport");
+    return;
   }
 
-  if ((NULL != cpid) && (GNUNET_OK != GNUNET_CRYPTO_hash_from_string (cpid, &pid.hashPubKey)))
+  if ( (NULL != cpid) &&
+       (GNUNET_OK != GNUNET_CRYPTO_ecc_public_sign_key_from_string (cpid,
+                                                                   strlen (cpid),
+                                                                   &pid.public_key)))
   {
-      FPRINTF (stderr, _("Failed to parse peer identity `%s'\n"), cpid);
-      return;
+    FPRINTF (stderr, _("Failed to parse peer identity `%s'\n"), cpid);
+    return;
   }
 
   counter = benchmark_send + benchmark_receive + iterate_connections +
@@ -892,7 +911,6 @@ testservice_task (void *cls,
   }
   else if (iterate_connections) /* -i: List all active addresses once */
   {
-    peers = GNUNET_CONTAINER_multihashmap_create (20, GNUNET_NO);
     address_resolution_in_progress = GNUNET_YES;
     pic = GNUNET_TRANSPORT_peer_get_active_addresses (cfg,
                                                 (NULL == cpid) ? NULL : &pid,
@@ -904,7 +922,6 @@ testservice_task (void *cls,
   }
   else if (monitor_connections) /* -m: List all active addresses continously */
   {
-    peers = GNUNET_CONTAINER_multihashmap_create (20, GNUNET_NO);
     address_resolution_in_progress = GNUNET_YES;
     pic = GNUNET_TRANSPORT_peer_get_active_addresses (cfg,
                                                 (NULL == cpid) ? NULL : &pid,
@@ -945,22 +962,22 @@ testservice_task (void *cls,
  * @param cls closure
  * @param args remaining command-line arguments
  * @param cfgfile name of the configuration file used (for saving, can be NULL!)
- * @param cfg configuration
+ * @param mycfg configuration
  */
 static void
 run (void *cls, char *const *args, const char *cfgfile,
-     const struct GNUNET_CONFIGURATION_Handle *cfg)
+     const struct GNUNET_CONFIGURATION_Handle *mycfg)
 {
-  if (test_configuration)
+       cfg = (struct GNUNET_CONFIGURATION_Handle *) mycfg;
+       if (test_configuration)
   {
     do_test_configuration (cfg);
     return;
   }
-
   GNUNET_CLIENT_service_test ("transport", cfg,
-      GNUNET_TIME_UNIT_SECONDS,
-      &testservice_task,
-      (void *) cfg);
+                             GNUNET_TIME_UNIT_SECONDS,
+                             &testservice_task,
+                             (void *) cfg);
 }