GNUnet  0.11.x
Data Structures | Macros | Functions | Variables
gnunet-service-zonemaster-monitor.c File Reference

monitor namestore changes and publish them immediately to GNUnet name system More...

#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_dht_service.h"
#include "gnunet_namestore_service.h"
#include "gnunet_statistics_service.h"
Include dependency graph for gnunet-service-zonemaster-monitor.c:

Go to the source code of this file.

Data Structures

struct  DhtPutActivity
 Handle for DHT PUT activity triggered from the namestore monitor. More...
 

Macros

#define LOG_STRERROR_FILE(kind, syscall, filename)
 
#define PUBLISH_OPS_PER_EXPIRATION   4
 How often should we (re)publish each record before it expires? More...
 
#define DHT_QUEUE_LIMIT   2000
 How many pending DHT operations do we allow at most? More...
 
#define NAMESTORE_QUEUE_LIMIT   5
 How many events may the namestore give us before it has to wait for us to keep up? More...
 
#define DHT_GNS_REPLICATION_LEVEL   5
 What replication level do we use for DHT PUT operations? More...
 

Functions

static void shutdown_task (void *cls)
 Task run during shutdown. More...
 
static void dht_put_monitor_continuation (void *cls)
 Continuation called from DHT once the PUT operation triggered by a monitor is done. More...
 
static unsigned int convert_records_for_export (const struct GNUNET_GNSRECORD_Data *rd, unsigned int rd_count, struct GNUNET_GNSRECORD_Data *rd_public)
 Convert namestore records from the internal format to that suitable for publication (removes private records, converts to absolute expiration time). More...
 
static struct GNUNET_DHT_PutHandleperform_dht_put (const struct GNUNET_IDENTITY_PrivateKey *key, const char *label, const struct GNUNET_GNSRECORD_Data *rd_public, unsigned int rd_public_count, struct DhtPutActivity *ma)
 Store GNS records in the DHT. More...
 
static void handle_monitor_event (void *cls, const struct GNUNET_IDENTITY_PrivateKey *zone, const char *label, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
 Process a record that was stored in the namestore (invoked by the monitor). More...
 
static void handle_monitor_error (void *cls)
 The zone monitor encountered an IPC error trying to to get in sync. More...
 
static void run (void *cls, const struct GNUNET_CONFIGURATION_Handle *c, struct GNUNET_SERVICE_Handle *service)
 Performe zonemaster duties: watch namestore, publish records. More...
 
 GNUNET_SERVICE_MAIN ("zonemaster-monitor", GNUNET_SERVICE_OPTION_NONE, &run, NULL, NULL, NULL, GNUNET_MQ_handler_end())
 Define "main" method using service macro. More...
 

Variables

static struct GNUNET_STATISTICS_Handlestatistics
 Handle to the statistics service. More...
 
static struct GNUNET_DHT_Handledht_handle
 Our handle to the DHT. More...
 
static struct GNUNET_NAMESTORE_Handlenamestore_handle
 Our handle to the namestore service. More...
 
static struct GNUNET_NAMESTORE_ZoneMonitorzmon
 Handle to monitor namestore changes to instant propagation. More...
 
static struct DhtPutActivityma_head
 Head of monitor activities; kept in a DLL. More...
 
static struct DhtPutActivityma_tail
 Tail of monitor activities; kept in a DLL. More...
 
static unsigned int ma_queue_length
 Number of entries in the DHT queue ma_head. More...
 
static int cache_keys
 Optimize block insertion by caching map of private keys to public keys in memory? More...
 

Detailed Description

monitor namestore changes and publish them immediately to GNUnet name system

Author
Christian Grothoff

Definition in file gnunet-service-zonemaster-monitor.c.

Macro Definition Documentation

◆ LOG_STRERROR_FILE

#define LOG_STRERROR_FILE (   kind,
  syscall,
  filename 
)
Value:
syscall, \
#define GNUNET_log_from_strerror_file(level, component, cmd, filename)
Log an error message at log-level 'level' that indicates a failure of the command 'cmd' with the mess...
static char * filename

Definition at line 33 of file gnunet-service-zonemaster-monitor.c.

◆ PUBLISH_OPS_PER_EXPIRATION

#define PUBLISH_OPS_PER_EXPIRATION   4

How often should we (re)publish each record before it expires?

