GNUnet 0.22.2
gnunet-dht-monitor.c File Reference

search for data in DHT More...

#include "platform.h"
#include "gnunet_dht_service.h"
Include dependency graph for gnunet-dht-monitor.c:

Go to the source code of this file.

Functions

static void cleanup_task (void *cls)
 Stop monitoring request and start shutdown. More...
 
static void timeout_task (void *cls)
 We hit a timeout. More...
 
static void get_callback (void *cls, enum GNUNET_DHT_RouteOption options, enum GNUNET_BLOCK_Type type, uint32_t hop_count, uint32_t desired_replication_level, const struct GNUNET_HashCode *key)
 Callback called on each GET request going through the DHT. More...
 
static void get_resp_callback (void *cls, enum GNUNET_BLOCK_Type type, const struct GNUNET_PeerIdentity *trunc_peer, const struct GNUNET_DHT_PathElement *get_path, unsigned int get_path_length, const struct GNUNET_DHT_PathElement *put_path, unsigned int put_path_length, struct GNUNET_TIME_Absolute exp, const struct GNUNET_HashCode *key, const void *data, size_t size)
 Callback called on each GET reply going through the DHT. More...
 
static void put_callback (void *cls, enum GNUNET_DHT_RouteOption options, enum GNUNET_BLOCK_Type type, uint32_t hop_count, uint32_t desired_replication_level, const struct GNUNET_PeerIdentity *trunc_peer, unsigned int path_length, const struct GNUNET_DHT_PathElement *path, struct GNUNET_TIME_Absolute exp, const struct GNUNET_HashCode *key, const void *data, size_t size)
 Callback called on each PUT request going through the DHT. More...
 
static void run (void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *c)
 Main function that will be run by the scheduler. More...
 
int main (int argc, char *const *argv)
 Entry point for gnunet-dht-monitor. More...
 

Variables

static unsigned int block_type
 The type of the query. More...
 
static char * query_key
 The key to be monitored. More...
 
static struct GNUNET_TIME_Relative timeout_request = { 60000 }
 User supplied timeout value (in seconds) More...
 
static int verbose
 Be verbose. More...
 
static struct GNUNET_DHT_Handledht_handle
 Handle to the DHT. More...
 
static const struct GNUNET_CONFIGURATION_Handlecfg
 Global handle of the configuration. More...
 
static struct GNUNET_DHT_MonitorHandlemonitor_handle
 Handle for the get request. More...
 
static unsigned int result_count
 Count of messages received. More...
 
static int ret
 Global status value. More...
 
static struct GNUNET_SCHEDULER_Tasktt
 Task scheduled to handle timeout. More...
 

Detailed Description

search for data in DHT

Author
Christian Grothoff
Bartlomiej Polot

Definition in file gnunet-dht-monitor.c.

Function Documentation

◆ cleanup_task()

static void cleanup_task ( void *  cls)
static

Stop monitoring request and start shutdown.

Parameters
clsclosure (unused)

Definition at line 86 of file gnunet-dht-monitor.c.

87{
88 if (verbose)
89 fprintf (stderr, "%s", "Cleaning up!\n");
90 if (NULL != monitor_handle)
91 {
93 monitor_handle = NULL;
94 }
95 if (NULL != dht_handle)
96 {
98 dht_handle = NULL;
99 }
100 if (NULL != tt)
101 {
103 tt = NULL;
104 }
105}
static int verbose
Be verbose.
static struct GNUNET_DHT_Handle * dht_handle
Handle to the DHT.
static struct GNUNET_SCHEDULER_Task * tt
Task scheduled to handle timeout.
static struct GNUNET_DHT_MonitorHandle * monitor_handle
Handle for the get request.
void GNUNET_DHT_disconnect(struct GNUNET_DHT_Handle *handle)
Shutdown connection with the DHT service.
Definition: dht_api.c:1053
void GNUNET_DHT_monitor_stop(struct GNUNET_DHT_MonitorHandle *handle)
Stop monitoring.
Definition: dht_api.c:1298
void * GNUNET_SCHEDULER_cancel(struct GNUNET_SCHEDULER_Task *task)
Cancel the task with the specified identifier.
Definition: scheduler.c:980

References dht_handle, GNUNET_DHT_disconnect(), GNUNET_DHT_monitor_stop(), GNUNET_SCHEDULER_cancel(), monitor_handle, tt, and verbose.

Referenced by run().

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

◆ timeout_task()

static void timeout_task ( void *  cls)
static

We hit a timeout.

