gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnunet] branch master updated: -work on dhtu


From: gnunet
Subject: [gnunet] branch master updated: -work on dhtu
Date: Wed, 22 Sep 2021 08:49:58 +0200

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository gnunet.

The following commit(s) were added to refs/heads/master by this push:
     new c221e30ea -work on dhtu
c221e30ea is described below

commit c221e30ea67751237058b6a5aa7b46e12fca5395
Author: Christian Grothoff <grothoff@gnunet.org>
AuthorDate: Wed Sep 22 08:49:48 2021 +0200

    -work on dhtu
---
 src/dhtu/Makefile.am           |   1 +
 src/dhtu/plugin_dhtu_gnunet.c  | 137 ++++++++++++++++++++++++++++++++++++++++-
 src/include/gnunet_mq_lib.h    |  18 ++++--
 src/include/gnunet_protocols.h |   5 ++
 4 files changed, 154 insertions(+), 7 deletions(-)

diff --git a/src/dhtu/Makefile.am b/src/dhtu/Makefile.am
index f4b968526..601f31bf5 100644
--- a/src/dhtu/Makefile.am
+++ b/src/dhtu/Makefile.am
@@ -29,6 +29,7 @@ libgnunet_plugin_dhtu_gnunet_la_SOURCES = \
   plugin_dhtu_gnunet.c
 libgnunet_plugin_dhtu_gnunet_la_LIBADD = \
   $(top_builddir)/src/core/libgnunetcore.la \
+  $(top_builddir)/src/nse/libgnunetnse.la \
   $(top_builddir)/src/util/libgnunetutil.la \
   $(XLIBS) \
   $(LTLIBINTL)
diff --git a/src/dhtu/plugin_dhtu_gnunet.c b/src/dhtu/plugin_dhtu_gnunet.c
index e01f90bde..b57c65e44 100644
--- a/src/dhtu/plugin_dhtu_gnunet.c
+++ b/src/dhtu/plugin_dhtu_gnunet.c
@@ -27,6 +27,8 @@
 #include "platform.h"
 #include "gnunet_dhtu_plugin.h"
 #include "gnunet_core_service.h"
+#include "gnunet_nse_service.h"
+
 
 /**
  * Handle for a private key used by this underlay.
@@ -74,6 +76,17 @@ struct GNUNET_DHTU_Source
    * Application context for this source.
    */
   void *app_ctx;
+  
+  /**
+   * Hash position of this peer in the DHT.
+   */
+  struct GNUNET_DHTU_Hash my_id;
+
+  /**
+   * Private key of this peer.
+   */
+  struct GNUNET_DHTU_PrivateKey pk;
+
 };
 
 
@@ -89,6 +102,11 @@ struct GNUNET_DHTU_Target
    */
   void *app_ctx;
 
+  /**
+   * Our plugin with its environment.
+   */
+  struct Plugin *plugin;
+  
   /**
    * CORE MQ to send messages to this peer.
    */
@@ -159,6 +177,17 @@ struct Plugin
    * Handle to the CORE service.
    */
   struct GNUNET_CORE_Handle *core;
+
+  /**
+   * Our "source" address. Traditional CORE API does not tell us which source
+   * it is, so they are all identical.
+   */
+  struct GNUNET_DHTU_Source src;
+  
+  /**
+   * Handle to the NSE service.
+   */
+  struct GNUNET_NSE_Handle *nse;
   
 };
 
@@ -242,6 +271,9 @@ static void
 ip_try_connect (void *cls,
                 const char *address)
 {
+  struct Plugin *plugin = cls;
+
+  // FIXME: ask ATS/TRANSPORT to 'connect'
   GNUNET_break (0);
 }
 
@@ -258,6 +290,7 @@ static struct GNUNET_DHTU_PreferenceHandle *
 ip_hold (void *cls,
          struct GNUNET_DHTU_Target *target)
 {
+  struct Plugin *plugin = cls;
   struct GNUNET_DHTU_PreferenceHandle *ph;
 
   ph = GNUNET_new (struct GNUNET_DHTU_PreferenceHandle);
@@ -266,6 +299,7 @@ ip_hold (void *cls,
                                target->ph_tail,
                                ph);
   target->ph_count++;
+  // FIXME: update ATS about 'hold'
   return ph;
 }
 
@@ -286,6 +320,7 @@ ip_drop (struct GNUNET_DHTU_PreferenceHandle *ph)
                                ph);
   target->ph_count--;
   GNUNET_free (ph);
