GNUnet  0.10.x
Data Structures | Functions | Variables
gnunet-namestore.c File Reference

command line tool to manipulate the local zone More...

#include "platform.h"
#include <gnunet_util_lib.h>
#include <gnunet_dnsparser_lib.h>
#include <gnunet_identity_service.h>
#include <gnunet_gnsrecord_lib.h>
#include <gnunet_gns_service.h>
#include <gnunet_namestore_service.h>
Include dependency graph for gnunet-namestore.c:

Go to the source code of this file.

Data Structures

struct  RecordSetEntry
 Entry in record set for bulk processing. More...
 

Functions

static void do_shutdown (void *cls)
 Task run on shutdown. More...
 
static void test_finished ()
 Check if we are finished, and if so, perform shutdown. More...
 
static void add_continuation (void *cls, int32_t success, const char *emsg)
 Continuation called to notify client about result of the operation. More...
 
static void del_continuation (void *cls, int32_t success, const char *emsg)
 Continuation called to notify client about result of the operation. More...
 
static void zone_iteration_finished (void *cls)
 Function called when we are done with a zone iteration. More...
 
static void zone_iteration_error_cb (void *cls)
 Function called when we encountered an error in a zone iteration. More...
 
static void display_record (const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd)
 Process a record that was stored in the namestore. More...
 
static void display_record_iterator (void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd)
 Process a record that was stored in the namestore. More...
 
static void display_record_monitor (void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd)
 Process a record that was stored in the namestore. More...
 
static void display_record_lookup (void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd)
 Process a record that was stored in the namestore. More...
 
static void sync_cb (void *cls)
 Function called once we are in sync in monitor mode. More...
 
static void monitor_error_cb (void *cls)
 Function called on errors while monitoring. More...
 
static void lookup_error_cb (void *cls)
 Function called on errors while monitoring. More...
 
static void add_error_cb (void *cls)
 Function called if lookup fails. More...
 
