GNUnet  0.10.x
Functions | Variables
gnunet-namecache.c File Reference

command line tool to inspect the name cache More...

#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_dnsparser_lib.h"
#include "gnunet_identity_service.h"
#include "gnunet_gnsrecord_lib.h"
#include "gnunet_namecache_service.h"
Include dependency graph for gnunet-namecache.c:

Go to the source code of this file.

Functions

static void do_shutdown (void *cls)
 Task run on shutdown. More...
 
static void display_records_from_block (void *cls, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd)
 Process a record that was stored in the namecache in a block. More...
 
static void handle_block (void *cls, const struct GNUNET_GNSRECORD_Block *block)
 Display block obtained from listing (by name). 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-namecache. More...
 

Variables

static struct GNUNET_NAMECACHE_Handlens
 Handle to the namecache. More...
 
static struct GNUNET_NAMECACHE_QueueEntryqe
 Queue entry for the 'query' operation. More...
 
static char * name
 Name (label) of the records to list. More...
 
static struct GNUNET_CRYPTO_EcdsaPublicKey pubkey
 Public key of the zone to look in. More...
 
static char * pkey
 Public key of the zone to look in, in ASCII. More...
 
static int ret
 Global return value. More...
 

Detailed Description

command line tool to inspect the name cache

Author
Christian Grothoff

TODO:

Definition in file gnunet-namecache.c.

Function Documentation

◆ do_shutdown()

static void do_shutdown ( void *  cls)
static

Task run on shutdown.

Cleans up everything.

Parameters
clsunused

Definition at line 73 of file gnunet-namecache.c.

References GNUNET_NAMECACHE_cancel(), and GNUNET_NAMECACHE_disconnect().

Referenced by run().

74 {
75  if (NULL != qe)
76  {
78  qe = NULL;
79  }
80  if (NULL != ns)
81  {
83  ns = NULL;
84  }
85 }
static struct GNUNET_NAMECACHE_Handle * ns
Handle to the namecache.
void GNUNET_NAMECACHE_cancel(struct GNUNET_NAMECACHE_QueueEntry *qe)
Cancel a namecache operation.
static struct GNUNET_NAMECACHE_QueueEntry * qe
Queue entry for the 'query' operation.
void GNUNET_NAMECACHE_disconnect(struct GNUNET_NAMECACHE_Handle *h)
Disconnect from the namecache service (and free associated resources).
Here is the call graph for this function:
Here is the caller graph for this function:

◆ display_records_from_block()

static void display_records_from_block ( void *  cls,
unsigned int  rd_len,
const struct GNUNET_GNSRECORD_Data rd 
)
static

Process a record that was stored in the namecache in a block.

Parameters
clsclosure, NULL
rd_lennumber of entries in rd array
rdarray of records with data to store

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

References _, data, data_size, GNUNET_free, GNUNET_GNSRECORD_number_to_typename(), GNUNET_GNSRECORD_value_to_string(), name, and typestring.

Referenced by handle_block().

