GNUnet  0.17.6
gnunet-service-cadet_dht.h File Reference

cadet service; dealing with DHT requests and results More...

#include "platform.h"
#include "gnunet_util_lib.h"
Include dependency graph for gnunet-service-cadet_dht.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.


void GCD_init (const struct GNUNET_CONFIGURATION_Handle *c)
 Initialize the DHT subsystem. More...
void GCD_shutdown (void)
 Shut down the DHT subsystem. More...
void GCD_hello_update (void)
 Function called by the HELLO subsystem whenever OUR hello changes. More...
struct GCD_search_handleGCD_search (const struct GNUNET_PeerIdentity *peer_id)
 Search DHT for paths to peeR_id. More...
void GCD_search_stop (struct GCD_search_handle *h)
 Stop DHT search started with GCD_search(). More...

Detailed Description

cadet service; dealing with DHT requests and results

Bartlomiej Polot
Christian Grothoff

All functions in this file should use the prefix GCD (Gnunet Cadet Dht)

Definition in file gnunet-service-cadet_dht.h.

Function Documentation

◆ GCD_init()

void GCD_init ( const struct GNUNET_CONFIGURATION_Handle c)

Initialize the DHT subsystem.


Definition at line 229 of file gnunet-service-cadet_dht.c.

230 {
231  if (GNUNET_OK !=
233  "CADET",
236  {
238  "CADET",
242  }
244  if (GNUNET_OK !=
246  "CADET",
249  {
251  "CADET",
253  "MISSING");
255  return;
256  }
259  64);
260  GNUNET_break (NULL != dht_handle);
263  &announce_id,
264  NULL);
265 }
static struct GNUNET_SCHEDULER_Task * announce_id_task
Task to periodically announce itself in the network.
static struct GNUNET_TIME_Relative id_announce_time
How often to PUT own ID in the DHT.
static unsigned long long dht_replication_level
DHT replication level, see DHT API: GNUNET_DHT_get_start(), GNUNET_DHT_put().
static struct GNUNET_TIME_Relative announce_delay
Delay for the next ID announce.
static void announce_id(void *cls)
Periodically announce self id in the DHT.
static struct GNUNET_DHT_Handle * dht_handle
Handle to use DHT.
How long do we wait before first announcing our presence to the DHT.
enum GNUNET_GenericReturnValue GNUNET_CONFIGURATION_get_value_number(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, unsigned long long *number)
Get a configuration value that should be a number.
enum GNUNET_GenericReturnValue GNUNET_CONFIGURATION_get_value_time(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, struct GNUNET_TIME_Relative *time)
Get a configuration value that should be a relative time.
struct GNUNET_DHT_Handle * GNUNET_DHT_connect(const struct GNUNET_CONFIGURATION_Handle *cfg, unsigned int ht_len)
Initialize the connection with the DHT service.
Definition: dht_api.c:1039
Definition: gnunet_common.h:99
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur.
void GNUNET_log_config_invalid(enum GNUNET_ErrorType kind, const char *section, const char *option, const char *required)
Log error message about invalid configuration option value.
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:533
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_delayed(struct GNUNET_TIME_Relative delay, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified delay.
Definition: scheduler.c:1254
One second.

References announce_delay, announce_id(), announce_id_task, dht_handle, dht_replication_level, GNUNET_break, GNUNET_CONFIGURATION_get_value_number(), GNUNET_CONFIGURATION_get_value_time(), GNUNET_DHT_connect(), GNUNET_ERROR_TYPE_ERROR, GNUNET_ERROR_TYPE_WARNING, GNUNET_log_config_invalid(), GNUNET_OK, GNUNET_SCHEDULER_add_delayed(), GNUNET_SCHEDULER_shutdown(), GNUNET_TIME_UNIT_SECONDS, id_announce_time, and STARTUP_DELAY.

Referenced by run().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GCD_shutdown()

void GCD_shutdown ( void  )

Shut down the DHT subsystem.

Definition at line 269 of file gnunet-service-cadet_dht.c.

270 {
271  if (NULL != dht_handle)
272  {
274  dht_handle = NULL;
275  }
276  if (NULL != announce_id_task)
277  {
279  announce_id_task = NULL;
280  }
281 }
void GNUNET_DHT_disconnect(struct GNUNET_DHT_Handle *handle)
Shutdown connection with the DHT service.
Definition: dht_api.c:1062
void * GNUNET_SCHEDULER_cancel(struct GNUNET_SCHEDULER_Task *task)
Cancel the task with the specified identifier.
Definition: scheduler.c:957

References announce_id_task, dht_handle, GNUNET_DHT_disconnect(), and GNUNET_SCHEDULER_cancel().

Referenced by shutdown_rest().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GCD_hello_update()

void GCD_hello_update ( void  )

Function called by the HELLO subsystem whenever OUR hello changes.

Re-triggers the DHT PUT immediately.

Definition at line 216 of file gnunet-service-cadet_dht.c.

217 {
218  if (NULL == announce_id_task)
219  return; /* too early */
223  &announce_id,
224  NULL);
225 }
How long do we wait after we get an updated HELLO before publishing? Allows for the HELLO to be updat...