static void get_existing_record (void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone_key, const char *rec_name, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
 We're storing a record; this function is given the existing record so that we can merge the information. More...
 
static void reverse_error_cb (void *cls)
 Function called if we encountered an error in zone-to-name. More...
 
static void handle_reverse_lookup (void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone, const char *label, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
 Function called with the result of our attempt to obtain a name for a given public key. More...
 
static void del_lookup_error_cb (void *cls)
 Function called if lookup for deletion fails. More...
 
static void del_monitor (void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone, const char *label, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
 We were asked to delete something; this function is called with the existing records. More...
 
static int parse_expiration (const char *expirationstring, int *etime_is_rel, uint64_t *etime)
 Parse expiration time. More...
 
static void replace_cont (void *cls, int success, const char *emsg)
 Function called when namestore is done with the replace operation. More...
 
static void run_with_zone_pkey (const struct GNUNET_CONFIGURATION_Handle *cfg)
 We have obtained the zone's private key, so now process the main commands using it. More...
 
static void identity_cb (void *cls, const struct GNUNET_IDENTITY_Ego *ego)
 Callback invoked from identity service with ego information. More...
 
static void default_ego_cb (void *cls, struct GNUNET_IDENTITY_Ego *ego, void **ctx, const char *name)
 Function called with the default ego to be used for GNS operations. More...
 
static void id_connect_cb (void *cls, struct GNUNET_IDENTITY_Ego *ego, void **ctx, const char *name)
 Function called with ALL of the egos known to the identity service, used on startup if the user did not specify a zone on the command-line. More...
 
static void run (void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
 Main function that will be run. More...
 
static int multirecord_process (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, void *scls, const char *option, const char *value)
 Command-line option parser function that allows the user to specify a complete record as one argument for adding/removing. More...
 
struct GNUNET_GETOPT_CommandLineOption multirecord_option (char shortName, const char *name, const char *argumentHelp, const char *description, struct RecordSetEntry **rs)
 Allow user to specify keywords. More...
 
int main (int argc, char *const *argv)
 The main function for gnunet-namestore. More...
 

Variables

static struct GNUNET_NAMESTORE_Handlens
 Handle to the namestore. More...
 
static struct GNUNET_CRYPTO_EcdsaPrivateKey zone_pkey
 Private key for the our zone. More...
 
static struct GNUNET_IDENTITY_EgoLookupel
 Handle to identity lookup. More...
 
static struct GNUNET_IDENTITY_Handleidh
 Identity service handle. More...
 
struct GNUNET_IDENTITY_Operationget_default
 Obtain default ego. More...
 
static char * ego_name
 Name of the ego controlling the zone. More...
 
static int add
 Desired action is to add a record. More...
 
static struct GNUNET_NAMESTORE_QueueEntryadd_qe_uri
 Queue entry for the 'add-uri' operation. More...
 
static struct GNUNET_NAMESTORE_QueueEntryadd_qe
 Queue entry for the 'add' operation. More...
 
static struct GNUNET_NAMESTORE_QueueEntryget_qe
 Queue entry for the 'lookup' operation. More...
 
static struct GNUNET_NAMESTORE_QueueEntryreverse_qe
 Queue entry for the 'reverse lookup' operation (in combination with a name). More...
 
static int list
 Desired action is to list records. More...
 
static struct GNUNET_NAMESTORE_ZoneIteratorlist_it
 List iterator for the 'list' operation. More...
 
static int del
 Desired action is to remove a record. More...
 
static int is_public
 Is record public (opposite of GNUNET_GNSRECORD_RF_PRIVATE) More...
 
static int is_shadow
 Is record a shadow record (GNUNET_GNSRECORD_RF_SHADOW_RECORD) More...
 
static struct GNUNET_NAMESTORE_QueueEntrydel_qe
 Queue entry for the 'del' operation. More...
 
static struct GNUNET_NAMESTORE_QueueEntryset_qe
 Queue entry for the 'set/replace' operation. More...
 
static char * name
 Name of the records to add/list/remove. More...
 
static char * value
 Value of the record to add/remove. More...
 
static char * uri
 URI to import. More...
 
static char * reverse_pkey
 Reverse lookup to perform. More...
 
static char * typestring
 Type of the record to add/remove, NULL to remove all. More...
 
static char * expirationstring
 Desired expiration time. More...
 
static char * nickstring
 Desired nick name. More...
 
static int ret
 Global return value. More...
 
static uint32_t type
 Type string converted to DNS type value. More...
 
static void * data
 Value in binary format. More...
 
static size_t data_size
 Number of bytes in data. More...
 
static uint64_t etime
 Expiration string converted to numeric value. More...
 
static int etime_is_rel = GNUNET_SYSERR
 Is expiration time relative or absolute time? More...
 
static struct GNUNET_NAMESTORE_ZoneMonitorzm
 Monitor handle. More...
 
static int monitor
 Enables monitor mode. More...
 
static struct RecordSetEntryrecordset
 Entry in record set for processing records in bulk. More...
 

Detailed Description

command line tool to manipulate the local zone

Author
Christian Grothoff

TODO:

Definition in file gnunet-namestore.c.

Function Documentation

◆ do_shutdown()

static void do_shutdown ( void *  cls)
static

Task run on shutdown.

Cleans up everything.

Parameters
clsunused

Definition at line 230 of file gnunet-namestore.c.

References data, GNUNET_free, GNUNET_IDENTITY_cancel(), GNUNET_IDENTITY_disconnect(), GNUNET_IDENTITY_ego_lookup_cancel(), GNUNET_NAMESTORE_cancel(), GNUNET_NAMESTORE_disconnect(), GNUNET_NAMESTORE_zone_iteration_stop(), GNUNET_NAMESTORE_zone_monitor_stop(), uri, and zone_pkey.

Referenced by run().

231 {
232  (void)cls;
233  if (NULL != get_default)
234  {
236  get_default = NULL;
237  }
238  if (NULL != idh)
239  {
241  idh = NULL;
242  }
243  if (NULL != el)
244  {
246  el = NULL;
247  }
248  if (NULL != list_it)
249  {
251  list_it = NULL;
252  }
253  if (NULL != add_qe)
254  {
256  add_qe = NULL;
257  }
258  if (NULL != set_qe)
259  {
261  set_qe = NULL;
262  }
263  if (NULL != add_qe_uri)
264  {
266  add_qe_uri = NULL;
267  }
268  if (NULL != get_qe)
269  {
271  get_qe = NULL;
272  }
273  if (NULL != del_qe)
274  {
276  del_qe = NULL;
277  }
278  if (NULL != ns)
279  {
281  ns = NULL;
282  }
283  memset(&zone_pkey, 0, sizeof(zone_pkey));
284  if (NULL != uri)
285  {
286  GNUNET_free(uri);
287  uri = NULL;
288  }
289  if (NULL != zm)
290  {
292  zm = NULL;
293  }
294  if (NULL != data)
295  {
296  GNUNET_free(data);
297  data = NULL;
298  }
299 }
void GNUNET_IDENTITY_cancel(struct GNUNET_IDENTITY_Operation *op)
Cancel an identity operation.
Definition: identity_api.c:816
void GNUNET_IDENTITY_ego_lookup_cancel(struct GNUNET_IDENTITY_EgoLookup *el)
Abort ego lookup attempt.
static struct GNUNET_NAMESTORE_QueueEntry * add_qe
Queue entry for the &#39;add&#39; operation.
static struct GNUNET_NAMESTORE_QueueEntry * add_qe_uri
Queue entry for the &#39;add-uri&#39; operation.
static struct GNUNET_IDENTITY_EgoLookup * el
Handle to identity lookup.
static void * data
Value in binary format.
void GNUNET_NAMESTORE_zone_monitor_stop(struct GNUNET_NAMESTORE_ZoneMonitor *zm)
Stop monitoring a zone for changes.
static struct GNUNET_NAMESTORE_ZoneMonitor * zm
Monitor handle.
void GNUNET_NAMESTORE_cancel(struct GNUNET_NAMESTORE_QueueEntry *qe)
Cancel a namestore operation.
static struct GNUNET_IDENTITY_Handle * idh
Identity service handle.
void GNUNET_NAMESTORE_disconnect(struct GNUNET_NAMESTORE_Handle *h)
Disconnect from the namestore service (and free associated resources).
static struct GNUNET_NAMESTORE_QueueEntry * set_qe
Queue entry for the &#39;set/replace&#39; operation.
void GNUNET_IDENTITY_disconnect(struct GNUNET_IDENTITY_Handle *h)
Disconnect from identity service.
Definition: identity_api.c:835
void GNUNET_NAMESTORE_zone_iteration_stop(struct GNUNET_NAMESTORE_ZoneIterator *it)
Stops iteration and releases the namestore handle for further calls.
static char * uri
URI to import.
struct GNUNET_IDENTITY_Operation * get_default
Obtain default ego.
static struct GNUNET_CRYPTO_EcdsaPrivateKey zone_pkey
Private key for the our zone.
static struct GNUNET_NAMESTORE_ZoneIterator * list_it
List iterator for the &#39;list&#39; operation.
static struct GNUNET_NAMESTORE_QueueEntry * get_qe
Queue entry for the &#39;lookup&#39; operation.
static struct GNUNET_NAMESTORE_QueueEntry * del_qe
Queue entry for the &#39;del&#39; operation.
static struct GNUNET_NAMESTORE_Handle * ns
Handle to the namestore.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ test_finished()

static void test_finished ( )
static

Check if we are finished, and if so, perform shutdown.

Definition at line 306 of file gnunet-namestore.c.

References GNUNET_SCHEDULER_shutdown().

Referenced by add_continuation(), add_error_cb(), del_continuation(), del_lookup_error_cb(), del_monitor(), display_record_lookup(), get_existing_record(), handle_reverse_lookup(), lookup_error_cb(), zone_iteration_error_cb(), and zone_iteration_finished().

307 {
308  if ((NULL == add_qe) && (NULL == add_qe_uri) && (NULL == get_qe) &&
309  (NULL == del_qe) && (NULL == reverse_qe) && (NULL == list_it))
311 }
static struct GNUNET_NAMESTORE_QueueEntry * add_qe
Queue entry for the &#39;add&#39; operation.
static struct GNUNET_NAMESTORE_QueueEntry * add_qe_uri
Queue entry for the &#39;add-uri&#39; operation.
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:517
static struct GNUNET_NAMESTORE_QueueEntry * reverse_qe
Queue entry for the &#39;reverse lookup&#39; operation (in combination with a name).
static struct GNUNET_NAMESTORE_ZoneIterator * list_it
List iterator for the &#39;list&#39; operation.
static struct GNUNET_NAMESTORE_QueueEntry * get_qe
Queue entry for the &#39;lookup&#39; operation.
static struct GNUNET_NAMESTORE_QueueEntry * del_qe
Queue entry for the &#39;del&#39; operation.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ add_continuation()

static void add_continuation ( void *  cls,
int32_t  success,
const char *  emsg 
)
static

Continuation called to notify client about result of the operation.

Parameters
clsclosure, location of the QueueEntry pointer to NULL out
successGNUNET_SYSERR on failure (including timeout/queue drop/failure to validate) GNUNET_NO if content was already there GNUNET_YES (or other positive value) on success
emsgNULL on success, otherwise an error message

Definition at line 325 of file gnunet-namestore.c.

References _, GNUNET_NO, GNUNET_YES, qe, ret, and test_finished().

Referenced by get_existing_record(), and run_with_zone_pkey().

326 {
327  struct GNUNET_NAMESTORE_QueueEntry **qe = cls;
328 
329  *qe = NULL;
330  if (GNUNET_YES != success)
331  {
332  fprintf(stderr,
333  _("Adding record failed: %s\n"),
334  (GNUNET_NO == success) ? "record exists" : emsg);
335  if (GNUNET_NO != success)
336  ret = 1;
337  }
338  ret = 0;
339  test_finished();
340 }
static struct GNUNET_DATASTORE_QueueEntry * qe
Current operation.
#define GNUNET_NO
Definition: gnunet_common.h:78
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
static int ret
Global return value.
An QueueEntry used to store information for a pending NAMESTORE record operation. ...
Definition: namestore_api.c:53
static void test_finished()
Check if we are finished, and if so, perform shutdown.
#define GNUNET_YES
Definition: gnunet_common.h:77
Here is the call graph for this function:
Here is the caller graph for this function:

◆ del_continuation()

static void del_continuation ( void *  cls,
int32_t  success,
const char *  emsg 
)
static

Continuation called to notify client about result of the operation.

Parameters
clsclosure, unused
successGNUNET_SYSERR on failure (including timeout/queue drop/failure to validate) GNUNET_NO if content was already there GNUNET_YES (or other positive value) on success
emsgNULL on success, otherwise an error message

Definition at line 354 of file gnunet-namestore.c.

References _, GNUNET_NO, GNUNET_SYSERR, and test_finished().

Referenced by del_monitor().

355 {
356  (void)cls;
357  del_qe = NULL;
358  if (GNUNET_NO == success)
359  {
360  fprintf(stderr,
361  _("Deleting record failed, record does not exist%s%s\n"),
362  (NULL != emsg) ? ": " : "",
363  (NULL != emsg) ? emsg : "");
364  }
365  if (GNUNET_SYSERR == success)
366  {
367  fprintf(stderr,
368  _("Deleting record failed%s%s\n"),
369  (NULL != emsg) ? ": " : "",
370  (NULL != emsg) ? emsg : "");
371  }
372  test_finished();
373 }
#define GNUNET_NO
Definition: gnunet_common.h:78
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
static void test_finished()
Check if we are finished, and if so, perform shutdown.
static struct GNUNET_NAMESTORE_QueueEntry * del_qe
Queue entry for the &#39;del&#39; operation.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zone_iteration_finished()

static void zone_iteration_finished ( void *  cls)
static

Function called when we are done with a zone iteration.

Definition at line 380 of file gnunet-namestore.c.

References test_finished().

Referenced by run_with_zone_pkey().

381 {
382  (void)cls;
383  list_it = NULL;
384  test_finished();
385 }
static void test_finished()
Check if we are finished, and if so, perform shutdown.
static struct GNUNET_NAMESTORE_ZoneIterator * list_it
List iterator for the &#39;list&#39; operation.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zone_iteration_error_cb()

static void zone_iteration_error_cb ( void *  cls)
static

Function called when we encountered an error in a zone iteration.

Definition at line 392 of file gnunet-namestore.c.

References ret, and test_finished().

Referenced by run_with_zone_pkey().

393 {
394  (void)cls;
395  list_it = NULL;
396  fprintf(stderr, "Error iterating over zone\n");
397  ret = 1;
398  test_finished();
399 }
static int ret
Global return value.
static void test_finished()
Check if we are finished, and if so, perform shutdown.
static struct GNUNET_NAMESTORE_ZoneIterator * list_it
List iterator for the &#39;list&#39; operation.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ display_record()

static void display_record ( const char *  rname,
unsigned int  rd_len,
const struct GNUNET_GNSRECORD_Data rd 
)
static

Process a record that was stored in the namestore.

Parameters
rnamename that is being mapped (at most 255 characters long)
rd_lennumber of entries in rd array
rdarray of records with data to store

Definition at line 410 of file gnunet-namestore.c.

References _, GNUNET_TIME_Absolute::abs_value_us, data, data_size, GNUNET_GNSRECORD_Data::expiration_time, GNUNET_free, GNUNET_GNS_EMPTY_LABEL_AT, GNUNET_GNSRECORD_number_to_typename(), GNUNET_GNSRECORD_RF_PRIVATE, GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION, GNUNET_GNSRECORD_RF_SHADOW_RECORD, GNUNET_GNSRECORD_TYPE_ANY, GNUNET_GNSRECORD_TYPE_NICK, GNUNET_GNSRECORD_typename_to_number(), GNUNET_GNSRECORD_value_to_string(), GNUNET_NAMESTORE_zone_iterator_next(), GNUNET_NO, GNUNET_STRINGS_absolute_time_to_string(), GNUNET_STRINGS_relative_time_to_string(), GNUNET_YES, name, GNUNET_TIME_Relative::rel_value_us, type, and typestring.

Referenced by display_record_iterator(), display_record_lookup(), and display_record_monitor().

413 {
414  const char *typestr;
415  char *s;
416  const char *ets;
417  struct GNUNET_TIME_Absolute at;
418  struct GNUNET_TIME_Relative rt;
419  int have_record;
420 
421  if ((NULL != name) && (0 != strcmp(name, rname)))
422  {
424  return;
425  }
426  have_record = GNUNET_NO;
427  for (unsigned int i = 0; i < rd_len; i++)
428  {
429  if ((GNUNET_GNSRECORD_TYPE_NICK == rd[i].record_type) &&
430  (0 != strcmp(rname, GNUNET_GNS_EMPTY_LABEL_AT)))
431  continue;
432  if ((type != rd[i].record_type) && (GNUNET_GNSRECORD_TYPE_ANY != type))
433  continue;
434  have_record = GNUNET_YES;
435  break;
436  }
437  if (GNUNET_NO == have_record)
438  return;
439  fprintf(stdout, "%s:\n", rname);
440  if (NULL != typestring)
442  else
444  for (unsigned int i = 0; i < rd_len; i++)
445  {
446  if ((GNUNET_GNSRECORD_TYPE_NICK == rd[i].record_type) &&
447  (0 != strcmp(rname, GNUNET_GNS_EMPTY_LABEL_AT)))
448  continue;
449  if ((type != rd[i].record_type) && (GNUNET_GNSRECORD_TYPE_ANY != type))
450  continue;
451  typestr = GNUNET_GNSRECORD_number_to_typename(rd[i].record_type);
452  s = GNUNET_GNSRECORD_value_to_string(rd[i].record_type,
453  rd[i].data,
454  rd[i].data_size);
455  if (NULL == s)
456  {
457  fprintf(stdout,
458  _("\tCorrupt or unsupported record of type %u\n"),
459  (unsigned int)rd[i].record_type);
460  continue;
461  }
462  if (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION))
463  {
464  rt.rel_value_us = rd[i].expiration_time;
466  }
467  else
468  {
469  at.abs_value_us = rd[i].expiration_time;
471  }
472  fprintf(stdout,
473  "\t%s: %s (%s)\t%s\t%s\n",
474  typestr,
475  s,
476  ets,
477  (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_PRIVATE)) ? "PRIVATE"
478  : "PUBLIC",
479  (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_SHADOW_RECORD)) ? "SHADOW"
480  : "");
481  GNUNET_free(s);
482  }
483  fprintf(stdout, "%s", "\n");
484 }
This record should not be used unless all (other) records with an absolute expiration time have expir...
#define GNUNET_GNS_EMPTY_LABEL_AT
String we use to indicate an empty label (top-level entry in the zone).
uint32_t GNUNET_GNSRECORD_typename_to_number(const char *dns_typename)
Convert a type name (i.e.
Definition: gnsrecord.c:203
#define GNUNET_GNSRECORD_TYPE_ANY
Record type indicating any record/&#39;*&#39;.
static void * data
Value in binary format.
#define GNUNET_NO
Definition: gnunet_common.h:78
void GNUNET_NAMESTORE_zone_iterator_next(struct GNUNET_NAMESTORE_ZoneIterator *it, uint64_t limit)
Calls the record processor specified in GNUNET_NAMESTORE_zone_iteration_start for the next record...
static char * name
Name of the records to add/list/remove.
#define GNUNET_GNSRECORD_TYPE_NICK
Record type for GNS nick names ("NICK").
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
uint64_t expiration_time
Expiration time for the DNS record.
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:686
This is a private record of this peer and it should thus not be handed out to other peers...
static uint32_t type
Type string converted to DNS type value.
static struct GNUNET_NAMESTORE_ZoneIterator * list_it
List iterator for the &#39;list&#39; operation.
Time for absolute times used by GNUnet, in microseconds.
#define GNUNET_YES
Definition: gnunet_common.h:77
static char * typestring
Type of the record to add/remove, NULL to remove all.
This flag is currently unused; former RF_PENDING flag.
const char * GNUNET_STRINGS_absolute_time_to_string(struct GNUNET_TIME_Absolute t)
Like asctime, except for GNUnet time.
Definition: strings.c:741
char * GNUNET_GNSRECORD_value_to_string(uint32_t type, const void *data, size_t data_size)
Convert the &#39;value&#39; of a record to a string.
Definition: gnsrecord.c:142
static size_t data_size
Number of bytes in data.
const char * GNUNET_GNSRECORD_number_to_typename(uint32_t type)
Convert a type number (i.e.
Definition: gnsrecord.c:230
#define GNUNET_free(ptr)
Wrapper around free.
Time for relative time used by GNUnet, in microseconds.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ display_record_iterator()

static void display_record_iterator ( void *  cls,
const struct GNUNET_CRYPTO_EcdsaPrivateKey zone_key,
const char *  rname,
unsigned int  rd_len,
const struct GNUNET_GNSRECORD_Data rd 
)
static

Process a record that was stored in the namestore.

Parameters
clsclosure
zone_keyprivate key of the zone
rnamename that is being mapped (at most 255 characters long)
rd_lennumber of entries in rd array
rdarray of records with data to store

Definition at line 497 of file gnunet-namestore.c.

References display_record(), and GNUNET_NAMESTORE_zone_iterator_next().

Referenced by run_with_zone_pkey().

502 {
503  (void)cls;
504  (void)zone_key;
505  display_record(rname, rd_len, rd);
507 }
void GNUNET_NAMESTORE_zone_iterator_next(struct GNUNET_NAMESTORE_ZoneIterator *it, uint64_t limit)
Calls the record processor specified in GNUNET_NAMESTORE_zone_iteration_start for the next record...
static struct GNUNET_NAMESTORE_ZoneIterator * list_it
List iterator for the &#39;list&#39; operation.
static void display_record(const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd)
Process a record that was stored in the namestore.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ display_record_monitor()

static void display_record_monitor ( void *  cls,
const struct GNUNET_CRYPTO_EcdsaPrivateKey zone_key,
const char *  rname,
unsigned int  rd_len,
const struct GNUNET_GNSRECORD_Data rd 
)
static

Process a record that was stored in the namestore.

Parameters
clsclosure
zone_keyprivate key of the zone
rnamename that is being mapped (at most 255 characters long)
rd_lennumber of entries in rd array
rdarray of records with data to store

Definition at line 520 of file gnunet-namestore.c.

References display_record(), and GNUNET_NAMESTORE_zone_monitor_next().

Referenced by run_with_zone_pkey().

525 {
526  (void)cls;
527  (void)zone_key;
528  display_record(rname, rd_len, rd);
530 }
static struct GNUNET_NAMESTORE_ZoneMonitor * zm
Monitor handle.
static void display_record(const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd)
Process a record that was stored in the namestore.
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:
Here is the caller graph for this function:

◆ display_record_lookup()

static void display_record_lookup ( void *  cls,
const struct GNUNET_CRYPTO_EcdsaPrivateKey zone_key,
const char *  rname,
unsigned int  rd_len,
const struct GNUNET_GNSRECORD_Data rd 
)
static

Process a record that was stored in the namestore.

Parameters
clsclosure
zone_keyprivate key of the zone
rnamename that is being mapped (at most 255 characters long)
rd_lennumber of entries in rd array
rdarray of records with data to store

Definition at line 543 of file gnunet-namestore.c.

References display_record(), and test_finished().

Referenced by run_with_zone_pkey().

548 {
549  (void)cls;
550  (void)zone_key;
551  get_qe = NULL;
552  display_record(rname, rd_len, rd);
553  test_finished();
554 }
static void test_finished()
Check if we are finished, and if so, perform shutdown.
static struct GNUNET_NAMESTORE_QueueEntry * get_qe
Queue entry for the &#39;lookup&#39; operation.
static void display_record(const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd)
Process a record that was stored in the namestore.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ sync_cb()

static void sync_cb ( void *  cls)
static

Function called once we are in sync in monitor mode.

Parameters
clsNULL

Definition at line 563 of file gnunet-namestore.c.

Referenced by run_with_zone_pkey().

564 {
565  (void)cls;
566  fprintf(stdout, "%s", "Monitor is now in sync.\n");
567 }
Here is the caller graph for this function:

◆ monitor_error_cb()

static void monitor_error_cb ( void *  cls)
static

Function called on errors while monitoring.

Parameters
clsNULL

Definition at line 576 of file gnunet-namestore.c.

Referenced by run_with_zone_pkey().

577 {
578  (void)cls;
579  fprintf(stderr, "%s", "Monitor disconnected and out of sync.\n");
580 }
Here is the caller graph for this function:

◆ lookup_error_cb()

static void lookup_error_cb ( void *  cls)
static

Function called on errors while monitoring.

Parameters
clsNULL

Definition at line 589 of file gnunet-namestore.c.

References test_finished().

Referenced by run_with_zone_pkey().

590 {
591  (void)cls;
592  get_qe = NULL;
593  fprintf(stderr, "%s", "Failed to lookup record.\n");
594  test_finished();
595 }
static void test_finished()
Check if we are finished, and if so, perform shutdown.
static struct GNUNET_NAMESTORE_QueueEntry * get_qe
Queue entry for the &#39;lookup&#39; operation.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ add_error_cb()

static void add_error_cb ( void *  cls)
static

Function called if lookup fails.

Definition at line 602 of file gnunet-namestore.c.

References GNUNET_break, ret, and test_finished().

Referenced by run_with_zone_pkey().

603 {
604  (void)cls;
605  add_qe = NULL;
606  GNUNET_break(0);
607  ret = 1;
608  test_finished();
609 }
static struct GNUNET_NAMESTORE_QueueEntry * add_qe
Queue entry for the &#39;add&#39; operation.
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
static int ret
Global return value.
static void test_finished()
Check if we are finished, and if so, perform shutdown.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_existing_record()

static void get_existing_record ( void *  cls,
const struct GNUNET_CRYPTO_EcdsaPrivateKey zone_key,
const char *  rec_name,
unsigned int  rd_count,
const struct GNUNET_GNSRECORD_Data rd 
)
static

We're storing a record; this function is given the existing record so that we can merge the information.

Parameters
clsclosure, unused
zone_keyprivate key of the zone
rec_namename that is being mapped (at most 255 characters long)
rd_countnumber of entries in rd array
rdarray of records with data to store

Definition at line 623 of file gnunet-namestore.c.

References _, add_continuation(), data, GNUNET_GNSRECORD_Data::data, data_size, GNUNET_GNSRECORD_Data::data_size, etime, etime_is_rel, GNUNET_GNSRECORD_Data::expiration_time, GNUNET_GNSRECORD_Data::flags, GNUNET_assert, GNUNET_break, GNUNET_DNSPARSER_TYPE_CNAME, GNUNET_DNSPARSER_TYPE_SOA, GNUNET_ERROR_TYPE_DEBUG, GNUNET_GNSRECORD_RF_PRIVATE, GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION, GNUNET_GNSRECORD_RF_SHADOW_RECORD, GNUNET_GNSRECORD_TYPE_GNS2DNS, GNUNET_GNSRECORD_TYPE_PKEY, GNUNET_log, GNUNET_memcpy, GNUNET_NAMESTORE_records_store(), GNUNET_NO, GNUNET_TIME_UNIT_FOREVER_ABS, GNUNET_YES, is_public, is_shadow, name, GNUNET_GNSRECORD_Data::record_type, ret, test_finished(), type, and zone_pkey.

Referenced by run_with_zone_pkey().

628 {
629  struct GNUNET_GNSRECORD_Data rdn[rd_count + 1];
630  struct GNUNET_GNSRECORD_Data *rde;
631 
632  (void)cls;
633  (void)zone_key;
634  add_qe = NULL;
635  if (0 != strcmp(rec_name, name))
636  {
637  GNUNET_break(0);
638  ret = 1;
639  test_finished();
640  return;
641  }
642 
644  "Received %u records for name `%s'\n",
645  rd_count,
646  rec_name);
647  for (unsigned int i = 0; i < rd_count; i++)
648  {
649  switch (rd[i].record_type)
650  {
652  fprintf(
653  stderr,
654  _(
655  "A %s record exists already under `%s', no other records can be added.\n"),
656  "CNAME",
657  rec_name);
658  ret = 1;
659  test_finished();
660  return;
661 
663  fprintf(
664  stderr,
665  _(
666  "A %s record exists already under `%s', no other records can be added.\n"),
667  "PKEY",
668  rec_name);
669  ret = 1;
670  test_finished();
671  return;
672 
675  {
676  fprintf(
677  stderr,
678  _(
679  "A SOA record exists already under `%s', cannot add a second SOA to the same zone.\n"),
680  rec_name);
681  ret = 1;
682  test_finished();
683  return;
684  }
685  break;
686  }
687  }
688  switch (type)
689  {
691  if (0 != rd_count)
692  {
693  fprintf(stderr,
694  _(
695  "Records already exist under `%s', cannot add `%s' record.\n"),
696  rec_name,
697  "CNAME");
698  ret = 1;
699  test_finished();
700  return;
701  }
702  break;
703 
705  if (0 != rd_count)
706  {
707  fprintf(stderr,
708  _(
709  "Records already exist under `%s', cannot add `%s' record.\n"),
710  rec_name,
711  "PKEY");
712  ret = 1;
713  test_finished();
714  return;
715  }
716  break;
717 
719  for (unsigned int i = 0; i < rd_count; i++)
720  if (GNUNET_GNSRECORD_TYPE_GNS2DNS != rd[i].record_type)
721  {
722  fprintf(
723  stderr,
724  _(
725  "Non-GNS2DNS records already exist under `%s', cannot add GNS2DNS record.\n"),
726  rec_name);
727  ret = 1;
728  test_finished();
729  return;
730  }
731  break;
732  }
733  memset(rdn, 0, sizeof(struct GNUNET_GNSRECORD_Data));
734  GNUNET_memcpy(&rdn[1], rd, rd_count * sizeof(struct GNUNET_GNSRECORD_Data));
735  rde = &rdn[0];
736  rde->data = data;
737  rde->data_size = data_size;
738  rde->record_type = type;
739  if (1 == is_shadow)
741  if (1 != is_public)
743  rde->expiration_time = etime;
744  if (GNUNET_YES == etime_is_rel)
746  else if (GNUNET_NO != etime_is_rel)
747  rde->expiration_time = GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us;
748  GNUNET_assert(NULL != name);
750  &zone_pkey,
751  name,
752  rd_count + 1,
753  rde,
755  &add_qe);
756 }
This record should not be used unless all (other) records with an absolute expiration time have expir...
static struct GNUNET_NAMESTORE_QueueEntry * add_qe
Queue entry for the &#39;add&#39; operation.
#define GNUNET_DNSPARSER_TYPE_CNAME
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
static void * data
Value in binary format.
#define GNUNET_NO
Definition: gnunet_common.h:78
size_t data_size
Number of bytes in data.
static char * name
Name of the records to add/list/remove.
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
static int etime_is_rel
Is expiration time relative or absolute time?
#define GNUNET_TIME_UNIT_FOREVER_ABS
Constant used to specify "forever".
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
struct GNUNET_NAMESTORE_QueueEntry * GNUNET_NAMESTORE_records_store(struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey, const char *label, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd, GNUNET_NAMESTORE_ContinuationWithStatus cont, void *cont_cls)
Store an item in the namestore.
static void add_continuation(void *cls, int32_t success, const char *emsg)
Continuation called to notify client about result of the operation.
static int is_shadow
Is record a shadow record (GNUNET_GNSRECORD_RF_SHADOW_RECORD)
#define GNUNET_DNSPARSER_TYPE_SOA
const void * data
Binary value stored in the DNS record.
#define GNUNET_GNSRECORD_TYPE_PKEY
Record type for GNS zone transfer ("PKEY").
uint64_t expiration_time
Expiration time for the DNS record.
static int ret
Global return value.
#define GNUNET_GNSRECORD_TYPE_GNS2DNS
Record type for delegation to DNS.
This is a private record of this peer and it should thus not be handed out to other peers...
static uint64_t etime
Expiration string converted to numeric value.
static void test_finished()
Check if we are finished, and if so, perform shutdown.
static int is_public
Is record public (opposite of GNUNET_GNSRECORD_RF_PRIVATE)
static uint32_t type
Type string converted to DNS type value.
uint32_t record_type
Type of the GNS/DNS record.
static struct GNUNET_CRYPTO_EcdsaPrivateKey zone_pkey
Private key for the our zone.
#define GNUNET_log(kind,...)
#define GNUNET_YES
Definition: gnunet_common.h:77
enum GNUNET_GNSRECORD_Flags flags
Flags for the record.
This flag is currently unused; former RF_PENDING flag.
static size_t data_size
Number of bytes in data.
static struct GNUNET_NAMESTORE_Handle * ns
Handle to the namestore.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ reverse_error_cb()

static void reverse_error_cb ( void *  cls)
static

Function called if we encountered an error in zone-to-name.

Definition at line 763 of file gnunet-namestore.c.

References reverse_pkey.

Referenced by run_with_zone_pkey().

764 {
765  (void)cls;
766  reverse_qe = NULL;
767  fprintf(stdout, "%s.zkey\n", reverse_pkey);
768 }
static struct GNUNET_NAMESTORE_QueueEntry * reverse_qe
Queue entry for the &#39;reverse lookup&#39; operation (in combination with a name).
static char * reverse_pkey
Reverse lookup to perform.
Here is the caller graph for this function:

◆ handle_reverse_lookup()

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

Function called with the result of our attempt to obtain a name for a given public key.

Parameters
clsNULL
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 782 of file gnunet-namestore.c.

References ego_name, reverse_pkey, and test_finished().

Referenced by run_with_zone_pkey().

787 {
788  (void)cls;
789  (void)zone;
790  (void)rd_count;
791  (void)rd;
792  reverse_qe = NULL;
793  if (NULL == label)
794  fprintf(stdout, "%s\n", reverse_pkey);
795  else
796  fprintf(stdout, "%s.%s\n", label, ego_name);
797  test_finished();
798 }
static struct GNUNET_NAMESTORE_QueueEntry * reverse_qe
Queue entry for the &#39;reverse lookup&#39; operation (in combination with a name).
static char * reverse_pkey
Reverse lookup to perform.
static void test_finished()
Check if we are finished, and if so, perform shutdown.
static char * ego_name
Name of the ego controlling the zone.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ del_lookup_error_cb()

static void del_lookup_error_cb ( void *  cls)
static

Function called if lookup for deletion fails.

Definition at line 805 of file gnunet-namestore.c.

References GNUNET_break, ret, and test_finished().

Referenced by run_with_zone_pkey().

806 {
807  (void)cls;
808  del_qe = NULL;
809  GNUNET_break(0);
810  ret = 1;
811  test_finished();
812 }
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
static int ret
Global return value.
static void test_finished()
Check if we are finished, and if so, perform shutdown.
static struct GNUNET_NAMESTORE_QueueEntry * del_qe
Queue entry for the &#39;del&#39; operation.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ del_monitor()

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

We were asked to delete something; this function is called with the existing records.

Now we should determine what should be deleted and then issue the deletion operation.

Parameters
clsNULL
zoneprivate key of the zone we are deleting from
labelname of the records we are editing
rd_countsize of the rd array
rdexisting records

Definition at line 827 of file gnunet-namestore.c.

References _, data, data_size, del_continuation(), GNUNET_free_non_null, GNUNET_GNSRECORD_TYPE_ANY, GNUNET_GNSRECORD_typename_to_number(), GNUNET_GNSRECORD_value_to_string(), GNUNET_NAMESTORE_records_store(), name, GNUNET_GNSRECORD_Data::record_type, ret, test_finished(), type, typestring, value, and zone_pkey.

Referenced by run_with_zone_pkey().

832 {
833  struct GNUNET_GNSRECORD_Data rdx[rd_count];
834  unsigned int rd_left;
835  uint32_t type;
836  char *vs;
837 
838  (void)cls;
839  (void)zone;
840  del_qe = NULL;
841  if (0 == rd_count)
842  {
843  fprintf(stderr,
844  _(
845  "There are no records under label `%s' that could be deleted.\n"),
846  label);
847  ret = 1;
848  test_finished();
849  return;
850  }
851  if ((NULL == value) && (NULL == typestring))
852  {
853  /* delete everything */
855  &zone_pkey,
856  name,
857  0,
858  NULL,
860  NULL);
861  return;
862  }
863  rd_left = 0;
864  if (NULL != typestring)
866  else
868  for (unsigned int i = 0; i < rd_count; i++)
869  {
870  vs = NULL;
871  if (!(((GNUNET_GNSRECORD_TYPE_ANY == type) ||
872  (rd[i].record_type == type)) &&
873  ((NULL == value) ||
874  (NULL ==
876  rd[i].data,
877  rd[i].data_size)))) ||
878  (0 == strcmp(vs, value)))))
879  rdx[rd_left++] = rd[i];
881  }
882  if (rd_count == rd_left)
883  {
884  /* nothing got deleted */
885  fprintf(
886  stderr,
887  _(
888  "There are no records under label `%s' that match the request for deletion.\n"),
889  label);
890  test_finished();
891  return;
892  }
893  /* delete everything but what we copied to 'rdx' */
895  &zone_pkey,
896  name,
897  rd_left,
898  rdx,
900  NULL);
901 }
uint32_t GNUNET_GNSRECORD_typename_to_number(const char *dns_typename)
Convert a type name (i.e.
Definition: gnsrecord.c:203
#define GNUNET_GNSRECORD_TYPE_ANY
Record type indicating any record/&#39;*&#39;.
static void * data
Value in binary format.
#define GNUNET_free_non_null(ptr)
Free the memory pointed to by ptr if ptr is not NULL.
static char * name
Name of the records to add/list/remove.
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
struct GNUNET_NAMESTORE_QueueEntry * GNUNET_NAMESTORE_records_store(struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey, const char *label, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd, GNUNET_NAMESTORE_ContinuationWithStatus cont, void *cont_cls)
Store an item in the namestore.
static char * value
Value of the record to add/remove.
static int ret
Global return value.
static void del_continuation(void *cls, int32_t success, const char *emsg)
Continuation called to notify client about result of the operation.
static void test_finished()
Check if we are finished, and if so, perform shutdown.
static uint32_t type
Type string converted to DNS type value.
uint32_t record_type
Type of the GNS/DNS record.
static struct GNUNET_CRYPTO_EcdsaPrivateKey zone_pkey
Private key for the our zone.
static struct GNUNET_NAMESTORE_QueueEntry * del_qe
Queue entry for the &#39;del&#39; operation.
static char * typestring
Type of the record to add/remove, NULL to remove all.
char * GNUNET_GNSRECORD_value_to_string(uint32_t type, const void *data, size_t data_size)
Convert the &#39;value&#39; of a record to a string.
Definition: gnsrecord.c:142
static size_t data_size
Number of bytes in data.
static struct GNUNET_NAMESTORE_Handle * ns
Handle to the namestore.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ parse_expiration()

static int parse_expiration ( const char *  expirationstring,
int *  etime_is_rel,
uint64_t *  etime 
)
static

Parse expiration time.

Parameters
expirationstringtext to parse
etime_is_rel[out]set to GNUNET_YES if time is relative
etime[out]set to expiration time (abs or rel)
Returns
GNUNET_OK on success

Definition at line 913 of file gnunet-namestore.c.

References GNUNET_TIME_Absolute::abs_value_us, GNUNET_ERROR_TYPE_DEBUG, GNUNET_log, GNUNET_NO, GNUNET_OK, GNUNET_STRINGS_absolute_time_to_string(), GNUNET_STRINGS_fancy_time_to_absolute(), GNUNET_STRINGS_fancy_time_to_relative(), GNUNET_STRINGS_relative_time_to_string(), GNUNET_SYSERR, GNUNET_TIME_UNIT_FOREVER_ABS, GNUNET_YES, and GNUNET_TIME_Relative::rel_value_us.

Referenced by multirecord_process(), and run_with_zone_pkey().

916 {
917  struct GNUNET_TIME_Relative etime_rel;
918  struct GNUNET_TIME_Absolute etime_abs;
919 
920  if (0 == strcmp(expirationstring, "never"))
921  {
922  *etime = GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us;
924  return GNUNET_OK;
925  }
926  if (GNUNET_OK ==
928  {
930  *etime = etime_rel.rel_value_us;
932  "Storing record with relative expiration time of %s\n",
934  return GNUNET_OK;
935  }
936  if (GNUNET_OK ==
938  {
940  *etime = etime_abs.abs_value_us;
942  "Storing record with absolute expiration time of %s\n",
944  return GNUNET_OK;
945  }
946  return GNUNET_SYSERR;
947 }
int GNUNET_STRINGS_fancy_time_to_relative(const char *fancy_time, struct GNUNET_TIME_Relative *rtime)
Convert a given fancy human-readable time to our internal representation.
Definition: strings.c:350
int GNUNET_STRINGS_fancy_time_to_absolute(const char *fancy_time, struct GNUNET_TIME_Absolute *atime)
Convert a given fancy human-readable time to our internal representation.
Definition: strings.c:401
#define GNUNET_NO
Definition: gnunet_common.h:78
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
static int etime_is_rel
Is expiration time relative or absolute time?
#define GNUNET_TIME_UNIT_FOREVER_ABS
Constant used to specify "forever".
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:686
static uint64_t etime
Expiration string converted to numeric value.
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
static char * expirationstring
Desired expiration time.
#define GNUNET_log(kind,...)
Time for absolute times used by GNUnet, in microseconds.
#define GNUNET_YES
Definition: gnunet_common.h:77
const char * GNUNET_STRINGS_absolute_time_to_string(struct GNUNET_TIME_Absolute t)
Like asctime, except for GNUnet time.
Definition: strings.c:741
Time for relative time used by GNUnet, in microseconds.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ replace_cont()

static void replace_cont ( void *  cls,
int  success,
const char *  emsg 
)
static

Function called when namestore is done with the replace operation.

Parameters
clsNULL
successGNUNET_SYSERR on failure (including timeout/queue drop/failure to validate) GNUNET_NO if content was already there or not found GNUNET_YES (or other positive value) on success
emsgNULL on success, otherwise an error message

Definition at line 961 of file gnunet-namestore.c.

References _, GNUNET_ERROR_TYPE_MESSAGE, GNUNET_log, GNUNET_OK, GNUNET_SCHEDULER_shutdown(), and ret.

Referenced by run_with_zone_pkey().

962 {
963  (void)cls;
964 
965  set_qe = NULL;
966  if (GNUNET_OK != success)
967  {
969  _("Failed to replace records: %s\n"),
970  emsg);
971  ret = 1; /* fail from 'main' */
972  }
974 }
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:517
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
static int ret
Global return value.
static struct GNUNET_NAMESTORE_QueueEntry * set_qe
Queue entry for the &#39;set/replace&#39; operation.
#define GNUNET_log(kind,...)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ run_with_zone_pkey()

static void run_with_zone_pkey ( const struct GNUNET_CONFIGURATION_Handle cfg)
static

We have obtained the zone's private key, so now process the main commands using it.

Parameters
cfgconfiguration to use

Definition at line 984 of file gnunet-namestore.c.

References _, add, add_continuation(), add_error_cb(), data, GNUNET_GNSRECORD_Data::data, data_size, GNUNET_GNSRECORD_Data::data_size, del, del_lookup_error_cb(), del_monitor(), display_record_iterator(), display_record_lookup(), display_record_monitor(), e, etime, etime_is_rel, GNUNET_GNSRECORD_Data::expiration_time, expirationstring, GNUNET_GNSRECORD_Data::flags, get_existing_record(), GNUNET_CRYPTO_ecdsa_public_key_from_string(), GNUNET_ERROR_TYPE_ERROR, GNUNET_free, GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION, GNUNET_GNSRECORD_RF_SHADOW_RECORD, GNUNET_GNSRECORD_string_to_value(), GNUNET_GNSRECORD_TYPE_PKEY, GNUNET_GNSRECORD_typename_to_number(), GNUNET_log, GNUNET_NAMESTORE_connect(), GNUNET_NAMESTORE_records_lookup(), GNUNET_NAMESTORE_records_store(), GNUNET_NAMESTORE_set_nick(), GNUNET_NAMESTORE_zone_iteration_start(), GNUNET_NAMESTORE_zone_monitor_start(), GNUNET_NAMESTORE_zone_to_name(), GNUNET_new_array, GNUNET_OK, GNUNET_SCHEDULER_shutdown(), GNUNET_STRINGS_utf8_tolower(), GNUNET_YES, handle_reverse_lookup(), is_shadow, list, lookup_error_cb(), monitor, monitor_error_cb(), name, nickstring, parse_expiration(), pkey, GNUNET_GNSRECORD_Data::record_type, replace_cont(), ret, reverse_error_cb(), reverse_pkey, sh, sync_cb(), type, typestring, uri, value, zone_iteration_error_cb(), zone_iteration_finished(), and zone_pkey.

Referenced by identity_cb(), and run().

985 {
986  struct GNUNET_GNSRECORD_Data rd;
987 
988  if (!(add | del | list | (NULL != nickstring) | (NULL != uri) |
989  (NULL != reverse_pkey) | (NULL != recordset)))
990  {
991  /* nothing more to be done */
992  fprintf(stderr, _("No options given\n"));
994  return;
995  }
997  if (NULL == ns)
998  {
1000  _("Failed to connect to namestore\n"));
1001  return;
1002  }
1003 
1004  if (NULL != recordset)
1005  {
1006  /* replace entire record set */
1007  unsigned int rd_count;
1008  struct GNUNET_GNSRECORD_Data *rd;
1009 
1010  if (NULL == name)
1011  {
1012  fprintf(stderr,
1013  _("Missing option `%s' for operation `%s'\n"),
1014  "-R",
1015  _("replace"));
1017  ret = 1;
1018  return;
1019  }
1020  rd_count = 0;
1021  for (struct RecordSetEntry *e = recordset; NULL != e; e = e->next)
1022  rd_count++;
1023  rd = GNUNET_new_array(rd_count, struct GNUNET_GNSRECORD_Data);
1024  rd_count = 0;
1025  for (struct RecordSetEntry *e = recordset; NULL != e; e = e->next)
1026  {
1027  rd[rd_count] = e->record;
1028  rd_count++;
1029  }
1031  &zone_pkey,
1032  name,
1033  rd_count,
1034  rd,
1035  &replace_cont,
1036  NULL);
1037  GNUNET_free(rd);
1038  return;
1039  }
1040 
1041  if (add)
1042  {
1043  if (NULL == name)
1044  {
1045  fprintf(stderr,
1046  _("Missing option `%s' for operation `%s'\n"),
1047  "-n",
1048  _("add"));
1050  ret = 1;
1051  return;
1052  }
1053  if (NULL == typestring)
1054  {
1055  fprintf(stderr,
1056  _("Missing option `%s' for operation `%s'\n"),
1057  "-t",
1058  _("add"));
1060  ret = 1;
1061  return;
1062  }
1064  if (UINT32_MAX == type)
1065  {
1066  fprintf(stderr, _("Unsupported type `%s'\n"), typestring);
1068  ret = 1;
1069  return;
1070  }
1071  if (NULL == value)
1072  {
1073  fprintf(stderr,
1074  _("Missing option `%s' for operation `%s'\n"),
1075  "-V",
1076  _("add"));
1077  ret = 1;
1079  return;
1080  }
1081  if (GNUNET_OK !=
1083  {
1084  fprintf(stderr,
1085  _("Value `%s' invalid for record type `%s'\n"),
1086  value,
1087  typestring);
1089  ret = 1;
1090  return;
1091  }
1092  if (NULL == expirationstring)
1093  {
1094  fprintf(stderr,
1095  _("Missing option `%s' for operation `%s'\n"),
1096  "-e",
1097  _("add"));
1099  ret = 1;
1100  return;
1101  }
1103  {
1104  fprintf(stderr, _("Invalid time format `%s'\n"), expirationstring);
1106  ret = 1;
1107  return;
1108  }
1110  &zone_pkey,
1111  name,
1112  &add_error_cb,
1113  NULL,
1115  NULL);
1116  }
1117  if (del)
1118  {
1119  if (NULL == name)
1120  {
1121  fprintf(stderr,
1122  _("Missing option `%s' for operation `%s'\n"),
1123  "-n",
1124  _("del"));
1126  ret = 1;
1127  return;
1128  }
1130  &zone_pkey,
1131  name,
1133  NULL,
1134  &del_monitor,
1135  NULL);
1136  }
1137  if (list)
1138  {
1139  if (NULL != name)
1141  &zone_pkey,
1142  name,
1143  &lookup_error_cb,
1144  NULL,
1146  NULL);
1147  else
1149  &zone_pkey,
1151  NULL,
1153  NULL,
1155  NULL);
1156  }
1157  if (NULL != reverse_pkey)
1158  {
1160 
1161  if (GNUNET_OK !=
1163  strlen(reverse_pkey),
1164  &pubkey))
1165  {
1166  fprintf(stderr,
1167  _("Invalid public key for reverse lookup `%s'\n"),
1168  reverse_pkey);
1170  }
1172  &zone_pkey,
1173  &pubkey,
1175  NULL,
1177  NULL);
1178  }
1179  if (NULL != uri)
1180  {
1181  char sh[105];
1182  char sname[64];
1184 
1186  if ((2 != (sscanf(uri, "gnunet://gns/%52s/%63s", sh, sname))) ||
1187  (GNUNET_OK !=
1189  {
1190  fprintf(stderr, _("Invalid URI `%s'\n"), uri);
1192  ret = 1;
1193  return;
1194  }
1195  memset(&rd, 0, sizeof(rd));
1196  rd.data = &pkey;
1197  rd.data_size = sizeof(struct GNUNET_CRYPTO_EcdsaPublicKey);
1199  rd.expiration_time = etime;
1200  if (GNUNET_YES == etime_is_rel)
1202  if (1 == is_shadow)
1205  &zone_pkey,
1206  sname,
1207  1,
1208  &rd,
1210  &add_qe_uri);
1211  }
1212  if (NULL != nickstring)
1213  {
1214  if (0 == strlen(nickstring))
1215  {
1216  fprintf(stderr, _("Invalid nick `%s'\n"), nickstring);
1218  ret = 1;
1219  return;
1220  }
1222  &zone_pkey,
1223  nickstring,
1225  &add_qe_uri);
1226  }
1227  if (monitor)
1228  {
1230  &zone_pkey,
1231  GNUNET_YES,
1233  NULL,
1235  NULL,
1236  &sync_cb,
1237  NULL);
1238  }
1239 }
static void add_error_cb(void *cls)
Function called if lookup fails.
This record should not be used unless all (other) records with an absolute expiration time have expir...
static struct GNUNET_CRYPTO_EcdsaPublicKey pubkey
Public key of the zone to look in.
static struct GNUNET_NAMESTORE_QueueEntry * add_qe
Queue entry for the &#39;add&#39; operation.
static void lookup_error_cb(void *cls)
Function called on errors while monitoring.
static char * pkey
Public key of the zone to look in, in ASCII.
static int parse_expiration(const char *expirationstring, int *etime_is_rel, uint64_t *etime)
Parse expiration time.
static struct GNUNET_NAMESTORE_QueueEntry * add_qe_uri
Queue entry for the &#39;add-uri&#39; operation.
struct GNUNET_NAMESTORE_ZoneMonitor * GNUNET_NAMESTORE_zone_monitor_start(const struct GNUNET_CONFIGURATION_Handle *cfg, const struct GNUNET_CRYPTO_EcdsaPrivateKey *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.
struct GNUNET_NAMESTORE_QueueEntry * GNUNET_NAMESTORE_records_lookup(struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey, const char *label, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_NAMESTORE_RecordMonitor rm, void *rm_cls)
Lookup an item in the namestore.
static void sync_cb(void *cls)
Function called once we are in sync in monitor mode.
struct GNUNET_NAMESTORE_ZoneIterator * GNUNET_NAMESTORE_zone_iteration_start(struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_NAMESTORE_RecordMonitor proc, void *proc_cls, GNUNET_SCHEDULER_TaskCallback finish_cb, void *finish_cb_cls)
Starts a new zone iteration (used to periodically PUT all of our records into our DHT)...
uint32_t GNUNET_GNSRECORD_typename_to_number(const char *dns_typename)
Convert a type name (i.e.
Definition: gnsrecord.c:203
static void handle_reverse_lookup(void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone, const char *label, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
Function called with the result of our attempt to obtain a name for a given public key...
static void * data
Value in binary format.
static struct Experiment * e
static struct GNUNET_NAMESTORE_ZoneMonitor * zm
Monitor handle.
static void get_existing_record(void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone_key, const char *rec_name, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
We&#39;re storing a record; this function is given the existing record so that we can merge the informati...
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
size_t data_size
Number of bytes in data.
static char * name
Name of the records to add/list/remove.
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:517
static void zone_iteration_finished(void *cls)
Function called when we are done with a zone iteration.
static struct RecordSetEntry * recordset
Entry in record set for processing records in bulk.
static void zone_iteration_error_cb(void *cls)
Function called when we encountered an error in a zone iteration.
static int etime_is_rel
Is expiration time relative or absolute time?
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
struct GNUNET_NAMESTORE_QueueEntry * GNUNET_NAMESTORE_records_store(struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey, const char *label, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd, GNUNET_NAMESTORE_ContinuationWithStatus cont, void *cont_cls)
Store an item in the namestore.
static void add_continuation(void *cls, int32_t success, const char *emsg)
Continuation called to notify client about result of the operation.
static void replace_cont(void *cls, int success, const char *emsg)
Function called when namestore is done with the replace operation.
static int is_shadow
Is record a shadow record (GNUNET_GNSRECORD_RF_SHADOW_RECORD)
const void * data
Binary value stored in the DNS record.
static char * value
Value of the record to add/remove.
static int monitor
Enables monitor mode.
static int del
Desired action is to remove a record.
#define GNUNET_GNSRECORD_TYPE_PKEY
Record type for GNS zone transfer ("PKEY").
uint64_t expiration_time
Expiration time for the DNS record.
static int ret
Global return value.
static struct SolverHandle * sh
static struct GNUNET_NAMESTORE_QueueEntry * set_qe
Queue entry for the &#39;set/replace&#39; operation.
static void display_record_lookup(void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd)
Process a record that was stored in the namestore.
#define GNUNET_new_array(n, type)
Allocate a size n array with structs or unions of the given type.
static void del_monitor(void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone, const char *label, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
We were asked to delete something; this function is called with the existing records.
int GNUNET_GNSRECORD_string_to_value(uint32_t type, const char *s, void **data, size_t *data_size)
Convert human-readable version of a &#39;value&#39; of a record to the binary representation.
Definition: gnsrecord.c:174
static struct GNUNET_NAMESTORE_QueueEntry * reverse_qe
Queue entry for the &#39;reverse lookup&#39; operation (in combination with a name).
static uint64_t etime
Expiration string converted to numeric value.
static char * reverse_pkey
Reverse lookup to perform.
static char * expirationstring
Desired expiration time.
struct GNUNET_NAMESTORE_Handle * GNUNET_NAMESTORE_connect(const struct GNUNET_CONFIGURATION_Handle *cfg)
Connect to the namestore service.
static char * uri
URI to import.
static int add
Desired action is to add a record.
static int list
Desired action is to list records.
static void display_record_iterator(void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd)
Process a record that was stored in the namestore.
Entry in record set for bulk processing.
static void display_record_monitor(void *cls, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd)
Process a record that was stored in the namestore.
int GNUNET_CRYPTO_ecdsa_public_key_from_string(const char *enc, size_t enclen, struct GNUNET_CRYPTO_EcdsaPublicKey *pub)
Convert a string representing a public key to a public key.
Definition: crypto_ecc.c:468
static uint32_t type
Type string converted to DNS type value.
uint32_t record_type
Type of the GNS/DNS record.
static void del_lookup_error_cb(void *cls)
Function called if lookup for deletion fails.
static char * nickstring
Desired nick name.
Public ECC key (always for Curve25519) encoded in a format suitable for network transmission and ECDS...
static struct GNUNET_CRYPTO_EcdsaPrivateKey zone_pkey
Private key for the our zone.
struct GNUNET_NAMESTORE_QueueEntry * GNUNET_NAMESTORE_zone_to_name(struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone, const struct GNUNET_CRYPTO_EcdsaPublicKey *value_zone, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_NAMESTORE_RecordMonitor proc, void *proc_cls)
Look for an existing PKEY delegation record for a given public key.
#define GNUNET_log(kind,...)
static struct GNUNET_NAMESTORE_ZoneIterator * list_it
List iterator for the &#39;list&#39; operation.
static void monitor_error_cb(void *cls)
Function called on errors while monitoring.
static struct GNUNET_NAMESTORE_QueueEntry * get_qe
Queue entry for the &#39;lookup&#39; operation.
static struct GNUNET_NAMESTORE_QueueEntry * del_qe
Queue entry for the &#39;del&#39; operation.
#define GNUNET_YES
Definition: gnunet_common.h:77
static char * typestring
Type of the record to add/remove, NULL to remove all.
enum GNUNET_GNSRECORD_Flags flags
Flags for the record.
This flag is currently unused; former RF_PENDING flag.
static void reverse_error_cb(void *cls)
Function called if we encountered an error in zone-to-name.
struct GNUNET_NAMESTORE_QueueEntry * GNUNET_NAMESTORE_set_nick(struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey, const char *nick, GNUNET_NAMESTORE_ContinuationWithStatus cont, void *cont_cls)
Set the desired nick name for a zone.
static size_t data_size
Number of bytes in data.
static struct GNUNET_NAMESTORE_Handle * ns
Handle to the namestore.
#define GNUNET_free(ptr)
Wrapper around free.
void GNUNET_STRINGS_utf8_tolower(const char *input, char *output)
Convert the utf-8 input string to lower case.
Definition: strings.c:552
Here is the call graph for this function:
Here is the caller graph for this function:

◆ identity_cb()

static void identity_cb ( void *  cls,
const struct GNUNET_IDENTITY_Ego ego 
)
static

Callback invoked from identity service with ego information.

An ego of NULL means the ego was not found.

Parameters
clsclosure with the configuration
egoan ego known to identity service, or NULL

Definition at line 1250 of file gnunet-namestore.c.

References _, cfg, ego_name, GNUNET_free_non_null, GNUNET_IDENTITY_ego_get_private_key(), GNUNET_SCHEDULER_shutdown(), name, ret, run_with_zone_pkey(), and zone_pkey.

Referenced by default_ego_cb(), and run().

1251 {
1252  const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
1253 
1254  el = NULL;
1255  if ((NULL != name) && (0 != strchr(name, '.')))
1256  {
1257  fprintf(stderr,
1258  _("Label `%s' contains `.' which is not allowed\n"),
1259  name);
1261  ret = -1;
1262  return;
1263  }
1264 
1265  if (NULL == ego)
1266  {
1267  if (NULL != ego_name)
1268  {
1269  fprintf(stderr,
1270  _("Ego `%s' not known to identity service\n"),
1271  ego_name);
1272  }
1274  ret = -1;
1275  return;
1276  }
1279  ego_name = NULL;
1280  run_with_zone_pkey(cfg);
1281 }
static void run_with_zone_pkey(const struct GNUNET_CONFIGURATION_Handle *cfg)
We have obtained the zone&#39;s private key, so now process the main commands using it.
static struct GNUNET_IDENTITY_EgoLookup * el
Handle to identity lookup.
const struct GNUNET_CRYPTO_EcdsaPrivateKey * GNUNET_IDENTITY_ego_get_private_key(const struct GNUNET_IDENTITY_Ego *ego)
Obtain the ECC key associated with a ego.
Definition: identity_api.c:553
#define GNUNET_free_non_null(ptr)
Free the memory pointed to by ptr if ptr is not NULL.
static char * name
Name of the records to add/list/remove.
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:517
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
static int ret
Global return value.
static struct GNUNET_CONFIGURATION_Handle * cfg
Our configuration.
Definition: gnunet-arm.c:104
configuration data
Definition: configuration.c:83
static char * ego_name
Name of the ego controlling the zone.
static struct GNUNET_CRYPTO_EcdsaPrivateKey zone_pkey
Private key for the our zone.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ default_ego_cb()

static void default_ego_cb ( void *  cls,
struct GNUNET_IDENTITY_Ego ego,
void **  ctx,
const char *  name 
)
static

Function called with the default ego to be used for GNS operations.

Used if the user did not specify a zone via command-line or environment variables.

Parameters
clsNULL
egodefault ego, NULL for none
ctxNULL
nameunused

Definition at line 1295 of file gnunet-namestore.c.

References _, cfg, GNUNET_SCHEDULER_shutdown(), identity_cb(), and ret.

Referenced by id_connect_cb().

1299 {
1300  const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
1301 
1302  (void)ctx;
1303  (void)name;
1304  get_default = NULL;
1305  if (NULL == ego)
1306  {
1307  fprintf(stderr, _("No default ego configured in identity service\n"));
1309  ret = -1;
1310  return;
1311  }
1312  else
1313  {
1314  identity_cb((void *)cfg, ego);
1315  }
1316 }
static char * name
Name of the records to add/list/remove.
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:517
static struct GNUNET_DNSSTUB_Context * ctx
Context for DNS resolution.
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
static void identity_cb(void *cls, const struct GNUNET_IDENTITY_Ego *ego)
Callback invoked from identity service with ego information.
static int ret
Global return value.
static struct GNUNET_CONFIGURATION_Handle * cfg
Our configuration.
Definition: gnunet-arm.c:104
struct GNUNET_IDENTITY_Operation * get_default
Obtain default ego.
configuration data
Definition: configuration.c:83
Here is the call graph for this function:
Here is the caller graph for this function:

◆ id_connect_cb()

static void id_connect_cb ( void *  cls,
struct GNUNET_IDENTITY_Ego ego,
void **  ctx,
const char *  name 
)
static

Function called with ALL of the egos known to the identity service, used on startup if the user did not specify a zone on the command-line.

Once the iteration is done (ego is NULL), we ask for the default ego for "namestore".

Parameters
clsa struct GNUNET_CONFIGURATION_Handle
egoan ego, NULL for end of iteration
ctxNULL
namename associated with ego

Definition at line 1332 of file gnunet-namestore.c.

References cfg, default_ego_cb(), and GNUNET_IDENTITY_get().

Referenced by run().

1336 {
1337  const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
1338 
1339  (void)ctx;
1340  (void)name;
1341  if (NULL != ego)
1342  return;
1343  get_default =
1344  GNUNET_IDENTITY_get(idh, "namestore", &default_ego_cb, (void *)cfg);
1345 }
struct GNUNET_IDENTITY_Operation * GNUNET_IDENTITY_get(struct GNUNET_IDENTITY_Handle *h, const char *service_name, GNUNET_IDENTITY_Callback cb, void *cb_cls)
Obtain the identity that is currently preferred/default for a service.
Definition: identity_api.c:584
static char * name
Name of the records to add/list/remove.
static struct GNUNET_DNSSTUB_Context * ctx
Context for DNS resolution.
static struct GNUNET_IDENTITY_Handle * idh
Identity service handle.
static struct GNUNET_CONFIGURATION_Handle * cfg
Our configuration.
Definition: gnunet-arm.c:104
static void default_ego_cb(void *cls, struct GNUNET_IDENTITY_Ego *ego, void **ctx, const char *name)
Function called with the default ego to be used for GNS operations.
struct GNUNET_IDENTITY_Operation * get_default
Obtain default ego.
configuration data
Definition: configuration.c:83
Here is the call graph for this function:
Here is the caller graph for this function:

◆ run()

static void run ( void *  cls,
char *const *  args,
const char *  cfgfile,
const struct GNUNET_CONFIGURATION_Handle cfg 
)
static

Main function that will be run.

Parameters
clsclosure
argsremaining command-line arguments
cfgfilename of the configuration file used (for saving, can be NULL!)
cfgconfiguration

Definition at line 1357 of file gnunet-namestore.c.

References _, do_shutdown(), ego_name, getenv(), GNUNET_ERROR_TYPE_WARNING, GNUNET_IDENTITY_connect(), GNUNET_IDENTITY_ego_lookup(), GNUNET_log, GNUNET_OK, GNUNET_SCHEDULER_add_shutdown(), GNUNET_SCHEDULER_shutdown(), GNUNET_strdup, GNUNET_STRINGS_string_to_data(), id_connect_cb(), identity_cb(), ret, run_with_zone_pkey(), uri, and zone_pkey.

Referenced by main().

1361 {
1362  const char *pkey_str;
1363 
1364  (void)cls;
1365  (void)args;
1366  (void)cfgfile;
1367  if (NULL != args[0])
1368  GNUNET_log(
1370  _("Superfluous command line arguments (starting with `%s') ignored\n"),
1371  args[0]);
1372  if ((NULL != args[0]) && (NULL == uri))
1373  uri = GNUNET_strdup(args[0]);
1374 
1376  pkey_str = getenv("GNUNET_NAMESTORE_EGO_PRIVATE_KEY");
1377  if (NULL != pkey_str)
1378  {
1379  if (GNUNET_OK != GNUNET_STRINGS_string_to_data(pkey_str,
1380  strlen(pkey_str),
1381  &zone_pkey,
1382  sizeof(zone_pkey)))
1383  {
1384  fprintf(stderr,
1385  "Malformed private key `%s' in $%s\n",
1386  pkey_str,
1387  "GNUNET_NAMESTORE_EGO_PRIVATE_KEY");
1388  ret = 1;
1390  return;
1391  }
1392  run_with_zone_pkey(cfg);
1393  return;
1394  }
1395  if (NULL == ego_name)
1396  {
1397  idh = GNUNET_IDENTITY_connect(cfg, &id_connect_cb, (void *)cfg);
1398  if (NULL == idh)
1399  fprintf(stderr, _("Cannot connect to identity service\n"));
1400  ret = -1;
1401  return;
1402  }
1403  el = GNUNET_IDENTITY_ego_lookup(cfg, ego_name, &identity_cb, (void *)cfg);
1404 }
struct GNUNET_IDENTITY_Handle * GNUNET_IDENTITY_connect(const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_IDENTITY_Callback cb, void *cb_cls)
Connect to the identity service.
Definition: identity_api.c:525
static void run_with_zone_pkey(const struct GNUNET_CONFIGURATION_Handle *cfg)
We have obtained the zone&#39;s private key, so now process the main commands using it.
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:1284
static struct GNUNET_IDENTITY_EgoLookup * el
Handle to identity lookup.
static void do_shutdown(void *cls)
Task run on shutdown.
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:517
#define GNUNET_strdup(a)
Wrapper around GNUNET_xstrdup_.
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
static struct GNUNET_IDENTITY_Handle * idh
Identity service handle.
static void identity_cb(void *cls, const struct GNUNET_IDENTITY_Ego *ego)
Callback invoked from identity service with ego information.
static int ret
Global return value.
static void id_connect_cb(void *cls, struct GNUNET_IDENTITY_Ego *ego, void **ctx, const char *name)
Function called with ALL of the egos known to the identity service, used on startup if the user did n...
char * getenv()
static char * uri
URI to import.
struct GNUNET_IDENTITY_EgoLookup * GNUNET_IDENTITY_ego_lookup(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *name, GNUNET_IDENTITY_EgoCallback cb, void *cb_cls)
Lookup an ego by name.
static char * ego_name
Name of the ego controlling the zone.
static struct GNUNET_CRYPTO_EcdsaPrivateKey zone_pkey
Private key for the our zone.
#define GNUNET_log(kind,...)
int GNUNET_STRINGS_string_to_data(const char *enc, size_t enclen, void *out, size_t out_size)
Convert CrockfordBase32 encoding back to data.
Definition: strings.c:953
Here is the call graph for this function:
Here is the caller graph for this function:

◆ multirecord_process()

static int multirecord_process ( struct GNUNET_GETOPT_CommandLineProcessorContext ctx,
void *  scls,
const char *  option,
const char *  value 
)
static

Command-line option parser function that allows the user to specify a complete record as one argument for adding/removing.

A pointer to the head of the list of record sets must be passed as the "scls" argument.

Parameters
ctxcommand line processor context
sclsmust be of type "struct GNUNET_FS_Uri **"
optionname of the option (typically 'R')
valuecommand line argument given; format is "TTL TYPE FLAGS VALUE" where TTL is an expiration time (rel or abs), always given in seconds (without the unit), TYPE is a DNS/GNS record type, FLAGS is either "n" for no flags or a combination of 's' (shadow) and 'p' (public) and VALUE is the value (in human-readable format)
Returns
GNUNET_OK on success

Definition at line 1425 of file gnunet-namestore.c.

References _, GNUNET_GNSRECORD_Data::data, GNUNET_GNSRECORD_Data::data_size, etime_is_rel, GNUNET_GNSRECORD_Data::expiration_time, GNUNET_GNSRECORD_Data::flags, GNUNET_asprintf(), GNUNET_ERROR_TYPE_ERROR, GNUNET_free, GNUNET_GNSRECORD_number_to_typename(), GNUNET_GNSRECORD_RF_NONE, GNUNET_GNSRECORD_RF_PRIVATE, GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION, GNUNET_GNSRECORD_RF_SHADOW_RECORD, GNUNET_GNSRECORD_string_to_value(), GNUNET_GNSRECORD_typename_to_number(), GNUNET_log, GNUNET_malloc, GNUNET_OK, GNUNET_strdup, GNUNET_SYSERR, head, RecordSetEntry::next, parse_expiration(), RecordSetEntry::record, and GNUNET_GNSRECORD_Data::record_type.

Referenced by multirecord_option().

1429 {
1430  struct RecordSetEntry **head = scls;
1431  struct RecordSetEntry *r;
1433  char *cp;
1434  char *tok;
1435  char *saveptr;
1436  int etime_is_rel;
1437  void *raw_data;
1438 
1439  (void)ctx;
1440  (void)option;
1441  cp = GNUNET_strdup(value);
1442  tok = strtok_r(cp, " ", &saveptr);
1443  if (NULL == tok)
1444  {
1446  _("Empty record line argument is not allowed.\n"));
1447  GNUNET_free(cp);
1448  return GNUNET_SYSERR;
1449  }
1450  {
1451  char *etime_in_s;
1452 
1453  GNUNET_asprintf(&etime_in_s, "%s s", tok);
1454  if (GNUNET_OK !=
1455  parse_expiration(etime_in_s, &etime_is_rel, &record.expiration_time))
1456  {
1458  _("Invalid expiration time `%s' (must be without unit)\n"),
1459  tok);
1460  GNUNET_free(cp);
1461  GNUNET_free(etime_in_s);
1462  return GNUNET_SYSERR;
1463  }
1464  GNUNET_free(etime_in_s);
1465  }
1466  tok = strtok_r(NULL, " ", &saveptr);
1467  if (NULL == tok)
1468  {
1470  _("Missing entries in record line `%s'.\n"),
1471  value);
1472  GNUNET_free(cp);
1473  return GNUNET_SYSERR;
1474  }
1475  record.record_type = GNUNET_GNSRECORD_typename_to_number(tok);
1476  if (UINT32_MAX == record.record_type)
1477  {
1478  GNUNET_log(GNUNET_ERROR_TYPE_ERROR, _("Unknown record type `%s'\n"), tok);
1479  GNUNET_free(cp);
1480  return GNUNET_SYSERR;
1481  }
1482  tok = strtok_r(NULL, " ", &saveptr);
1483  if (NULL == tok)
1484  {
1486  _("Missing entries in record line `%s'.\n"),
1487  value);
1488  GNUNET_free(cp);
1489  return GNUNET_SYSERR;
1490  }
1492  if (etime_is_rel)
1494  if (NULL == strchr(tok, (unsigned char)'p')) /* p = public */
1496  if (NULL != strchr(tok, (unsigned char)'s'))
1498  /* find beginning of record value */
1499  tok = strchr(&value[tok - cp], (unsigned char)' ');
1500  if (NULL == tok)
1501  {
1503  _("Missing entries in record line `%s'.\n"),
1504  value);
1505  GNUNET_free(cp);
1506  return GNUNET_SYSERR;
1507  }
1508  GNUNET_free(cp);
1509  tok++; /* skip space */
1511  tok,
1512  &raw_data,
1513  &record.data_size))
1514  {
1516  _("Invalid record data for type %s: `%s'.\n"),
1518  tok);
1519  return GNUNET_SYSERR;
1520  }
1521 
1522  r = GNUNET_malloc(sizeof(struct RecordSetEntry) + record.data_size);
1523  r->next = *head;
1524  record.data = &r[1];
1525  memcpy(&r[1], raw_data, record.data_size);
1526  GNUNET_free(raw_data);
1527  r->record = record;
1528  *head = r;
1529  return GNUNET_OK;
1530 }
This record should not be used unless all (other) records with an absolute expiration time have expir...
struct RecordSetEntry * next
Kept in a linked list.
static int parse_expiration(const char *expirationstring, int *etime_is_rel, uint64_t *etime)
Parse expiration time.
uint32_t GNUNET_GNSRECORD_typename_to_number(const char *dns_typename)
Convert a type name (i.e.
Definition: gnsrecord.c:203
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
#define GNUNET_strdup(a)
Wrapper around GNUNET_xstrdup_.
static int etime_is_rel
Is expiration time relative or absolute time?
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
int GNUNET_asprintf(char **buf, const char *format,...)
Like asprintf, just portable.
static char * value
Value of the record to add/remove.
static char * option
Name of the option.
Definition: gnunet-config.c:38
This is a private record of this peer and it should thus not be handed out to other peers...
int GNUNET_GNSRECORD_string_to_value(uint32_t type, const char *s, void **data, size_t *data_size)
Convert human-readable version of a &#39;value&#39; of a record to the binary representation.
Definition: gnsrecord.c:174
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
struct GNUNET_GNSRECORD_Data record
The record to add/remove.
Entry in record set for bulk processing.
static struct PendingResolutions * head
Head of list of pending resolution requests.
Definition: gnunet-ats.c:228
#define GNUNET_log(kind,...)
static void record(void *cls, size_t data_size, const void *data)
Process recorded audio data.
This flag is currently unused; former RF_PENDING flag.
const char * GNUNET_GNSRECORD_number_to_typename(uint32_t type)
Convert a type number (i.e.
Definition: gnsrecord.c:230
#define GNUNET_malloc(size)
Wrapper around malloc.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ multirecord_option()

struct GNUNET_GETOPT_CommandLineOption multirecord_option ( char  shortName,
const char *  name,
const char *  argumentHelp,
const char *  description,
struct RecordSetEntry **  rs 
)

Allow user to specify keywords.

Parameters
shortNameshort name of the option
namelong name of the option
argumentHelphelp text for the option argument
descriptionlong help text for the option
[out]topKeywordsset to the desired value

Definition at line 1543 of file gnunet-namestore.c.

References GNUNET_GETOPT_CommandLineOption::argumentHelp, GNUNET_GETOPT_CommandLineOption::description, multirecord_process(), name, and GNUNET_GETOPT_CommandLineOption::shortName.

Referenced by main().

1548 {
1550  .name = name,
1551  .argumentHelp = argumentHelp,
1552  .description = description,
1553  .require_argument = 1,
1554  .processor =
1556  .scls = (void *)rs };
1557 
1558  return clo;
1559 }
const char * argumentHelp
Name of the argument for the user in help text.
const char * description
Help text for the option (description)
Definition of a command line option.
static char * name
Name of the records to add/list/remove.
const char shortName
Short name of the option.
static int multirecord_process(struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, void *scls, const char *option, const char *value)
Command-line option parser function that allows the user to specify a complete record as one argument...
Here is the call graph for this function:
Here is the caller graph for this function:

◆ main()

int main ( int  argc,
char *const *  argv 
)

The main function for gnunet-namestore.

Parameters
argcnumber of arguments from the command line
argvcommand line arguments
Returns
0 ok, 1 on error

Definition at line 1570 of file gnunet-namestore.c.

References _, add, del, ego_name, expirationstring, gettext_noop, GNUNET_CRYPTO_ecdsa_key_clear(), GNUNET_free, GNUNET_GETOPT_OPTION_END, GNUNET_GETOPT_option_flag(), GNUNET_GETOPT_option_string(), GNUNET_log_setup(), GNUNET_OK, GNUNET_PROGRAM_run(), GNUNET_STRINGS_get_utf8_args(), is_public, is_shadow, list, monitor, multirecord_option(), nickstring, ret, reverse_pkey, run(), typestring, uri, value, and zone_pkey.

1571 {
1573  { GNUNET_GETOPT_option_flag('a', "add", gettext_noop("add record"), &add),
1575  "delete",
1576  gettext_noop("delete record"),
1577  &del),
1579  "display",
1580  gettext_noop("display records"),
1581  &list),
1583  'e',
1584  "expiration",
1585  "TIME",
1586  gettext_noop(
1587  "expiration time for record to use (for adding only), \"never\" is possible"),
1588  &expirationstring),
1590  "nick",
1591  "NICKNAME",
1592  gettext_noop(
1593  "set the desired nick name for the zone"),
1594  &nickstring),
1596  "monitor",
1597  gettext_noop(
1598  "monitor changes in the namestore"),
1599  &monitor),
1601  "name",
1602  "NAME",
1603  gettext_noop(
1604  "name of the record to add/delete/display"),
1605  &name),
1607  "reverse",
1608  "PKEY",
1609  gettext_noop(
1610  "determine our name for the given PKEY"),
1611  &reverse_pkey),
1613  'R',
1614  "replace",
1615  "RECORDLINE",
1616  gettext_noop(
1617  "set record set to values given by (possibly multiple) RECORDLINES; can be specified multiple times"),
1618  &recordset),
1620  "type",
1621  "TYPE",
1622  gettext_noop(
1623  "type of the record to add/delete/display"),
1624  &typestring),
1626  "uri",
1627  "URI",
1628  gettext_noop("URI to import into our zone"),
1629  &uri),
1631  "value",
1632  "VALUE",
1633  gettext_noop(
1634  "value of the record to add/delete"),
1635  &value),
1637  "public",
1638  gettext_noop("create or list public record"),
1639  &is_public),
1641  's',
1642  "shadow",
1643  gettext_noop(
1644  "create shadow record (only valid if all other records of the same type have expired"),
1645  &is_shadow),
1647  "zone",
1648  "EGO",
1649  gettext_noop(
1650  "name of the ego controlling the zone"),
1651  &ego_name),
1653  int lret;
1654 
1655  if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args(argc, argv, &argc, &argv))
1656  return 2;
1657 
1658  is_public = -1;
1659  is_shadow = -1;
1660  GNUNET_log_setup("gnunet-namestore", "WARNING", NULL);
1661  if (GNUNET_OK !=
1662  (lret = GNUNET_PROGRAM_run(argc,
1663  argv,
1664  "gnunet-namestore",
1665  _("GNUnet zone manipulation tool"),
1666  options,
1667  &run,
1668  NULL)))
1669  {
1670  GNUNET_free((void *)argv);
1672  return lret;
1673  }
1674  GNUNET_free((void *)argv);
1676  return ret;
1677 }
struct GNUNET_GETOPT_CommandLineOption options[]
Definition: 002.c:5
void GNUNET_CRYPTO_ecdsa_key_clear(struct GNUNET_CRYPTO_EcdsaPrivateKey *pk)
Clear memory that was used to store a private key.
Definition: crypto_ecc.c:585
int GNUNET_STRINGS_get_utf8_args(int argc, char *const *argv, int *u8argc, char *const **u8argv)
Returns utf-8 encoded arguments.
Definition: strings.c:1439
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
Definition of a command line option.
static char * name
Name of the records to add/list/remove.
static struct RecordSetEntry * recordset
Entry in record set for processing records in bulk.
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_OPTION_END
Definition: 002.c:13
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_option_string(char shortName, const char *name, const char *argumentHelp, const char *description, char **str)
Allow user to specify a string.
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
static int is_shadow
Is record a shadow record (GNUNET_GNSRECORD_RF_SHADOW_RECORD)
static char * value
Value of the record to add/remove.
static int monitor
Enables monitor mode.
static int del
Desired action is to remove a record.
static int ret
Global return value.
static void run(void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
Main function that will be run.
static char * reverse_pkey
Reverse lookup to perform.
static char * expirationstring
Desired expiration time.
static char * uri
URI to import.
static int is_public
Is record public (opposite of GNUNET_GNSRECORD_RF_PRIVATE)
static int add
Desired action is to add a record.
static int list
Desired action is to list records.
static char * nickstring
Desired nick name.
static char * ego_name
Name of the ego controlling the zone.
static struct GNUNET_CRYPTO_EcdsaPrivateKey zone_pkey
Private key for the our zone.
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_option_flag(char shortName, const char *name, const char *description, int *val)
Allow user to specify a flag (which internally means setting an integer to 1/GNUNET_YES/GNUNET_OK.
int GNUNET_PROGRAM_run(int argc, char *const *argv, const char *binaryName, const char *binaryHelp, const struct GNUNET_GETOPT_CommandLineOption *options, GNUNET_PROGRAM_Main task, void *task_cls)
Run a standard GNUnet command startup sequence (initialize loggers and configuration, parse options).
Definition: program.c:367
static char * typestring
Type of the record to add/remove, NULL to remove all.
int GNUNET_log_setup(const char *comp, const char *loglevel, const char *logfile)
Setup logging.
#define GNUNET_free(ptr)
Wrapper around free.
struct GNUNET_GETOPT_CommandLineOption multirecord_option(char shortName, const char *name, const char *argumentHelp, const char *description, struct RecordSetEntry **rs)
Allow user to specify keywords.
#define gettext_noop(String)
Definition: gettext.h:69
Here is the call graph for this function:

Variable Documentation

◆ ns

struct GNUNET_NAMESTORE_Handle* ns
static

Handle to the namestore.

Definition at line 56 of file gnunet-namestore.c.

◆ zone_pkey

struct GNUNET_CRYPTO_EcdsaPrivateKey zone_pkey
static

Private key for the our zone.

Definition at line 61 of file gnunet-namestore.c.

Referenced by del_monitor(), do_shutdown(), get_existing_record(), identity_cb(), main(), run(), and run_with_zone_pkey().

◆ el

struct GNUNET_IDENTITY_EgoLookup* el
static

Handle to identity lookup.

Definition at line 66 of file gnunet-namestore.c.

◆ idh

struct GNUNET_IDENTITY_Handle* idh
static

Identity service handle.

Definition at line 71 of file gnunet-namestore.c.

◆ get_default

struct GNUNET_IDENTITY_Operation* get_default

Obtain default ego.

Definition at line 76 of file gnunet-namestore.c.

◆ ego_name

char* ego_name
static

Name of the ego controlling the zone.

Definition at line 81 of file gnunet-namestore.c.

Referenced by handle_reverse_lookup(), identity_cb(), main(), and run().

◆ add

int add
static

Desired action is to add a record.

Definition at line 86 of file gnunet-namestore.c.

Referenced by main(), and run_with_zone_pkey().

◆ add_qe_uri

struct GNUNET_NAMESTORE_QueueEntry* add_qe_uri
static

Queue entry for the 'add-uri' operation.

Definition at line 91 of file gnunet-namestore.c.

◆ add_qe

struct GNUNET_NAMESTORE_QueueEntry* add_qe
static

Queue entry for the 'add' operation.

Definition at line 96 of file gnunet-namestore.c.

◆ get_qe

struct GNUNET_NAMESTORE_QueueEntry* get_qe
static

Queue entry for the 'lookup' operation.

Definition at line 101 of file gnunet-namestore.c.

◆ reverse_qe

struct GNUNET_NAMESTORE_QueueEntry* reverse_qe
static

Queue entry for the 'reverse lookup' operation (in combination with a name).

Definition at line 106 of file gnunet-namestore.c.

◆ list

int list
static

Desired action is to list records.

Definition at line 111 of file gnunet-namestore.c.

Referenced by main(), and run_with_zone_pkey().

◆ list_it

struct GNUNET_NAMESTORE_ZoneIterator* list_it
static

List iterator for the 'list' operation.

Definition at line 116 of file gnunet-namestore.c.

◆ del

int del
static

Desired action is to remove a record.

Definition at line 121 of file gnunet-namestore.c.

Referenced by main(), and run_with_zone_pkey().

◆ is_public

int is_public
static

Is record public (opposite of GNUNET_GNSRECORD_RF_PRIVATE)

Definition at line 126 of file gnunet-namestore.c.

Referenced by get_existing_record(), and main().

◆ is_shadow

int is_shadow
static

Is record a shadow record (GNUNET_GNSRECORD_RF_SHADOW_RECORD)

Definition at line 131 of file gnunet-namestore.c.

Referenced by get_existing_record(), main(), and run_with_zone_pkey().

◆ del_qe

struct GNUNET_NAMESTORE_QueueEntry* del_qe
static

Queue entry for the 'del' operation.

Definition at line 136 of file gnunet-namestore.c.

◆ set_qe

struct GNUNET_NAMESTORE_QueueEntry* set_qe
static

Queue entry for the 'set/replace' operation.

Definition at line 141 of file gnunet-namestore.c.

◆ name

char* name
static

Name of the records to add/list/remove.

Definition at line 146 of file gnunet-namestore.c.

Referenced by del_monitor(), display_record(), get_existing_record(), identity_cb(), multirecord_option(), and run_with_zone_pkey().

◆ value

char* value
static

Value of the record to add/remove.

Definition at line 151 of file gnunet-namestore.c.

Referenced by add_get_request_to_pending(), add_setter_action(), add_to_tc(), age_values(), bandwidth_stats_iterator(), barrier_destroy_iterator(), bind_loose_channel(), build_result_set(), cache_clear_iterator(), call_iterator(), cancel_pending_request(), change_peer_respect(), channel_destroy_iterator(), check_connection_quality(), check_known_address(), check_known_challenge(), check_validation_request_pending(), clean_local_client(), clean_request(), cleanup_channel(), cleanup_destination(), cleanup_iterator(), cleanup_validation_entry(), client_release_ports(), close_files_iter(), collector(), consume_cont(), consume_ticket(), cookie_identity_interpretation(), database_setup(), debug_channel(), decrementBit(), del_monitor(), delete_entries(), destroy_active_client_request(), destroy_ai_cb(), destroy_all_address_it(), destroy_channel_cb(), destroy_elements_iterator(), destroy_it(), destroy_iterator_cb(), destroy_key_to_element_iter(), destroy_paths_now(), destroy_port_cb(), destroy_remaining_channels(), destroy_session_cb(), destroy_session_shutdown_cb(), destroy_tunnels_now(), destroy_watch(), disconnect_all_neighbours(), disconnect_and_free_peer_entry(), dns_string_to_value(), dns_value_to_string(), do_flood(), do_restart_typemap_message(), drop_client_entries(), escape_name(), execute_get(), execute_select(), expire_blocks(), expire_entries(), filter_all(), filtered_map_initialization(), find_address_cb(), find_address_it(), find_advertisable_hello(), find_ai_cb(), find_ai_no_session_cb(), find_best_address_it(), find_by_message_uuid(), find_by_unique_id(), find_closest(), find_result_set(), find_sender_by_address(), find_trees(), flush_respect(), forward_reply(), free_ack_cummulator_cb(), free_addr_it(), free_all_it(), free_backtalker_cb(), free_blacklist_entry(), free_connect_info(), free_dv_routes_cb(), free_ego(), free_entry(), free_host_entry(), free_item(), free_matching_requests(), free_neighbour_cb(), free_peer(), free_pending_ack_cb(), free_preference(), free_reassembly_cb(), free_record(), free_request(), free_request_it(), free_result(), free_service_record(), free_session(), free_sug_handle(), free_tmps(), free_tracker(), free_validation_state_cb(), free_value(), free_waiting_entry(), get_active_address_it(), get_all_peers_iterator(), get_all_tunnels_iterator(), get_cb(), get_iterator(), get_queue_delete_it(), get_receiver_delete_it(), get_result_present(), get_sender_delete_it(), get_session_delete_it(), get_url_parameter_copy(), GNUNET_CONFIGURATION_deserialize(), GNUNET_NETWORK_socket_disable_corking(), GSF_cadet_release_clients(), handle_ack(), handle_set(), heap_plugin_get_expiration(), heap_plugin_get_replication(), heap_plugin_get_zero_anonymity(), heap_plugin_put(), incrementBit(), init_key_to_element_iterator(), initialize_map_unfiltered(), iterate_addresses(), iterate_channels_cb(), iterate_entries(), iterate_reachables(), iterate_zones(), iterator_bf_create(), iterator_bf_reduce(), libgnunet_plugin_rest_openid_connect_done(), locate_by_id(), lookup_queue_it(), lookup_session_it(), main(), mark_match_down(), mark_peer_down(), match_session_cb(), mlp_create_problem_add_address_information(), mlp_free_peers(), mlp_get_preferred_address_it(), mlp_propagate_results(), move_to_pending(), move_to_queue(), neighbour_delete(), neighbours_iterate(), normalize_address(), notify_change(), notify_client_about_session(), notify_client_queues(), notify_tunnel_up_cb(), op_get_element_iterator(), opc_free_iterator(), opc_search_iterator(), open_port_cb(), parse_record(), parse_record_data(), peerinfo_it(), prepare_ibf_iterator(), printer(), process(), process_client_result(), process_reply(), process_result_with_request(), process_stat_in(), process_update_node(), put_cb(), rcop_cleanup_iterator(), reachability_iterator(), regex_cancel_dht_get(), regex_result_iterator(), reghost_free_iterator(), reghost_match_iterator(), remove_by_unique_id(), remove_iterator(), reschedule_hellos(), reset_peers(), rewatch_it(), run(), run_with_zone_pkey(), schedule_current_round(), search_iterator(), search_result_free(), search_result_freeze_probes(), search_result_resume_probes(), search_result_stop(), search_result_suspend(), send_add_session_cb(), send_full_element_iterator(), send_missing_full_elements_iter(), send_offers_iterator(), send_session_info_iter(), send_utilization_data(), session_cmp_it(), session_disconnect_it(), session_lookup_client_by_address(), session_lookup_it(), session_tag_it(), set_cont(), set_insert_iterator(), signal_result_resume(), socket_set_nodelay(), stat_iterator(), stop_peer_request(), store_and_free_entries(), stun_attr2str(), stun_msg2str(), sum_relative_preferences(), template_plugin_update_session_timeout(), test_blacklisted(), test_exist_cb(), test_result_present(), ticket_collect(), transmit_suggestion(), try_add_peers(), try_combine_recent(), update_abs_sum(), update_allocation(), update_counters(), update_flood_times(), update_iterator(), update_rel_sum(), update_sre_result_maps(), validation_entry_match(), watch_notifier_it(), write_item(), and zone_to_name().

◆ uri

char* uri
static

URI to import.

Definition at line 156 of file gnunet-namestore.c.

Referenced by do_shutdown(), main(), run(), and run_with_zone_pkey().

◆ reverse_pkey

char* reverse_pkey
static

Reverse lookup to perform.

Definition at line 161 of file gnunet-namestore.c.

Referenced by handle_reverse_lookup(), main(), reverse_error_cb(), and run_with_zone_pkey().

◆ typestring

char* typestring
static

Type of the record to add/remove, NULL to remove all.

Definition at line 166 of file gnunet-namestore.c.

Referenced by del_monitor(), display_record(), display_records_from_block(), main(), and run_with_zone_pkey().

◆ expirationstring

char* expirationstring
static

Desired expiration time.

Definition at line 171 of file gnunet-namestore.c.

Referenced by main(), and run_with_zone_pkey().

◆ nickstring

char* nickstring
static

Desired nick name.

Definition at line 176 of file gnunet-namestore.c.

Referenced by main(), and run_with_zone_pkey().

◆ ret

int ret
static

◆ type

uint32_t type
static

Type string converted to DNS type value.

Definition at line 186 of file gnunet-namestore.c.

Referenced by del_monitor(), display_record(), get_existing_record(), and run_with_zone_pkey().

◆ data

void* data
static

Value in binary format.

Definition at line 191 of file gnunet-namestore.c.

Referenced by del_monitor(), display_record(), do_shutdown(), get_existing_record(), and run_with_zone_pkey().

◆ data_size

size_t data_size
static

◆ etime

uint64_t etime
static

Expiration string converted to numeric value.

Definition at line 201 of file gnunet-namestore.c.

Referenced by generate_gns_certificate(), get_existing_record(), and run_with_zone_pkey().

◆ etime_is_rel

int etime_is_rel = GNUNET_SYSERR
static

Is expiration time relative or absolute time?

Definition at line 206 of file gnunet-namestore.c.

Referenced by get_existing_record(), multirecord_process(), and run_with_zone_pkey().

◆ zm

struct GNUNET_NAMESTORE_ZoneMonitor* zm
static

◆ monitor

int monitor
static

Enables monitor mode.

Definition at line 216 of file gnunet-namestore.c.

Referenced by main(), and run_with_zone_pkey().

◆ recordset

struct RecordSetEntry* recordset
static

Entry in record set for processing records in bulk.

Definition at line 221 of file gnunet-namestore.c.