GNUnet 0.21.2
gnunet-namestore.c File Reference

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

#include "gnunet_common.h"
#include "platform.h"
#include <gnunet_util_lib.h>
#include <gnunet_identity_service.h>
#include <gnunet_gnsrecord_lib.h>
#include <gnunet_gns_service.h>
#include <gnunet_namestore_service.h>
#include <inttypes.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...
 
struct  MarkedRecord
 The record marked for deletion. More...
 
struct  EgoEntry
 The default namestore ego. More...
 

Macros

#define WARN_RELATIVE_EXPIRATION_LIMIT
 The upper bound for the zone iteration interval (per record). More...
 
#define INITIAL_RI_BUFFER_SIZE   5000
 
#define MAX_LINE_LEN   4086
 
#define MAX_ARGS   20
 

Functions

static int parse_expiration (const char *expirationstring, int *etime_is_rel, uint64_t *etime)
 Parse expiration time. More...
 
static int parse_recordline (const char *line)
 
static void clear_recordset ()
 
static void reset_handles (void)
 
static void do_shutdown (void *cls)
 Task run on shutdown. More...
 
static void process_command_stdin ()
 
static void batch_insert_recordinfo (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 finish_command (void)
 
static void add_continuation (void *cls, enum GNUNET_ErrorCode ec)
 
static void del_continuation (void *cls, enum GNUNET_ErrorCode ec)
 
static void purge_next_record (void *cls)
 
static void marked_deleted (void *cls, enum GNUNET_ErrorCode ec)
 
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 collect_zone_records_to_purge (const struct GNUNET_CRYPTO_PrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd)
 
static void collect_orphans (const struct GNUNET_CRYPTO_PrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd)
 
static void display_record (const struct GNUNET_CRYPTO_PrivateKey *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 purge_zone_iterator (void *cls, const struct GNUNET_CRYPTO_PrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd, struct GNUNET_TIME_Absolute expiry)
 
static void purge_orphans_iterator (void *cls, const struct GNUNET_CRYPTO_PrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd, struct GNUNET_TIME_Absolute expiry)
 
static void display_record_iterator (void *cls, const struct GNUNET_CRYPTO_PrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd, struct GNUNET_TIME_Absolute expiry)
 Process a record that was stored in the namestore. More...
 
static void display_record_monitor (void *cls, const struct GNUNET_CRYPTO_PrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd, struct GNUNET_TIME_Absolute expiry)
 Process a record that was stored in the namestore. More...
 
static void display_record_lookup (void *cls, const struct GNUNET_CRYPTO_PrivateKey *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_PrivateKey *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_PrivateKey *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_PrivateKey *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 void schedule_finish (void *cls)
 
static void replace_cont (void *cls, enum GNUNET_ErrorCode ec)
 
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 int get_identity_for_string (const char *str, struct GNUNET_CRYPTO_PrivateKey *zk)
 
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...
 
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_PrivateKey zone_pkey
 Private key for the our zone. More...
 
static struct GNUNET_IDENTITY_Handleidh
 Identity service handle. More...
 
static char * ego_name
 Name of the ego controlling the zone. 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 struct MarkedRecordmarked_head
 Marked record list. More...
 
static struct MarkedRecordmarked_tail
 Marked record list. More...
 
const struct GNUNET_CONFIGURATION_Handlecfg
 Configuration handle. More...
 
static struct EgoEntryego_head
 Ego list. More...
 
static struct EgoEntryego_tail
 Ego list. More...
 
static struct GNUNET_NAMESTORE_ZoneIteratorlist_it
 List iterator for the 'list' operation. More...
 
static int read_from_stdin
 Run in read from stdin mode. More...
 
static int list
 Desired action is to list records. More...
 
static int add
 Desired action is to add a record. 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) More...
 
static int is_maintenance
 Is record a maintenance record (GNUNET_GNSRECORD_RF_MAINTENANCE) More...
 
static int omit_private
 Filter private records. More...
 
static int output_recordline
 Output in recordline format. More...
 
static int purge_zone
 Purge zone contents. More...
 
static int include_maintenance
 Do not filter maintenance records. More...
 
static int purge_orphaned
 Purge orphaned records. More...
 
static int list_orphaned
 List records and zone keys of orphaned records. 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 struct GNUNET_NAMESTORE_QueueEntryns_qe
 Queue entry for begin/commit. 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...
 
static struct GNUNET_SCHEDULER_Taskpurge_task
 Purge task. More...
 
static unsigned int ri_count = 0
 
static struct GNUNET_NAMESTORE_RecordInforecord_info
 
static unsigned int record_info_capacity = 0
 Maximum capacity of record_info array. More...
 
static unsigned int max_batch_size = 1000
 
static unsigned int ri_sent = 0
 

Detailed Description

command line tool to manipulate the local zone

Author
Christian Grothoff

TODO:

  • test

Definition in file gnunet-namestore.c.

Macro Definition Documentation

◆ WARN_RELATIVE_EXPIRATION_LIMIT

#define WARN_RELATIVE_EXPIRATION_LIMIT
Value:
#define GNUNET_TIME_UNIT_MINUTES
One minute.
struct GNUNET_TIME_Relative GNUNET_TIME_relative_multiply(struct GNUNET_TIME_Relative rel, unsigned long long factor)
Multiply relative time by a given factor.
Definition: time.c:484

The upper bound for the zone iteration interval (per record).

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

◆ INITIAL_RI_BUFFER_SIZE

#define INITIAL_RI_BUFFER_SIZE   5000

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

◆ MAX_LINE_LEN

#define MAX_LINE_LEN   4086

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

◆ MAX_ARGS

#define MAX_ARGS   20

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

Function Documentation

◆ parse_expiration()

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

Parse expiration time.

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

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

373{
374 struct GNUNET_TIME_Relative etime_rel;
375 struct GNUNET_TIME_Absolute etime_abs;
376
377 if (0 == strcmp (expirationstring, "never"))
378 {
379 *etime = GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us;
381 return GNUNET_OK;
382 }
383 if (GNUNET_OK ==
385 {
387 *etime = etime_rel.rel_value_us;
389 {
391 "Relative expiration times of less than %s are not recommended. To improve availability, consider increasing this value.\n",
394 }
396 "Storing record with relative expiration time of %s\n",
398 return GNUNET_OK;
399 }
400 if (GNUNET_OK ==
402 {
404 *etime = etime_abs.abs_value_us;
406 "Storing record with absolute expiration time of %s\n",
408 return GNUNET_OK;
409 }
410 return GNUNET_SYSERR;
411}
#define WARN_RELATIVE_EXPIRATION_LIMIT
The upper bound for the zone iteration interval (per record).
static int etime_is_rel
Is expiration time relative or absolute time?
static char * expirationstring
Desired expiration time.
static uint64_t etime
Expiration string converted to numeric value.
#define GNUNET_log(kind,...)
@ GNUNET_OK
@ GNUNET_YES
@ GNUNET_NO
@ GNUNET_SYSERR
@ GNUNET_ERROR_TYPE_WARNING
@ GNUNET_ERROR_TYPE_DEBUG
enum GNUNET_GenericReturnValue 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:260
#define GNUNET_TIME_relative_cmp(t1, op, t2)
Compare two relative times.
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:570
const char * GNUNET_STRINGS_absolute_time_to_string(struct GNUNET_TIME_Absolute t)
Like asctime, except for GNUnet time.
Definition: strings.c:617
#define GNUNET_TIME_UNIT_FOREVER_ABS
Constant used to specify "forever".
enum GNUNET_GenericReturnValue 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:302
Time for absolute times used by GNUnet, in microseconds.
Time for relative time used by GNUnet, in microseconds.

References GNUNET_TIME_Absolute::abs_value_us, etime, etime_is_rel, expirationstring, GNUNET_ERROR_TYPE_DEBUG, GNUNET_ERROR_TYPE_WARNING, 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_relative_cmp, GNUNET_TIME_UNIT_FOREVER_ABS, GNUNET_YES, GNUNET_TIME_Relative::rel_value_us, and WARN_RELATIVE_EXPIRATION_LIMIT.

Referenced by run_with_zone_pkey().

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

◆ parse_recordline()

static int parse_recordline ( const char *  line)
static

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

416{
417 struct RecordSetEntry *r;
419 char *cp;
420 char *tok;
421 char *saveptr;
422 void *raw_data;
423
424 cp = GNUNET_strdup (line);
425 tok = strtok_r (cp, " ", &saveptr);
426 if (NULL == tok)
427 {
429 _ ("Missing entries in record line `%s'.\n"),
430 line);
431 GNUNET_free (cp);
432 return GNUNET_SYSERR;
433 }
435 if (UINT32_MAX == record.record_type)
436 {
437 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _ ("Unknown record type `%s'\n"), tok);
438 GNUNET_free (cp);
439 return GNUNET_SYSERR;
440 }
441 tok = strtok_r (NULL, " ", &saveptr);
442 if (NULL == tok)
443 {
445 _ ("Empty record line argument is not allowed.\n"));
446 GNUNET_free (cp);
447 return GNUNET_SYSERR;
448 }
449 if (1 != sscanf (tok, "%" SCNu64, &record.expiration_time))
450 {
451 fprintf (stderr,
452 _ ("Error parsing expiration time %s.\n"), tok);
453 GNUNET_free (cp);
454 return GNUNET_SYSERR;
455 }
456 tok = strtok_r (NULL, " ", &saveptr);
457 if (NULL == tok)
458 {
460 _ ("Empty record line argument is not allowed.\n"));
461 GNUNET_free (cp);
462 return GNUNET_SYSERR;
463 }
465 if (NULL != strchr (tok, (unsigned char) 'r'))
467 if (NULL == strchr (tok, (unsigned char) 'p')) /* p = public */
469 if (NULL != strchr (tok, (unsigned char) 'S'))
471 if (NULL != strchr (tok, (unsigned char) 's'))
473 if (NULL != strchr (tok, (unsigned char) 'C'))
475 tok += strlen (tok) + 1;
477 tok,
478 &raw_data,
479 &record.data_size))
480 {
482 _ ("Invalid record data for type %s: `%s'.\n"),
484 tok);
485 GNUNET_free (cp);
486 return GNUNET_SYSERR;
487 }
488 GNUNET_free (cp);
489
490 r = GNUNET_malloc (sizeof(struct RecordSetEntry) + record.data_size);
491 r->next = recordset;
492 record.data = &r[1];
493 memcpy (&r[1], raw_data, record.data_size);
494 GNUNET_free (raw_data);
495 r->record = record;
496 recordset = r;
497 return GNUNET_OK;
498}
static void record(void *cls, size_t data_size, const void *data)
Process recorded audio data.
static char * line
Desired phone line (string to be converted to a hash).
static struct RecordSetEntry * recordset
Entry in record set for processing records in bulk.
const char * GNUNET_GNSRECORD_number_to_typename(uint32_t type)
Convert a type number to the corresponding type string (e.g.
Definition: gnsrecord.c:227
uint32_t GNUNET_GNSRECORD_typename_to_number(const char *dns_typename)
Convert a type name (e.g.
Definition: gnsrecord.c:200
int GNUNET_GNSRECORD_string_to_value(uint32_t type, const char *s, void **data, size_t *data_size)
Convert human-readable version of the value s of a record of type type to the respective binary repre...
Definition: gnsrecord.c:177
@ GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION
This expiration time of the record is a relative time (not an absolute time).
@ GNUNET_GNSRECORD_RF_CRITICAL
This record is critical.
@ GNUNET_GNSRECORD_RF_SUPPLEMENTAL
This is a supplemental record.
@ GNUNET_GNSRECORD_RF_SHADOW
This record should not be used unless all (other) records in the set with an absolute expiration time...
@ GNUNET_GNSRECORD_RF_PRIVATE
This is a private record of this peer and it should thus not be published.
@ GNUNET_GNSRECORD_RF_NONE
Entry for no flags / cleared flags.
@ GNUNET_ERROR_TYPE_ERROR
#define GNUNET_strdup(a)
Wrapper around GNUNET_xstrdup_.
#define GNUNET_malloc(size)
Wrapper around malloc.
#define GNUNET_free(ptr)
Wrapper around free.
#define _(String)
GNU gettext support macro.
Definition: platform.h:178
Entry in record set for bulk processing.
struct GNUNET_GNSRECORD_Data record
The record to add/remove.
struct RecordSetEntry * next
Kept in a linked list.

References _, GNUNET_ERROR_TYPE_ERROR, GNUNET_free, GNUNET_GNSRECORD_number_to_typename(), GNUNET_GNSRECORD_RF_CRITICAL, GNUNET_GNSRECORD_RF_NONE, GNUNET_GNSRECORD_RF_PRIVATE, GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION, GNUNET_GNSRECORD_RF_SHADOW, GNUNET_GNSRECORD_RF_SUPPLEMENTAL, GNUNET_GNSRECORD_string_to_value(), GNUNET_GNSRECORD_typename_to_number(), GNUNET_log, GNUNET_malloc, GNUNET_OK, GNUNET_strdup, GNUNET_SYSERR, line, RecordSetEntry::next, RecordSetEntry::record, record(), and recordset.

Referenced by process_command_stdin().

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

◆ clear_recordset()

static void clear_recordset ( )
static

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

503{
504 struct RecordSetEntry *rs_entry;
505
506 while (NULL != (rs_entry = recordset))
507 {
509 GNUNET_free (rs_entry);
510 }
511 recordset = NULL;
512}

References GNUNET_free, RecordSetEntry::next, and recordset.

Referenced by process_command_stdin(), and reset_handles().

Here is the caller graph for this function:

◆ reset_handles()

static void reset_handles ( void  )
static

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

517{
518 struct MarkedRecord *mrec;
519 struct MarkedRecord *mrec_tmp;
521 if (NULL != ego_name)
522 {
524 ego_name = NULL;
525 }
526 if (NULL != name)
527 {
529 name = NULL;
530 }
531 if (NULL != value)
532 {
534 value = NULL;
535 }
536 if (NULL != uri)
537 {
539 uri = NULL;
540 }
541 if (NULL != expirationstring)
542 {
544 expirationstring = NULL;
545 }
546 if (NULL != purge_task)
547 {
549 purge_task = NULL;
550 }
551 for (mrec = marked_head; NULL != mrec;)
552 {
553 mrec_tmp = mrec;
554 mrec = mrec->next;
555 GNUNET_free (mrec_tmp->name);
556 GNUNET_free (mrec_tmp);
557 }
558 if (NULL != list_it)
559 {
561 list_it = NULL;
562 }
563 if (NULL != add_qe)
564 {
566 add_qe = NULL;
567 }
568 if (NULL != set_qe)
569 {
571 set_qe = NULL;
572 }
573 if (NULL != add_qe_uri)
574 {
576 add_qe_uri = NULL;
577 }
578 if (NULL != get_qe)
579 {
581 get_qe = NULL;
582 }
583 if (NULL != del_qe)
584 {
586 del_qe = NULL;
587 }
588 if (NULL != reverse_qe)
589 {
591 reverse_qe = NULL;
592 }
593 memset (&zone_pkey, 0, sizeof(zone_pkey));
594 if (NULL != zm)
595 {
597 zm = NULL;
598 }
599 if (NULL != data)
600 {
602 data = NULL;
603 }
604 if (NULL != typestring)
605 {
607 typestring = NULL;
608 }
609 list = 0;
610 is_public = 0;
611 is_shadow = 0;
612 is_maintenance = 0;
613 purge_zone = 0;
614}
static struct GNUNET_NAMESTORE_QueueEntry * get_qe
Queue entry for the 'lookup' operation.
static struct GNUNET_CRYPTO_PrivateKey zone_pkey
Private key for the our zone.
static struct GNUNET_NAMESTORE_ZoneMonitor * zm
Monitor handle.
static struct GNUNET_NAMESTORE_QueueEntry * add_qe
Queue entry for the 'add' operation.
static char * value
Value of the record to add/remove.
static int list
Desired action is to list records.
static struct GNUNET_NAMESTORE_QueueEntry * del_qe
Queue entry for the 'del' operation.
static int purge_zone
Purge zone contents.
static char * name
Name of the records to add/list/remove.
static struct GNUNET_NAMESTORE_QueueEntry * set_qe
Queue entry for the 'set/replace' operation.
static void * data
Value in binary format.
static void clear_recordset()
static char * ego_name
Name of the ego controlling the zone.
static struct MarkedRecord * marked_head
Marked record list.
static int is_shadow
Is record a shadow record (GNUNET_GNSRECORD_RF_SHADOW)
static struct GNUNET_SCHEDULER_Task * purge_task
Purge task.
static struct GNUNET_NAMESTORE_ZoneIterator * list_it
List iterator for the 'list' operation.
static int is_maintenance
Is record a maintenance record (GNUNET_GNSRECORD_RF_MAINTENANCE)
static struct GNUNET_NAMESTORE_QueueEntry * add_qe_uri
Queue entry for the 'add-uri' operation.
static struct GNUNET_NAMESTORE_QueueEntry * reverse_qe
Queue entry for the 'reverse lookup' operation (in combination with a name).
static char * typestring
Type of the record to add/remove, NULL to remove all.
static char * uri
URI to import.
static int is_public
Is record public (opposite of GNUNET_GNSRECORD_RF_PRIVATE)
void GNUNET_NAMESTORE_cancel(struct GNUNET_NAMESTORE_QueueEntry *qe)
Cancel a namestore operation.
void GNUNET_NAMESTORE_zone_monitor_stop(struct GNUNET_NAMESTORE_ZoneMonitor *zm)
Stop monitoring a zone for changes.
void GNUNET_NAMESTORE_zone_iteration_stop(struct GNUNET_NAMESTORE_ZoneIterator *it)
Stops iteration and releases the namestore handle for further calls.
void * GNUNET_SCHEDULER_cancel(struct GNUNET_SCHEDULER_Task *task)
Cancel the task with the specified identifier.
Definition: scheduler.c:981
The record marked for deletion.
struct MarkedRecord * next
DLL.
char * name
Ego Identifier.

References add_qe, add_qe_uri, clear_recordset(), data, del_qe, ego_name, expirationstring, get_qe, GNUNET_free, GNUNET_NAMESTORE_cancel(), GNUNET_NAMESTORE_zone_iteration_stop(), GNUNET_NAMESTORE_zone_monitor_stop(), GNUNET_SCHEDULER_cancel(), is_maintenance, is_public, is_shadow, list, list_it, marked_head, MarkedRecord::name, name, MarkedRecord::next, purge_task, purge_zone, reverse_qe, set_qe, typestring, uri, value, zm, and zone_pkey.

Referenced by do_shutdown().

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

◆ do_shutdown()

static void do_shutdown ( void *  cls)
static

Task run on shutdown.

Cleans up everything.

Parameters
clsunused

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

624{
625 struct EgoEntry *ego_entry;
626 struct EgoEntry *ego_tmp;
627 (void) cls;
628
629 reset_handles ();
630 if (NULL != record_info)
632 record_info = NULL;
633 if (NULL != ns_qe)
634 {
636 ns_qe = NULL;
637 }
638 if (NULL != ns)
639 {
641 ns = NULL;
642 }
643 if (NULL != idh)
644 {
646 idh = NULL;
647 }
648 for (ego_entry = ego_head; NULL != ego_entry;)
649 {
650 ego_tmp = ego_entry;
651 ego_entry = ego_entry->next;
652 GNUNET_free (ego_tmp->identifier);
653 GNUNET_free (ego_tmp);
654 }
655}
static struct GNUNET_NAMESTORE_QueueEntry * ns_qe
Queue entry for begin/commit.
static void reset_handles(void)
static struct GNUNET_IDENTITY_Handle * idh
Identity service handle.
static struct EgoEntry * ego_head
Ego list.
static struct GNUNET_NAMESTORE_Handle * ns
Handle to the namestore.
static struct GNUNET_NAMESTORE_RecordInfo * record_info
void GNUNET_IDENTITY_disconnect(struct GNUNET_IDENTITY_Handle *h)
Disconnect from identity service.
Definition: identity_api.c:732
void GNUNET_NAMESTORE_disconnect(struct GNUNET_NAMESTORE_Handle *h)
Disconnect from the namestore service (and free associated resources).
The default namestore ego.
char * identifier
Ego Identifier.
struct EgoEntry * next
DLL.

References ego_head, GNUNET_free, GNUNET_IDENTITY_disconnect(), GNUNET_NAMESTORE_cancel(), GNUNET_NAMESTORE_disconnect(), EgoEntry::identifier, idh, EgoEntry::next, ns, ns_qe, record_info, and reset_handles().

Referenced by run().

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

◆ process_command_stdin()

static void process_command_stdin ( )
static

Check if this is a new name. If yes, and we have records, store them.

One last time

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

1873{
1874 char buf[MAX_LINE_LEN];
1875 static struct GNUNET_CRYPTO_PrivateKey next_zone_key;
1876 static char next_name[GNUNET_DNSPARSER_MAX_NAME_LENGTH];
1877 static int finished = GNUNET_NO;
1878 static int have_next_recordline = GNUNET_NO;
1879 int zonekey_set = GNUNET_NO;
1880 char *tmp;
1881 char *current_name = NULL;
1882
1883
1884 if (GNUNET_YES == have_next_recordline)
1885 {
1886 zone_pkey = next_zone_key;
1887 if (NULL != current_name)
1888 GNUNET_free (current_name);
1889 current_name = GNUNET_strdup (next_name);
1890 zonekey_set = GNUNET_YES;
1891 }
1892 while (NULL != fgets (buf, sizeof (buf), stdin))
1893 {
1894 if (1 >= strlen (buf))
1895 continue;
1896 if (buf[strlen (buf) - 1] == '\n')
1897 buf[strlen (buf) - 1] = '\0';
1901 if (buf[strlen (buf) - 1] == ':')
1902 {
1903 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Switching to %s\n", buf);
1904 memset (next_name, 0, sizeof (next_name));
1905 strncpy (next_name, buf, strlen (buf) - 1);
1906 tmp = strchr (next_name, '.');
1907 if (NULL == tmp)
1908 {
1909 fprintf (stderr, "Error parsing name `%s'\n", next_name);
1911 ret = 1;
1912 return;
1913 }
1914 if (GNUNET_OK != get_identity_for_string (tmp + 1, &next_zone_key))
1915 {
1916 fprintf (stderr, "Error parsing zone name `%s'\n", tmp + 1);
1917 ret = 1;
1919 return;
1920 }
1921 *tmp = '\0';
1922 have_next_recordline = GNUNET_YES;
1923 /* Run a command for the previous record set */
1924 if (NULL != recordset)
1925 {
1927 {
1932 "Recordinfo array grown to %u bytes!\n", record_info_capacity);
1933 }
1934 record_info[ri_count].a_label = GNUNET_strdup (current_name);
1935 int rd_count = 0;
1936 for (struct RecordSetEntry *e = recordset; NULL != e; e = e->next)
1937 rd_count++;
1939 struct
1941 rd_count = 0;
1942 for (struct RecordSetEntry *e = recordset; NULL != e; e = e->next)
1943 {
1944 record_info[ri_count].a_rd[rd_count] = e->record;
1946 record.
1947 data_size);
1949 data_size;
1950 memcpy ((void*) record_info[ri_count].a_rd[rd_count].data,
1951 e->record.data, e->record.data_size);
1952 rd_count++;
1953 }
1955 ri_count++;
1956 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Added %d records to record info\n", rd_count);
1957 clear_recordset ();
1958 /* If the zone has changed, insert */
1959 /* If we have reached batch size, insert */
1960 if (0 != GNUNET_memcmp (&next_zone_key, &zone_pkey) ||
1962 {
1963 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Batch inserting %d RI\n", ri_count);
1965 return;
1966 }
1967 }
1968 zone_pkey = next_zone_key;
1969 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Switching from %s to %s\n", current_name, next_name);
1970 if (NULL != current_name)
1971 GNUNET_free (current_name);
1972 current_name = GNUNET_strdup (next_name);
1973 zonekey_set = GNUNET_YES;
1974 continue;
1975 }
1976 if (GNUNET_NO == zonekey_set)
1977 {
1978 fprintf (stderr, "Warning, encountered recordline without zone\n");
1979 continue;
1980 }
1981 parse_recordline (buf);
1982 }
1983 if (GNUNET_NO == finished)
1984 {
1985 if (NULL != recordset)
1986 {
1987 if (GNUNET_YES == zonekey_set)
1988 {
1989 record_info[ri_count].a_label = GNUNET_strdup (current_name);
1990 int rd_count = 0;
1991 for (struct RecordSetEntry *e = recordset; NULL != e; e = e->next)
1992 rd_count++;
1994 struct
1996 rd_count = 0;
1997 for (struct RecordSetEntry *e = recordset; NULL != e; e = e->next)
1998 {
1999 record_info[ri_count].a_rd[rd_count] = e->record;
2001 .
2002 data_size);
2003 record_info[ri_count].a_rd[rd_count].data_size = e->record.data_size
2004 ;
2005 memcpy ((void*) record_info[ri_count].a_rd[rd_count].data,
2006 e->record.data, e->record.data_size);
2007 rd_count++;
2008 }
2010 ri_count++;
2013 return;
2014 }
2015 fprintf (stderr, "Warning, encountered recordline without zone\n");
2016 }
2017 }
2018 if (ri_sent < ri_count)
2019 {
2021 return;
2022 }
2024 return;
2025}
static bool finished
Set to true once we are finished and should exit after sending our final message to the parent.
static unsigned int rd_count
Number of records for currently parsed set.
#define MAX_LINE_LEN
static int parse_recordline(const char *line)
const struct GNUNET_CONFIGURATION_Handle * cfg
Configuration handle.
static void batch_insert_recordinfo(const struct GNUNET_CONFIGURATION_Handle *cfg)
We have obtained the zone's private key, so now process the main commands using it.
static int get_identity_for_string(const char *str, struct GNUNET_CRYPTO_PrivateKey *zk)
static int ret
Global return value.
static unsigned int max_batch_size
static unsigned int ri_sent
static size_t data_size
Number of bytes in data.
static unsigned int record_info_capacity
Maximum capacity of record_info array.
static unsigned int ri_count
#define GNUNET_DNSPARSER_MAX_NAME_LENGTH
Maximum length of a name in DNS.
#define GNUNET_memcmp(a, b)
Compare memory in a and b, where both must be of the same pointer type.
#define GNUNET_array_grow(arr, size, tsize)
Grow a well-typed (!) array.
#define GNUNET_new_array(n, type)
Allocate a size n array with structs or unions of the given type.
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:567
A private key for an identity as per LSD0001.
const void * data
Binary value stored in the DNS record.
size_t data_size
Number of bytes in data.
struct GNUNET_GNSRECORD_Data * a_rd