+  // FIXME: update ATS about 'drop'
 }
 
 
@@ -312,7 +347,20 @@ ip_send (void *cls,
          GNUNET_SCHEDULER_TaskCallback finished_cb,
          void *finished_cb_cls)
 {
-  GNUNET_break (0);
+  struct GNUNET_MQ_Envelope *env;
+  struct GNUNET_MessageHeader *cmsg;
+
+  env = GNUNET_MQ_msg_extra (cmsg,
+                             msg_size,
+                             GNUNET_MESSAGE_TYPE_DHT_CORE);
+  GNUNET_MQ_notify_sent (env,
+                         finished_cb,
+                         finished_cb_cls);
+  memcpy (&cmsg[1],
+          msg,
+          msg_size);
+  GNUNET_MQ_send (target->mq,
+                  env);
 }
 
 
@@ -334,6 +382,7 @@ core_connect_cb (void *cls,
   struct GNUNET_DHTU_Target *target;
 
   target = GNUNET_new (struct GNUNET_DHTU_Target);
+  target->plugin = plugin;
   target->mq = mq;
   target->pk.header.size = htons (sizeof (struct PublicKey));
   target->pk.peer_pub = *peer;
@@ -362,6 +411,11 @@ core_disconnect_cb (void *cls,
                     const struct GNUNET_PeerIdentity *peer,
                     void *peer_cls)
 {
+  struct Plugin *plugin = cls;
+  struct GNUNET_DHTU_Target *target = peer_cls;
+
+  plugin->env->disconnect_cb (target->app_ctx);
+  GNUNET_free (target);
 }
 
 
@@ -382,6 +436,79 @@ core_init_cb (void *cls,
               const struct GNUNET_PeerIdentity *my_identity)
 {
   struct Plugin *plugin = cls;
+  char *addr = NULL;
+
+  // FIXME: initialize src.my_id and src.pk and addr!
+  // (note: with legacy CORE, we only have one addr)
+  plugin->env->address_add_cb (plugin->env->cls,
+                               &plugin->src.my_id,
+                               &plugin->src.pk,
+                               addr,
+                               &plugin->src,
+                               &plugin->src.app_ctx);
+  GNUNET_free (addr);
+}
+
+
+/**
+ * Anything goes, always return #GNUNET_OK.
+ *
+ * @param cls unused
+ * @param msg message to check
+ * @return #GNUNET_OK if all is fine
+ */
+static int
+check_core_message (void *cls,
+                    const struct GNUNET_MessageHeader *msg)
+{
+  (void) cls;
+  (void) msg;
+  return GNUNET_OK;
+}
+
+
+/**
+ * Handle message from CORE for the DHT. Passes it to the
+ * DHT logic.
+ *
+ * @param cls a `struct GNUNET_DHTU_Target` of the sender
+ * @param msg the message we received
+ */
+static void
+handle_core_message (void *cls,
+                     const struct GNUNET_MessageHeader *msg)
+{
+  struct GNUNET_DHTU_Target *origin = cls;
+  struct Plugin *plugin = origin->plugin;
+
+  plugin->env->receive_cb (plugin->env->cls,
+                           &origin->app_ctx,
+                           &plugin->src.app_ctx,
+                           &msg[1],
+                           ntohs (msg->size) - sizeof (*msg));
+}
+
+
+/**
+ * Callback to call when network size estimate is updated.
+ *
+ * @param cls closure
+ * @param timestamp time when the estimate was received from the server (or 
created by the server)
+ * @param logestimate the log(Base 2) value of the current network size 
estimate
+ * @param std_dev standard deviation for the estimate
+ */
+static void
+nse_cb (void *cls,
+        struct GNUNET_TIME_Absolute timestamp,
+        double logestimate,
+        double std_dev)
+{
+  struct Plugin *plugin = cls;
+
+  plugin->env->network_size_cb (plugin->env->cls,
+                                timestamp,
+                                logestimate,
+                                std_dev);
 }
 
 
@@ -398,6 +525,10 @@ libgnunet_plugin_dhtu_ip_init (void *cls)
   struct GNUNET_DHTU_PluginFunctions *api;
   struct Plugin *plugin;
   struct GNUNET_MQ_MessageHandler handlers[] = {
+    GNUNET_MQ_hd_var_size (core_message,
+                           GNUNET_MESSAGE_TYPE_DHT_CORE,
+                           struct GNUNET_MessageHeader,
+                           NULL),
     GNUNET_MQ_handler_end ()
   };
 
@@ -417,6 +548,9 @@ libgnunet_plugin_dhtu_ip_init (void *cls)
                                       &core_connect_cb,
                                       &core_disconnect_cb,
                                       handlers);