Stop monitoring request and start shutdown

Parameters
clsclosure (unused)

Definition at line 114 of file gnunet-dht-monitor.c.

115{
116 tt = NULL;
118}
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:567

References GNUNET_SCHEDULER_shutdown(), and tt.

Referenced by run().

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

◆ get_callback()

static void get_callback ( void *  cls,
enum GNUNET_DHT_RouteOption  options,
enum GNUNET_BLOCK_Type  type,
uint32_t  hop_count,
uint32_t  desired_replication_level,
const struct GNUNET_HashCode key 
)
static

Callback called on each GET request going through the DHT.

Parameters
clsClosure.
optionsOptions, for instance RecordRoute, DemultiplexEverywhere.
typeThe type of data in the request.
hop_countHop count so far.
desired_replication_levelDesired replication level.
keyKey of the requested data.

Definition at line 132 of file gnunet-dht-monitor.c.

138{
139 fprintf (stdout,
140 "GET #%u: type %d, key `%s'\n",
142 (int) type,
144 result_count++;
145}
static unsigned int result_count
Count of messages received.
struct GNUNET_HashCode key
The key used in the DHT.
static uint32_t type
Type string converted to DNS type value.
const char * GNUNET_h2s_full(const struct GNUNET_HashCode *hc)
Convert a hash value to a string (for printing debug messages).

References GNUNET_h2s_full(), key, result_count, and type.

Referenced by run().

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

◆ get_resp_callback()

static void get_resp_callback ( void *  cls,
enum GNUNET_BLOCK_Type  type,
const struct GNUNET_PeerIdentity trunc_peer,
const struct GNUNET_DHT_PathElement get_path,
unsigned int  get_path_length,
const struct GNUNET_DHT_PathElement put_path,
unsigned int  put_path_length,
struct GNUNET_TIME_Absolute  exp,
const struct GNUNET_HashCode key,
const void *  data,
size_t  size 
)
static

Callback called on each GET reply going through the DHT.

Parameters
clsClosure.
typeThe type of data in the result.
trunc_peerpeer where the path was truncated, or NULL if the path is complete
get_pathPeers on GET path (or NULL if not recorded).
get_path_lengthnumber of entries in get_path.
put_pathpeers on the PUT path (or NULL if not recorded).
put_path_lengthnumber of entries in get_path.
expExpiration time of the data.
keyKey of the data.
dataPointer to the result data.
sizeNumber of bytes in data.

Definition at line 164 of file gnunet-dht-monitor.c.

175{
176 fprintf (stdout,
178 ? "RESPONSE #%u (%s): type %d, key `%s', data `%.*s'\n"
179 : "RESPONSE #%u (%s): type %d, key `%s'\n",
182 (int) type,
184 (unsigned int) size,
185 (char *) data);
186 result_count++;
187}
static char * data
The data to insert into the dht.
@ GNUNET_BLOCK_TYPE_TEST
Block for testing.
const char * GNUNET_STRINGS_absolute_time_to_string(struct GNUNET_TIME_Absolute t)
Like asctime, except for GNUnet time.
Definition: strings.c:640
static unsigned int size
Size of the "table".
Definition: peer.c:68

References data, GNUNET_BLOCK_TYPE_TEST, GNUNET_h2s_full(), GNUNET_STRINGS_absolute_time_to_string(), key, result_count, size, and type.

Referenced by run().

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

◆ put_callback()

static void put_callback ( void *  cls,
enum GNUNET_DHT_RouteOption  options,
enum GNUNET_BLOCK_Type  type,
uint32_t  hop_count,
uint32_t  desired_replication_level,
const struct GNUNET_PeerIdentity trunc_peer,
unsigned int  path_length,
const struct GNUNET_DHT_PathElement path,
struct GNUNET_TIME_Absolute  exp,
const struct GNUNET_HashCode key,
const void *  data,
size_t  size 
)
static

Callback called on each PUT request going through the DHT.

Parameters
clsClosure.
optionsOptions, for instance RecordRoute, DemultiplexEverywhere.
typeThe type of data in the request.
hop_countHop count so far.
trunc_peerpeer where the path was truncated, or NULL if the path is complete
path_lengthnumber of entries in path (or 0 if not recorded).
pathpeers on the PUT path (or NULL if not recorded).
desired_replication_levelDesired replication level.
expExpiration time of the data.
keyKey under which data is to be stored.
dataPointer to the data carried.
sizeNumber of bytes in data.

Definition at line 207 of file gnunet-dht-monitor.c.

219{
220 fprintf (stdout,
222 ? "PUT %u (%s): type %d, key `%s', data `%.*s'\n"
223 : "PUT %u (%s): type %d, key `%s'\n",
226 (int) type,
228 (unsigned int) size,
229 (char *) data);
230 result_count++;
231}

References data, GNUNET_BLOCK_TYPE_TEST, GNUNET_h2s_full(), GNUNET_STRINGS_absolute_time_to_string(), key, result_count, size, and type.

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 c 
)
static