References GNUNET_NAMESTORE_RecordInfo::a_label, GNUNET_NAMESTORE_RecordInfo::a_rd, GNUNET_NAMESTORE_RecordInfo::a_rd_count, batch_insert_recordinfo(), cfg, clear_recordset(), data, GNUNET_GNSRECORD_Data::data, data_size, GNUNET_GNSRECORD_Data::data_size, finished, get_identity_for_string(), GNUNET_array_grow, GNUNET_DNSPARSER_MAX_NAME_LENGTH, GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_log, GNUNET_malloc, GNUNET_memcmp, GNUNET_new_array, GNUNET_NO, GNUNET_OK, GNUNET_SCHEDULER_shutdown(), GNUNET_strdup, GNUNET_YES, max_batch_size, MAX_LINE_LEN, RecordSetEntry::next, parse_recordline(), rd_count, record(), record_info, record_info_capacity, recordset, ret, ri_count, ri_sent, and zone_pkey.

Referenced by finish_command(), and id_connect_cb().

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

◆ batch_insert_recordinfo()

static void batch_insert_recordinfo ( 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 1392 of file gnunet-namestore.c.

1393{
1394 unsigned int sent_here;
1395
1396 GNUNET_assert (0 != ri_count);
1398 &zone_pkey,
1399 ri_count - ri_sent,
1401 &sent_here,
1402 &replace_cont,
1403 NULL);
1404 ri_sent += sent_here;
1405 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Sent %d/%d record infos\n", ri_sent, ri_count);
1406 if (ri_sent == ri_count)
1407 {
1408 for (int i = 0; i < ri_count; i++)
1409 {
1410 GNUNET_free (record_info[i].a_rd);
1411 record_info[i].a_rd = NULL;
1412 }
1413 ri_count = 0;
1414 ri_sent = 0;
1415 }
1416 return;
1417}
static void replace_cont(void *cls, enum GNUNET_ErrorCode ec)
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
struct GNUNET_NAMESTORE_QueueEntry * GNUNET_NAMESTORE_records_store(struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_CRYPTO_PrivateKey *pkey, unsigned int rd_set_count, const struct GNUNET_NAMESTORE_RecordInfo *record_info, unsigned int *rds_sent, GNUNET_NAMESTORE_ContinuationWithStatus cont, void *cont_cls)
Store one or more record sets in the namestore.

References GNUNET_NAMESTORE_RecordInfo::a_rd, GNUNET_assert, GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_log, GNUNET_NAMESTORE_records_store(), ns, record_info, replace_cont(), ri_count, ri_sent, set_qe, and zone_pkey.

Referenced by process_command_stdin().

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

◆ finish_command()

static void finish_command ( void  )
static

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

674{
675 //if (ri_sent < ri_count)
676 //{
677 // batch_insert_recordinfo (cfg);
678 // return;
679 //}
680 //reset_handles ();
681 if (read_from_stdin)
682 {
684 return;
685 }
687}
static int read_from_stdin
Run in read from stdin mode.
static void process_command_stdin()

References GNUNET_SCHEDULER_shutdown(), process_command_stdin(), and read_from_stdin.

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(), purge_next_record(), run_with_zone_pkey(), schedule_finish(), zone_iteration_error_cb(), and zone_iteration_finished().

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

◆ add_continuation()

static void add_continuation ( void *  cls,
enum GNUNET_ErrorCode  ec 
)
static

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

692{
693 struct GNUNET_NAMESTORE_QueueEntry **qe = cls;
694
695 *qe = NULL;
696 if (GNUNET_EC_NONE != ec)
697 {
698 fprintf (stderr,
699 _ ("Adding record failed: %s\n"),
702 ret = 1;
704 return;
705 }
706 ret = 0;
708}
static struct GNUNET_DATASTORE_QueueEntry * qe
Current operation.
static void finish_command(void)
const char * GNUNET_ErrorCode_get_hint(enum GNUNET_ErrorCode ec)
Returns a hint for a given error code.
@ GNUNET_EC_NONE
No error (success).
@ GNUNET_EC_NAMESTORE_RECORD_EXISTS
Record already exists.
An QueueEntry used to store information for a pending NAMESTORE record operation.
Definition: namestore_api.c:49

References _, finish_command(), GNUNET_EC_NAMESTORE_RECORD_EXISTS, GNUNET_EC_NONE, GNUNET_ErrorCode_get_hint(), GNUNET_SCHEDULER_shutdown(), qe, and ret.

Referenced by get_existing_record(), and run_with_zone_pkey().

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

◆ del_continuation()

static void del_continuation ( void *  cls,
enum GNUNET_ErrorCode  ec 
)
static

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

713{
714 (void) cls;
715 del_qe = NULL;
717 {
718 fprintf (stderr,
719 _ ("Deleting record failed: %s\n"), GNUNET_ErrorCode_get_hint (
720 ec));
721 }
723}
@ GNUNET_EC_NAMESTORE_RECORD_NOT_FOUND
Record not found.

References _, del_qe, finish_command(), GNUNET_EC_NAMESTORE_RECORD_NOT_FOUND, and GNUNET_ErrorCode_get_hint().

Referenced by del_monitor().

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

◆ purge_next_record()

static void purge_next_record ( void *  cls)
static

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

745{
746 struct MarkedRecord *mrec;
747 purge_task = NULL;
748
749 if (NULL == marked_head)
750 {
751 ret = 0;
753 return;
754 }
755 mrec = marked_head;
758 mrec);
760 &mrec->key,
761 mrec->name,
762 0, NULL,
764 NULL);
765 GNUNET_free (mrec->name);
766 GNUNET_free (mrec);
767}
static void marked_deleted(void *cls, enum GNUNET_ErrorCode ec)
static struct MarkedRecord * marked_tail
Marked record list.
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
struct GNUNET_NAMESTORE_QueueEntry * GNUNET_NAMESTORE_record_set_store(struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_CRYPTO_PrivateKey *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.
struct GNUNET_CRYPTO_PrivateKey key
The zone key.

References del_qe, finish_command(), GNUNET_CONTAINER_DLL_remove, GNUNET_free, GNUNET_NAMESTORE_record_set_store(), MarkedRecord::key, marked_deleted(), marked_head, marked_tail, MarkedRecord::name, ns, purge_task, and ret.

Referenced by marked_deleted(), and zone_iteration_finished().

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

◆ marked_deleted()

static void marked_deleted ( void *  cls,
enum GNUNET_ErrorCode  ec 
)
static

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

731{
732 del_qe = NULL;
733 if (GNUNET_EC_NONE != ec)
734 {
735 fprintf (stderr,
736 _ ("Deleting record failed: %s\n"),
738 }
740}
static void purge_next_record(void *cls)
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_now(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run as soon as possible.
Definition: scheduler.c:1305

References _, del_qe, GNUNET_EC_NONE, GNUNET_ErrorCode_get_hint(), GNUNET_SCHEDULER_add_now(), purge_next_record(), and purge_task.

Referenced by purge_next_record().

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 774 of file gnunet-namestore.c.

775{
776 (void) cls;
777 list_it = NULL;
779 {
781 return;
782 }
783 ret = 0;
785}
static int purge_orphaned
Purge orphaned records.

References finish_command(), GNUNET_SCHEDULER_add_now(), list_it, purge_next_record(), purge_orphaned, purge_task, purge_zone, and ret.

Referenced by run_with_zone_pkey().

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 792 of file gnunet-namestore.c.

793{
794 (void) cls;
795 list_it = NULL;
796 fprintf (stderr, "Error iterating over zone\n");
797 ret = 1;
799}

References finish_command(), list_it, and ret.

Referenced by run_with_zone_pkey().

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

◆ collect_zone_records_to_purge()

static void collect_zone_records_to_purge ( const struct GNUNET_CRYPTO_PrivateKey zone_key,
const char *  rname,
unsigned int  rd_len,
const struct GNUNET_GNSRECORD_Data rd 
)
static

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

808{
809 struct MarkedRecord *mrec;
810
811 mrec = GNUNET_new (struct MarkedRecord);
812 mrec->key = *zone_key;
813 mrec->name = GNUNET_strdup (rname);
816 mrec);
817}
#define GNUNET_CONTAINER_DLL_insert(head, tail, element)
Insert an element at the head of a DLL.
#define GNUNET_new(type)
Allocate a struct or union of the given type.

References GNUNET_CONTAINER_DLL_insert, GNUNET_new, GNUNET_strdup, MarkedRecord::key, marked_head, marked_tail, and MarkedRecord::name.

Referenced by purge_zone_iterator().

Here is the caller graph for this function:

◆ collect_orphans()

static void collect_orphans ( const struct GNUNET_CRYPTO_PrivateKey zone_key,
const char *  rname,
unsigned int  rd_len,
const struct GNUNET_GNSRECORD_Data rd 
)
static

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

825{
826 struct EgoEntry *ego;
827 struct MarkedRecord *orphan;
828 int is_orphaned = 1;
829
830 for (ego = ego_head; NULL != ego; ego = ego->next)
831 {
832 if (0 == memcmp (GNUNET_IDENTITY_ego_get_private_key (ego->ego),
833 zone_key,
834 sizeof (*zone_key)))
835 {
836 is_orphaned = 0;
837 break;
838 }
839 }
840 if (is_orphaned)
841 {
842 orphan = GNUNET_new (struct MarkedRecord);
843 orphan->key = *zone_key;
844 orphan->name = GNUNET_strdup (rname);
847 orphan);
848 }
849}
const struct GNUNET_CRYPTO_PrivateKey * GNUNET_IDENTITY_ego_get_private_key(const struct GNUNET_IDENTITY_Ego *ego)
Obtain the ECC key associated with a ego.
Definition: identity_api.c:517
struct GNUNET_IDENTITY_Ego * ego
The Ego.

References EgoEntry::ego, ego_head, GNUNET_CONTAINER_DLL_insert, GNUNET_IDENTITY_ego_get_private_key(), GNUNET_new, GNUNET_strdup, MarkedRecord::key, marked_head, marked_tail, MarkedRecord::name, and EgoEntry::next.

Referenced by purge_orphans_iterator().

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

◆ display_record()

static void display_record ( const struct GNUNET_CRYPTO_PrivateKey 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
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 860 of file gnunet-namestore.c.

864{
865 const char *typestr;
866 char *s;
867 const char *ets;
868 struct GNUNET_TIME_Absolute at;
869 struct GNUNET_TIME_Relative rt;
870 struct EgoEntry *ego;
871 int have_record;
872 int is_orphaned = 1;
873 char *orphaned_str;
874
875 if ((NULL != name) && (0 != strcmp (name, rname)))
876 return;
877 have_record = GNUNET_NO;
878 for (unsigned int i = 0; i < rd_len; i++)
879 {
880 if ((GNUNET_GNSRECORD_TYPE_NICK == rd[i].record_type) &&
881 (0 != strcmp (rname, GNUNET_GNS_EMPTY_LABEL_AT)))
882 continue;
883 if ((type != rd[i].record_type) && (GNUNET_GNSRECORD_TYPE_ANY != type))
884 continue;
885 have_record = GNUNET_YES;
886 break;
887 }
888 if (GNUNET_NO == have_record)
889 return;
890 for (ego = ego_head; NULL != ego; ego = ego->next)
891 {
892 if (0 == memcmp (GNUNET_IDENTITY_ego_get_private_key (ego->ego),
893 zone_key,
894 sizeof (*zone_key)))
895 {
896 is_orphaned = 0;
897 break;
898 }
899 }
900 if (list_orphaned && ! is_orphaned)
901 return;
902 if (! list_orphaned && is_orphaned)
903 return;
904 orphaned_str = GNUNET_CRYPTO_private_key_to_string (zone_key);
905 fprintf (stdout, "%s.%s:\n", rname, is_orphaned ? orphaned_str :
906 ego->identifier);
907 GNUNET_free (orphaned_str);
908 if (NULL != typestring)
910 else
912 for (unsigned int i = 0; i < rd_len; i++)
913 {
914 if ((GNUNET_GNSRECORD_TYPE_NICK == rd[i].record_type) &&
915 (0 != strcmp (rname, GNUNET_GNS_EMPTY_LABEL_AT)))
916 continue;
917 if ((type != rd[i].record_type) && (GNUNET_GNSRECORD_TYPE_ANY != type))
918 continue;
919 typestr = GNUNET_GNSRECORD_number_to_typename (rd[i].record_type);
920 s = GNUNET_GNSRECORD_value_to_string (rd[i].record_type,
921 rd[i].data,
922 rd[i].data_size);
923 if (NULL == s)
924 {
925 fprintf (stdout,
926 _ ("\tCorrupt or unsupported record of type %u\n"),
927 (unsigned int) rd[i].record_type);
928 continue;
929 }
930 if (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION))
931 {
932 rt.rel_value_us = rd[i].expiration_time;
934 }
935 else
936 {
937 at.abs_value_us = rd[i].expiration_time;
939 }
940 char flgstr[16];
941 sprintf (flgstr, "[%s%s%s%s%s]",
942 (rd[i].flags & GNUNET_GNSRECORD_RF_PRIVATE) ? "" : "p",
943 (rd[i].flags & GNUNET_GNSRECORD_RF_SUPPLEMENTAL) ? "S" : "",
944 (rd[i].flags & GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION) ? "r" : "",
945 (rd[i].flags & GNUNET_GNSRECORD_RF_SHADOW) ? "S" : "",
946 (rd[i].flags & GNUNET_GNSRECORD_RF_CRITICAL) ? "C" : "");
948 fprintf (stdout,
949 " %s %" PRIu64 " %s %s\n",
950 typestr,
951 rd[i].expiration_time,
952 flgstr,
953 s);
954 else
955 fprintf (stdout,
956 "\t%s: %s (%s)\t%s\t%s\t%s\n",
957 typestr,
958 s,
959 ets,
960 (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_PRIVATE)) ? "PRIVATE"
961 : "PUBLIC",
962 (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_SHADOW)) ? "SHADOW"
963 : "",
964 (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_MAINTENANCE)) ?
965 "MAINTENANCE"
966 : "");
967 GNUNET_free (s);
968 }
969 // fprintf (stdout, "%s", "\n");
970}
static struct GNUNET_GNSRECORD_Data rd[50]
The record data under a single label.
static int output_recordline
Output in recordline format.
static int list_orphaned
List records and zone keys of orphaned records.
static uint32_t type
Type string converted to DNS type value.
#define GNUNET_GNS_EMPTY_LABEL_AT
String we use to indicate an empty label (top-level entry in the zone).
#define GNUNET_GNSRECORD_TYPE_ANY
Record type indicating any record/'*'.
char * GNUNET_GNSRECORD_value_to_string(uint32_t type, const void *data, size_t data_size)
Convert the binary value data of a record of type type to a human-readable string.
Definition: gnsrecord.c:155
@ GNUNET_GNSRECORD_RF_MAINTENANCE
Maintenance records.
char * GNUNET_CRYPTO_private_key_to_string(const struct GNUNET_CRYPTO_PrivateKey *key)
Creates a (Base32) string representation of the private key.
Definition: crypto_pkey.c:404
#define GNUNET_GNSRECORD_TYPE_NICK
GNS zone nickname.
uint64_t expiration_time
Expiration time for the DNS record.