99 {
100  const char *typestring;
101  char *s;
102  unsigned int i;
103 
104  if (0 == rd_len)
105  {
106  fprintf(stdout, _("No records found for `%s'"), name);
107  return;
108  }
109  fprintf(stdout, "%s:\n", name);
110  for (i = 0; i < rd_len; i++)
111  {
112  typestring = GNUNET_GNSRECORD_number_to_typename(rd[i].record_type);
113  s = GNUNET_GNSRECORD_value_to_string(rd[i].record_type,
114  rd[i].data,
115  rd[i].data_size);
116  if (NULL == s)
117  {
118  fprintf(stdout,
119  _("\tCorrupt or unsupported record of type %u\n"),
120  (unsigned int)rd[i].record_type);
121  continue;
122  }
123  fprintf(stdout, "\t%s: %s\n", typestring, s);
124  GNUNET_free(s);
125  }
126  fprintf(stdout, "%s", "\n");
127 }
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
static char * name
Name (label) of the records to list.
static char * typestring
Type of the record to add/remove, NULL to remove all.
uint32_t data
The data value.
char * GNUNET_GNSRECORD_value_to_string(uint32_t type, const void *data, size_t data_size)
Convert the &#39;value&#39; of a record to a string.
Definition: gnsrecord.c:142
static size_t data_size
Number of bytes in data.
const char * GNUNET_GNSRECORD_number_to_typename(uint32_t type)
Convert a type number (i.e.
Definition: gnsrecord.c:230
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ handle_block()

static void handle_block ( void *  cls,
const struct GNUNET_GNSRECORD_Block block 
)
static

Display block obtained from listing (by name).

Parameters
clsNULL
blockNULL if not found

Definition at line 137 of file gnunet-namecache.c.

References display_records_from_block(), GNUNET_GNSRECORD_block_decrypt(), GNUNET_OK, GNUNET_SCHEDULER_shutdown(), name, and pubkey.

Referenced by run().

138 {
139  qe = NULL;
140  if (NULL == block)
141  {
142  fprintf(stderr, "No matching block found\n");
143  }
144  else if (GNUNET_OK !=
146  &pubkey,
147  name,
149  NULL))
150  {
151  fprintf(stderr, "Failed to decrypt block!\n");
152  }
154 }
static struct GNUNET_CRYPTO_EcdsaPublicKey pubkey
Public key of the zone to look in.
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:517
static char * name
Name (label) of the records to list.
int GNUNET_GNSRECORD_block_decrypt(const struct GNUNET_GNSRECORD_Block *block, const struct GNUNET_CRYPTO_EcdsaPublicKey *zone_key, const char *label, GNUNET_GNSRECORD_RecordCallback proc, void *proc_cls)
Decrypt block.
static struct GNUNET_NAMECACHE_QueueEntry * qe
Queue entry for the &#39;query&#39; operation.
static void display_records_from_block(void *cls, unsigned int rd_len, const struct GNUNET_GNSRECORD_Data *rd)
Process a record that was stored in the namecache in a block.
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 166 of file gnunet-namecache.c.

References _, do_shutdown(), GNUNET_CRYPTO_ecdsa_public_key_from_string(), GNUNET_GNSRECORD_query_from_public_key(), GNUNET_NAMECACHE_connect(), GNUNET_NAMECACHE_lookup_block(), GNUNET_OK, GNUNET_SCHEDULER_add_shutdown(), GNUNET_SCHEDULER_shutdown(), handle_block(), name, pkey, and pubkey.

Referenced by main().

