[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.