References announce_id(), announce_id_task, CHANGE_DELAY, GNUNET_SCHEDULER_add_delayed(), and GNUNET_SCHEDULER_cancel().

Referenced by got_hello().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GCD_search()

struct GCD_search_handle* GCD_search ( const struct GNUNET_PeerIdentity peer_id)

Search DHT for paths to peeR_id.

peer_idpeer to search for
handle to abort search

Definition at line 285 of file gnunet-service-cadet_dht.c.

286 {
287  struct GNUNET_HashCode phash;
288  struct GCD_search_handle *h;
291  "# DHT search",
292  1,
293  GNUNET_NO);
294  memset (&phash,
295  0,
296  sizeof(phash));
297  GNUNET_memcpy (&phash,
298  peer_id,
299  sizeof(*peer_id));
301  h = GNUNET_new (struct GCD_search_handle);
302  h->dhtget = GNUNET_DHT_get_start (dht_handle, /* handle */
304  &phash, /* key to search */
305  dht_replication_level, /* replication level */
308  NULL, /* xquery */
309  0, /* xquery bits */
311  h);
313  "Starting DHT GET for peer %s (%p)\n",
315  h);
316  return h;
317 }
Type of a block that contains a HELLO for a peer.
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:99
static char * peer_id
Option –peer.
Definition: gnunet-cadet.c:42
struct GNUNET_STATISTICS_Handle * stats
Handle to the statistics service.
#define LOG(level,...)
static void dht_get_id_handler(void *cls, struct GNUNET_TIME_Absolute exp, const struct GNUNET_HashCode *key, const struct GNUNET_PeerIdentity *trunc_peer, const struct GNUNET_DHT_PathElement *get_path, unsigned int get_path_length, const struct GNUNET_DHT_PathElement *put_path, unsigned int put_path_length, enum GNUNET_BLOCK_Type type, size_t size, const void *data)
Function to process paths received for a new peer addition.
struct GNUNET_DHT_GetHandle * GNUNET_DHT_get_start(struct GNUNET_DHT_Handle *handle, enum GNUNET_BLOCK_Type type, const struct GNUNET_HashCode *key, uint32_t desired_replication_level, enum GNUNET_DHT_RouteOption options, const void *xquery, size_t xquery_size, GNUNET_DHT_GetIterator iter, void *iter_cls)
Perform an asynchronous GET operation on the DHT identified.
Definition: dht_api.c:1164
We should keep track of the route that the message took in the P2P network.
Each peer along the way should process the request (otherwise only peers locally closest to the key w...
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
Definition: gnunet_common.h:98
const char * GNUNET_i2s(const struct GNUNET_PeerIdentity *pid)
Convert a peer identity to a string (for printing debug messages).
#define GNUNET_new(type)
Allocate a struct or union of the given type.
void GNUNET_STATISTICS_update(struct GNUNET_STATISTICS_Handle *handle, const char *name, int64_t delta, int make_persistent)
Set statistic value for the peer.
A 512-bit hashcode.

References dht_get_id_handler(), dht_handle, dht_replication_level, GNUNET_BLOCK_TYPE_DHT_HELLO, GNUNET_DHT_get_start(), GNUNET_DHT_RO_DEMULTIPLEX_EVERYWHERE, GNUNET_DHT_RO_RECORD_ROUTE, GNUNET_ERROR_TYPE_DEBUG, GNUNET_i2s(), GNUNET_memcpy, GNUNET_new, GNUNET_NO, GNUNET_STATISTICS_update(), h, LOG, peer_id, and stats.

Referenced by consider_peer_activate(), and GCP_path_entry_remove().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GCD_search_stop()

void GCD_search_stop ( struct GCD_search_handle h)

Stop DHT search started with GCD_search().

hhandle to search to stop

Definition at line 321 of file gnunet-service-cadet_dht.c.

322 {
324  "Stopping DHT GET %p\n",
325  h);
326  GNUNET_DHT_get_stop (h->dhtget);
327  GNUNET_free (h);
328 }
void GNUNET_DHT_get_stop(struct GNUNET_DHT_GetHandle *get_handle)
Stop async DHT-get.
Definition: dht_api.c:1237
#define GNUNET_free(ptr)
Wrapper around free.

References GNUNET_DHT_get_stop(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, h, and LOG.

Referenced by consider_peer_activate(), destroy_peer(), and GCP_path_entry_add().

Here is the call graph for this function:
Here is the caller graph for this function: