GNUnet  0.20.0
gnunet-dht-put.c File Reference

search for data in DHT More...

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

Go to the source code of this file.


static void shutdown_task (void *cls)
static void message_sent_cont (void *cls)
 Signature of the main function of a task. 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-put. More...


static unsigned int query_type
 The type of the query. More...
struct GNUNET_HashCode key
 The key used in the DHT. More...
static char * query_key
 The key for the query. More...
static struct GNUNET_TIME_Relative expiration
 User supplied expiration value. More...
static unsigned int replication = 5
 Desired replication level. More...
static unsigned int verbose
 Be verbose. More...
static int demultixplex_everywhere
static int record_route
static struct GNUNET_DHT_Handledht_handle
 Handle to the DHT. More...
static const struct GNUNET_CONFIGURATION_Handlecfg
 Global handle of the configuration. More...
static int ret
 Global status value. More...
static char * data
 The data to insert into the dht. More...

Detailed Description

search for data in DHT

Christian Grothoff
Nathan Evans

Definition in file gnunet-dht-put.c.

Function Documentation

◆ shutdown_task()

static void shutdown_task ( void *  cls)

Definition at line 92 of file gnunet-dht-put.c.

93 {
94  if (NULL != dht_handle)
95  {
97  dht_handle = NULL;
98  }
99 }
static struct GNUNET_DHT_Handle * dht_handle
Handle to the DHT.
void GNUNET_DHT_disconnect(struct GNUNET_DHT_Handle *handle)
Shutdown connection with the DHT service.
Definition: dht_api.c:1062

References dht_handle, and GNUNET_DHT_disconnect().

Referenced by message_sent_cont().

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

◆ message_sent_cont()

static void message_sent_cont ( void *  cls)

Signature of the main function of a task.


Definition at line 108 of file gnunet-dht-put.c.

