- fix connection.c
[oweals/gnunet.git] / src / peerinfo-tool / gnunet-peerinfo.c
index 551f2daa4ccc023432e6321c151531a4867a0ea6..e62df3047d03cbbfc65de6ef22902ce0008e5b07 100644 (file)
@@ -53,11 +53,16 @@ struct AddressRecord
    */
   struct GNUNET_TRANSPORT_AddressToStringContext *atsc;
 
+  /**
+   * Address expiration time
+   */
+  struct GNUNET_TIME_Absolute expiration;
+
   /**
    * Printable address.
    */
   char *result;
-  
+
   /**
    * Print context this address record belongs to.
    */
@@ -85,7 +90,7 @@ struct PrintContext
    * Identity of the peer.
    */
   struct GNUNET_PeerIdentity peer;
-  
+
   /**
    * List of printable addresses.
    */
@@ -135,17 +140,22 @@ static int include_friend_only;
 static int get_self;
 
 /**
- * Option 
+ * Option
  */
 static int get_uri;
 
+/**
+ * Option
+ */
+static int default_operation;
+
 /**
  * Option '-i'
  */
 static int get_info;
 
 /**
- * Option 
+ * Option
  */
 static char *put_uri;
 
@@ -179,11 +189,6 @@ static struct GNUNET_PEERINFO_IteratorContext *pic;
  */
 static struct GNUNET_PeerIdentity my_peer_identity;
 
-/**
- * My public key.
- */
-static struct GNUNET_CRYPTO_EccPublicKeyBinaryEncoded my_public_key;
-
 /**
  * Head of list of print contexts.
  */
@@ -222,18 +227,16 @@ state_machine (void *cls,
 static void
 dump_pc (struct PrintContext *pc)
 {
-  struct GNUNET_CRYPTO_HashAsciiEncoded enc;
   unsigned int i;
 
-  GNUNET_CRYPTO_hash_to_enc (&pc->peer.hashPubKey, &enc);
   printf (_("%sPeer `%s'\n"),
-       (GNUNET_YES == pc->friend_only) ? "F2F: " : "",
-         (const char *) &enc);
+         (GNUNET_YES == pc->friend_only) ? "F2F: " : "",
+         GNUNET_i2s_full (&pc->peer));
   for (i = 0; i < pc->num_addresses; i++)
   {
     if (NULL != pc->address_list[i].result)
     {
-      printf ("\t%s\n", pc->address_list[i].result);
+      printf (_("\tExpires: %s \t %s\n"), GNUNET_STRINGS_absolute_time_to_string(pc->address_list[i].expiration), pc->address_list[i].result);
       GNUNET_free (pc->address_list[i].result);
     }
   }
@@ -245,7 +248,7 @@ dump_pc (struct PrintContext *pc)
   GNUNET_free (pc);
   if ( (NULL == pc_head) &&
        (NULL == pic) )
-    tt = GNUNET_SCHEDULER_add_now (&state_machine, NULL);  
+    tt = GNUNET_SCHEDULER_add_now (&state_machine, NULL);
 }
 
 