170 {
171  struct GNUNET_HashCode dhash;
172 
173  if (NULL == pkey)
174  {
175  fprintf(stderr, _("You must specify which zone should be accessed\n"));
176  return;
177  }
178 
179  if (GNUNET_OK !=
181  {
182  fprintf(stderr, _("Invalid public key for zone `%s'\n"), pkey);
184  return;
185  }
186  if (NULL == name)
187  {
188  fprintf(stderr, _("You must specify a name\n"));
189  return;
190  }
191 
195  qe = GNUNET_NAMECACHE_lookup_block(ns, &dhash, &handle_block, NULL);
196 }
struct GNUNET_NAMECACHE_Handle * GNUNET_NAMECACHE_connect(const struct GNUNET_CONFIGURATION_Handle *cfg)
Connect to the namecache service.
static struct GNUNET_CRYPTO_EcdsaPublicKey pubkey
Public key of the zone to look in.
static char * pkey
Public key of the zone to look in, in ASCII.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_shutdown(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run on shutdown, that is when a CTRL-C signal is received, or when GNUNET_SCHEDULER_shutdown() is being invoked.
Definition: scheduler.c:1284
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:517
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
static struct GNUNET_NAMECACHE_Handle * ns
Handle to the namecache.
A 512-bit hashcode.
static char * name
Name (label) of the records to list.
struct GNUNET_NAMECACHE_QueueEntry * GNUNET_NAMECACHE_lookup_block(struct GNUNET_NAMECACHE_Handle *h, const struct GNUNET_HashCode *derived_hash, GNUNET_NAMECACHE_BlockProcessor proc, void *proc_cls)
Get a result for a particular key from the namecache.
int GNUNET_CRYPTO_ecdsa_public_key_from_string(const char *enc, size_t enclen, struct GNUNET_CRYPTO_EcdsaPublicKey *pub)
Convert a string representing a public key to a public key.
Definition: crypto_ecc.c:468
static struct GNUNET_NAMECACHE_QueueEntry * qe
Queue entry for the &#39;query&#39; operation.
void GNUNET_GNSRECORD_query_from_public_key(const struct GNUNET_CRYPTO_EcdsaPublicKey *pub, const char *label, struct GNUNET_HashCode *query)
Calculate the DHT query for a given label in a given zone.
static void do_shutdown(void *cls)
Task run on shutdown.
static void handle_block(void *cls, const struct GNUNET_GNSRECORD_Block *block)
Display block obtained from listing (by name).
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-namecache.

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

Definition at line 207 of file gnunet-namecache.c.

References _, gettext_noop, GNUNET_free, GNUNET_GETOPT_OPTION_END, GNUNET_GETOPT_option_string(), GNUNET_log_setup(), GNUNET_OK, GNUNET_PROGRAM_run(), GNUNET_STRINGS_get_utf8_args(), name, pkey, ret, and run().

208 {
211  "name",
212  "NAME",
213  gettext_noop(
214  "name of the record to add/delete/display"),
215  &name),
216 
218  'z',
219  "zone",
220  "PKEY",
221  gettext_noop("specifies the public key of the zone to look in"),
222  &pkey),
223 
225 
226  if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args(argc, argv, &argc, &argv))
227  return 2;
228 
229  GNUNET_log_setup("gnunet-namecache", "WARNING", NULL);
230  if (GNUNET_OK != GNUNET_PROGRAM_run(argc,
231  argv,
232  "gnunet-namecache",
233  _("GNUnet zone manipulation tool"),
234  options,
235  &run,
236  NULL))
237  {
238  GNUNET_free((void *)argv);
239  return 1;
240  }
241  GNUNET_free((void *)argv);
242  return ret;
243 }
static char * pkey
Public key of the zone to look in, in ASCII.
struct GNUNET_GETOPT_CommandLineOption options[]
Definition: 002.c:5
int GNUNET_STRINGS_get_utf8_args(int argc, char *const *argv, int *u8argc, char *const **u8argv)
Returns utf-8 encoded arguments.
Definition: strings.c:1439
static int ret
Global return value.
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
Definition of a command line option.
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_OPTION_END
Definition: 002.c:13
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_option_string(char shortName, const char *name, const char *argumentHelp, const char *description, char **str)
Allow user to specify a string.
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
static char * name
Name (label) of the records to list.
static void run(void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
Main function that will be run.
int GNUNET_PROGRAM_run(int argc, char *const *argv, const char *binaryName, const char *binaryHelp, const struct GNUNET_GETOPT_CommandLineOption *options, GNUNET_PROGRAM_Main task, void *task_cls)
Run a standard GNUnet command startup sequence (initialize loggers and configuration, parse options).
Definition: program.c:367
int GNUNET_log_setup(const char *comp, const char *loglevel, const char *logfile)
Setup logging.
#define GNUNET_free(ptr)
Wrapper around free.
#define gettext_noop(String)
Definition: gettext.h:69
Here is the call graph for this function:

Variable Documentation

◆ ns

struct GNUNET_NAMECACHE_Handle* ns
static

Handle to the namecache.

Definition at line 39 of file gnunet-namecache.c.

◆ qe

struct GNUNET_NAMECACHE_QueueEntry* qe
static

Queue entry for the 'query' operation.

Definition at line 44 of file gnunet-namecache.c.

◆ name

char* name
static

Name (label) of the records to list.

Definition at line 49 of file gnunet-namecache.c.

Referenced by display_records_from_block(), handle_block(), main(), and run().

◆ pubkey

struct GNUNET_CRYPTO_EcdsaPublicKey pubkey
static

Public key of the zone to look in.

Definition at line 54 of file gnunet-namecache.c.

Referenced by handle_block(), and run().

◆ pkey

char* pkey
static

◆ ret

int ret
static

Global return value.

Definition at line 64 of file gnunet-namecache.c.

Referenced by main().