-fixing peerinfo part of #3559
authorChristian Grothoff <christian@grothoff.org>
Sun, 14 Dec 2014 20:52:16 +0000 (20:52 +0000)
committerChristian Grothoff <christian@grothoff.org>
Sun, 14 Dec 2014 20:52:16 +0000 (20:52 +0000)
configure.ac
src/dns/install-dns-helper.sh
src/include/gnunet_core_service.h
src/include/gnunet_hello_lib.h
src/include/gnunet_peerinfo_service.h
src/include/gnunet_transport_service.h
src/peerinfo-tool/gnunet-peerinfo.c

index 9bfbd31c3116913bfb26090b6c7b593d9071ed7d..1db9b1b768236c0386b3791f136828b0f7926ee4 100644 (file)
@@ -1079,12 +1079,12 @@ AC_ARG_WITH(gnutls,
         AC_CHECK_LIB([gnutls], [gnutls_priority_set],
           gnutls=true))
     AC_CHECK_HEADERS([gnutls/dane.h],
-    AC_CHECK_LIB([gnutls-dane], [dane_verify_crt_raw],
-            gnutls_dane=1))
+        AC_CHECK_LIB([gnutls-dane], [dane_verify_crt_raw],
+                    gnutls_dane=1))
    ])
 AM_CONDITIONAL(HAVE_GNUTLS, test x$gnutls = xtrue)
 AC_DEFINE_UNQUOTED([HAVE_GNUTLS], $gnutls, [We have GnuTLS])
-
+d
 AM_CONDITIONAL(HAVE_GNUTLS_DANE, test x$gnutls_dane = x1)
 AC_DEFINE_UNQUOTED([HAVE_GNUTLS_DANE], $gnutls_dane, [We have GnuTLS with DANE support])
 
index bf2dd427dfa2d06c6dcca11f62f4e34799e43973..0e7b86b36fd65917f0a7eb2e23c1d270938b464f 100755 (executable)
@@ -1,9 +1,10 @@
-#!/bin/bash
+#!/bin/sh
 # $1 - bindir
 # $2 - gnunetdns group
 # $3 - sudo binary (optional)
-$3 chown root $1/gnunet-helper-dns || true
-$3 chgrp $2 $1/gnunet-helper-dns || true
-$3 chmod 4750 $1/gnunet-helper-dns || true
-$3 chown gnunet:$2 $1/gnunet-service-dns || true
-$3 chmod 2750 $1/gnunet-service-dns || true
+$3 chown root $1/gnunet-helper-dns
+$3 chgrp $2 $1/gnunet-helper-dns
+$3 chmod 4750 $1/gnunet-helper-dns
+$3 chown gnunet:$2 $1/gnunet-service-dns
+$3 chmod 2750 $1/gnunet-service-dns
+
index c06e3c1f681b47aa8c34dcd16da418947474d5a5..f65d94eee80d2606ecf312c25cd2593388e633ec 100644 (file)
@@ -17,7 +17,6 @@
      Free Software Foundation, Inc., 59 Temple Place - Suite 330,
      Boston, MA 02111-1307, USA.
 */
-
 /**
  * @file include/gnunet_core_service.h
  * @brief core service; this is the main API for encrypted P2P
index a8a5656954b19f4a5fb859dd03268e1ac86640c8..6962e6945e0fc0b200126cf1bd750b3cb5bf56cc 100644 (file)
@@ -411,6 +411,11 @@ struct GNUNET_MessageHeader *
 GNUNET_HELLO_get_header (struct GNUNET_HELLO_Message *hello);
 
 
+/**
+ * FIXME.
+ *
+ * @param name
+ */
 typedef struct GNUNET_TRANSPORT_PluginFunctions *
 (*GNUNET_HELLO_TransportPluginsFind) (const char *name);
 
index ff870086150ded80c527e728b9768740471e5055..caa6590658fe1403728176e6f52f81e8f356f20b 100644 (file)
@@ -62,7 +62,7 @@ GNUNET_PEERINFO_connect (const struct GNUNET_CONFIGURATION_Handle *cfg);
  * Disconnect from the peerinfo service.  Note that all iterators must
  * have completed or have been cancelled by the time this function is
  * called (otherwise, calling this function is a serious error).
- * Furthermore, if 'GNUNET_PEERINFO_add_peer' operations are still
+ * Furthermore, if #GNUNET_PEERINFO_add_peer() operations are still
  * pending, they will be cancelled silently on disconnect.
  *
  * @param h handle to disconnect
index b3ab4d01ee22a6571ab21b2d25ede59adc75e5df..cfa5fdbe03d204a342df1675d2b19dc656a95d75 100644 (file)
@@ -176,7 +176,7 @@ struct GNUNET_TRANSPORT_TryConnectHandle;
  */
 typedef void
 (*GNUNET_TRANSPORT_TryConnectCallback) (void *cls,
-                                        const int result);
+                                        int result);
 
 
 /**
@@ -296,7 +296,6 @@ void
 GNUNET_TRANSPORT_notify_transmit_ready_cancel (struct GNUNET_TRANSPORT_TransmitHandle *th);
 
 
-
 /**
  * Checks if a given peer is connected to us
  *
@@ -397,6 +396,7 @@ GNUNET_TRANSPORT_get_hello_cancel (struct GNUNET_TRANSPORT_GetHelloHandle *ghh);
  */
 struct GNUNET_TRANSPORT_OfferHelloHandle;
 
+
 /**
  * Offer the transport service the HELLO of another peer.  Note that
  * the transport service may just ignore this message if the HELLO is
@@ -648,7 +648,7 @@ struct GNUNET_TRANSPORT_PeerMonitoringContext;
  * a final call with NULL for peer and address will follow when done.
  * In this case state and timeout do not contain valid values.
  *
- * The #GNUNET_TRANSPORT_monitor_peers_cancel call MUST not be called from
+ * The #GNUNET_TRANSPORT_monitor_peers_cancel() call MUST not be called from
  * within this function!
  *
  *
@@ -678,8 +678,8 @@ typedef void
  * to communicate with this peer, the state this peer is currently in and the
  * the current timeout for this state.
  *
- * Upon completion, the 'GNUNET_TRANSPORT_PeerIterateCallback' is called one
- * more time with 'NULL'. After this, the operation must no longer be
+ * Upon completion, the #GNUNET_TRANSPORT_PeerIterateCallback is called one
+ * more time with `NULL`. After this, the operation must no longer be
  * explicitly canceled.
  *
  * The #GNUNET_TRANSPORT_monitor_peers_cancel call MUST not be called in the
@@ -771,8 +771,8 @@ enum GNUNET_TRANSPORT_ValidationState
  * indicate a change to a validation entry. The information included represent
  * the current state of the validation entry,
  *
- * If the monitoring was called with one_shot=GNUNET_YES, a final callback
- * with peer==NULL and address==NULL is executed.
+ * If the monitoring was called with `one_shot==GNUNET_YES`, a final callback
+ * with `peer==NULL` and `address==NULL` is executed.
  *
  * @param cls closure
  * @param peer peer this update is about,
@@ -1007,7 +1007,6 @@ typedef void
                                             const struct GNUNET_TRANSPORT_SessionInfo *info);
 
 
-
 /**
  * Install a plugin session state monitor callback.  The callback
  * will be notified whenever the session changes.
index d826a805082f688517d789d6ad13886cba34e83a..18e1f8da7a249481cc681664ac198fce494fa548 100644 (file)
@@ -177,6 +177,16 @@ static const struct GNUNET_CONFIGURATION_Handle *cfg;
  */
 static GNUNET_SCHEDULER_TaskIdentifier tt;
 
+/**
+ * Pending #GNUNET_TRANSPORT_get_hello() operation.
+ */
+static struct GNUNET_TRANSPORT_GetHelloHandle *gh;
+
+/**
+ * Connection to transport service.
+ */
+static struct GNUNET_TRANSPORT_Handle *transport;
+
 /**
  * Current iterator context (if active, otherwise NULL).
  */
@@ -202,6 +212,11 @@ static struct PrintContext *pc_tail;
  */
 static struct GNUNET_PEERINFO_AddContext *ac;
 
+/**
+ * Hello of this peer (if initialized).
+ */
+static struct GNUNET_HELLO_Message *my_hello;
+
 
 /**
  * Main state machine that goes over all options and
@@ -436,44 +451,23 @@ count_addr (void *cls,
  * @param err_msg error message
  */
 static void
-dump_my_hello (void *cls,
-               const struct GNUNET_PeerIdentity *peer,
-               const struct GNUNET_HELLO_Message *hello,
-               const char *err_msg)
+dump_my_hello ()
 {
   unsigned int size;
   unsigned int c_addr;
 
-  if (NULL == peer)
-  {
-    pic = NULL;
-    if (NULL != err_msg)
-      FPRINTF (stderr,
-              _("Error in communication with PEERINFO service: %s\n"),
-              err_msg);
-    tt = GNUNET_SCHEDULER_add_now (&state_machine,
-                                   NULL);
-    return;
-  }
-
-  if (NULL == hello)
-  {
-    FPRINTF (stderr,
-             _("Failure: Did not receive %s\n"),
-             "HELLO");
-    return;
-  }
-
-  size = GNUNET_HELLO_size (hello);
+  size = GNUNET_HELLO_size (my_hello);
   if (0 == size)
   {
     FPRINTF (stderr,
              _("Failure: Received invalid %s\n"),
              "HELLO");
-      return;
+    return;
   }
   if (GNUNET_SYSERR ==
-      GNUNET_DISK_fn_write (dump_hello, hello, size,
+      GNUNET_DISK_fn_write (dump_hello,
+                            my_hello,
+                            size,
                             GNUNET_DISK_PERM_USER_READ |
                             GNUNET_DISK_PERM_USER_WRITE |
                             GNUNET_DISK_PERM_GROUP_READ |
@@ -491,7 +485,7 @@ dump_my_hello (void *cls,
 
   }
   c_addr = 0;
-  GNUNET_HELLO_iterate_addresses (hello,
+  GNUNET_HELLO_iterate_addresses (my_hello,
                                   GNUNET_NO,
                                   count_addr,
                                   &c_addr);
@@ -500,7 +494,7 @@ dump_my_hello (void *cls,
   {
     FPRINTF (stderr,
              _("Wrote %s HELLO containing %u addresses with %u bytes to file `%s'\n"),
-             (GNUNET_YES == GNUNET_HELLO_is_friend_only(hello)) ? "friend-only": "public",
+             (GNUNET_YES == GNUNET_HELLO_is_friend_only (my_hello)) ? "friend-only": "public",
              c_addr,
              size,
              dump_hello);
@@ -527,6 +521,8 @@ print_my_uri (void *cls,
               const struct GNUNET_HELLO_Message *hello,
              const char *err_msg)
 {
+  char *uri;
+
   if (NULL == peer)
   {
     pic = NULL;
@@ -540,8 +536,8 @@ print_my_uri (void *cls,
 
   if (NULL == hello)
     return;
-  char *uri = GNUNET_HELLO_compose_uri (hello,
-                                        &GPI_plugins_find);
+  uri = GNUNET_HELLO_compose_uri (hello,
+                                  &GPI_plugins_find);
   if (NULL != uri)
   {
     printf ("%s\n",
@@ -640,6 +636,16 @@ shutdown_task (void *cls,
     GNUNET_PEERINFO_iterate_cancel (pic);
     pic = NULL;
   }
+  if (NULL != gh)
+  {
+    GNUNET_TRANSPORT_get_hello_cancel (gh);
+    gh = NULL;
+  }
+  if (NULL != transport)
+  {
+    GNUNET_TRANSPORT_disconnect (transport);
+    transport = NULL;
+  }
   while (NULL != (pc = pc_head))
   {
     GNUNET_CONTAINER_DLL_remove (pc_head,
@@ -664,6 +670,43 @@ shutdown_task (void *cls,
     GNUNET_PEERINFO_disconnect (peerinfo);
     peerinfo = NULL;
   }
+  if (NULL != my_hello)
+  {
+    GNUNET_free (my_hello);
+    my_hello = NULL;
+  }
+}
+
+
+/**
+ * Function called with our peer's HELLO message.
+ * Used to obtain our peer's public key.
+ *
+ * @param cls NULL
+ * @param hello the HELLO message
+ */
+static void
+hello_callback (void *cls,
+                const struct GNUNET_MessageHeader *hello)
+{
+  if (NULL == hello)
+  {
+    fprintf (stderr,
+             _("Failed to get my own HELLO from this peer!\n"));
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
+  my_hello = (struct GNUNET_HELLO_Message *) GNUNET_copy_message (hello);
+  GNUNET_assert (GNUNET_OK ==
+                 GNUNET_HELLO_get_id (hello,
+                                      &my_peer_identity));
+  GNUNET_TRANSPORT_get_hello_cancel (gh);
+  gh = NULL;
+  GNUNET_TRANSPORT_disconnect (transport);
+  transport = NULL;
+  if (NULL != dump_hello)
+    dump_my_hello ();
+  tt = GNUNET_SCHEDULER_add_now (&state_machine, NULL);
 }
 
 
@@ -700,33 +743,18 @@ testservice_task (void *cls,
        (GNUNET_YES == get_uri) ||
        (NULL != dump_hello) )
   {
-    /* load private key */
-    if (GNUNET_OK !=
-        GNUNET_CONFIGURATION_get_value_filename (cfg,
-                                                 "PEER",
-                                                 "PRIVATE_KEY",
-                                                 &fn))
-    {
-      GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
-                                 "PEER",
-                                 "PRIVATE_KEY");
-      return;
-    }
-    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_eddsa_key_get_public (priv,
-                                        &my_peer_identity.public_key);
-    GNUNET_free (priv);
+    transport = GNUNET_TRANSPORT_connect (cfg,
+                                          NULL,
+                                          NULL,
+                                          NULL, NULL, NULL);
+    gh = GNUNET_TRANSPORT_get_hello (transport,
+                                     &hello_callback,
+                                     NULL);
+  }
+  else
+  {
+    tt = GNUNET_SCHEDULER_add_now (&state_machine, NULL);
   }
-
-  tt = GNUNET_SCHEDULER_add_now (&state_machine, NULL);
   GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
                                 &shutdown_task,
                                 NULL);
@@ -827,14 +855,6 @@ state_machine (void *cls,
                                    &print_my_uri, NULL);
     get_uri = GNUNET_NO;
   }
-  else if (NULL != dump_hello)
-  {
-    pic = GNUNET_PEERINFO_iterate (peerinfo,
-                                   include_friend_only,
-                                   &my_peer_identity,
-                                  TIMEOUT,
-                                   &dump_my_hello, NULL);
-  }
   else if (GNUNET_YES == default_operation)
   {
     /* default operation list all */
@@ -843,8 +863,8 @@ state_machine (void *cls,
     tt = GNUNET_SCHEDULER_add_now (&state_machine, NULL);
   }
   else
-    {
-      GNUNET_SCHEDULER_shutdown ();
+  {
+    GNUNET_SCHEDULER_shutdown ();
   }
   default_operation = GNUNET_NO;
 }