Definition at line 43 of file gnunet-service-zonemaster-monitor.c.

◆ DHT_QUEUE_LIMIT

#define DHT_QUEUE_LIMIT   2000

How many pending DHT operations do we allow at most?

Definition at line 48 of file gnunet-service-zonemaster-monitor.c.

Referenced by handle_monitor_event().

◆ NAMESTORE_QUEUE_LIMIT

#define NAMESTORE_QUEUE_LIMIT   5

How many events may the namestore give us before it has to wait for us to keep up?

Definition at line 54 of file gnunet-service-zonemaster-monitor.c.

Referenced by run().

◆ DHT_GNS_REPLICATION_LEVEL

#define DHT_GNS_REPLICATION_LEVEL   5

What replication level do we use for DHT PUT operations?

Definition at line 59 of file gnunet-service-zonemaster-monitor.c.

Referenced by perform_dht_put().

Function Documentation

◆ shutdown_task()

static void shutdown_task ( void *  cls)
static

Task run during shutdown.

Parameters
clsunused
tcunused

Definition at line 138 of file gnunet-service-zonemaster-monitor.c.

References GNUNET_CONTAINER_DLL_remove, GNUNET_DHT_disconnect(), GNUNET_DHT_put_cancel(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_log, GNUNET_NAMESTORE_disconnect(), GNUNET_NAMESTORE_zone_monitor_stop(), GNUNET_NO, GNUNET_STATISTICS_destroy(), ma_queue_length, and DhtPutActivity::ph.

Referenced by run().

139 {
140  struct DhtPutActivity *ma;
141 
142  (void) cls;
144  "Shutting down!\n");
145  while (NULL != (ma = ma_head))
146  {
148  ma_queue_length--;
150  ma_tail,
151  ma);
152  GNUNET_free (ma);
153  }
154  if (NULL != statistics)
155  {
157  GNUNET_NO);
158  statistics = NULL;
159  }
160  if (NULL != zmon)
161  {
163  zmon = NULL;
164  }
165  if (NULL != namestore_handle)
166  {
168  namestore_handle = NULL;
169  }
170  if (NULL != dht_handle)
171  {
173  dht_handle = NULL;
174  }
175 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
struct GNUNET_DHT_PutHandle * ph
Handle for the DHT PUT operation.
void GNUNET_DHT_put_cancel(struct GNUNET_DHT_PutHandle *ph)
Cancels a DHT PUT operation.
Definition: dht_api.c:1035
static struct GNUNET_STATISTICS_Handle * statistics
Handle to the statistics service.
static struct GNUNET_NAMESTORE_ZoneMonitor * zmon
Handle to monitor namestore changes to instant propagation.
void GNUNET_NAMESTORE_zone_monitor_stop(struct GNUNET_NAMESTORE_ZoneMonitor *zm)
Stop monitoring a zone for changes.
void GNUNET_STATISTICS_destroy(struct GNUNET_STATISTICS_Handle *h, int sync_first)
Destroy a handle (free all state associated with it).
Handle for DHT PUT activity triggered from the namestore monitor.
static struct GNUNET_NAMESTORE_Handle * namestore_handle
Our handle to the namestore service.
void GNUNET_NAMESTORE_disconnect(struct GNUNET_NAMESTORE_Handle *h)
Disconnect from the namestore service (and free associated resources).
void GNUNET_DHT_disconnect(struct GNUNET_DHT_Handle *handle)
Shutdown connection with the DHT service.
Definition: dht_api.c:918
static struct DhtPutActivity * ma_head
Head of monitor activities; kept in a DLL.
static struct DhtPutActivity * ma_tail
Tail of monitor activities; kept in a DLL.
#define GNUNET_log(kind,...)
static struct GNUNET_DHT_Handle * dht_handle
Our handle to the DHT.
static unsigned int ma_queue_length
Number of entries in the DHT queue ma_head.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ dht_put_monitor_continuation()

static void dht_put_monitor_continuation ( void *  cls)
static

Continuation called from DHT once the PUT operation triggered by a monitor is done.

Parameters
clsa struct DhtPutActivity

Definition at line 185 of file gnunet-service-zonemaster-monitor.c.

References GNUNET_CONTAINER_DLL_remove, GNUNET_free, GNUNET_NAMESTORE_zone_monitor_next(), and ma_queue_length.