References _, GNUNET_TIME_Absolute::abs_value_us, data, data_size, EgoEntry::ego, ego_head, GNUNET_GNSRECORD_Data::expiration_time, GNUNET_CRYPTO_private_key_to_string(), GNUNET_free, GNUNET_GNS_EMPTY_LABEL_AT, GNUNET_GNSRECORD_number_to_typename(), GNUNET_GNSRECORD_RF_CRITICAL, GNUNET_GNSRECORD_RF_MAINTENANCE, GNUNET_GNSRECORD_RF_PRIVATE, GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION, GNUNET_GNSRECORD_RF_SHADOW, GNUNET_GNSRECORD_RF_SUPPLEMENTAL, GNUNET_GNSRECORD_TYPE_ANY, GNUNET_GNSRECORD_TYPE_NICK, GNUNET_GNSRECORD_typename_to_number(), GNUNET_GNSRECORD_value_to_string(), GNUNET_IDENTITY_ego_get_private_key(), GNUNET_NO, GNUNET_STRINGS_absolute_time_to_string(), GNUNET_STRINGS_relative_time_to_string(), GNUNET_YES, list_orphaned, name, output_recordline, rd, GNUNET_TIME_Relative::rel_value_us, type, and typestring.

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

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

◆ purge_zone_iterator()

static void purge_zone_iterator ( void *  cls,
const struct GNUNET_CRYPTO_PrivateKey zone_key,
const char *  rname,
unsigned int  rd_len,
const struct GNUNET_GNSRECORD_Data rd,
struct GNUNET_TIME_Absolute  expiry 
)
static

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

980{
981 (void) cls;
982 (void) zone_key;
983 (void) expiry;
984 collect_zone_records_to_purge (zone_key, rname, rd_len, rd);
986}
static void collect_zone_records_to_purge(const struct GNUNET_CRYPTO_PrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd)
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.

References collect_zone_records_to_purge(), GNUNET_NAMESTORE_zone_iterator_next(), list_it, and rd.

Referenced by run_with_zone_pkey().

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

◆ purge_orphans_iterator()

static void purge_orphans_iterator ( void *  cls,
const struct GNUNET_CRYPTO_PrivateKey zone_key,
const char *  rname,
unsigned int  rd_len,
const struct GNUNET_GNSRECORD_Data rd,
struct GNUNET_TIME_Absolute  expiry 
)
static

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

996{
997 (void) cls;
998 (void) zone_key;
999 (void) expiry;
1000 collect_orphans (zone_key, rname, rd_len, rd);
1002}
static void collect_orphans(const struct GNUNET_CRYPTO_PrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd)

References collect_orphans(), GNUNET_NAMESTORE_zone_iterator_next(), list_it, and rd.

Referenced by run_with_zone_pkey().

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_PrivateKey zone_key,
const char *  rname,
unsigned int  rd_len,
const struct GNUNET_GNSRECORD_Data rd,
struct GNUNET_TIME_Absolute  expiry 
)
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 1015 of file gnunet-namestore.c.

1021{
1022 (void) cls;
1023 (void) zone_key;
1024 (void) expiry;
1025 display_record (zone_key, rname, rd_len, rd);
1027}
static void display_record(const struct GNUNET_CRYPTO_PrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd)
Process a record that was stored in the namestore.

References display_record(), GNUNET_NAMESTORE_zone_iterator_next(), list_it, and rd.

Referenced by run_with_zone_pkey().

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_PrivateKey zone_key,
const char *  rname,
unsigned int  rd_len,
const struct GNUNET_GNSRECORD_Data rd,
struct GNUNET_TIME_Absolute  expiry 
)
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 1040 of file gnunet-namestore.c.

1046{
1047 (void) cls;
1048 (void) zone_key;
1049 (void) expiry;
1050 display_record (zone_key, rname, rd_len, rd);
1052}
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).

References display_record(), GNUNET_NAMESTORE_zone_monitor_next(), rd, and zm.

Referenced by run_with_zone_pkey().

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_PrivateKey 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 1065 of file gnunet-namestore.c.

1070{
1071 (void) cls;
1072 (void) zone_key;
1073 get_qe = NULL;
1074 display_record (zone_key, rname, rd_len, rd);
1075 finish_command ();
1076}

References display_record(), finish_command(), get_qe, and rd.

Referenced by run_with_zone_pkey().

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 1085 of file gnunet-namestore.c.

1086{
1087 (void) cls;
1088 fprintf (stdout, "%s", "Monitor is now in sync.\n");
1089}

Referenced by GNUNET_NAMESTORE_zone_monitor_start(), GNUNET_NAMESTORE_zone_monitor_start2(), GNUNET_PEERSTORE_monitor_start(), and run_with_zone_pkey().

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 1098 of file gnunet-namestore.c.

1099{
1100 (void) cls;
1101 fprintf (stderr, "%s", "Monitor disconnected and out of sync.\n");
1102}

Referenced by run_with_zone_pkey().

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 1111 of file gnunet-namestore.c.

1112{
1113 (void) cls;
1114 get_qe = NULL;
1115 fprintf (stderr, "%s", "Failed to lookup record.\n");
1116 finish_command ();
1117}

References finish_command(), and get_qe.

Referenced by run_with_zone_pkey().

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 1124 of file gnunet-namestore.c.

1125{
1126 (void) cls;
1127 add_qe = NULL;
1128 GNUNET_break (0);
1129 ret = 1;
1130 finish_command ();
1131}
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur.

References add_qe, finish_command(), GNUNET_break, and ret.

Referenced by run_with_zone_pkey().

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_PrivateKey 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 1145 of file gnunet-namestore.c.

1150{
1151 struct GNUNET_GNSRECORD_Data rdn[rd_count + 1];
1152 struct GNUNET_GNSRECORD_Data *rde;
1153
1154 (void) cls;
1155 (void) zone_key;
1156 add_qe = NULL;
1157 if (0 != strcmp (rec_name, name))
1158 {
1159 GNUNET_break (0);
1160 ret = 1;
1161 finish_command ();
1162 return;
1163 }
1164
1166 "Received %u records for name `%s'\n",
1167 rd_count,
1168 rec_name);
1169 for (unsigned int i = 0; i < rd_count; i++)
1170 {
1171 switch (rd[i].record_type)
1172 {
1175 {
1176 fprintf (
1177 stderr,
1178 _ (
1179 "A SOA record exists already under `%s', cannot add a second SOA to the same zone.\n"),
1180 rec_name);
1181 ret = 1;
1182 finish_command ();
1183 return;
1184 }
1185 break;
1186 }
1187 }
1188 memset (rdn, 0, sizeof(struct GNUNET_GNSRECORD_Data));
1189 GNUNET_memcpy (&rdn[1], rd, rd_count * sizeof(struct GNUNET_GNSRECORD_Data));
1190 rde = &rdn[0];
1191 rde->data = data;
1192 rde->data_size = data_size;
1193 rde->record_type = type;
1194 if (1 == is_shadow)
1196 if (1 == is_maintenance)
1198 if (1 != is_public)
1200 rde->expiration_time = etime;
1201 if (GNUNET_YES == etime_is_rel)
1203 else if (GNUNET_NO != etime_is_rel)
1205 GNUNET_assert (NULL != name);
1207 &zone_pkey,
1208 name,
1209 rd_count + 1,
1210 rde,
1212 &add_qe);
1213}
static void add_continuation(void *cls, enum GNUNET_ErrorCode ec)
#define GNUNET_DNSPARSER_TYPE_SOA
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
uint32_t record_type
Type of the GNS/DNS record.
enum GNUNET_GNSRECORD_Flags flags
Flags for the record.

References _, add_continuation(), add_qe, data, GNUNET_GNSRECORD_Data::data, data_size, GNUNET_GNSRECORD_Data::data_size, etime, etime_is_rel, GNUNET_GNSRECORD_Data::expiration_time, finish_command(), GNUNET_GNSRECORD_Data::flags, GNUNET_assert, GNUNET_break, GNUNET_DNSPARSER_TYPE_SOA, GNUNET_ERROR_TYPE_DEBUG, GNUNET_GNSRECORD_RF_MAINTENANCE, GNUNET_GNSRECORD_RF_PRIVATE, GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION, GNUNET_GNSRECORD_RF_SHADOW, GNUNET_log, GNUNET_memcpy, GNUNET_NAMESTORE_record_set_store(), GNUNET_NO, GNUNET_TIME_UNIT_FOREVER_ABS, GNUNET_YES, is_maintenance, is_public, is_shadow, name, ns, rd, rd_count, GNUNET_GNSRECORD_Data::record_type, ret, type, and zone_pkey.

Referenced by run_with_zone_pkey().

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 1220 of file gnunet-namestore.c.

1221{
1222 (void) cls;
1223 reverse_qe = NULL;
1224 fprintf (stdout, "%s.zkey\n", reverse_pkey);
1225}
static char * reverse_pkey
Reverse lookup to perform.

References reverse_pkey, and reverse_qe.

Referenced by run_with_zone_pkey().

Here is the caller graph for this function:

◆ handle_reverse_lookup()

static void handle_reverse_lookup ( void *  cls,
const struct GNUNET_CRYPTO_PrivateKey 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 1239 of file gnunet-namestore.c.

1244{
1245 (void) cls;
1246 (void) zone;
1247 (void) rd_count;
1248 (void) rd;
1249 reverse_qe = NULL;
1250 if (NULL == label)
1251 fprintf (stdout, "%s\n", reverse_pkey);
1252 else
1253 fprintf (stdout, "%s.%s\n", label, ego_name);
1254 finish_command ();
1255}

References ego_name, finish_command(), rd, rd_count, reverse_pkey, and reverse_qe.

Referenced by run_with_zone_pkey().

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 1262 of file gnunet-namestore.c.

1263{
1264 (void) cls;
1265 del_qe = NULL;
1266 GNUNET_break (0);
1267 ret = 1;
1268 finish_command ();
1269}

References del_qe, finish_command(), GNUNET_break, and ret.

Referenced by run_with_zone_pkey().

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_PrivateKey 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 1284 of file gnunet-namestore.c.

1289{
1290 struct GNUNET_GNSRECORD_Data rdx[rd_count];
1291 unsigned int rd_left;
1292 uint32_t type;
1293 char *vs;
1294
1295 (void) cls;
1296 (void) zone;
1297 del_qe = NULL;
1298 if (0 == rd_count)
1299 {
1300 fprintf (stderr,
1301 _ (
1302 "There are no records under label `%s' that could be deleted.\n")
1303 ,
1304 label);
1305 ret = 1;
1306 finish_command ();
1307 return;
1308 }
1309 if ((NULL == value) && (NULL == typestring))
1310 {
1311 /* delete everything */
1313 &zone_pkey,
1314 name,
1315 0,
1316 NULL,
1318 NULL);
1319 return;
1320 }
1321 rd_left = 0;
1322 if (NULL != typestring)
1324 else
1326 for (unsigned int i = 0; i < rd_count; i++)
1327 {
1328 vs = NULL;
1329 if (! (((GNUNET_GNSRECORD_TYPE_ANY == type) ||
1330 (rd[i].record_type == type)) &&
1331 ((NULL == value) ||
1332 (NULL ==
1334 rd[i].data,
1335 rd[i].data_size)))) ||
1336 (0 == strcmp (vs, value)))))
1337 rdx[rd_left++] = rd[i];
1338 GNUNET_free (vs);
1339 }
1340 if (rd_count == rd_left)
1341 {
1342 /* nothing got deleted */
1343 fprintf (
1344 stderr,
1345 _ (
1346 "There are no records under label `%s' that match the request for deletion.\n"),
1347 label);
1348 finish_command ();
1349 return;
1350 }
1351 /* delete everything but what we copied to 'rdx' */
1353 &zone_pkey,
1354 name,
1355 rd_left,
1356 rdx,
1358 NULL);
1359}
static void del_continuation(void *cls, enum GNUNET_ErrorCode ec)

References _, data, data_size, del_continuation(), del_qe, finish_command(), GNUNET_free, GNUNET_GNSRECORD_TYPE_ANY, GNUNET_GNSRECORD_typename_to_number(), GNUNET_GNSRECORD_value_to_string(), GNUNET_NAMESTORE_record_set_store(), name, ns, rd, rd_count, GNUNET_GNSRECORD_Data::record_type, ret, type, typestring, value, and zone_pkey.