Main function that will be run by the scheduler.

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

Definition at line 243 of file gnunet-dht-monitor.c.

247{
248 struct GNUNET_HashCode *key;
249 struct GNUNET_HashCode hc;
250
251 cfg = c;
252
253 if (NULL == (dht_handle = GNUNET_DHT_connect (cfg, 1)))
254 {
255 fprintf (stderr, "%s", _ ("Failed to connect to DHT service!\n"));
256 ret = 1;
257 return;
258 }
259 if (GNUNET_BLOCK_TYPE_ANY == block_type) /* Type of data not set */
261 if (NULL != query_key)
262 {
263 key = &hc;
266 }
267 else
268 {
269 key = NULL;
270 }
271 if (verbose)
272 fprintf (stderr,
273 "Monitoring for %s\n",
275 GNUNET_NO));
280 key,
284 NULL);
285}
static void put_callback(void *cls, enum GNUNET_DHT_RouteOption options, enum GNUNET_BLOCK_Type type, uint32_t hop_count, uint32_t desired_replication_level, const struct GNUNET_PeerIdentity *trunc_peer, unsigned int path_length, const struct GNUNET_DHT_PathElement *path, struct GNUNET_TIME_Absolute exp, const struct GNUNET_HashCode *key, const void *data, size_t size)
Callback called on each PUT request going through the DHT.
static struct GNUNET_TIME_Relative timeout_request
User supplied timeout value (in seconds)
static void timeout_task(void *cls)
We hit a timeout.
static const struct GNUNET_CONFIGURATION_Handle * cfg
Global handle of the configuration.
static void cleanup_task(void *cls)
Stop monitoring request and start shutdown.
static int ret
Global status value.
static char * query_key
The key to be monitored.
static void get_callback(void *cls, enum GNUNET_DHT_RouteOption options, enum GNUNET_BLOCK_Type type, uint32_t hop_count, uint32_t desired_replication_level, const struct GNUNET_HashCode *key)
Callback called on each GET request going through the DHT.
static unsigned int block_type
The type of the query.
static void get_resp_callback(void *cls, enum GNUNET_BLOCK_Type type, const struct GNUNET_PeerIdentity *trunc_peer, const struct GNUNET_DHT_PathElement *get_path, unsigned int get_path_length, const struct GNUNET_DHT_PathElement *put_path, unsigned int put_path_length, struct GNUNET_TIME_Absolute exp, const struct GNUNET_HashCode *key, const void *data, size_t size)
Callback called on each GET reply going through the DHT.
@ GNUNET_BLOCK_TYPE_ANY
Identifier for any block.
struct GNUNET_DHT_Handle * GNUNET_DHT_connect(const struct GNUNET_CONFIGURATION_Handle *cfg, unsigned int ht_len)
Initialize the connection with the DHT service.
Definition: dht_api.c:1030
struct GNUNET_DHT_MonitorHandle * GNUNET_DHT_monitor_start(struct GNUNET_DHT_Handle *handle, enum GNUNET_BLOCK_Type type, const struct GNUNET_HashCode *key, GNUNET_DHT_MonitorGetCB get_cb, GNUNET_DHT_MonitorGetRespCB get_resp_cb, GNUNET_DHT_MonitorPutCB put_cb, void *cb_cls)
Start monitoring the local DHT service.
Definition: dht_api.c:1266
void GNUNET_CRYPTO_hash(const void *block, size_t size, struct GNUNET_HashCode *ret)
Compute hash of a given block.
Definition: crypto_hash.c:41
#define GNUNET_CRYPTO_hash_from_string(enc, result)
Convert ASCII encoding back to struct GNUNET_HashCode
@ GNUNET_OK
@ GNUNET_NO
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:1339
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_delayed(struct GNUNET_TIME_Relative delay, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified delay.
Definition: scheduler.c:1277
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:579
#define _(String)
GNU gettext support macro.
Definition: platform.h:179
A 512-bit hashcode.

References _, block_type, cfg, cleanup_task(), dht_handle, get_callback(), get_resp_callback(), GNUNET_BLOCK_TYPE_ANY, GNUNET_BLOCK_TYPE_TEST, GNUNET_CRYPTO_hash(), GNUNET_CRYPTO_hash_from_string, GNUNET_DHT_connect(), GNUNET_DHT_monitor_start(), GNUNET_NO, GNUNET_OK, GNUNET_SCHEDULER_add_delayed(), GNUNET_SCHEDULER_add_shutdown(), GNUNET_STRINGS_relative_time_to_string(), key, monitor_handle, put_callback(), query_key, ret, timeout_request, timeout_task(), tt, and verbose.

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 
)