Referenced by perform_dht_put().

186 {
187  struct DhtPutActivity *ma = cls;
188 
190  1);
191  ma_queue_length--;
193  ma_tail,
194  ma);
195  GNUNET_free (ma);
196 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
static struct GNUNET_NAMESTORE_ZoneMonitor * zmon
Handle to monitor namestore changes to instant propagation.
Handle for DHT PUT activity triggered from the namestore monitor.
static struct DhtPutActivity * ma_head
Head of monitor activities; kept in a DLL.
static struct DhtPutActivity * ma_tail
Tail of monitor activities; kept in a DLL.
static unsigned int ma_queue_length
Number of entries in the DHT queue ma_head.
void GNUNET_NAMESTORE_zone_monitor_next(struct GNUNET_NAMESTORE_ZoneMonitor *zm, uint64_t limit)
Calls the monitor processor specified in GNUNET_NAMESTORE_zone_monitor_start for the next record(s)...
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ convert_records_for_export()

static unsigned int convert_records_for_export ( const struct GNUNET_GNSRECORD_Data rd,
unsigned int  rd_count,
struct GNUNET_GNSRECORD_Data rd_public 
)
static

Convert namestore records from the internal format to that suitable for publication (removes private records, converts to absolute expiration time).

Parameters
rdinput records
rd_countsize of the rd and rd_public arrays
rd_publicwhere to write the converted records
Returns
number of records written to rd_public

Definition at line 210 of file gnunet-service-zonemaster-monitor.c.

References GNUNET_TIME_Absolute::abs_value_us, GNUNET_GNSRECORD_RF_PRIVATE, GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION, and GNUNET_TIME_absolute_get().

Referenced by handle_monitor_event().

213 {
214  struct GNUNET_TIME_Absolute now;
215  unsigned int rd_public_count;
216 
217  rd_public_count = 0;
218  now = GNUNET_TIME_absolute_get ();
219  for (unsigned int i = 0; i < rd_count; i++)
220  {
221  if (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_PRIVATE))
222  continue;
223  if ((0 == (rd[i].flags & GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION)) &&
224  (rd[i].expiration_time < now.abs_value_us))
225  continue; /* record already expired, skip it */
226  rd_public[rd_public_count++] = rd[i];
227  }
228  return rd_public_count;
229 }
This is a private record of this peer and it should thus not be handed out to other peers...
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get(void)
Get the current time.
Definition: time.c:118
Time for absolute times used by GNUnet, in microseconds.
This expiration time of the record is a relative time (not an absolute time).
Here is the call graph for this function:
Here is the caller graph for this function:

◆ perform_dht_put()

static struct GNUNET_DHT_PutHandle* perform_dht_put ( const struct GNUNET_IDENTITY_PrivateKey key,
const char *  label,
const struct GNUNET_GNSRECORD_Data rd_public,
unsigned int  rd_public_count,
struct DhtPutActivity ma 
)
static

Store GNS records in the DHT.

Parameters
keykey of the zone
labellabel to store under
rd_publicpublic record data
rd_public_countnumber of records in rd_public
mahandle for the PUT operation
Returns
DHT PUT handle, NULL on error

Definition at line 243 of file gnunet-service-zonemaster-monitor.c.

References cache_keys, DHT_GNS_REPLICATION_LEVEL, dht_put_monitor_continuation(), GNUNET_BLOCK_TYPE_GNS_NAMERECORD, GNUNET_break, GNUNET_DHT_put(), GNUNET_DHT_RO_DEMULTIPLEX_EVERYWHERE, GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_GNSRECORD_block_create(), GNUNET_GNSRECORD_block_create2(), GNUNET_GNSRECORD_block_get_size(), GNUNET_GNSRECORD_query_from_private_key(), GNUNET_GNSRECORD_record_get_expiration_time(), GNUNET_h2s(), GNUNET_log, GNUNET_NO, GNUNET_STATISTICS_update(), GNUNET_STRINGS_absolute_time_to_string(), and ret.

Referenced by handle_monitor_event().