Referenced by run_with_zone_pkey().

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

◆ schedule_finish()

static void schedule_finish ( void *  cls)
static

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

1364{
1366}

References finish_command().

Referenced by replace_cont().

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

◆ replace_cont()

static void replace_cont ( void *  cls,
enum GNUNET_ErrorCode  ec 
)
static

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

1370{
1371 (void) cls;
1372
1373 set_qe = NULL;
1374 if (GNUNET_EC_NONE != ec)
1375 {
1377 _ ("%s\n"),
1379 ret = 1; /* fail from 'main' */
1380 }
1382}
static void schedule_finish(void *cls)
@ GNUNET_ERROR_TYPE_MESSAGE

References _, GNUNET_EC_NONE, GNUNET_ERROR_TYPE_MESSAGE, GNUNET_ErrorCode_get_hint(), GNUNET_log, GNUNET_SCHEDULER_add_now(), ret, schedule_finish(), and set_qe.

Referenced by batch_insert_recordinfo(), and run_with_zone_pkey().

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 1427 of file gnunet-namestore.c.

1428{
1431
1432 if (omit_private)
1436 if (! (add | del | list | (NULL != nickstring) | (NULL != uri)
1437 | (NULL != reverse_pkey) | (NULL != recordset) | (monitor)
1439 {
1440 /* nothing more to be done */
1441 fprintf (stderr, _ ("No options given\n"));
1442 finish_command ();
1443 return;
1444 }
1445
1446 if (NULL != recordset)
1447 {
1448 /* replace entire record set */
1449 unsigned int rd_count;
1450 struct GNUNET_GNSRECORD_Data *rd;
1451
1452 /* FIXME: We could easily support append and delete with this as well */
1453 if (! add)
1454 {
1455 fprintf (stderr, _ ("Recordlines only work with option `%s'\n"),
1456 "-a");
1457 ret = 1;
1458 finish_command ();
1459 return;
1460 }
1461 if (NULL == name)
1462 {
1463 fprintf (stderr,
1464 _ ("Missing option `%s' for operation `%s'\n"),
1465 "-n",
1466 _ ("name"));
1467 ret = 1;
1468 finish_command ();
1469 return;
1470 }
1471 rd_count = 0;
1472 for (struct RecordSetEntry *e = recordset; NULL != e; e = e->next)
1473 rd_count++;
1475 rd_count = 0;
1476 for (struct RecordSetEntry *e = recordset; NULL != e; e = e->next)
1477 {
1478 rd[rd_count] = e->record;
1479 rd_count++;
1480 }
1482 &zone_pkey,
1483 name,
1484 rd_count,
1485 rd,
1486 &replace_cont,
1487 NULL);
1488 GNUNET_free (rd);
1489 return;
1490 }
1491 if (NULL != nickstring)
1492 {
1493 if (0 == strlen (nickstring))
1494 {
1495 fprintf (stderr, _ ("Invalid nick `%s'\n"), nickstring);
1496 ret = 1;
1497 finish_command ();
1498 return;
1499 }
1500 add = 1;
1505 is_public = 0;
1506 expirationstring = GNUNET_strdup ("never");
1508 nickstring = NULL;
1509 }
1510
1511 if (add)
1512 {
1513 if (NULL == ego_name)
1514 {
1515 fprintf (stderr,
1516 _ ("Missing option `%s' for operation `%s'\n"),
1517 "-z",
1518 _ ("add"));
1519 ret = 1;
1520 finish_command ();
1521 return;
1522 }
1523 if (NULL == name)
1524 {
1525 fprintf (stderr,
1526 _ ("Missing option `%s' for operation `%s'\n"),
1527 "-n",
1528 _ ("add"));
1529 ret = 1;
1530 finish_command ();
1531 return;
1532 }
1533 if (NULL == typestring)
1534 {
1535 fprintf (stderr,
1536 _ ("Missing option `%s' for operation `%s'\n"),
1537 "-t",
1538 _ ("add"));
1539 ret = 1;
1540 finish_command ();
1541 return;
1542 }
1544 if (UINT32_MAX == type)
1545 {
1546 fprintf (stderr, _ ("Unsupported type `%s'\n"), typestring);
1547 ret = 1;
1548 finish_command ();
1549 return;
1550 }
1555 {
1556 fprintf (stderr,
1557 _ (
1558 "For DNS record types `SRV', `TLSA', `SMIMEA' and `OPENPGPKEY'"));
1559 fprintf (stderr, ", please use a `BOX' record instead\n");
1560 ret = 1;
1561 finish_command ();
1562 return;
1563 }
1564 if (NULL == value)
1565 {
1566 fprintf (stderr,
1567 _ ("Missing option `%s' for operation `%s'\n"),
1568 "-V",
1569 _ ("add"));
1570 ret = 1;
1571 finish_command ();
1572 return;
1573 }
1574 if (GNUNET_OK !=
1576 {
1577 fprintf (stderr,
1578 _ ("Value `%s' invalid for record type `%s'\n"),
1579 value,
1580 typestring);
1581 ret = 1;
1582 finish_command ();
1583 return;
1584 }
1585 if (NULL == expirationstring)
1586 {
1587 fprintf (stderr,
1588 _ ("Missing option `%s' for operation `%s'\n"),
1589 "-e",
1590 _ ("add"));
1591 ret = 1;
1592 finish_command ();
1593 return;
1594 }
1596 {
1597 fprintf (stderr, _ ("Invalid time format `%s'\n"), expirationstring);
1598 ret = 1;
1599 finish_command ();
1600 return;
1601 }
1603 &zone_pkey,
1604 name,
1605 &add_error_cb,
1606 NULL,
1608 NULL);
1609 }
1610 if (del)
1611 {
1612 if (NULL == ego_name)
1613 {
1614 fprintf (stderr,
1615 _ ("Missing option `%s' for operation `%s'\n"),
1616 "-z",
1617 _ ("del"));
1618 ret = 1;
1619 finish_command ();
1620 return;
1621 }
1622 if (NULL == name)
1623 {
1624 fprintf (stderr,
1625 _ ("Missing option `%s' for operation `%s'\n"),
1626 "-n",
1627 _ ("del"));
1628 ret = 1;
1629 finish_command ();
1630 return;
1631 }
1633 &zone_pkey,
1634 name,
1636 NULL,
1637 &del_monitor,
1638 NULL,
1639 filter_flags);
1640 }
1641 if (purge_orphaned)
1642 {
1644 NULL,
1646 NULL,
1648 NULL,
1650 NULL,
1651 filter_flags);
1652
1653 }
1654 else if (purge_zone)
1655 {
1656 if (NULL == ego_name)
1657 {
1658 fprintf (stderr,
1659 _ ("Missing option `%s' for operation `%s'\n"),
1660 "-z",
1661 _ ("purge-zone"));
1662 ret = 1;
1663 finish_command ();
1664 return;
1665 }
1667 &zone_pkey,
1669 NULL,
1671 NULL,
1673 NULL,
1674 filter_flags);
1675
1676 }
1677 else if (list || list_orphaned)
1678 {
1679 if (NULL != name)
1680 {
1681 if (NULL == ego_name)
1682 {
1683 fprintf (stderr,
1684 _ ("Missing option `%s' for operation `%s'\n"),
1685 "-z",
1686 _ ("list"));
1687 ret = 1;
1688 finish_command ();
1689 return;
1690 }
1692 &zone_pkey,
1693 name,
1695 NULL,
1697 NULL);
1698 }
1699 else
1701 (NULL == ego_name) ?
1702 NULL : &zone_pkey,
1704 ,
1705 NULL,
1707 ,
1708 NULL,
1710 ,
1711 NULL,
1712 filter_flags);
1713 }
1714 if (NULL != reverse_pkey)
1715 {
1717
1718 if (NULL == ego_name)
1719 {
1720 fprintf (stderr,
1721 _ ("Missing option `%s' for operation `%s'\n"),
1722 "-z",
1723 _ ("reverse-pkey"));
1724 ret = 1;
1725 finish_command ();
1726 return;
1727 }
1728 if (GNUNET_OK !=
1730 &pubkey))
1731 {
1732 fprintf (stderr,
1733 _ ("Invalid public key for reverse lookup `%s'\n"),
1734 reverse_pkey);
1735 ret = 1;
1736 finish_command ();
1737 return;
1738 }
1740 &zone_pkey,
1741 &pubkey,
1743 NULL,
1745 NULL);
1746 }
1747 if (NULL != uri)
1748 {
1749 char sh[105];
1750 char sname[64];
1752 if (NULL == ego_name)
1753 {
1754 fprintf (stderr,
1755 _ ("Missing option `%s' for operation `%s'\n"),
1756 "-z",
1757 _ ("uri"));
1758 ret = 1;
1759 finish_command ();
1760 return;
1761 }
1762
1763 memset (sh, 0, 105);
1764 memset (sname, 0, 64);
1765
1766 if ((2 != (sscanf (uri, "gnunet://gns/%58s/%63s", sh, sname))) ||
1767 (GNUNET_OK !=
1769 {
1770 fprintf (stderr, _ ("Invalid URI `%s'\n"), uri);
1771 ret = 1;
1772 finish_command ();
1773 return;
1774 }
1775 if (NULL == expirationstring)
1776 {
1777 fprintf (stderr,
1778 _ ("Missing option `%s' for operation `%s'\n"),
1779 "-e",
1780 _ ("add"));
1781 ret = 1;
1782 finish_command ();
1783 return;
1784 }
1786 {
1787 fprintf (stderr, _ ("Invalid time format `%s'\n"), expirationstring);
1788 ret = 1;
1789 finish_command ();
1790 return;
1791 }
1792 memset (&rd, 0, sizeof(rd));
1793 rd.data = &pkey;
1795 rd.record_type = ntohl (pkey.type);
1797 if (GNUNET_YES == etime_is_rel)
1799 if (1 == is_shadow)
1801 if (1 == is_maintenance)
1804 &zone_pkey,
1805 sname,
1806 1,
1807 &rd,
1809 &add_qe_uri);
1810 }
1811 if (monitor)
1812 {
1814 (NULL != ego_name) ?
1815 &zone_pkey : NULL,
1816 GNUNET_YES,
1818 NULL,
1820 NULL,
1821 &sync_cb,
1822 NULL,
1823 filter_flags);
1824 }
1825}
static struct GNUNET_IDENTITY_Handle * sh
Handle to IDENTITY service.
static char * pkey
Public key of the zone to look in, in ASCII.
static struct GNUNET_CRYPTO_PublicKey pubkey
Public key of the zone to look in.
static void display_record_monitor(void *cls, const struct GNUNET_CRYPTO_PrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd, struct GNUNET_TIME_Absolute expiry)
Process a record that was stored in the namestore.
static int omit_private
Filter private records.
static void zone_iteration_finished(void *cls)
Function called when we are done with a zone iteration.
static void sync_cb(void *cls)
Function called once we are in sync in monitor mode.
static void del_lookup_error_cb(void *cls)
Function called if lookup for deletion fails.
static void purge_zone_iterator(void *cls, const struct GNUNET_CRYPTO_PrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd, struct GNUNET_TIME_Absolute expiry)
static char * nickstring
Desired nick name.
static void display_record_lookup(void *cls, const struct GNUNET_CRYPTO_PrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd)
Process a record that was stored in the namestore.
static int monitor
Enables monitor mode.
static int include_maintenance
Do not filter maintenance records.
static void handle_reverse_lookup(void *cls, const struct GNUNET_CRYPTO_PrivateKey *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 lookup_error_cb(void *cls)
Function called on errors while monitoring.
static void reverse_error_cb(void *cls)
Function called if we encountered an error in zone-to-name.
static int del
Desired action is to remove a record.
static void add_error_cb(void *cls)
Function called if lookup fails.
static int parse_expiration(const char *expirationstring, int *etime_is_rel, uint64_t *etime)
Parse expiration time.
static void display_record_iterator(void *cls, const struct GNUNET_CRYPTO_PrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd, struct GNUNET_TIME_Absolute expiry)
Process a record that was stored in the namestore.
static void purge_orphans_iterator(void *cls, const struct GNUNET_CRYPTO_PrivateKey *zone_key, const char *rname, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd, struct GNUNET_TIME_Absolute expiry)
static void monitor_error_cb(void *cls)
Function called on errors while monitoring.
static void del_monitor(void *cls, const struct GNUNET_CRYPTO_PrivateKey *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.
static int add
Desired action is to add a record.
static void zone_iteration_error_cb(void *cls)
Function called when we encountered an error in a zone iteration.
static void get_existing_record(void *cls, const struct GNUNET_CRYPTO_PrivateKey *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 informati...
#define GNUNET_DNSPARSER_TYPE_OPENPGPKEY
#define GNUNET_DNSPARSER_TYPE_TLSA
#define GNUNET_DNSPARSER_TYPE_SRV
#define GNUNET_DNSPARSER_TYPE_SMIMEA
GNUNET_GNSRECORD_Filter
Filter for GNUNET_GNSRECORD_normalize_record_set().
@ GNUNET_GNSRECORD_FILTER_NONE
No filter flags set.
@ GNUNET_GNSRECORD_FILTER_INCLUDE_MAINTENANCE
Include maintenance records (TOMBSTONE etc).
@ GNUNET_GNSRECORD_FILTER_OMIT_PRIVATE
Filter private records.
ssize_t GNUNET_CRYPTO_public_key_get_length(const struct GNUNET_CRYPTO_PublicKey *key)
Get the compacted length of a GNUNET_CRYPTO_PublicKey.
Definition: crypto_pkey.c:85
enum GNUNET_GenericReturnValue GNUNET_CRYPTO_public_key_from_string(const char *str, struct GNUNET_CRYPTO_PublicKey *key)
Parses a (Base32) string representation of the public key.
Definition: crypto_pkey.c:414
struct GNUNET_NAMESTORE_ZoneIterator * GNUNET_NAMESTORE_zone_iteration_start2(struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_CRYPTO_PrivateKey *zone, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_NAMESTORE_RecordSetMonitor proc, void *proc_cls, GNUNET_SCHEDULER_TaskCallback finish_cb, void *finish_cb_cls, enum GNUNET_GNSRECORD_Filter filter)
Starts a new zone iteration (used to periodically PUT all of our records into our DHT).
struct GNUNET_NAMESTORE_QueueEntry * GNUNET_NAMESTORE_records_lookup(struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_CRYPTO_PrivateKey *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.
struct GNUNET_NAMESTORE_QueueEntry * GNUNET_NAMESTORE_records_lookup2(struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_CRYPTO_PrivateKey *pkey, const char *label, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_NAMESTORE_RecordMonitor rm, void *rm_cls, enum GNUNET_GNSRECORD_Filter filter)
Lookup an item in the namestore with GNSRECORD filter.
struct GNUNET_NAMESTORE_QueueEntry * GNUNET_NAMESTORE_zone_to_name(struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_CRYPTO_PrivateKey *zone, const struct GNUNET_CRYPTO_PublicKey *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.
struct GNUNET_NAMESTORE_ZoneMonitor * GNUNET_NAMESTORE_zone_monitor_start2(const struct GNUNET_CONFIGURATION_Handle *cfg, const struct GNUNET_CRYPTO_PrivateKey *zone, int iterate_first, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_NAMESTORE_RecordSetMonitor monitor, void *monitor_cls, GNUNET_SCHEDULER_TaskCallback sync_cb, void *sync_cb_cls, enum GNUNET_GNSRECORD_Filter filter)
Begin monitoring a zone for changes.
An identity key as per LSD0001.

References _, add, add_continuation(), add_error_cb(), add_qe, add_qe_uri, cfg, data, GNUNET_GNSRECORD_Data::data, data_size, GNUNET_GNSRECORD_Data::data_size, del, del_lookup_error_cb(), del_monitor(), del_qe, display_record_iterator(), display_record_lookup(), display_record_monitor(), ego_name, etime, etime_is_rel, GNUNET_GNSRECORD_Data::expiration_time, expirationstring, finish_command(), GNUNET_GNSRECORD_Data::flags, get_existing_record(), get_qe, GNUNET_CRYPTO_public_key_from_string(), GNUNET_CRYPTO_public_key_get_length(), GNUNET_DNSPARSER_TYPE_OPENPGPKEY, GNUNET_DNSPARSER_TYPE_SMIMEA, GNUNET_DNSPARSER_TYPE_SRV, GNUNET_DNSPARSER_TYPE_TLSA, GNUNET_free, GNUNET_GNS_EMPTY_LABEL_AT, GNUNET_GNSRECORD_FILTER_INCLUDE_MAINTENANCE, GNUNET_GNSRECORD_FILTER_NONE, GNUNET_GNSRECORD_FILTER_OMIT_PRIVATE, GNUNET_GNSRECORD_number_to_typename(), GNUNET_GNSRECORD_RF_MAINTENANCE, GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION, GNUNET_GNSRECORD_RF_SHADOW, GNUNET_GNSRECORD_string_to_value(), GNUNET_GNSRECORD_TYPE_NICK, GNUNET_GNSRECORD_typename_to_number(), GNUNET_NAMESTORE_record_set_store(), GNUNET_NAMESTORE_records_lookup(), GNUNET_NAMESTORE_records_lookup2(), GNUNET_NAMESTORE_zone_iteration_start2(), GNUNET_NAMESTORE_zone_monitor_start2(), GNUNET_NAMESTORE_zone_to_name(), GNUNET_new_array, GNUNET_OK, GNUNET_strdup, GNUNET_YES, handle_reverse_lookup(), include_maintenance, is_maintenance, is_public, is_shadow, list, list_it, list_orphaned, lookup_error_cb(), monitor, monitor_error_cb(), name, RecordSetEntry::next, nickstring, ns, omit_private, parse_expiration(), pkey, pubkey, purge_orphaned, purge_orphans_iterator(), purge_zone, purge_zone_iterator(), rd, rd_count, GNUNET_GNSRECORD_Data::record_type, recordset, replace_cont(), ret, reverse_error_cb(), reverse_pkey, reverse_qe, set_qe, sh, sync_cb(), type, typestring, uri, value, zm, zone_iteration_error_cb(), zone_iteration_finished(), and zone_pkey.

Referenced by id_connect_cb().

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

◆ get_identity_for_string()

static int get_identity_for_string ( const char *  str,
struct GNUNET_CRYPTO_PrivateKey zk 
)
static

FIXME: Check for zTLD?

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

1835{
1836 const struct GNUNET_CRYPTO_PrivateKey *privkey;
1838 struct GNUNET_CRYPTO_PublicKey ego_pubkey;
1839 struct EgoEntry *ego_entry;
1840
1842 &pubkey))
1843 {
1844 for (ego_entry = ego_head;
1845 NULL != ego_entry; ego_entry = ego_entry->next)
1846 {
1847 privkey = GNUNET_IDENTITY_ego_get_private_key (ego_entry->ego);
1848 GNUNET_IDENTITY_ego_get_public_key (ego_entry->ego, &ego_pubkey);
1849 if (0 == memcmp (&ego_pubkey, &pubkey, sizeof (pubkey)))
1850 {
1851 *zk = *privkey;
1852 return GNUNET_OK;
1853 }
1854 }
1855 }
1856 else
1857 {
1858 for (ego_entry = ego_head; NULL != ego_entry; ego_entry = ego_entry->next)
1859 {
1861 if (0 != strcmp (str, ego_entry->identifier))
1862 continue;
1863 *zk = *GNUNET_IDENTITY_ego_get_private_key (ego_entry->ego);
1864 return GNUNET_OK;
1865 }
1866 }
1867 return GNUNET_NO;
1868}
void GNUNET_IDENTITY_ego_get_public_key(struct GNUNET_IDENTITY_Ego *ego, struct GNUNET_CRYPTO_PublicKey *pk)
Get the identifier (public key) of an ego.
Definition: identity_api.c:529

References EgoEntry::ego, ego_head, GNUNET_CRYPTO_public_key_from_string(), GNUNET_IDENTITY_ego_get_private_key(), GNUNET_IDENTITY_ego_get_public_key(), GNUNET_NO, GNUNET_OK, EgoEntry::identifier, EgoEntry::next, and pubkey.

Referenced by process_command_stdin().

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 2041 of file gnunet-namestore.c.

2045{
2047 struct EgoEntry *ego_entry;
2048
2049 (void) ctx;
2050 (void) name;
2051 if ((NULL != name) && (NULL != ego))
2052 {
2053 ego_entry = GNUNET_new (struct EgoEntry);
2055 ego_entry->ego = ego;
2056 ego_entry->identifier = GNUNET_strdup (name);
2058 ego_tail,
2059 ego_entry);
2060 if ((NULL != ego_name) &&
2061 (0 == strcmp (name, ego_name)))
2063 return;
2064 }
2065 if (NULL != ego)
2066 return;
2067 if (read_from_stdin)
2068 {
2070 return;
2071 }
2073}
static struct GNUNET_FS_Handle * ctx
struct GNUNET_CRYPTO_PrivateKey pk
Private key from command line option, or NULL.
static struct EgoEntry * ego_tail
Ego list.
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.
#define GNUNET_CONTAINER_DLL_insert_tail(head, tail, element)
Insert an element at the tail of a DLL.

References cfg, ctx, EgoEntry::ego, ego_head, ego_name, ego_tail, GNUNET_CONTAINER_DLL_insert_tail, GNUNET_IDENTITY_ego_get_private_key(), GNUNET_IDENTITY_ego_get_public_key(), GNUNET_new, GNUNET_strdup, EgoEntry::identifier, name, pk, process_command_stdin(), read_from_stdin, run_with_zone_pkey(), and zone_pkey.

Referenced by run().

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 2085 of file gnunet-namestore.c.

2089{
2090 (void) cls;
2091 (void) args;
2092 (void) cfgfile;
2093 cfg = _cfg;
2094 if (NULL != args[0])
2095 GNUNET_log (
2097 _ ("Superfluous command line arguments (starting with `%s') ignored\n"),
2098 args[0]);
2099
2102 if (NULL == ns)
2103 {
2104 fprintf (stderr, _ ("Failed to connect to namestore\n"));
2106 return;
2107 }
2109 if (NULL == idh)
2110 {
2111 ret = -1;
2112 fprintf (stderr, _ ("Cannot connect to identity service\n"));
2114 }
2115}
static void do_shutdown(void *cls)
Task run on shutdown.
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...
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:487
struct GNUNET_NAMESTORE_Handle * GNUNET_NAMESTORE_connect(const struct GNUNET_CONFIGURATION_Handle *cfg)
Connect to the namestore service.
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,...
Definition: scheduler.c:1340

References _, consensus-simulation::args, cfg, do_shutdown(), GNUNET_ERROR_TYPE_WARNING, GNUNET_IDENTITY_connect(), GNUNET_log, GNUNET_NAMESTORE_connect(), GNUNET_SCHEDULER_add_shutdown(), GNUNET_SCHEDULER_shutdown(), id_connect_cb(), idh, ns, and ret.

Referenced by main().

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 2126 of file gnunet-namestore.c.

2127{
2128 int lret;
2130 { GNUNET_GETOPT_option_flag ('a', "add", gettext_noop ("add record"), &add),
2132 "delete",
2133 gettext_noop ("delete record"),
2134 &del),
2136 "display",
2137 gettext_noop ("display records"),
2138 &list),
2140 "from-stdin",
2141 gettext_noop ("read commands from stdin"),
2144 'e',
2145 "expiration",
2146 "TIME",
2147 gettext_noop (
2148 "expiration time for record to use (for adding only), \"never\" is possible"),
2151 "nick",
2152 "NICKNAME",
2153 gettext_noop (
2154 "set the desired nick name for the zone"),
2155 &nickstring),
2157 "monitor",
2158 gettext_noop (
2159 "monitor changes in the namestore"),
2160 &monitor),
2162 "name",
2163 "NAME",
2164 gettext_noop (
2165 "name of the record to add/delete/display"),
2166 &name),
2168 "recordline",
2169 gettext_noop ("Output in recordline format"),
2172 "zone-to-name",
2173 "KEY",
2174 gettext_noop (
2175 "determine our name for the given KEY"),
2176 &reverse_pkey),
2178 "type",
2179 "TYPE",
2180 gettext_noop (
2181 "type of the record to add/delete/display"),
2182 &typestring),
2184 "uri",
2185 "URI",
2186 gettext_noop ("URI to import into our zone"),
2187 &uri),
2189 "value",
2190 "VALUE",
2191 gettext_noop (
2192 "value of the record to add/delete"),
2193 &value),
2195 "public",
2196 gettext_noop ("create or list public record"),
2197 &is_public),
2199 "omit-private",
2200 gettext_noop ("omit private records"),
2201 &omit_private),
2203 "include-maintenance",
2204 gettext_noop (
2205 "do not filter maintenance records"),
2208 "purge-orphans",
2209 gettext_noop (
2210 "purge namestore of all orphans"),
2213 "list-orphans",
2214 gettext_noop (
2215 "show private key for orphaned records for recovery using `gnunet-identity -C -P <key>'. Use in combination with --display"),
2216 &list_orphaned),
2218 "purge-zone-records",
2219 gettext_noop (
2220 "delete all records in specified zone"),
2221 &purge_zone),
2223 "batch-size",
2224 "NUMBER",
2225 gettext_noop (
2226 "delete all records in specified zone"),
2229 's',
2230 "shadow",
2231 gettext_noop (
2232 "create shadow record (only valid if all other records of the same type have expired)"),
2233 &is_shadow),
2235 'M',
2236 "maintenance",
2237 gettext_noop (
2238 "create maintenance record (e.g TOMBSTONEs)"),
2241 "zone",
2242 "EGO",
2243 gettext_noop (
2244 "name of the ego controlling the zone"),
2245 &ego_name),
2247
2248
2249 if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
2250 return 2;
2251
2252 is_public = -1;
2253 is_shadow = -1;
2254 is_maintenance = -1;
2255 GNUNET_log_setup ("gnunet-namestore", "WARNING", NULL);
2256 if (GNUNET_OK !=
2257 (lret = GNUNET_PROGRAM_run (argc,
2258 argv,
2259 "gnunet-namestore",
2260 _ ("GNUnet zone manipulation tool"),
2261 options,
2262 &run,
2263 NULL)))
2264 {
2265 GNUNET_free_nz ((void *) argv);
2266 // FIXME
2267 // GNUNET_CRYPTO_ecdsa_key_clear (&zone_pkey);
2268 return lret;
2269 }
2270 GNUNET_free_nz ((void *) argv);
2271 // FIXME
2272 // GNUNET_CRYPTO_ecdsa_key_clear (&zone_pkey);
2273 return ret;
2274}
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_OPTION_END
Definition: 002.c:13
struct GNUNET_GETOPT_CommandLineOption options[]
Definition: 002.c:5
#define gettext_noop(String)
Definition: gettext.h:74
static void run(void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *_cfg)
Main function that will be run.
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_option_uint(char shortName, const char *name, const char *argumentHelp, const char *description, unsigned int *val)
Allow user to specify an unsigned int.
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.
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.
enum GNUNET_GenericReturnValue GNUNET_log_setup(const char *comp, const char *loglevel, const char *logfile)
Setup logging.
#define GNUNET_free_nz(ptr)
Wrapper around free.
enum GNUNET_GenericReturnValue 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,...
Definition: program.c:400
enum GNUNET_GenericReturnValue GNUNET_STRINGS_get_utf8_args(int argc, char *const *argv, int *u8argc, char *const **u8argv)
Returns utf-8 encoded arguments.
Definition: strings.c:1230
Definition of a command line option.