@@ -310,10 +313,10 @@ print_address (void *cls, const struct GNUNET_HELLO_Address *address,
 {
   struct PrintContext *pc = cls;
   struct AddressRecord *ar;
-
   GNUNET_assert (0 < pc->off);
   ar = &pc->address_list[--pc->off];
   ar->pc = pc;
+  ar->expiration = expiration;
   ar->atsc = GNUNET_TRANSPORT_address_to_string (cfg, address, no_resolve,
                                                 GNUNET_TIME_relative_multiply
                                                 (GNUNET_TIME_UNIT_SECONDS, 10),
@@ -327,7 +330,7 @@ print_address (void *cls, const struct GNUNET_HELLO_Address *address,
  * Currently prints the GNUNET_PeerIdentity and the transport address.
  *
  * @param cls the 'struct PrintContext'
- * @param peer identity of the peer 
+ * @param peer identity of the peer
  * @param hello addresses of the peer
  * @param err_msg error message
  */
@@ -335,7 +338,6 @@ static void
 print_peer_info (void *cls, const struct GNUNET_PeerIdentity *peer,
                  const struct GNUNET_HELLO_Message *hello, const char *err_msg)
 {
-  struct GNUNET_CRYPTO_HashAsciiEncoded enc;
   struct PrintContext *pc;
   int friend_only;
 
@@ -344,7 +346,7 @@ print_peer_info (void *cls, const struct GNUNET_PeerIdentity *peer,
     pic = NULL; /* end of iteration */
     if (NULL != err_msg)
     {
-      FPRINTF (stderr, 
+      FPRINTF (stderr,
               _("Error in communication with PEERINFO service: %s\n"),
               err_msg);
     }
@@ -357,21 +359,20 @@ print_peer_info (void *cls, const struct GNUNET_PeerIdentity *peer,
        friend_only = GNUNET_HELLO_is_friend_only (hello);
   if ((GNUNET_YES == be_quiet) || (NULL == hello))
   {
-    GNUNET_CRYPTO_hash_to_enc (&peer->hashPubKey, &enc);
     printf ("%s%s\n",
-               (GNUNET_YES == friend_only) ? "F2F: " : "",
-               (const char *) &enc);
+           (GNUNET_YES == friend_only) ? "F2F: " : "",
+           GNUNET_i2s_full (peer));
     return;
   }
   pc = GNUNET_malloc (sizeof (struct PrintContext));
   GNUNET_CONTAINER_DLL_insert (pc_head,
-                              pc_tail, 
+                              pc_tail,
                               pc);
   pc->peer = *peer;
   pc->friend_only = friend_only;
-  GNUNET_HELLO_iterate_addresses (hello, 
-                                 GNUNET_NO, 
-                                 &count_address, 
+  GNUNET_HELLO_iterate_addresses (hello,
+                                 GNUNET_NO,
+                                 &count_address,
                                  pc);
   if (0 == pc->off)
   {
@@ -380,7 +381,7 @@ print_peer_info (void *cls, const struct GNUNET_PeerIdentity *peer,
   }
   pc->address_list_size = pc->off;
   pc->address_list = GNUNET_malloc (sizeof (struct AddressRecord) * pc->off);
-  GNUNET_HELLO_iterate_addresses (hello, GNUNET_NO, 
+  GNUNET_HELLO_iterate_addresses (hello, GNUNET_NO,
                                  &print_address, pc);
 }
 
@@ -478,7 +479,7 @@ dump_my_hello (void *cls, const struct GNUNET_PeerIdentity *peer,
  */
 static void
 print_my_uri (void *cls, const struct GNUNET_PeerIdentity *peer,
-              const struct GNUNET_HELLO_Message *hello, 
+              const struct GNUNET_HELLO_Message *hello,
              const char *err_msg)
 {
   if (peer == NULL)
@@ -486,7 +487,7 @@ print_my_uri (void *cls, const struct GNUNET_PeerIdentity *peer,
     pic = NULL;
     if (err_msg != NULL)
       FPRINTF (stderr,
-              _("Error in communication with PEERINFO service: %s\n"), 
+              _("Error in communication with PEERINFO service: %s\n"),
               err_msg);
     tt = GNUNET_SCHEDULER_add_now (&state_machine, NULL);
     return;
@@ -525,7 +526,7 @@ add_continuation (void *cls,
 
 
 /**
- * Parse the PUT URI given at the command line and add it to our peerinfo 
+ * Parse the PUT URI given at the command line and add it to our peerinfo
  * database.
  *
  * @param put_uri URI string to parse
@@ -536,7 +537,8 @@ parse_hello_uri (const char *put_uri)
 {
   struct GNUNET_HELLO_Message *hello = NULL;
 
-  int ret = GNUNET_HELLO_parse_uri(put_uri, &my_public_key, &hello, &GPI_plugins_find);
+  int ret = GNUNET_HELLO_parse_uri(put_uri, &my_peer_identity.public_key,
+                                  &hello, &GPI_plugins_find);
 
   if (NULL != hello) {
     /* WARNING: this adds the address from URI WITHOUT verification! */
@@ -626,7 +628,7 @@ static void
 run (void *cls, char *const *args, const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *c)
 {
-  struct GNUNET_CRYPTO_EccPrivateKey *priv;
+  struct GNUNET_CRYPTO_EddsaPrivateKey *priv;
   char *fn;
 
   cfg = c;
@@ -637,10 +639,10 @@ run (void *cls, char *const *args, const char *cfgfile,
     put_uri = GNUNET_strdup (args[0]);
     args++;
   }
-  if (NULL != args[0]) 
+  if (NULL != args[0])
   {
-    FPRINTF (stderr, 
-            _("Invalid command line argument `%s'\n"), 
+    FPRINTF (stderr,
+            _("Invalid command line argument `%s'\n"),
             args[0]);
     return;
   }
@@ -660,16 +662,16 @@ run (void *cls, char *const *args, const char *cfgfile,
               "GNUNETD", "HOSTKEYFILE");
       return;
     }
-    if (NULL == (priv = GNUNET_CRYPTO_ecc_key_create_from_file (fn)))
+    if (NULL == (priv = GNUNET_CRYPTO_eddsa_key_create_from_file (fn)))
     {
       FPRINTF (stderr, _("Loading hostkey from `%s' failed.\n"), fn);
       GNUNET_free (fn);
       return;
     }
     GNUNET_free (fn);
-    GNUNET_CRYPTO_ecc_key_get_public (priv, &my_public_key);
-    GNUNET_CRYPTO_ecc_key_free (priv);
-    GNUNET_CRYPTO_hash (&my_public_key, sizeof (my_public_key), &my_peer_identity.hashPubKey);
+    GNUNET_CRYPTO_eddsa_key_get_public (priv,
+                                                   &my_peer_identity.public_key);
+    GNUNET_free (priv);
   }
 
   tt = GNUNET_SCHEDULER_add_now (&state_machine, NULL);
@@ -704,43 +706,50 @@ state_machine (void *cls,
     }
     GNUNET_free (put_uri);
     put_uri = NULL;
-    return;
   }
-  if (GNUNET_YES == get_info)
+  else if (GNUNET_YES == get_info)
   {
     get_info = GNUNET_NO;
     GPI_plugins_load (cfg);
     pic = GNUNET_PEERINFO_iterate (peerinfo, include_friend_only, NULL,
                                   TIMEOUT,
                                   &print_peer_info, NULL);
-    return;
   }
-  if (GNUNET_YES == get_self)
+  else if (GNUNET_YES == get_self)
   {
-    struct GNUNET_CRYPTO_HashAsciiEncoded enc;
-
     get_self = GNUNET_NO;
-    GNUNET_CRYPTO_hash_to_enc (&my_peer_identity.hashPubKey, &enc);
     if (be_quiet)
-      printf ("%s\n", (char *) &enc);
+      printf ("%s\n",
+             GNUNET_i2s_full (&my_peer_identity));
     else
-      printf (_("I am peer `%s'.\n"), (const char *) &enc);
+      printf (_("I am peer `%s'.\n"),
+             GNUNET_i2s_full (&my_peer_identity));
+    tt = GNUNET_SCHEDULER_add_now (&state_machine, NULL);
   }
-  if (GNUNET_YES == get_uri)
+  else if (GNUNET_YES == get_uri)
   {
     GPI_plugins_load (cfg);
     pic = GNUNET_PEERINFO_iterate (peerinfo, include_friend_only, &my_peer_identity,
                                   TIMEOUT, &print_my_uri, NULL);
     get_uri = GNUNET_NO;
-    return;
   }
-  if (NULL != dump_hello)
+  else if (NULL != dump_hello)
   {
     pic = GNUNET_PEERINFO_iterate (peerinfo, include_friend_only, &my_peer_identity,
                                   TIMEOUT, &dump_my_hello, NULL);
-    return;
   }
-  GNUNET_SCHEDULER_shutdown ();
+  else if (GNUNET_YES == default_operation)
+  {
+       /* default operation list all */
+       default_operation = GNUNET_NO;
+       get_info = GNUNET_YES;
+       tt = GNUNET_SCHEDULER_add_now (&state_machine, NULL);
+  }
+  else
+  {
+       GNUNET_SCHEDULER_shutdown ();
+  }
+       default_operation = GNUNET_NO;
 }
 
 
@@ -754,6 +763,7 @@ state_machine (void *cls,
 int
 main (int argc, char *const *argv)
 {
+       default_operation = GNUNET_YES;
   static const struct GNUNET_GETOPT_CommandLineOption options[] = {
     {'n', "numeric", NULL,
      gettext_noop ("don't resolve host names"),