248 {
249  struct GNUNET_GNSRECORD_Block *block;
250  struct GNUNET_HashCode query;
252  size_t block_size;
253  struct GNUNET_DHT_PutHandle *ret;
254 
256  rd_public);
257  if (cache_keys)
258  block = GNUNET_GNSRECORD_block_create2 (key,
259  expire,
260  label,
261  rd_public,
262  rd_public_count);
263  else
264  block = GNUNET_GNSRECORD_block_create (key,
265  expire,
266  label,
267  rd_public,
268  rd_public_count);
269  if (NULL == block)
270  {
271  GNUNET_break (0);
272  return NULL; /* whoops */
273  }
274  block_size = GNUNET_GNSRECORD_block_get_size (block);
276  label,
277  &query);
279  "DHT put operations initiated",
280  1,
281  GNUNET_NO);
283  "Storing %u record(s) for label `%s' in DHT with expiration `%s' under key %s\n",
284  rd_public_count,
285  label,
287  GNUNET_h2s (&query));
288  ret = GNUNET_DHT_put (dht_handle,
289  &query,
293  block_size,
294  block,
295  expire,
297  ma);
298  GNUNET_free (block);
299  return ret;
300 }
static int cache_keys
Optimize block insertion by caching map of private keys to public keys in memory? ...
static struct GNUNET_STATISTICS_Handle * statistics
Handle to the statistics service.
static void expire(void *cls)
Expire a PooledConnection object.
#define DHT_GNS_REPLICATION_LEVEL
What replication level do we use for DHT PUT operations?
static int ret
Return value of the commandline.
Definition: gnunet-abd.c:81
const char * GNUNET_h2s(const struct GNUNET_HashCode *hc)
Convert a hash value to a string (for printing debug messages).
void GNUNET_STATISTICS_update(struct GNUNET_STATISTICS_Handle *handle, const char *name, int64_t delta, int make_persistent)
Set statistic value for the peer.
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
struct GNUNET_GNSRECORD_Block * GNUNET_GNSRECORD_block_create(const struct GNUNET_IDENTITY_PrivateKey *key, struct GNUNET_TIME_Absolute expire, const char *label, const struct GNUNET_GNSRECORD_Data *rd, unsigned int rd_count)
Sign name and records.
size_t GNUNET_GNSRECORD_block_get_size(const struct GNUNET_GNSRECORD_Block *block)
Returns the length of this block in bytes.
struct GNUNET_GNSRECORD_Block * GNUNET_GNSRECORD_block_create2(const struct GNUNET_IDENTITY_PrivateKey *pkey, struct GNUNET_TIME_Absolute expire, const char *label, const struct GNUNET_GNSRECORD_Data *rd, unsigned int rd_count)
Sign name and records, cache derived public key (also keeps the private key in static memory...
Block for storing record data.
A 512-bit hashcode.
struct GNUNET_TIME_Absolute GNUNET_GNSRECORD_record_get_expiration_time(unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
Returns the expiration time of the given block of records.
struct GNUNET_DHT_PutHandle * GNUNET_DHT_put(struct GNUNET_DHT_Handle *handle, const struct GNUNET_HashCode *key, uint32_t desired_replication_level, enum GNUNET_DHT_RouteOption options, enum GNUNET_BLOCK_Type type, size_t size, const void *data, struct GNUNET_TIME_Absolute exp, GNUNET_SCHEDULER_TaskCallback cont, void *cont_cls)
Perform a PUT operation storing data in the DHT.
Definition: dht_api.c:966
void GNUNET_GNSRECORD_query_from_private_key(const struct GNUNET_IDENTITY_PrivateKey *zone, const char *label, struct GNUNET_HashCode *query)
Calculate the DHT query for a given label in a given zone.
Handle to a PUT request.
Definition: dht_api.c:43
#define GNUNET_log(kind,...)
static struct GNUNET_DHT_Handle * dht_handle
Our handle to the DHT.
Time for absolute times used by GNUnet, in microseconds.
static void dht_put_monitor_continuation(void *cls)
Continuation called from DHT once the PUT operation triggered by a monitor is done.
const char * GNUNET_STRINGS_absolute_time_to_string(struct GNUNET_TIME_Absolute t)
Like asctime, except for GNUnet time.
Definition: strings.c:758
Each peer along the way should look at &#39;enc&#39; (otherwise only the k-peers closest to the key should lo...
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ handle_monitor_event()

static void handle_monitor_event ( void *  cls,
const struct GNUNET_IDENTITY_PrivateKey zone,
const char *  label,
unsigned int  rd_count,
const struct GNUNET_GNSRECORD_Data rd 
)
static

Process a record that was stored in the namestore (invoked by the monitor).

Parameters
clsclosure, NULL
zoneprivate key of the zone; NULL on disconnect
labellabel of the records; NULL on disconnect
rd_countnumber of entries in rd array, 0 if label was deleted
rdarray of records with data to store

Definition at line 314 of file gnunet-service-zonemaster-monitor.c.

References convert_records_for_export(), DHT_QUEUE_LIMIT, GNUNET_CONTAINER_DLL_insert_tail, GNUNET_CONTAINER_DLL_remove, GNUNET_DHT_put_cancel(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_ERROR_TYPE_WARNING, GNUNET_free, GNUNET_log, GNUNET_NAMESTORE_zone_monitor_next(), GNUNET_new, GNUNET_NO, GNUNET_STATISTICS_update(), GNUNET_STRINGS_relative_time_to_string(), GNUNET_TIME_absolute_get(), GNUNET_TIME_absolute_get_duration(), GNUNET_YES, ma_head, ma_queue_length, perform_dht_put(), DhtPutActivity::ph, and DhtPutActivity::start_date.

Referenced by run().

319 {
320  struct GNUNET_GNSRECORD_Data rd_public[rd_count];
321  unsigned int rd_public_count;
322  struct DhtPutActivity *ma;
323 
324  (void) cls;
326  "Namestore monitor events received",
327  1,
328  GNUNET_NO);
330  "Received %u records for label `%s' via namestore monitor\n",
331  rd_count,
332  label);
333  /* filter out records that are not public, and convert to
334  absolute expiration time. */
335  rd_public_count = convert_records_for_export (rd,
336  rd_count,
337  rd_public);
338  if (0 == rd_public_count)
339  {
341  1);
342  return; /* nothing to do */
343  }
344  ma = GNUNET_new (struct DhtPutActivity);
346  ma->ph = perform_dht_put (zone,
347  label,
348  rd,
349  rd_count,
350  ma);
351  if (NULL == ma->ph)
352  {
353  /* PUT failed, do not remember operation */
354  GNUNET_free (ma);
356  1);
357  return;
358  }
360  ma_tail,
361  ma);
362  ma_queue_length++;
364  {
365  ma = ma_head;
367  ma_tail,
368  ma);
370  ma_queue_length--;
372  "DHT PUT unconfirmed after %s, aborting PUT\n",
375  GNUNET_YES));
376  GNUNET_free (ma);
377  }
378 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
struct GNUNET_DHT_PutHandle * ph
Handle for the DHT PUT operation.
void GNUNET_DHT_put_cancel(struct GNUNET_DHT_PutHandle *ph)
Cancels a DHT PUT operation.
Definition: dht_api.c:1035
static struct GNUNET_STATISTICS_Handle * statistics
Handle to the statistics service.
static struct GNUNET_NAMESTORE_ZoneMonitor * zmon
Handle to monitor namestore changes to instant propagation.
struct GNUNET_TIME_Absolute start_date
When was this PUT initiated?
#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.
Handle for DHT PUT activity triggered from the namestore monitor.
#define DHT_QUEUE_LIMIT
How many pending DHT operations do we allow at most?
const char * GNUNET_STRINGS_relative_time_to_string(struct GNUNET_TIME_Relative delta, int do_round)
Give relative time in human-readable fancy format.
Definition: strings.c:702
static struct GNUNET_DHT_PutHandle * perform_dht_put(const struct GNUNET_IDENTITY_PrivateKey *key, const char *label, const struct GNUNET_GNSRECORD_Data *rd_public, unsigned int rd_public_count, struct DhtPutActivity *ma)
Store GNS records in the DHT.
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get(void)
Get the current time.
Definition: time.c:118
#define GNUNET_CONTAINER_DLL_insert_tail(head, tail, element)
Insert an element at the tail of a DLL.
static struct DhtPutActivity * ma_head
Head of monitor activities; kept in a DLL.
static struct DhtPutActivity * ma_tail
Tail of monitor activities; kept in a DLL.
struct GNUNET_TIME_Relative GNUNET_TIME_absolute_get_duration(struct GNUNET_TIME_Absolute whence)
Get the duration of an operation as the difference of the current time and the given start time "henc...
Definition: time.c:375
#define GNUNET_log(kind,...)
static unsigned int ma_queue_length
Number of entries in the DHT queue ma_head.
static unsigned int convert_records_for_export(const struct GNUNET_GNSRECORD_Data *rd, unsigned int rd_count, struct GNUNET_GNSRECORD_Data *rd_public)
Convert namestore records from the internal format to that suitable for publication (removes private ...
void GNUNET_NAMESTORE_zone_monitor_next(struct GNUNET_NAMESTORE_ZoneMonitor *zm, uint64_t limit)
Calls the monitor processor specified in GNUNET_NAMESTORE_zone_monitor_start for the next record(s)...
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ handle_monitor_error()

static void handle_monitor_error ( void *  cls)
static

The zone monitor encountered an IPC error trying to to get in sync.

Restart from the beginning.

Parameters
clsNULL

Definition at line 388 of file gnunet-service-zonemaster-monitor.c.

References GNUNET_NO, and GNUNET_STATISTICS_update().

Referenced by run().

389 {
390  (void) cls;
392  "Namestore monitor errors encountered",
393  1,
394  GNUNET_NO);
395 }
static struct GNUNET_STATISTICS_Handle * statistics
Handle to the statistics service.
void GNUNET_STATISTICS_update(struct GNUNET_STATISTICS_Handle *handle, const char *name, int64_t delta, int make_persistent)
Set statistic value for the peer.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ run()