References _, add, del, ego_name, expirationstring, gettext_noop, GNUNET_free_nz, GNUNET_GETOPT_OPTION_END, GNUNET_GETOPT_option_flag(), GNUNET_GETOPT_option_string(), GNUNET_GETOPT_option_uint(), GNUNET_log_setup(), GNUNET_OK, GNUNET_PROGRAM_run(), GNUNET_STRINGS_get_utf8_args(), include_maintenance, is_maintenance, is_public, is_shadow, list, list_orphaned, max_batch_size, monitor, name, nickstring, omit_private, options, output_recordline, purge_orphaned, purge_zone, read_from_stdin, ret, reverse_pkey, run(), typestring, uri, and value.

Here is the call graph for this function:

Variable Documentation

◆ ns

struct GNUNET_NAMESTORE_Handle* ns
static

◆ zone_pkey

struct GNUNET_CRYPTO_PrivateKey zone_pkey
static

◆ idh

struct GNUNET_IDENTITY_Handle* idh
static

Identity service handle.

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

Referenced by do_shutdown(), and run().

◆ ego_name

char* ego_name
static

Name of the ego controlling the zone.

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

Referenced by handle_reverse_lookup(), id_connect_cb(), main(), reset_handles(), 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 135 of file gnunet-namestore.c.