+  plugin->nse = GNUNET_NSE_connect (env->cfg,
+                                    &nse_cb,
+                                    plugin);
   return api;
 }
 
@@ -433,6 +567,7 @@ libgnunet_plugin_dhtu_gnunet_done (void *cls)
   struct GNUNET_DHTU_PluginFunctions *api = cls;
   struct Plugin *plugin = api->cls;
 
+  GNUNET_NSE_disconnect (plugin->nse);
   GNUNET_CORE_disconnect (plugin->core);
   GNUNET_free (plugin);
   GNUNET_free (api);
diff --git a/src/include/gnunet_mq_lib.h b/src/include/gnunet_mq_lib.h
index 765647a98..a1c5c4957 100644
--- a/src/include/gnunet_mq_lib.h
+++ b/src/include/gnunet_mq_lib.h
@@ -305,7 +305,8 @@ enum GNUNET_MQ_PriorityPreferences
  * @param cls closure
  * @param msg the received message
  */
-typedef void (*GNUNET_MQ_MessageCallback) (
+typedef void
+(*GNUNET_MQ_MessageCallback) (
   void *cls,
   const struct GNUNET_MessageHeader *msg);
 
@@ -318,7 +319,8 @@ typedef void (*GNUNET_MQ_MessageCallback) (
  * @return #GNUNET_OK if the message is well-formed,
  *         #GNUNET_SYSERR if not
  */
-typedef int (*GNUNET_MQ_MessageValidationCallback) (
+typedef int
+(*GNUNET_MQ_MessageValidationCallback) (
   void *cls,
   const struct GNUNET_MessageHeader *msg);
 
@@ -826,7 +828,8 @@ GNUNET_MQ_get_length (struct GNUNET_MQ_Handle *mq);
  * @param ev the envelope with the message to send.
  */
 void
-GNUNET_MQ_send (struct GNUNET_MQ_Handle *mq, struct GNUNET_MQ_Envelope *ev);
+GNUNET_MQ_send (struct GNUNET_MQ_Handle *mq,
+                struct GNUNET_MQ_Envelope *ev);
 
 
 /**
@@ -859,7 +862,8 @@ GNUNET_MQ_send_cancel (struct GNUNET_MQ_Envelope *ev);
  * @param assoc_data to associate
  */
 uint32_t
-GNUNET_MQ_assoc_add (struct GNUNET_MQ_Handle *mq, void *assoc_data);
+GNUNET_MQ_assoc_add (struct GNUNET_MQ_Handle *mq,
+                     void *assoc_data);
 
 
 /**
@@ -870,7 +874,8 @@ GNUNET_MQ_assoc_add (struct GNUNET_MQ_Handle *mq, void 
*assoc_data);
  * @return the associated data
  */
 void *
-GNUNET_MQ_assoc_get (struct GNUNET_MQ_Handle *mq, uint32_t request_id);
+GNUNET_MQ_assoc_get (struct GNUNET_MQ_Handle *mq,
+                     uint32_t request_id);
 
 
 /**
@@ -881,7 +886,8 @@ GNUNET_MQ_assoc_get (struct GNUNET_MQ_Handle *mq, uint32_t 
request_id);
  * @return the associated data
  */
 void *
-GNUNET_MQ_assoc_remove (struct GNUNET_MQ_Handle *mq, uint32_t request_id);
+GNUNET_MQ_assoc_remove (struct GNUNET_MQ_Handle *mq,
+                        uint32_t request_id);
 
 
 /**
diff --git a/src/include/gnunet_protocols.h b/src/include/gnunet_protocols.h
index 6b61dfc72..41f2876e6 100644
--- a/src/include/gnunet_protocols.h
+++ b/src/include/gnunet_protocols.h
@@ -659,6 +659,11 @@ extern "C" {
  */
 #define GNUNET_MESSAGE_TYPE_DHT_CLIENT_GET_RESULTS_KNOWN 156
 
+/**
+ * DHT wants to use CORE to transmit data.
+ */
+#define GNUNET_MESSAGE_TYPE_DHT_CORE 143
+
 /**
  * Further X-VINE DHT messages continued from 880
  */

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]