static void run ( void *  cls,
const struct GNUNET_CONFIGURATION_Handle c,
struct GNUNET_SERVICE_Handle service 
)
static

Performe zonemaster duties: watch namestore, publish records.

Parameters
clsclosure
serverthe initialized server
cconfiguration to use

Definition at line 406 of file gnunet-service-zonemaster-monitor.c.

References _, cache_keys, GNUNET_break, GNUNET_CONFIGURATION_get_value_number(), GNUNET_CONFIGURATION_get_value_yesno(), GNUNET_DHT_connect(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_ERROR_TYPE_ERROR, GNUNET_log, GNUNET_MQ_handler_end, GNUNET_NAMESTORE_connect(), GNUNET_NAMESTORE_zone_monitor_next(), GNUNET_NAMESTORE_zone_monitor_start(), GNUNET_NO, GNUNET_OK, GNUNET_SCHEDULER_add_now(), GNUNET_SCHEDULER_add_shutdown(), GNUNET_SCHEDULER_shutdown(), GNUNET_SERVICE_MAIN(), GNUNET_SERVICE_OPTION_NONE, GNUNET_STATISTICS_create(), handle_monitor_error(), handle_monitor_event(), NAMESTORE_QUEUE_LIMIT, and shutdown_task().

409 {
410  unsigned long long max_parallel_bg_queries = 128;
411 
412  (void) cls;
413  (void) service;
415  if (NULL == namestore_handle)
416  {
418  _ ("Failed to connect to the namestore!\n"));
420  return;
421  }
423  "namestore",
424  "CACHE_KEYS");
425  if (GNUNET_OK ==
427  "zonemaster",
428  "MAX_PARALLEL_BACKGROUND_QUERIES",
429  &max_parallel_bg_queries))
430  {
432  "Number of allowed parallel background queries: %llu\n",
433  max_parallel_bg_queries);
434  }
435  if (0 == max_parallel_bg_queries)
436  max_parallel_bg_queries = 1;
438  (unsigned int) max_parallel_bg_queries);
439  if (NULL == dht_handle)
440  {
442  _ ("Could not connect to DHT!\n"));
444  NULL);
445  return;
446  }
447 
448  /* Schedule periodic put for our records. */
449  statistics = GNUNET_STATISTICS_create ("zonemaster-mon",
450  c);
452  NULL,
453  GNUNET_NO,
455  NULL,
457  NULL,
458  NULL /* sync_cb */,
459  NULL);
462  GNUNET_break (NULL != zmon);
464  NULL);
465 }
static int cache_keys
Optimize block insertion by caching map of private keys to public keys in memory? ...
static void shutdown_task(void *cls)
Task run during shutdown.
static struct GNUNET_STATISTICS_Handle * statistics
Handle to the statistics service.
static struct GNUNET_NAMESTORE_ZoneMonitor * zmon
Handle to monitor namestore changes to instant propagation.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_shutdown(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run on shutdown, that is when a CTRL-C signal is received, or when GNUNET_SCHEDULER_shutdown() is being invoked.
Definition: scheduler.c:1331
struct GNUNET_STATISTICS_Handle * GNUNET_STATISTICS_create(const char *subsystem, const struct GNUNET_CONFIGURATION_Handle *cfg)
Get handle for the statistics service.
struct GNUNET_NAMESTORE_ZoneMonitor * GNUNET_NAMESTORE_zone_monitor_start(const struct GNUNET_CONFIGURATION_Handle *cfg, const struct GNUNET_IDENTITY_PrivateKey *zone, int iterate_first, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_NAMESTORE_RecordMonitor monitor, void *monitor_cls, GNUNET_SCHEDULER_TaskCallback sync_cb, void *sync_cb_cls)
Begin monitoring a zone for changes.
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.
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:531
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
#define _(String)
GNU gettext support macro.
Definition: platform.h:184
static void handle_monitor_event(void *cls, const struct GNUNET_IDENTITY_PrivateKey *zone, const char *label, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
Process a record that was stored in the namestore (invoked by the monitor).
static struct GNUNET_NAMESTORE_Handle * namestore_handle
Our handle to the namestore service.
static void handle_monitor_error(void *cls)
The zone monitor encountered an IPC error trying to to get in sync.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_now(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run as soon as possible.
Definition: scheduler.c:1296
#define NAMESTORE_QUEUE_LIMIT
How many events may the namestore give us before it has to wait for us to keep up?
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:890
struct GNUNET_NAMESTORE_Handle * GNUNET_NAMESTORE_connect(const struct GNUNET_CONFIGURATION_Handle *cfg)
Connect to the namestore service.
#define GNUNET_log(kind,...)
static struct GNUNET_DHT_Handle * dht_handle
Our handle to the DHT.
enum GNUNET_GenericReturnValue GNUNET_CONFIGURATION_get_value_yesno(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option)
Get a configuration value that should be in a set of "YES" or "NO".
void GNUNET_NAMESTORE_zone_monitor_next(struct GNUNET_NAMESTORE_ZoneMonitor *zm, uint64_t limit)
Calls the monitor processor specified in GNUNET_NAMESTORE_zone_monitor_start for the next record(s)...
Here is the call graph for this function:

◆ GNUNET_SERVICE_MAIN()

GNUNET_SERVICE_MAIN ( "zonemaster-monitor ,
GNUNET_SERVICE_OPTION_NONE  ,
run,
NULL  ,
NULL  ,
NULL  ,
GNUNET_MQ_handler_end()   
)

Define "main" method using service macro.

Referenced by run().

Here is the caller graph for this function:

Variable Documentation

◆ statistics

struct GNUNET_STATISTICS_Handle* statistics
static

Handle to the statistics service.

Definition at line 92 of file gnunet-service-zonemaster-monitor.c.

◆ dht_handle

struct GNUNET_DHT_Handle* dht_handle
static

Our handle to the DHT.

Definition at line 97 of file gnunet-service-zonemaster-monitor.c.

◆ namestore_handle

struct GNUNET_NAMESTORE_Handle* namestore_handle
static

Our handle to the namestore service.

Definition at line 102 of file gnunet-service-zonemaster-monitor.c.

◆ zmon

struct GNUNET_NAMESTORE_ZoneMonitor* zmon
static

Handle to monitor namestore changes to instant propagation.

Definition at line 107 of file gnunet-service-zonemaster-monitor.c.

◆ ma_head

struct DhtPutActivity* ma_head
static

Head of monitor activities; kept in a DLL.

Definition at line 112 of file gnunet-service-zonemaster-monitor.c.

Referenced by handle_monitor_event().

◆ ma_tail

struct DhtPutActivity* ma_tail
static

Tail of monitor activities; kept in a DLL.

Definition at line 117 of file gnunet-service-zonemaster-monitor.c.

◆ ma_queue_length

unsigned int ma_queue_length
static

Number of entries in the DHT queue ma_head.

Definition at line 122 of file gnunet-service-zonemaster-monitor.c.

Referenced by dht_put_monitor_continuation(), handle_monitor_event(), and shutdown_task().

◆ cache_keys

int cache_keys
static

Optimize block insertion by caching map of private keys to public keys in memory?

Definition at line 128 of file gnunet-service-zonemaster-monitor.c.

Referenced by perform_dht_put(), and run().