-help seaspider some more
[oweals/gnunet.git] / src / hostlist / gnunet-daemon-hostlist.c
index b0599312ceee890b33a312f5357f2fc9e6d11a5d..0eedb56b16e8f81b54b172d6a6f184e0629e773f 100644 (file)
@@ -4,7 +4,7 @@
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 2, or (at your
+     by the Free Software Foundation; either version 3, or (at your
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
@@ -99,6 +99,8 @@ static GNUNET_CORE_ConnectEventHandler client_ch;
  */
 static GNUNET_CORE_DisconnectEventHandler client_dh;
 
  */
 static GNUNET_CORE_DisconnectEventHandler client_dh;
 
+GNUNET_NETWORK_STRUCT_BEGIN
+
 /**
  * A HOSTLIST_ADV message is used to exchange information about
  * hostlist advertisements.  This struct is always
 /**
  * A HOSTLIST_ADV message is used to exchange information about
  * hostlist advertisements.  This struct is always
@@ -123,31 +125,35 @@ struct GNUNET_HOSTLIST_ADV_Message
    */
   uint32_t reserved GNUNET_PACKED;
 };
    */
   uint32_t reserved GNUNET_PACKED;
 };
+GNUNET_NETWORK_STRUCT_END
 
 
+static struct GNUNET_PeerIdentity me;
 
 static void
 
 static void
-core_init (void *cls,
-          struct GNUNET_CORE_Handle * server,
-          const struct GNUNET_PeerIdentity *
-          my_identity,
-          const struct
-          GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *
-          publicKey)
+core_init (void *cls, struct GNUNET_CORE_Handle *server,
+           const struct GNUNET_PeerIdentity *my_identity)
 {
 {
- /* Nothing to do here */
+  me = *my_identity;
 }
 
 /**
  * Core handler for p2p hostlist advertisements
 }
 
 /**
  * Core handler for p2p hostlist advertisements
+ *
+ * @param cls closure
+ * @param peer identity of the sender
+ * @param message advertisement message we got
+ * @param atsi performance information
+ * @param atsi_count number of records in 'atsi'
+ * @return GNUNET_OK on success
  */
  */
-static int advertisement_handler (void *cls,
-                             const struct GNUNET_PeerIdentity * peer,
-                             const struct GNUNET_MessageHeader * message,
-                             struct GNUNET_TIME_Relative latency,
-                             uint32_t distance)
+static int
+advertisement_handler (void *cls, const struct GNUNET_PeerIdentity *peer,
+                       const struct GNUNET_MessageHeader *message,
+                       const struct GNUNET_ATS_Information *atsi,
+                       unsigned int atsi_count)
 {
   GNUNET_assert (NULL != client_adv_handler);
 {
   GNUNET_assert (NULL != client_adv_handler);
-  return (*client_adv_handler) (cls, peer, message, latency, distance);
+  return (*client_adv_handler) (cls, peer, message, atsi, atsi_count);
 }
 
 
 }
 
 
@@ -156,23 +162,23 @@ static int advertisement_handler (void *cls,
  *
  * @param cls closure
  * @param peer peer identity this notification is about
  *
  * @param cls closure
  * @param peer peer identity this notification is about
- * @param latency reported latency of the connection with 'other'
- * @param distance reported distance (DV) to 'other'
+ * @param atsi performance data
+ * @param atsi_count number of records in 'atsi'
  */
 static void
  */
 static void
-connect_handler (void *cls,
-                 const struct
-                 GNUNET_PeerIdentity * peer,
-                 struct GNUNET_TIME_Relative latency,
-                 uint32_t distance)
+connect_handler (void *cls, const struct GNUNET_PeerIdentity *peer,
+                 const struct GNUNET_ATS_Information *atsi,
+                 unsigned int atsi_count)
 {
 {
+  if (0 == memcmp (&me, peer, sizeof (struct GNUNET_PeerIdentity)))
+    return;
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "A new peer connected, notifying client and server\n");
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "A new peer connected, notifying client and server\n");
-  if ( NULL != client_ch)
-    (*client_ch) (cls, peer, latency, distance);
+  if (NULL != client_ch)
+    (*client_ch) (cls, peer, atsi, atsi_count);
 #if HAVE_MHD
 #if HAVE_MHD
-  if ( NULL != server_ch)
-    (*server_ch) (cls, peer, latency, distance);
+  if (NULL != server_ch)
+    (*server_ch) (cls, peer, atsi, atsi_count);
 #endif
 }
 
 #endif
 }
 