109 {
111 }
static void shutdown_task(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:1299

References GNUNET_SCHEDULER_add_now(), and shutdown_task().

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 

Main function that will be run by the scheduler.

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

Definition at line 123 of file gnunet-dht-put.c.

127 {
128  enum GNUNET_DHT_RouteOption ro;
130  cfg = c;
131  if ((NULL == query_key) || (NULL == data))
132  {
133  fprintf (stderr, "%s", _ ("Must provide KEY and DATA for DHT put!\n"));
134  ret = 1;
135  return;
136  }
138  if (NULL == (dht_handle = GNUNET_DHT_connect (cfg, 1)))
139  {
140  fprintf (stderr, _ ("Could not connect to DHT service!\n"));
141  ret = 1;
142  return;
143  }
144  if (GNUNET_BLOCK_TYPE_ANY == query_type) /* Type of data not set */
149  if (verbose)
150  fprintf (stderr,
151  _ ("Issuing put request for `%s' with data `%s'!\n"),
152  query_key,
153  data);
157  if (record_route)
160  &key,
161  replication,
162  ro,
163  query_type,
164  strlen (data),
165  data,
168  NULL);
169 }
Identifier for any block.
Block for testing.
static unsigned int query_type
The type of the query.
static unsigned int verbose
Be verbose.
static const struct GNUNET_CONFIGURATION_Handle * cfg
Global handle of the configuration.
static void message_sent_cont(void *cls)
Signature of the main function of a task.
static int ret
Global status value.
static char * query_key
The key for the query.
static char * data
The data to insert into the dht.
static unsigned int replication
Desired replication level.
static int demultixplex_everywhere
struct GNUNET_HashCode key
The key used in the DHT.
static int record_route
static struct GNUNET_TIME_Relative expiration
User supplied expiration value.
Options for routing.
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:1039
struct GNUNET_DHT_PutHandle * GNUNET_DHT_put(struct GNUNET_DHT_Handle *handle, const struct GNUNET_HashCode *key, uint32_t desired_replication_level, enum GNUNET_DHT_RouteOption options, enum GNUNET_BLOCK_Type type, size_t size, const void *data, struct GNUNET_TIME_Absolute exp, GNUNET_SCHEDULER_TaskCallback cont, void *cont_cls)
Perform a PUT operation storing data in the DHT.
Definition: dht_api.c:1090
We should keep track of the route that the message took in the P2P network.
Each peer along the way should process the request (otherwise only peers locally closest to the key w...
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
struct GNUNET_TIME_Absolute GNUNET_TIME_relative_to_absolute(struct GNUNET_TIME_Relative rel)
Convert relative time to an absolute time in the future.
Definition: time.c:316
#define _(String)
GNU gettext support macro.
Definition: platform.h:178

References _, cfg, data, demultixplex_everywhere, dht_handle, expiration, GNUNET_BLOCK_TYPE_ANY, GNUNET_BLOCK_TYPE_TEST, GNUNET_CRYPTO_hash(), GNUNET_DHT_connect(), GNUNET_DHT_put(), GNUNET_DHT_RO_DEMULTIPLEX_EVERYWHERE, GNUNET_DHT_RO_NONE, GNUNET_DHT_RO_RECORD_ROUTE, GNUNET_TIME_relative_to_absolute(), key, message_sent_cont(), query_key, query_type, record_route, replication, ret, 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-put.

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

Definition at line 180 of file gnunet-dht-put.c.

181 {
182  char *u8_argv = NULL;
185  'd',
186  "data",
187  "DATA",
188  gettext_noop (
189  "the data to insert under the key"),
190  &data),
192  'e',
193  "expiration",
195  gettext_noop ("how long to store this entry in the dht (in seconds)"),
196  &expiration),
198  'k',
199  "key",
200  "KEY",
201  gettext_noop ("the query key"),
202  &query_key),
204  'x',
205  "demultiplex",
206  gettext_noop (
207  "use DHT's demultiplex everywhere option"),
210  'r',
211  "replication",
212  "LEVEL",
213  gettext_noop ("how many replicas to create"),
214  &replication),
216  'R',
217  "record",
218  gettext_noop ("use DHT's record route option"),
219  &record_route),
221  't',
222  "type",
223  "TYPE",
224  gettext_noop ("the type to insert data as"),
225  &query_type),
228  };
231  if (GNUNET_OK !=
232  GNUNET_STRINGS_get_utf8_args (argc, argv,
233  &argc, &argv))
234  return 2;
236  return (GNUNET_OK ==
238  argc,
239  argv,
240  "gnunet-dht-put",
241  gettext_noop (
242  "Issue a PUT request to the GNUnet DHT insert DATA under KEY."),
243  options,
244  &run,
245  NULL))
246  ? ret
247  : 1;
248  // This is ugly, but meh. The GNUNET_STRINGS_get_utf8_args allows us to do this.
249  u8_argv = (char*) argv;
250  GNUNET_free (u8_argv);
251 }
Definition: 002.c:13
struct GNUNET_GETOPT_CommandLineOption options[]
Definition: 002.c:5
#define gettext_noop(String)
Definition: gettext.h:70
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_verbose(unsigned int *level)
Define the '-V' verbosity option.
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.
#define GNUNET_free(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:1222
One hour.
Definition of a command line option.

References data, demultixplex_everywhere, expiration, gettext_noop, GNUNET_free, GNUNET_GETOPT_OPTION_END, GNUNET_GETOPT_option_flag(), GNUNET_GETOPT_option_relative_time(), GNUNET_GETOPT_option_string(), GNUNET_GETOPT_option_uint(), GNUNET_GETOPT_option_verbose(), GNUNET_OK, GNUNET_PROGRAM_run(), GNUNET_STRINGS_get_utf8_args(), GNUNET_TIME_UNIT_HOURS, options, query_key, query_type, record_route, replication, ret, run(), and verbose.

Here is the call graph for this function:

Variable Documentation

◆ query_type

unsigned int query_type

The type of the query.

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

Referenced by main(), and run().