Referenced by reset_handles(), and run_with_zone_pkey().

◆ add_qe

struct GNUNET_NAMESTORE_QueueEntry* add_qe
static

Queue entry for the 'add' operation.

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

Referenced by add_error_cb(), get_existing_record(), reset_handles(), and run_with_zone_pkey().

◆ get_qe

struct GNUNET_NAMESTORE_QueueEntry* get_qe
static

Queue entry for the 'lookup' operation.

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

Referenced by display_record_lookup(), lookup_error_cb(), reset_handles(), and run_with_zone_pkey().

◆ reverse_qe

struct GNUNET_NAMESTORE_QueueEntry* reverse_qe
static

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

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

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

◆ marked_head

struct MarkedRecord* marked_head
static

Marked record list.

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

Referenced by collect_orphans(), collect_zone_records_to_purge(), purge_next_record(), and reset_handles().

◆ marked_tail

struct MarkedRecord* marked_tail
static

Marked record list.

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

Referenced by collect_orphans(), collect_zone_records_to_purge(), and purge_next_record().

◆ cfg

const struct GNUNET_CONFIGURATION_Handle* cfg

Configuration handle.

Handle to our configuration.

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

Referenced by id_connect_cb(), process_command_stdin(), run(), and run_with_zone_pkey().

◆ ego_head

struct EgoEntry* ego_head
static

◆ ego_tail

struct EgoEntry* ego_tail
static

Ego list.

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

Referenced by id_connect_cb().

◆ list_it

◆ read_from_stdin

int read_from_stdin
static

Run in read from stdin mode.

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

Referenced by finish_command(), id_connect_cb(), and main().

◆ list

int list
static

Desired action is to list records.

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

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

◆ add

◆ del

int del
static

Desired action is to remove a record.

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

Referenced by forward_resolution(), GNUNET_ABD_delegate_issue(), main(), run_with_zone_pkey(), and send_lookup_response().

◆ is_public

int is_public
static

Is record public (opposite of GNUNET_GNSRECORD_RF_PRIVATE)

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

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

◆ is_shadow

int is_shadow
static

Is record a shadow record (GNUNET_GNSRECORD_RF_SHADOW)

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

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

◆ is_maintenance

int is_maintenance
static

Is record a maintenance record (GNUNET_GNSRECORD_RF_MAINTENANCE)

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

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

◆ omit_private

int omit_private
static

Filter private records.

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

Referenced by main(), and run_with_zone_pkey().

◆ output_recordline

int output_recordline
static

Output in recordline format.

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

Referenced by display_record(), and main().

◆ purge_zone

int purge_zone
static

Purge zone contents.

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

Referenced by main(), reset_handles(), run_with_zone_pkey(), and zone_iteration_finished().

◆ include_maintenance

int include_maintenance
static

Do not filter maintenance records.

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

Referenced by main(), and run_with_zone_pkey().

◆ purge_orphaned

int purge_orphaned
static

Purge orphaned records.

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

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

◆ list_orphaned

int list_orphaned
static

List records and zone keys of orphaned records.

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

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

◆ del_qe

struct GNUNET_NAMESTORE_QueueEntry* del_qe
static

◆ set_qe

struct GNUNET_NAMESTORE_QueueEntry* set_qe
static

Queue entry for the 'set/replace' operation.

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

Referenced by batch_insert_recordinfo(), replace_cont(), reset_handles(), and run_with_zone_pkey().

◆ ns_qe

struct GNUNET_NAMESTORE_QueueEntry* ns_qe
static

Queue entry for begin/commit.

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

Referenced by do_shutdown().

◆ name

char* name
static

Name of the records to add/list/remove.

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

Referenced by del_monitor(), display_record(), get_existing_record(), id_connect_cb(), main(), reset_handles(), and run_with_zone_pkey().

◆ value

char* value
static

Value of the record to add/remove.

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

Referenced by add_get_request_to_pending(), add_global_addresses(), add_known_to_bloom(), add_section_contents(), add_sections(), add_setter_action(), attr_in_claims_request(), auto_conf_iter(), bandwidth_stats_iterator(), bind_loose_channel(), build_result_set(), bulk_tx_start(), call_iterator(), cancel_pending_request(), change_peer_respect(), channel_destroy_iterator(), check_connection_quality(), check_known_address(), check_known_challenge(), check_validation_request_pending(), check_vectors(), clean_local_client(), clean_request(), cleanup_channel(), cleanup_destination(), cleanup_hashmap(), cleanup_url_map(), clear_linked_hash(), client_release_ports(), close_files_iter(), collector(), compare_entries(), compute_service_response(), compute_square_sum_mpi_elements(), con_val_iter(), consume_cont(), contains_address(), cookie_identity_interpretation(), copy_element_cb(), copy_entry(), create_randomized_element_iterator(), create_response(), debug_channel(), decrementBit(), del_monitor(), delete_linked_hash(), delete_value(), destroy_active_client_request(), 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_tunnels_now(), determinate_avg_element_size_iterator(), determinate_done_message_iterator(), disconnect_and_free_peer_entry(), dns_string_to_value(), dns_value_to_string(), do_flood(), do_notify(), do_restart_typemap_message(), dv_neighbour_selection(), dv_neighbour_transmission(), escape_name(), execute_get(), expire_blocks(), filter_all(), filtered_map_initialization(), find_advertisable_hello(), find_by_message_uuid(), find_by_unique_id(), find_closest(), find_linked_hash(), find_result_set(), find_store_peer(), find_trees(), flush_respect(), format_help(), forward_reply(), free_ack_cummulator_cb(), free_backtalker_cb(), free_carriers_cb(), free_dv_routes_cb(), free_ego(), free_element_cb(), free_entry(), free_item(), free_iterate(), free_namespaces_cb(), free_neighbour_cb(), free_nodes_cb(), free_peer(), free_pending_ack_cb(), free_reassembly_cb(), free_request_it(), free_result(), free_service_record(), free_subnets_cb(), free_sug_handle(), free_validation_state_cb(), free_value(), free_value_cb(), free_values_iter(), free_waiting_entry(), full_sync_plausibility_check(), get_all_peers_iterator(), get_all_tunnels_iterator(), get_cb(), get_iterator(), get_lt_delete_it(), get_peer_delete_it(), get_queue_delete_it(), get_rand_peer_iterator(), get_receiver_delete_it(), get_result_present(), get_sender_delete_it(), get_url_parameter_copy(), getopt_set_keywords(), getopt_set_metadata(), GNUNET_CONFIGURATION_append_value_filename(), GNUNET_CONFIGURATION_config_tool_run(), GNUNET_CONFIGURATION_deserialize(), GNUNET_CONFIGURATION_get_value_choice(), GNUNET_CONFIGURATION_get_value_filename(), GNUNET_CONFIGURATION_get_value_string(), GNUNET_CONFIGURATION_remove_value_filename(), GNUNET_CONFIGURATION_set_value_string(), GNUNET_CONTAINER_multihashmap32_contains_value(), GNUNET_CONTAINER_multihashmap32_iterator_next(), GNUNET_CONTAINER_multihashmap32_put(), GNUNET_CONTAINER_multihashmap32_remove(), GNUNET_CONTAINER_multihashmap_contains_value(), GNUNET_CONTAINER_multihashmap_iterator_next(), GNUNET_CONTAINER_multihashmap_put(), GNUNET_CONTAINER_multihashmap_remove(), GNUNET_CONTAINER_multipeermap_contains_value(), GNUNET_CONTAINER_multipeermap_iterator_next(), GNUNET_CONTAINER_multipeermap_put(), GNUNET_CONTAINER_multipeermap_remove(), GNUNET_CONTAINER_multishortmap_contains_value(), GNUNET_CONTAINER_multishortmap_iterator_next(), GNUNET_CONTAINER_multishortmap_put(), GNUNET_CONTAINER_multishortmap_remove(), GNUNET_CONTAINER_multiuuidmap_contains_value(), GNUNET_CONTAINER_multiuuidmap_iterator_next(), GNUNET_CONTAINER_multiuuidmap_put(), GNUNET_CONTAINER_multiuuidmap_remove(), GNUNET_NETWORK_socket_disable_corking(), GNUNET_PEERSTORE_store(), GNUNET_STATISTICS_set(), GNUNET_TESTING_set_label(), GSF_cadet_release_clients(), handle_ack(), handle_ack_by_sender(), handle_alice_client_message(), handle_bob_client_message(), handle_set(), header_iterator(), heap_plugin_get_expiration(), heap_plugin_get_replication(), heap_plugin_get_zero_anonymity(), heap_plugin_put(), host_processor(), increment_value(), incrementBit(), init_key_to_element_iterator(), initialize_map_unfiltered(), inspect_attrs(), iterate_channels_cb(), iterate_close_room(), iterate_copy_history(), iterate_destroy_contacts(), iterate_destroy_entries(), iterate_destroy_link(), iterate_destroy_links(), iterate_destroy_members(), iterate_destroy_message(), iterate_destroy_messages(), iterate_destroy_operations(), iterate_destroy_peers(), iterate_destroy_room(), iterate_destroy_rooms(), iterate_destroy_session(), iterate_destroy_subscription(), iterate_destroy_tunnels(), iterate_find_member(), iterate_find_room(), iterate_flag_for_cleanup_discourse_message(), iterate_free_values(), iterate_load_next_member_sessions(), iterate_load_next_session(), iterate_local_members(), iterate_member_sessions_it(), iterate_message_control(), iterate_next_member_ids(), iterate_reachables(), iterate_reset_room(), iterate_save_entries(), iterate_save_links(), iterate_save_member_session_history_hentries(), iterate_save_members(), iterate_save_messages(), iterate_save_operations(), iterate_save_peers(), iterate_save_session(), iterate_search_session(), iterate_send_room_message(), iterate_store_members_it(), iterate_sync_member_contacts(), iterate_sync_session_contact(), iterate_zones(), iterator_bf_create(), iterator_bf_reduce(), jwt_parse_attributes(), link_room_message(), log_namespaces(), log_nodes(), lookup_queue_it(), main(), migrate_and_drop_keywords(), migrate_and_drop_metadata(), move_to_pending(), move_to_queue(), mpi_to_sexp(), neighbour_delete(), nibble_to_regex(), node_connections(), notify_client_about_session(), notify_client_connect_info(), notify_client_queues(), notify_tunnel_up_cb(), num_to_regex(), op_get_element_iterator(), open_port_cb(), parse_jwt(), parse_record(), parse_record_data(), peermap_clear_iterator(), PEERSTORE_create_record_mq_envelope(), peerstore_sqlite_store_record(), pending_reversals_delete_it(), prepare_ibf_iterator(), print_option(), print_version(), printer(), printer_watch(), process(), process_client_result(), process_reply(), process_result_with_request(), process_stat(), process_stat_in(), process_stats(), process_update_node(), put_cb(), reachability_iterator(), read_service_conf(), regex_cancel_dht_get(), regex_free_result(), regex_result_iterator(), register_notify(), remove_all(), remove_by_unique_id(), remove_global_addresses(), remove_iterator(), reschedule_hellos(), reset_handles(), resume_communicators(), rsa_sign_mpi(), run_with_zone_pkey(), schedule_current_round(), search_result_free(), search_result_freeze_probes(), search_result_resume_probes(), search_result_stop(), search_result_suspend(), send_full_element_iterator(), send_missing_full_elements_iter(), send_offers_iterator(), send_simple_cb(), set_absolute_time(), set_attributes_from_idtoken(), set_base32(), set_cont(), set_filename(), set_json(), set_one(), set_relative_time(), set_string(), set_timestamp(), set_timetravel_time(), set_uint(), set_uint16(), set_ulong(), set_value(), signal_result_resume(), socket_set_nodelay(), stats_iterator(), stop_peer_request(), store_and_free_entries(), store_peer_presistently_iterator(), stun_attr2str(), stun_msg2str(), test_exist_cb(), test_result_present(), tld_iter(), transmit_client_response(), transmit_suggestion(), try_add_peers(), try_combine_recent(), update_config(), update_flood_times(), update_iterator(), update_sre_result_maps(), url_iterator(), valid_peer_iterator(), verify_store_peer(), write_item(), and zone_to_name().