@@ -183,17 +189,16 @@ connect_handler (void *cls,
  * @param peer peer identity this notification is about
  */
 static void
  * @param peer peer identity this notification is about
  */
 static void
-disconnect_handler (void *cls,
-                    const struct
-                    GNUNET_PeerIdentity * peer)
+disconnect_handler (void *cls, const struct GNUNET_PeerIdentity *peer)
 {
 {
-
-  /* call hostlist client disconnect handler*/
-  if ( NULL != client_dh)
+  if (0 == memcmp (&me, peer, sizeof (struct GNUNET_PeerIdentity)))
+    return;
+  /* call hostlist client disconnect handler */
+  if (NULL != client_dh)
     (*client_dh) (cls, peer);
 #if HAVE_MHD
     (*client_dh) (cls, peer);
 #if HAVE_MHD
-  /* call hostlist server disconnect handler*/
-  if ( NULL != server_dh)
+  /* call hostlist server disconnect handler */
+  if (NULL != server_dh)
     (*server_dh) (cls, peer);
 #endif
 }
     (*server_dh) (cls, peer);
 #endif
 }
@@ -205,29 +210,27 @@ disconnect_handler (void *cls,
 static void
 cleaning_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
 static void
 cleaning_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Hostlist daemon is shutting down\n");
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Hostlist daemon is shutting down\n");
   if (core != NULL)
   if (core != NULL)
-    {
-      GNUNET_CORE_disconnect (core);
-      core = NULL;
-    }
+  {
+    GNUNET_CORE_disconnect (core);
+    core = NULL;
+  }
   if (bootstrapping)
   if (bootstrapping)
-    {
-      GNUNET_HOSTLIST_client_stop ();
-    }
+  {
+    GNUNET_HOSTLIST_client_stop ();
+  }
 #if HAVE_MHD
   if (provide_hostlist)
 #if HAVE_MHD
   if (provide_hostlist)
-    {      
-      GNUNET_HOSTLIST_server_stop ();
-    }
+  {
+    GNUNET_HOSTLIST_server_stop ();
+  }
 #endif
   if (stats != NULL)
 #endif
   if (stats != NULL)
-    {
-      GNUNET_STATISTICS_destroy (stats,
-                                GNUNET_NO);
-      stats = NULL;
-    }
+  {
+    GNUNET_STATISTICS_destroy (stats, GNUNET_NO);
+    stats = NULL;
+  }
 }
 
 
 }
 
 
@@ -235,74 +238,66 @@ cleaning_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
  * Main function that will be run.
  *
  * @param cls closure
  * Main function that will be run.
  *
  * @param cls closure
- * @param sched the scheduler to use
  * @param args remaining command-line arguments
  * @param cfgfile name of the configuration file used (for saving, can be NULL!)
  * @param cfg configuration
  */
  * @param args remaining command-line arguments
  * @param cfgfile name of the configuration file used (for saving, can be NULL!)
  * @param cfg configuration
  */
-static void 
-run (void *cls,
-     struct GNUNET_SCHEDULER_Handle * sched,
-     char *const *args,
-     const char *cfgfile,
-     const struct GNUNET_CONFIGURATION_Handle * cfg)
+static void
+run (void *cls, char *const *args, const char *cfgfile,
+     const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
   static const struct GNUNET_CORE_MessageHandler learn_handlers[] = {
 {
   static const struct GNUNET_CORE_MessageHandler learn_handlers[] = {
-    { &advertisement_handler, GNUNET_MESSAGE_TYPE_HOSTLIST_ADVERTISEMENT, 0},
-    { NULL, 0, 0 }
+    {&advertisement_handler, GNUNET_MESSAGE_TYPE_HOSTLIST_ADVERTISEMENT, 0},
+    {NULL, 0, 0}
   };
   static const struct GNUNET_CORE_MessageHandler no_learn_handlers[] = {
   };
   static const struct GNUNET_CORE_MessageHandler no_learn_handlers[] = {
-    { NULL, 0, 0 }
+    {NULL, 0, 0}
   };
   };
-  if ( (! bootstrapping) &&
-       (! learning) 
+  if ((!bootstrapping) && (!learning)
 #if HAVE_MHD
 #if HAVE_MHD
-       && (! provide_hostlist) 
+      && (!provide_hostlist)
 #endif
 #endif
-       )
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                 _("None of the functions for the hostlist daemon were enabled.  I have no reason to run!\n"));
-      return;
-    }
+      )
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                _
+                ("None of the functions for the hostlist daemon were enabled.  I have no reason to run!\n"));
+    return;
+  }
 
 
 
 
 
 
-  stats = GNUNET_STATISTICS_create (sched, "hostlist", cfg);
+  stats = GNUNET_STATISTICS_create ("hostlist", cfg);
 
 
-  core = GNUNET_CORE_connect (sched, cfg,
-                             GNUNET_TIME_UNIT_FOREVER_REL,
-                             NULL,
-                             &core_init,
-                             &connect_handler, &disconnect_handler,
-                             NULL, GNUNET_NO,
-                             NULL, GNUNET_NO,
-                             learning? learn_handlers : no_learn_handlers);
+  core =
+      GNUNET_CORE_connect (cfg, 1, NULL, &core_init, &connect_handler,
+                           &disconnect_handler, NULL, GNUNET_NO, NULL,
+                           GNUNET_NO,
+                           learning ? learn_handlers : no_learn_handlers);
 
   if (bootstrapping)
 
   if (bootstrapping)