◆ key

struct GNUNET_HashCode key

The key used in the DHT.

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

Referenced by add_file(), add_key_to_bloomfilter(), add_to_meta_counter(), add_to_tc(), allocate_v4_address(), allocate_v6_address(), attr_in_claims_request(), barrier_attached(), block_create2(), build_result_set(), cache_clear_iterator(), call_iterator(), callback_ego_create(), callback_scan_for_rooms(), change_srv_handle_member_id(), channel_destroy_iterator(), check_and_remove_pending_reversal(), check_edge(), check_unique(), clean_request(), client_disconnect_it(), close_files_iter(), close_handle_room(), close_service_room(), close_srv_handle_room(), collector(), con_val_iter(), connect_tunnel(), convert_messenger_key_to_port(), create_contact(), create_handle_member_id(), create_message_invite(), create_message_key(), create_randomized_element_iterator(), create_response(), create_room(), create_srv_room(), create_target(), database_setup(), decode_and_send(), decrementBitCallback(), decrypt_message(), delete_entries(), delete_skipped_key(), derive_ublock_encryption_key(), destroy_it(), dht_get_string_accept_handler(), dht_get_string_handler(), disconnect_all_neighbours(), disconnect_and_free_peer_entry(), dispatch_job(), dispatch_job_monitor(), dns_string_to_value(), do_skip(), dv_decrypt(), dv_hmac(), dv_key_clean(), dv_setup_key_state_from_km(), ecdsa_symmetric_decrypt(), ecdsa_symmetric_encrypt(), ego_callback(), ego_get_all(), ego_get_response(), encrypt_message(), entry_handle_room_at(), entry_service_room(), entry_srv_handle_room(), env_delete_notify(), execute_get(), expire_blocks(), expire_entries(), expired_processor(), find_best_address_it(), find_by_message_uuid(), find_closest(), find_entry(), find_list_handle_by_member(), find_target(), for_matching_monitors(), free_addr_it(), free_all_it(), free_barrier_node_cb(), free_channel_state(), free_ego(), free_entry(), free_host_entry(), free_iterator(), free_peer(), free_pending_ack_cb(), free_preference(), free_reassembly_cb(), free_request_it(), free_service_record(), free_session_helper(), free_tmps(), GDS_CLIENTS_process_get(), GDS_ROUTING_add(), get_any(), get_callback(), get_cb(), get_channel_key_from_ips(), get_context_from_member(), get_destination_key_from_ip(), get_gns_cont(), get_handle_contact(), get_handle_member_session(), get_iv_key(), get_lt_delete_it(), get_peer_delete_it(), get_redirect_state(), get_resp_callback(), get_service_room(), get_srv_handle_member_id(), get_target_peers(), get_typed(), get_url_parameter_copy(), get_value(), GNR_derive_block_aes_key(), GNR_derive_block_xsalsa_key(), GNUNET_CONTAINER_multihashmap32_contains(), GNUNET_CONTAINER_multihashmap32_get(), GNUNET_CONTAINER_multihashmap32_get_multiple(), GNUNET_CONTAINER_multihashmap_get(), GNUNET_CONTAINER_multihashmap_remove_all(), GNUNET_CONTAINER_multipeermap_contains(), GNUNET_CONTAINER_multipeermap_get(), GNUNET_CONTAINER_multipeermap_get_multiple(), GNUNET_CONTAINER_multipeermap_put(), GNUNET_CONTAINER_multishortmap_contains(), GNUNET_CONTAINER_multishortmap_contains_value(), GNUNET_CONTAINER_multishortmap_get(), GNUNET_CONTAINER_multishortmap_get_multiple(), GNUNET_CONTAINER_multishortmap_remove(), GNUNET_CONTAINER_multishortmap_remove_all(), GNUNET_CONTAINER_multiuuidmap_contains(), GNUNET_CONTAINER_multiuuidmap_get(), GNUNET_CONTAINER_multiuuidmap_get_multiple(), GNUNET_CRYPTO_ecc_dlog(), GNUNET_CRYPTO_ecc_dlog_prepare(), GNUNET_CRYPTO_hkdf(), GNUNET_CRYPTO_hmac(), GNUNET_CRYPTO_hmac_derive_key(), GNUNET_CRYPTO_hmac_derive_key_v(), GNUNET_CRYPTO_hmac_raw(), GNUNET_CRYPTO_rsa_private_key_decode(), GNUNET_CRYPTO_rsa_private_key_dup(), GNUNET_CRYPTO_rsa_private_key_encode(), GNUNET_CRYPTO_rsa_private_key_free(), GNUNET_CRYPTO_rsa_public_key_check(), GNUNET_CRYPTO_rsa_public_key_decode(), GNUNET_CRYPTO_rsa_public_key_dup(), GNUNET_CRYPTO_rsa_public_key_encode(), GNUNET_CRYPTO_rsa_public_key_free(), GNUNET_CRYPTO_rsa_public_key_hash(), GNUNET_CRYPTO_rsa_public_key_len(), GNUNET_CRYPTO_rsa_sign_blinded(), GNUNET_CRYPTO_rsa_sign_fdh(), GNUNET_CRYPTO_symmetric_create_session_key(), GNUNET_DATACACHE_get(), GNUNET_DATACACHE_get_closest(), GNUNET_DATASTORE_get_key(), GNUNET_DATASTORE_put(), GNUNET_DATASTORE_remove(), GNUNET_DHT_get_start(), GNUNET_DHT_monitor_start(), GNUNET_DHT_put(), GNUNET_FS_handle_on_demand_block(), GNUNET_FS_uri_to_key(), GNUNET_IDENTITY_decrypt(), GNUNET_IDENTITY_decrypt_old(), GNUNET_IDENTITY_private_key_from_string(), GNUNET_IDENTITY_private_key_get_length(), GNUNET_IDENTITY_public_key_get_length(), GNUNET_IDENTITY_public_key_to_string(), GNUNET_IDENTITY_read_private_key_from_buffer(), GNUNET_IDENTITY_write_private_key_to_buffer(), GNUNET_MESSENGER_enter_room(), GNUNET_MESSENGER_open_room(), GNUNET_PEERSTORE_iterate(), GNUNET_PEERSTORE_store(), GNUNET_PEERSTORE_watch(), GNUNET_REVOCATION_pow_init(), GNUNET_REVOCATION_query(), GNUNET_TESTBED_barrier_init_(), GNUNET_TESTING_barrier_get_node(), GNUNET_TESTING_get_topo_from_string(), GNUNET_uri_parse_query(), handle_barrier_status(), handle_barrier_wait(), handle_client_insert(), handle_client_redirect_to_ip(), handle_client_redirect_to_service(), handle_datastore_reply(), handle_dht_reply(), handle_dht_response(), handle_dv_box(), handle_member_id(), handle_record(), handle_recv_message(), handle_room_close(), handle_room_entry(), handle_room_open(), handle_send_message(), hash_pkey_and_label(), header_iterator(), heap_plugin_get_closest(), heap_plugin_get_key(), heap_plugin_put(), heap_plugin_remove_key(), ibf_get_indices(), ibf_hashcode_from_key(), ibf_insert(), ibf_insert_into(), ibf_remove(), idx_of(), insert_iterator(), inspect_attrs(), iter_hashcodes(), iterate_copy_history(), iterate_do_cb(), iterate_load_next_session(), iterate_reachables(), iterate_save_entries(), iterate_save_links(), iterate_save_member_session_history_hentries(), iterate_save_messages(), iterate_save_operations(), iterate_save_rooms(), iterate_save_session(), iterate_send_message(), iterate_zones(), iterator(), jwt_parse_attributes(), load_key_from_file(), load_member_session(), lookup_diff(), lookup_rfn(), lookup_set(), lookup_task(), maint_child_death(), make_json(), map_remove_iterator(), message_token(), messenger_string_to_value(), messenger_value_to_string(), migrate_and_drop_keywords(), migrate_and_drop_metadata(), move_to_pending(), move_to_queue(), mq_init(), namestore_get(), neighbour_delete(), neighbours_iterate(), notify_connect(), notify_srv_handle_message(), ns_lookup_result_cb(), on_identity(), opc_free_iterator(), open_handle_room(), open_service_room(), open_srv_handle_room(), open_srv_room(), parse_jwt(), peerinfo_get(), peermap_clear_iterator(), PEERSTORE_create_record_mq_envelope(), peerstore_flat_delete_records(), peerstore_flat_iterate_records(), peerstore_flat_store_record(), PEERSTORE_hash_key(), peerstore_sqlite_delete_records(), peerstore_sqlite_iterate_records(), peerstore_sqlite_store_record(), pending_reversal_timeout(), pending_reversals_delete_it(), post_data_iter(), postgres_plugin_del(), postgres_plugin_get_closest(), postgres_plugin_get_key(), postgres_plugin_put(), postgres_plugin_remove_key(), print_edge(), process_dht_put_content(), process_kblock_for_unindex(), process_keys(), process_ksk_result(), process_local_reply(), process_migration_content(), process_result(), process_result_with_request(), process_sks_result(), put_callback(), put_continuation(), quota_processor(), REGEX_BLOCK_check(), REGEX_BLOCK_check_proof(), REGEX_BLOCK_get_key(), regex_edge_iterator(), regex_find_path(), REGEX_INTERNAL_get_first_key(), REGEX_INTERNAL_search(), regex_iterator(), regex_result_iterator(), reghost_free_iterator(), register_do_cb(), register_hashcode(), remove_all(), remove_continuation(), repl_proc(), return_value(), route_packet(), rsa_sign_mpi(), run(), schedule_current_round(), select_peer(), send_full_element_iterator(), send_srv_handle_message(), send_utilization_data(), setup_cipher(), setup_state_record(), sqlite_plugin_del(), sqlite_plugin_get_closest(), sqlite_plugin_get_key(), sqlite_plugin_get_keys(), sqlite_plugin_put(), sqlite_plugin_remove_key(), start_helper(), store_all_states(), store_and_free_entries(), store_skipped_key(), strata_estimator_insert(), strata_estimator_remove(), t_ax_hmac_hash(), t_hmac(), t_hmac_derive_key(), template_plugin_put(), template_plugin_remove_key(), test_blacklisted(), transmit_item(), try_old_ax_keys(), try_top_down_reconstruction(), update_config_sections(), update_flood_times(), update_iterator(), update_store_ego(), url_iterator(), verify_message(), and zone_to_name().

◆ query_key

char* query_key

The key for the query.

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

Referenced by main(), and run().

◆ expiration

struct GNUNET_TIME_Relative expiration

User supplied expiration value.

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

Referenced by main(), and run().

◆ replication

unsigned int replication = 5

Desired replication level.

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

Referenced by main(), and run().

◆ verbose

unsigned int verbose

Be verbose.

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

Referenced by main(), and run().

◆ demultixplex_everywhere

int demultixplex_everywhere


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

Referenced by main(), and run().

◆ record_route

int record_route


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

Referenced by main(), and run().

◆ dht_handle

struct GNUNET_DHT_Handle* dht_handle

Handle to the DHT.

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

Referenced by run(), and shutdown_task().

◆ cfg

const struct GNUNET_CONFIGURATION_Handle* cfg

Global handle of the configuration.

Definition at line 78 of file gnunet-dht-put.c.

Referenced by run().

◆ ret

int ret

Global status value.

Definition at line 83 of file gnunet-dht-put.c.

Referenced by main(), and run().

◆ data

char* data

The data to insert into the dht.

Definition at line 88 of file gnunet-dht-put.c.

Referenced by main(), and run().