Entry point for gnunet-dht-monitor.

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

Definition at line 296 of file gnunet-dht-monitor.c.

297{
300 "key",
301 "KEY",
302 gettext_noop ("the query key"),
303 &query_key),
304
306 "type",
307 "TYPE",
308 gettext_noop ("the type of data to look for"),
309 &block_type),
310
312 'T',
313 "timeout",
314 "TIMEOUT",
315 gettext_noop ("how long should the monitor command run"),
317
319 "verbose",
321 "be verbose (print progress information)"),
322 &verbose),
323
325 };
326
327
328 return (GNUNET_OK ==
330 argc,
331 argv,
332 "gnunet-dht-monitor",
334 "Prints all packets that go through the DHT."),
335 options,
336 &run,
337 NULL))
338 ? ret
339 : 1;
340}
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 *c)
Main function that will be run by the scheduler.
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_relative_time(char shortName, const char *name, const char *argumentHelp, const char *description, struct GNUNET_TIME_Relative *val)
Allow user to specify a struct GNUNET_TIME_Relative (using human-readable "fancy" time).
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.
const struct GNUNET_OS_ProjectData * GNUNET_OS_project_data_gnunet(void)
Return default project data used by 'libgnunetutil' for GNUnet.
enum GNUNET_GenericReturnValue GNUNET_PROGRAM_run(const struct GNUNET_OS_ProjectData *pd, 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:407
Definition of a command line option.

References block_type, gettext_noop, GNUNET_GETOPT_OPTION_END, GNUNET_GETOPT_option_flag(), GNUNET_GETOPT_option_relative_time(), GNUNET_GETOPT_option_string(), GNUNET_GETOPT_option_uint(), GNUNET_OK, GNUNET_OS_project_data_gnunet(), GNUNET_PROGRAM_run(), options, query_key, ret, run(), timeout_request, and verbose.

Here is the call graph for this function:

Variable Documentation

◆ block_type

unsigned int block_type
static

The type of the query.

Definition at line 32 of file gnunet-dht-monitor.c.

Referenced by GDS_helper_make_put_message(), main(), and run().

◆ query_key

char* query_key
static

The key to be monitored.

Definition at line 37 of file gnunet-dht-monitor.c.

Referenced by main(), and run().

◆ timeout_request

struct GNUNET_TIME_Relative timeout_request = { 60000 }
static

User supplied timeout value (in seconds)

Definition at line 42 of file gnunet-dht-monitor.c.

Referenced by main(), and run().

◆ verbose

int verbose
static

Be verbose.

Definition at line 47 of file gnunet-dht-monitor.c.

Referenced by cleanup_task(), main(), and run().

◆ dht_handle

struct GNUNET_DHT_Handle* dht_handle
static

Handle to the DHT.

Definition at line 52 of file gnunet-dht-monitor.c.

Referenced by cleanup_task(), and run().

◆ cfg

const struct GNUNET_CONFIGURATION_Handle* cfg
static

Global handle of the configuration.

Definition at line 57 of file gnunet-dht-monitor.c.

Referenced by run().

◆ monitor_handle

struct GNUNET_DHT_MonitorHandle* monitor_handle
static

Handle for the get request.

Definition at line 62 of file gnunet-dht-monitor.c.

Referenced by cleanup_task(), and run().

◆ result_count

unsigned int result_count
static

Count of messages received.

Definition at line 67 of file gnunet-dht-monitor.c.

Referenced by get_callback(), get_resp_callback(), and put_callback().

◆ ret

int ret
static

Global status value.

Definition at line 72 of file gnunet-dht-monitor.c.

Referenced by main(), and run().

◆ tt

struct GNUNET_SCHEDULER_Task* tt
static

Task scheduled to handle timeout.

Definition at line 77 of file gnunet-dht-monitor.c.

Referenced by cleanup_task(), run(), and timeout_task().