-    {
-      GNUNET_HOSTLIST_client_start (cfg, sched, stats,
-                                   &client_ch, &client_dh, &client_adv_handler, learning);
-    }
+  {
+    GNUNET_HOSTLIST_client_start (cfg, stats, &client_ch, &client_dh,
+                                  &client_adv_handler, learning);
+  }
 
 
-  #if HAVE_MHD
+#if HAVE_MHD
   if (provide_hostlist)
   if (provide_hostlist)
-    {      
-      GNUNET_HOSTLIST_server_start (cfg, sched, stats, core, &server_ch, &server_dh, advertising );
-    }
+  {
+    GNUNET_HOSTLIST_server_start (cfg, stats, core, &server_ch, &server_dh,
+                                  advertising);
+  }
 #endif
 #endif
-  GNUNET_SCHEDULER_add_delayed (sched,
-                                GNUNET_TIME_UNIT_FOREVER_REL,
-                                &cleaning_task, NULL);
+  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &cleaning_task,
+                                NULL);
 
   if (NULL == core)
 
   if (NULL == core)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                 _("Failed to connect to `%s' service.\n"),
-                 "core");
-      GNUNET_SCHEDULER_shutdown (sched);
-      return;     
-    }
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                _("Failed to connect to `%s' service.\n"), "core");
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
 }
 
 
 }
 
 
@@ -318,33 +313,33 @@ main (int argc, char *const *argv)
 {
   static const struct GNUNET_GETOPT_CommandLineOption options[] = {
 #if HAVE_MHD
 {
   static const struct GNUNET_GETOPT_CommandLineOption options[] = {
 #if HAVE_MHD
-    { 'a', "advertise", NULL, 
-      gettext_noop ("advertise our hostlist to other peers"),
-      GNUNET_NO, &GNUNET_GETOPT_set_one, &advertising },
+    {'a', "advertise", NULL,
+     gettext_noop ("advertise our hostlist to other peers"),
+     GNUNET_NO, &GNUNET_GETOPT_set_one, &advertising},
 #endif
 #endif
-    { 'b', "bootstrap", NULL, 
-      gettext_noop ("bootstrap using hostlists (it is highly recommended that you always use this option)"),
-      GNUNET_NO, &GNUNET_GETOPT_set_one, &bootstrapping },
-    { 'e', "enable-learning", NULL,
-      gettext_noop ("enable learning about hostlist servers from other peers"),
-      GNUNET_NO, &GNUNET_GETOPT_set_one, &learning},
+    {'b', "bootstrap", NULL,
+     gettext_noop
+     ("bootstrap using hostlists (it is highly recommended that you always use this option)"),
+     GNUNET_NO, &GNUNET_GETOPT_set_one, &bootstrapping},
+    {'e', "enable-learning", NULL,
+     gettext_noop ("enable learning about hostlist servers from other peers"),
+     GNUNET_NO, &GNUNET_GETOPT_set_one, &learning},
 #if HAVE_MHD
 #if HAVE_MHD
-    { 'p', "provide-hostlist", NULL, 
-      gettext_noop ("provide a hostlist server"),
-      GNUNET_NO, &GNUNET_GETOPT_set_one, &provide_hostlist},
+    {'p', "provide-hostlist", NULL,
+     gettext_noop ("provide a hostlist server"),
+     GNUNET_NO, &GNUNET_GETOPT_set_one, &provide_hostlist},
 #endif
     GNUNET_GETOPT_OPTION_END
   };
 
   int ret;
 #endif
     GNUNET_GETOPT_OPTION_END
   };
 
   int ret;
+
   GNUNET_log_setup ("hostlist", "WARNING", NULL);
   GNUNET_log_setup ("hostlist", "WARNING", NULL);
-  ret = (GNUNET_OK ==
-         GNUNET_PROGRAM_run (argc,
-                             argv,
-                             "hostlist", 
-                            _("GNUnet hostlist server and client"),
-                            options,
-                            &run, NULL)) ? 0 : 1;
+  ret =
+      (GNUNET_OK ==
+       GNUNET_PROGRAM_run (argc, argv, "hostlist",
+                           _("GNUnet hostlist server and client"), options,
+                           &run, NULL)) ? 0 : 1;
 
   return ret;
 }
 
   return ret;
 }