◆ uri

char* uri
static

URI to import.

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

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

◆ reverse_pkey

char* reverse_pkey
static

Reverse lookup to perform.

Definition at line 281 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 286 of file gnunet-namestore.c.

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

◆ expirationstring

char* expirationstring
static

Desired expiration time.

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

Referenced by main(), parse_expiration(), reset_handles(), and run_with_zone_pkey().

◆ nickstring

char* nickstring
static

Desired nick name.

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

Referenced by main(), and run_with_zone_pkey().

◆ ret

◆ type

uint32_t type
static

Type string converted to DNS type value.

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

Referenced by abd_number_to_typename(), abd_string_to_value(), abd_value_to_string(), add_record(), add_setter_action(), add_to_meta_counter(), attr_collect(), auto_config_cb(), basic_number_to_typename(), basic_string_to_value(), basic_value_to_string(), block_plugin_dht_check_block(), block_plugin_dht_check_query(), block_plugin_dht_check_reply(), block_plugin_dht_create_group(), block_plugin_dht_get_key(), block_plugin_dns_check_block(), block_plugin_dns_check_query(), block_plugin_dns_check_reply(), block_plugin_dns_create_group(), block_plugin_dns_get_key(), block_plugin_fs_check_block(), block_plugin_fs_check_query(), block_plugin_fs_check_reply(), block_plugin_fs_create_group(), block_plugin_fs_get_key(), block_plugin_gns_check_block(), block_plugin_gns_check_query(), block_plugin_gns_check_reply(), block_plugin_gns_create_group(), block_plugin_gns_get_key(), block_plugin_regex_check_block(), block_plugin_regex_check_query(), block_plugin_regex_check_reply(), block_plugin_regex_create_group(), block_plugin_regex_get_key(), block_plugin_revocation_check_block(), block_plugin_revocation_check_query(), block_plugin_revocation_check_reply(), block_plugin_revocation_get_key(), block_plugin_seti_test_check_block(), block_plugin_seti_test_check_query(), block_plugin_seti_test_check_reply(), block_plugin_seti_test_get_key(), block_plugin_setu_test_check_block(), block_plugin_setu_test_check_query(), block_plugin_setu_test_check_reply(), block_plugin_setu_test_get_key(), block_plugin_template_create_group(), block_plugin_test_check_block(), block_plugin_test_check_query(), block_plugin_test_check_reply(), block_plugin_test_create_group(), block_plugin_test_get_key(), block_proc(), cadet_reply_proc(), callback_store_operation(), change_service(), check_key_type(), check_p2p_put(), child_completed_callback(), client_response_handler(), conversation_number_to_typename(), conversation_string_to_value(), conversation_value_to_string(), cred_collect(), del_monitor(), display_record(), dns_number_to_typename(), dns_string_to_value(), dns_value_to_string(), ego_create(), gnunet-chk::encode_data_to_string(), execute_get(), expired_processor(), find_full_data(), find_plugin(), for_matching_monitors(), gather_uri_data(), GDS_CLIENTS_process_get(), GDS_DATACACHE_get_closest(), GDS_DATACACHE_handle_get(), GDS_NEIGHBOURS_handle_get(), GDS_ROUTING_add(), get_app(), get_audiobin(), get_callback(), get_cb(), get_coder(), get_existing_record(), get_resp_callback(), get_result_iterator(), get_type(), get_typed(), getopt_set_metadata(), gns_is_critical(), gns_number_to_typename(), gns_string_to_value(), gns_value_to_string(), GNUNET_BLOCK_check_block(), GNUNET_BLOCK_check_query(), GNUNET_BLOCK_check_reply(), GNUNET_BLOCK_get_key(), GNUNET_BLOCK_GROUP_bf_create(), GNUNET_BLOCK_group_create(), GNUNET_CADET_drop_message(), GNUNET_CRYPTO_signature_get_raw_length_by_type(), GNUNET_DATACACHE_get(), GNUNET_DATACACHE_get_closest(), GNUNET_DATASTORE_get_key(), GNUNET_DATASTORE_get_zero_anonymity(), GNUNET_DATASTORE_put(), GNUNET_DHT_get_start(), GNUNET_DHT_monitor_start(), GNUNET_DHT_put(), GNUNET_FS_meta_data_delete(), GNUNET_FS_meta_data_get_by_type(), GNUNET_FS_meta_data_get_first_by_types(), GNUNET_FS_meta_data_insert(), GNUNET_GNS_lookup(), GNUNET_GNS_lookup_limited(), GNUNET_GNS_lookup_with_tld(), GNUNET_GNSRECORD_data_from_identity(), GNUNET_GNSRECORD_identity_from_data(), GNUNET_GNSRECORD_is_critical(), GNUNET_GNSRECORD_is_zonekey_type(), GNUNET_GNSRECORD_number_to_typename(), GNUNET_GNSRECORD_string_to_value(), GNUNET_GNSRECORD_value_to_string(), GNUNET_MQ_msg_(), GNUNET_MQ_msg_nested_mh_(), GNUNET_MQ_preference_to_string(), GNUNET_NETWORK_socket_create(), GNUNET_NT_scanner_get_type(), GNUNET_OS_process_status(), GNUNET_OS_process_wait_status(), GNUNET_PQ_exec_sql(), GNUNET_RECLAIM_attribute_list_add(), GNUNET_RECLAIM_attribute_new(), GNUNET_RECLAIM_attribute_number_to_typename(), GNUNET_RECLAIM_attribute_string_to_value(), GNUNET_RECLAIM_attribute_value_to_string(), GNUNET_RECLAIM_credential_new(), GNUNET_RECLAIM_credential_number_to_typename(), GNUNET_RECLAIM_credential_string_to_value(), GNUNET_RECLAIM_credential_value_to_string(), GNUNET_RECLAIM_presentation_new(), GNUNET_RECLAIM_presentation_number_to_typename(), GNUNET_RECLAIM_presentation_string_to_value(), GNUNET_RECLAIM_presentation_value_to_string(), GSC_SESSIONS_add_to_typemap(), GSF_cadet_query(), GSF_pending_request_create_(), handle_auto_result(), handle_client_accept(), handle_client_start_search(), handle_datastore_reply(), handle_dht_p2p_get(), handle_dht_reply(), handle_dht_response(), handle_get_zero_anonymity(), handle_local_data(), handle_p2p_put(), handle_p2p_reply(), handle_reply(), handle_result(), heap_plugin_get(), heap_plugin_get_closest(), heap_plugin_get_key(), heap_plugin_get_zero_anonymity(), heap_plugin_put(), initialize_network_handle(), insert_pending_message(), item_printer(), iter_finished(), jwt_number_to_typename(), jwt_string_to_value(), jwt_value_to_string(), main(), maint_child_death(), match_full_data(), merge_helper(), messenger_number_to_typename(), messenger_string_to_value(), messenger_value_to_string(), meta_printer(), number_to_typename(), pabc_number_to_typename(), pabc_string_to_value(), pabc_value_to_string(), pack(), parse(), parse_attr(), parse_credential(), parse_jwt(), postgres_plugin_get(), postgres_plugin_get_closest(), postgres_plugin_get_key(), postgres_plugin_get_zero_anonymity(), postgres_plugin_put(), process_client_result(), process_dht_put_content(), process_kblock_for_unindex(), process_local_reply(), process_migration_content(), process_status(), put_callback(), queue_send_msg(), quota_processor(), refresh_bloomfilter(), repl_proc(), resolve_and_cache(), run_with_zone_pkey(), send_message(), sqlite_plugin_get(), sqlite_plugin_get_closest(), sqlite_plugin_get_key(), sqlite_plugin_get_zero_anonymity(), sqlite_plugin_put(), start_operation(), string_to_value(), stun_get_mapped(), submit_request(), transmit_item(), try_handle_plaintext(), try_transmission(), type_match(), unindex_process(), union_accept(), use_store_operation(), value_to_string(), and work_test().

◆ data

void* data
static

◆ data_size

size_t data_size
static

Number of bytes in data.

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

Referenced by abd_string_to_value(), abd_value_to_string(), add_dns_result(), add_host(), basic_string_to_value(), basic_value_to_string(), buffer_append(), buffer_init(), cadet_reply_proc(), check_pkey(), consistency_iter(), consume_ticket(), conversation_string_to_value(), conversation_value_to_string(), count_and_separate_strings(), create_string_array(), del_monitor(), display_record(), display_records_from_block(), dns_string_to_value(), dns_value_to_string(), dv_hmac(), filter_tickets_cb(), forward_resolution(), GDS_CLIENTS_handle_reply(), GDS_helper_sign_path(), GDS_NEIGHBOURS_handle_reply(), get_existing_record(), get_records_and_call_iterator(), gns_string_to_value(), gns_value_to_string(), GNUNET_ABD_delegate_deserialize(), GNUNET_CONFIGURATION_get_data(), GNUNET_DHT_verify_path(), GNUNET_DNSPARSER_bin_to_hex(), GNUNET_DNSPARSER_hex_to_bin(), GNUNET_FS_meta_data_delete(), GNUNET_FS_meta_data_insert(), GNUNET_GNSRECORD_data_from_identity(), GNUNET_GNSRECORD_identity_from_data(), GNUNET_GNSRECORD_JSON_from_gnsrecord(), GNUNET_GNSRECORD_records_deserialize(), GNUNET_GNSRECORD_records_get_size(), GNUNET_GNSRECORD_records_serialize(), GNUNET_GNSRECORD_string_to_value(), GNUNET_GNSRECORD_value_to_string(), GNUNET_NAT_stun_handle_packet(), GNUNET_RECLAIM_attribute_deserialize(), GNUNET_RECLAIM_attribute_list_add(), GNUNET_RECLAIM_attribute_list_deserialize(), GNUNET_RECLAIM_attribute_new(), GNUNET_RECLAIM_attribute_serialize(), GNUNET_RECLAIM_attribute_serialize_get_size(), GNUNET_RECLAIM_attribute_string_to_value(), GNUNET_RECLAIM_attribute_value_to_string(), GNUNET_RECLAIM_credential_deserialize(), GNUNET_RECLAIM_credential_list_deserialize(), GNUNET_RECLAIM_credential_new(), GNUNET_RECLAIM_credential_serialize(), GNUNET_RECLAIM_credential_serialize_get_size(), GNUNET_RECLAIM_credential_string_to_value(), GNUNET_RECLAIM_credential_value_to_string(), GNUNET_RECLAIM_presentation_deserialize(), GNUNET_RECLAIM_presentation_list_deserialize(), GNUNET_RECLAIM_presentation_new(), GNUNET_RECLAIM_presentation_serialize(), GNUNET_RECLAIM_presentation_serialize_get_size(), GNUNET_RECLAIM_presentation_string_to_value(), GNUNET_RECLAIM_presentation_value_to_string(), handle_delegate_collection_cb(), handle_gns2dns_result(), handle_gns_resolution_result(), handle_gns_response(), issue_ticket(), item_printer(), iter_finished(), jwt_get_expiration(), jwt_get_issuer(), jwt_parse_attributes(), jwt_string_to_value(), jwt_value_to_string(), lookup_authz_cb(), lookup_nick_it(), lookup_redirect_uri_result(), merge_helper(), merge_with_nick_records(), messenger_string_to_value(), messenger_value_to_string(), namestore_flat_store_records(), namestore_postgres_store_records(), namestore_sqlite_store_records(), pabc_string_to_value(), pabc_value_to_string(), parse(), parse_attr(), parse_credential(), parse_jwt(), parse_result_call_iterator(), play(), process_command_stdin(), process_lookup_result(), process_parallel_lookup_result(), read_stdio(), record(), recursive_gns2dns_resolution(), reply_to_dns(), result_processor(), run_with_zone_pkey(), rvk_move_attr_cb(), sqlite_plugin_del(), store_and_free_entries(), string_to_value(), transmit_call_audio(), transmit_phone_audio(), update_tickets(), and value_to_string().

◆ etime

uint64_t etime
static

Expiration string converted to numeric value.

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

Referenced by generate_gns_certificate(), get_existing_record(), parse_expiration(), run(), 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 326 of file gnunet-namestore.c.

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

◆ zm

◆ monitor

int monitor
static

Enables monitor mode.

Definition at line 336 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 341 of file gnunet-namestore.c.

Referenced by clear_recordset(), parse_recordline(), process_command_stdin(), and run_with_zone_pkey().

◆ purge_task

struct GNUNET_SCHEDULER_Task* purge_task
static

Purge task.

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

Referenced by marked_deleted(), purge_next_record(), reset_handles(), and zone_iteration_finished().

◆ ri_count

unsigned int ri_count = 0
static

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

Referenced by batch_insert_recordinfo(), and process_command_stdin().

◆ record_info

◆ record_info_capacity

unsigned int record_info_capacity = 0
static

Maximum capacity of record_info array.

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

Referenced by process_command_stdin().

◆ max_batch_size

unsigned int max_batch_size = 1000
static

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

Referenced by main(), and process_command_stdin().

◆ ri_sent

unsigned int ri_sent = 0
static

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

Referenced by batch_insert_recordinfo(), and process_command_stdin().