temporary hack for gnunet-arm. given enough time processes seem to go away, so give...
[oweals/gnunet.git] / src / peerinfo-tool / gnunet-peerinfo.c
index 63c5cc0086fcdc75c72777f455810d75f4a39df4..a3fa98fa9267269b8f905bdb5280750f5f1c44f4 100644 (file)
@@ -39,6 +39,8 @@ static int get_self;
 
 static struct GNUNET_SCHEDULER_Handle *sched;
 
+static struct GNUNET_PEERINFO_Handle *peerinfo;
+
 static const struct GNUNET_CONFIGURATION_Handle *cfg;
 
 struct PrintContext
@@ -114,7 +116,7 @@ static int
 count_address (void *cls,
               const char *tname,
               struct GNUNET_TIME_Absolute expiration,
-              const void *addr, size_t addrlen)
+              const void *addr, uint16_t addrlen)
 {
   struct PrintContext *pc = cls;
   pc->off++;
@@ -136,7 +138,7 @@ static int
 print_address (void *cls,
               const char *tname,
               struct GNUNET_TIME_Absolute expiration,
-              const void *addr, size_t addrlen)
+              const void *addr, uint16_t addrlen)
 {
   struct PrintContext *pc = cls;
   GNUNET_TRANSPORT_address_lookup (sched,
@@ -166,7 +168,26 @@ print_peer_info (void *cls,
   struct PrintContext *pc;
 
   if (peer == NULL)    
-    return;    
+    {
+      GNUNET_PEERINFO_disconnect (peerinfo);
+      switch (trust)
+       {
+       case 0:
+         break;
+       case 1:
+         fprintf (stderr,
+                  _("Timeout trying to interact with PEERINFO service\n"));
+         break;
+       case 2:
+         fprintf (stderr,
+                  _("Error in communication with PEERINFO service\n"));
+         break;
+       default:
+         GNUNET_break (0);
+         break;
+       }
+      return;    
+    }
   if (be_quiet)
     {
       GNUNET_CRYPTO_hash_to_enc (&peer->hashPubKey, &enc);
@@ -207,13 +228,43 @@ run (void *cls,
   struct GNUNET_PeerIdentity pid;
   struct GNUNET_CRYPTO_HashAsciiEncoded enc;
   char *fn;
+  int delta;
 
   sched = s;
   cfg = c;
+  delta = 0;
+  if ( (args[0] != NULL) &&
+       (args[1] != NULL) &&
+       (1 == sscanf(args[0], "%d", &delta)) &&
+       (GNUNET_OK == 
+       GNUNET_CRYPTO_hash_from_string (args[1],
+                                       &pid.hashPubKey)) )
+    {
+      peerinfo = GNUNET_PEERINFO_connect (sched, cfg);
+      GNUNET_PEERINFO_iterate (peerinfo,
+                              &pid,
+                              delta,
+                              GNUNET_TIME_UNIT_SECONDS,
+                              &print_peer_info, NULL);                            
+      return;
+    }
+  else if (args[0] != NULL)
+    {
+      fprintf (stderr,
+              _("Invalid command line argument `%s'\n"),
+              args[0]);
+      return;    
+    }
   if (get_self != GNUNET_YES)
     {
-      (void) GNUNET_PEERINFO_iterate (cfg,
-                                     sched,
+      peerinfo = GNUNET_PEERINFO_connect (sched, cfg);
+      if (peerinfo == NULL)
+       {
+         fprintf (stderr,
+                  _("Could not access PEERINFO service.  Exiting.\n"));
+         return;
+       }
+      (void) GNUNET_PEERINFO_iterate (peerinfo,
                                      NULL,
                                      0,
                                      GNUNET_TIME_relative_multiply