import a DNS zone for publication in GNS, incremental More...
#include "platform.h"
#include <gnunet_util_lib.h>
#include <gnunet_gnsrecord_lib.h>
#include <gnunet_namestore_service.h>
#include <gnunet_statistics_service.h>
#include <gnunet_identity_service.h>
Go to the source code of this file.
Data Structures | |
struct | Zone |
Some zones may include authoritative records for other zones, such as foo.com.uk or bar.com.fr. More... | |
struct | Record |
Record for the request to be stored by GNS. More... | |
struct | Request |
Request we should make. More... | |
struct | GlueClosure |
Closure for check_for_glue. More... | |
struct | ProcessRecordContext |
Closure for process_record(). More... | |
Macros | |
#define | THRESH 100 |
Maximum number of queries pending at the same time. More... | |
#define | TIME_THRESH 10 |
TIME_THRESH is in usecs. More... | |
#define | MAX_RETRIES 5 |
How often do we retry a query before giving up for good? More... | |
#define | MAX_SERIES 10 |
How many DNS requests do we at most issue in rapid series? More... | |
#define | SERIES_DELAY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MICROSECONDS, 10) |
How long do we wait at least between series of requests? More... | |
#define | NS_BATCH_SIZE 1024 |
How many requests do we request from NAMESTORE in one batch during our initial iteration? More... | |
Typedefs | |
typedef void(* | RecordProcessor) (void *cls, const struct GNUNET_DNSPARSER_Record *rec) |
Callback for for_all_records. More... | |
Functions | |
static void | for_all_records (const struct GNUNET_DNSPARSER_Packet *p, RecordProcessor rp, void *rp_cls) |
Call rp for each record in p, regardless of what response section it is in. More... | |
static const char * | get_label (struct Request *req) |
Return just the label of the hostname in req. More... | |
static void * | build_dns_query (struct Request *req, size_t *raw_size) |
Build DNS query for hostname. More... | |
static void | free_records (struct Request *req) |
Free records associated with req. More... | |
static void | free_request (struct Request *req) |
Free req and data structures reachable from it. More... | |
static void | process_queue (void *cls) |
Process as many requests as possible from the queue. More... | |
static void | insert_sorted (struct Request *req) |
Insert req into DLL sorted by next fetch time. More... | |
static void | add_record (struct Request *req, uint32_t type, struct GNUNET_TIME_Absolute expiration_time, const void *data, size_t data_len) |
Add record to the GNS record set for req. More... | |
static void | check_for_glue (void *cls, const struct GNUNET_DNSPARSER_Record *rec) |
Try to find glue records for a given NS record. More... | |
static void | process_record (void *cls, const struct GNUNET_DNSPARSER_Record *rec) |
We received rec for req. More... | |
static void | store_completed_cb (void *cls, enum GNUNET_ErrorCode ec) |
static void | process_result (void *cls, const struct GNUNET_TUN_DnsHeader *dns, size_t dns_len) |
Function called with the result of a DNS resolution. More... | |
static int | free_request_it (void *cls, const struct GNUNET_HashCode *key, void *value) |
Iterator called during do_shutdown() to free requests in the ns_pending map. More... | |
static void | do_shutdown (void *cls) |
Clean up and terminate the process. More... | |
static void | iterate_zones (void *cls) |
Iterate over all of the zones we care about and see which records we may need to re-fetch when. More... | |
static void | ns_lookup_error_cb (void *cls) |
Function called if GNUNET_NAMESTORE_records_lookup() failed. More... | |
static void | ns_lookup_result_cb (void *cls, const struct GNUNET_IDENTITY_PrivateKey *key, const char *label, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd) |
Process a record that was stored in the namestore. More... | |
static void | queue (const char *hostname) |
Add hostname to the list of requests to be made. More... | |
static int | move_to_queue (void *cls, const struct GNUNET_HashCode *key, void *value) |
We have completed the initial iteration over the namestore's database. More... | |
static void | process_stdin (void *cls) |
Begin processing hostnames from stdin. More... | |
static void | identity_cb (void *cls, struct GNUNET_IDENTITY_Ego *ego, void **ctx, const char *name) |
Method called to inform about the egos of this peer. More... | |
static void | run (void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) |
Process requests from the queue, then if the queue is not empty, try again. More... | |
int | main (int argc, char *const *argv) |
Call with IP address of resolver to query. More... | |
Variables | |
static struct GNUNET_TIME_Relative | minimum_expiration_time |
How long do DNS records have to last at least after being imported? More... | |
static unsigned int | map_size = 1024 |
Command-line argument specifying desired size of the hash map with all of our pending names. More... | |
static struct GNUNET_IDENTITY_Handle * | id |
Handle to the identity service. More... | |
static struct GNUNET_NAMESTORE_Handle * | ns |
Namestore handle. More... | |
static struct GNUNET_STATISTICS_Handle * | stats |
Handle to the statistics service. More... | |
static struct GNUNET_DNSSTUB_Context * | ctx |
Context for DNS resolution. More... | |
static unsigned int | pending |
The number of DNS queries that are outstanding. More... | |
static unsigned int | pending_rs |
The number of NAMESTORE record store operations that are outstanding. More... | |
static unsigned int | lookups |
Number of lookups we performed overall. More... | |
static unsigned int | cached |
Number of records we had cached. More... | |
static unsigned int | rejects |
How many hostnames did we reject (malformed). More... | |
static unsigned int | failures |
Number of lookups that failed. More... | |
static unsigned int | records |
Number of records we found. More... | |
static unsigned int | record_sets |
Number of record sets given to namestore. More... | |
static struct GNUNET_CONTAINER_Heap * | req_heap |
Heap of all requests to perform, sorted by the time we should next do the request (i.e. More... | |
static struct Request * | req_head |
Active requests are kept in a DLL. More... | |
static struct Request * | req_tail |
Active requests are kept in a DLL. More... | |
static struct GNUNET_SCHEDULER_Task * | t |
Main task. More... | |
static struct GNUNET_CONTAINER_MultiHashMap * | ns_pending |
Hash map of requests for which we may still get a response from the namestore. More... | |
static struct GNUNET_NAMESTORE_ZoneIterator * | zone_it |
Current zone iteration handle. More... | |
static struct Zone * | zone_head |
Head of list of zones we are managing. More... | |
static struct Zone * | zone_tail |
Tail of list of zones we are managing. More... | |
static uint64_t | ns_iterator_trigger_next |
After how many more results must ns_lookup_result_cb() ask the namestore for more? More... | |
static uint64_t | total_dns_latency_cnt |
Number of DNS requests counted in latency total. More... | |
static struct GNUNET_TIME_Relative | total_dns_latency |
Sum of DNS latencies observed. More... | |
static uint64_t | total_reg_proc_dns |
Number of records processed (DNS lookup, no NAMESTORE) in total. More... | |
static uint64_t | total_reg_proc_dns_ns |
Number of records processed (DNS lookup, with NAMESTORE) in total. More... | |
static struct GNUNET_TIME_Absolute | start_time_reg_proc |
Start time of the regular processing. More... | |
static struct GNUNET_TIME_Absolute | sleep_time_reg_proc |
Last time we worked before going idle. More... | |
static struct GNUNET_TIME_Relative | idle_time |
Time we slept just waiting for work. More... | |
import a DNS zone for publication in GNS, incremental
Definition in file gnunet-zoneimport.c.
#define THRESH 100 |
Maximum number of queries pending at the same time.
Definition at line 36 of file gnunet-zoneimport.c.
#define TIME_THRESH 10 |
TIME_THRESH is in usecs.
How quickly do we submit fresh queries. Used as an additional throttle.
Definition at line 42 of file gnunet-zoneimport.c.
#define MAX_RETRIES 5 |
How often do we retry a query before giving up for good?
Definition at line 47 of file gnunet-zoneimport.c.
#define MAX_SERIES 10 |
How many DNS requests do we at most issue in rapid series?
Definition at line 52 of file gnunet-zoneimport.c.
#define SERIES_DELAY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MICROSECONDS, 10) |
How long do we wait at least between series of requests?
Definition at line 57 of file gnunet-zoneimport.c.
#define NS_BATCH_SIZE 1024 |
How many requests do we request from NAMESTORE in one batch during our initial iteration?
Definition at line 69 of file gnunet-zoneimport.c.
typedef void(* RecordProcessor) (void *cls, const struct GNUNET_DNSPARSER_Record *rec) |
Callback for for_all_records.
cls | closure |
rec | a DNS record |
Definition at line 366 of file gnunet-zoneimport.c.
|
static |
Call rp for each record in p, regardless of what response section it is in.
p | packet from DNS |
rp | function to call |
rp_cls | closure for rp |
Definition at line 379 of file gnunet-zoneimport.c.
Referenced by process_record(), and process_result().
|
static |
Return just the label of the hostname in req.
req | request to process hostname of |
Definition at line 412 of file gnunet-zoneimport.c.
References GNUNET_break, GNUNET_memcpy, and Request::hostname.
Referenced by ns_lookup_result_cb(), and process_result().
|
static |
Build DNS query for hostname.
hostname | host to build query for | |
[out] | raw_size | number of bytes in the query |
Definition at line 443 of file gnunet-zoneimport.c.
References GNUNET_break, GNUNET_DNSPARSER_pack(), GNUNET_DNSPARSER_TYPE_NS, GNUNET_ERROR_TYPE_ERROR, GNUNET_free, GNUNET_log, GNUNET_memcpy, GNUNET_NO, GNUNET_OK, GNUNET_TUN_DNS_CLASS_INTERNET, Request::hostname, Request::id, p, q, raw, rejects, and ret.
Referenced by process_queue().
|
static |
Free records associated with req.
req | request to free records of |
Definition at line 492 of file gnunet-zoneimport.c.
References GNUNET_CONTAINER_DLL_remove, GNUNET_free, Request::rec_head, and Request::rec_tail.
Referenced by free_request(), ns_lookup_result_cb(), and store_completed_cb().
|
static |
Free req and data structures reachable from it.
req | request to free |
Definition at line 511 of file gnunet-zoneimport.c.
References free_records(), and GNUNET_free.
Referenced by do_shutdown(), free_request_it(), process_queue(), and process_result().
|
static |
Process as many requests as possible from the queue.
cls | NULL |
Definition at line 1171 of file gnunet-zoneimport.c.
References build_dns_query(), ctx, delay, Request::expires, free_request(), GNUNET_assert, GNUNET_break, GNUNET_CONTAINER_DLL_insert, GNUNET_CONTAINER_heap_peek(), GNUNET_CONTAINER_heap_remove_root(), GNUNET_DNSSTUB_resolve(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_ERROR_TYPE_INFO, GNUNET_log, GNUNET_SCHEDULER_add_at(), GNUNET_SCHEDULER_add_delayed(), GNUNET_SCHEDULER_cancel(), GNUNET_STRINGS_absolute_time_to_string(), GNUNET_TIME_absolute_get(), GNUNET_TIME_absolute_get_duration(), GNUNET_TIME_absolute_get_remaining(), GNUNET_TIME_relative_add(), Request::hn, Request::hostname, idle_time, Request::issue_num, lookups, MAX_SERIES, Request::op_start_time, pending, pending_rs, process_result(), Request::qe, raw, GNUNET_TIME_Relative::rel_value_us, req_head, req_heap, req_tail, Request::rs, SERIES_DELAY, sleep_time_reg_proc, t, and THRESH.
Referenced by insert_sorted(), process_result(), and store_completed_cb().
|
static |
Insert req into DLL sorted by next fetch time.
req | request to insert into req_heap |
Definition at line 533 of file gnunet-zoneimport.c.
References GNUNET_TIME_Absolute::abs_value_us, Request::expires, GNUNET_CONTAINER_heap_insert(), GNUNET_CONTAINER_heap_peek(), GNUNET_SCHEDULER_add_at(), GNUNET_SCHEDULER_cancel(), GNUNET_TIME_absolute_get(), Request::hn, process_queue(), req_heap, sleep_time_reg_proc, and t.
Referenced by move_to_queue(), ns_lookup_result_cb(), and process_result().
|
static |
Add record to the GNS record set for req.
req | the request to expand GNS record set for |
type | type to use |
expiration_time | when should rec expire |
data | raw data to store |
data_len | number of bytes in data |
Definition at line 557 of file gnunet-zoneimport.c.
References GNUNET_TIME_Absolute::abs_value_us, GNUNET_GNSRECORD_Data::data, data, GNUNET_GNSRECORD_Data::data_size, GNUNET_GNSRECORD_Data::expiration_time, GNUNET_GNSRECORD_Data::flags, GNUNET_CONTAINER_DLL_insert, GNUNET_GNSRECORD_RF_NONE, GNUNET_malloc, GNUNET_memcpy, Record::grd, Request::rec_head, Request::rec_tail, GNUNET_GNSRECORD_Data::record_type, and type.
Referenced by check_for_glue(), ns_lookup_result_cb(), and process_record().
|
static |
Try to find glue records for a given NS record.
cls | a struct GlueClosure * |
rec | record that may contain glue information |
Definition at line 605 of file gnunet-zoneimport.c.
References add_record(), GNUNET_DNSPARSER_RawRecord::data, GNUNET_DNSPARSER_Record::data, GNUNET_DNSPARSER_RawRecord::data_len, GNUNET_DNSPARSER_Record::expiration_time, GlueClosure::found, GNUNET_break, GNUNET_DNSPARSER_builder_add_name(), GNUNET_DNSPARSER_TYPE_A, GNUNET_DNSPARSER_TYPE_AAAA, GNUNET_DNSPARSER_TYPE_CNAME, GNUNET_GNSRECORD_TYPE_GNS2DNS, GNUNET_OK, GNUNET_TIME_absolute_get_remaining(), GNUNET_TIME_relative_to_absolute(), GNUNET_YES, Request::hostname, GNUNET_DNSPARSER_Record::hostname, minimum_expiration_time, GNUNET_DNSPARSER_Record::name, GlueClosure::ns, GNUNET_DNSPARSER_Record::raw, GNUNET_TIME_Relative::rel_value_us, GlueClosure::req, and GNUNET_DNSPARSER_Record::type.
Referenced by process_record().
|
static |
We received rec for req.
Remember the answer.
cls | a struct ProcessRecordContext |
rec | response |
Definition at line 735 of file gnunet-zoneimport.c.
References add_record(), GNUNET_DNSPARSER_Record::cert, check_for_glue(), GNUNET_DNSPARSER_RawRecord::data, GNUNET_DNSPARSER_Record::data, GNUNET_DNSPARSER_RawRecord::data_len, GNUNET_DNSPARSER_Record::expiration_time, for_all_records(), GlueClosure::found, GNUNET_DNSPARSER_builder_add_cert(), GNUNET_DNSPARSER_builder_add_mx(), GNUNET_DNSPARSER_builder_add_name(), GNUNET_DNSPARSER_builder_add_soa(), GNUNET_DNSPARSER_builder_add_srv(), GNUNET_DNSPARSER_TYPE_A, GNUNET_DNSPARSER_TYPE_AAAA, GNUNET_DNSPARSER_TYPE_CERT, GNUNET_DNSPARSER_TYPE_CNAME, GNUNET_DNSPARSER_TYPE_DNAME, GNUNET_DNSPARSER_TYPE_MX, GNUNET_DNSPARSER_TYPE_NS, GNUNET_DNSPARSER_TYPE_PTR, GNUNET_DNSPARSER_TYPE_SOA, GNUNET_DNSPARSER_TYPE_SRV, GNUNET_DNSPARSER_TYPE_TXT, GNUNET_ERROR_TYPE_DEBUG, GNUNET_ERROR_TYPE_WARNING, GNUNET_GNSRECORD_TYPE_GNS2DNS, GNUNET_log, GNUNET_NO, GNUNET_OK, GNUNET_STATISTICS_update(), GNUNET_STRINGS_absolute_time_to_string(), GNUNET_TIME_absolute_get_remaining(), GNUNET_TIME_relative_to_absolute(), Request::hostname, GNUNET_DNSPARSER_Record::hostname, minimum_expiration_time, GNUNET_DNSPARSER_Record::mx, GNUNET_DNSPARSER_MxRecord::mxhost, GNUNET_DNSPARSER_Record::name, GlueClosure::ns, ProcessRecordContext::p, GNUNET_DNSPARSER_Record::raw, records, GNUNET_TIME_Relative::rel_value_us, GlueClosure::req, ProcessRecordContext::req, GNUNET_DNSPARSER_Record::soa, GNUNET_DNSPARSER_Record::srv, stats, and GNUNET_DNSPARSER_Record::type.
Referenced by process_result().
|
static |
Definition at line 926 of file gnunet-zoneimport.c.
References delta, free_records(), GNUNET_EC_NONE, GNUNET_ERROR_TYPE_DEBUG, GNUNET_ERROR_TYPE_ERROR, GNUNET_ErrorCode_get_hint(), GNUNET_log, GNUNET_NO, GNUNET_SCHEDULER_add_now(), GNUNET_STATISTICS_set(), GNUNET_STRINGS_relative_time_to_string(), GNUNET_TIME_absolute_get(), GNUNET_TIME_absolute_get_duration(), GNUNET_TIME_relative_add(), GNUNET_TIME_relative_divide(), GNUNET_TIME_relative_subtract(), GNUNET_YES, Request::hostname, idle_time, Request::op_start_time, pending_rs, process_queue(), Request::qe, GNUNET_TIME_Relative::rel_value_us, sleep_time_reg_proc, start_time_reg_proc, stats, t, total_reg_proc_dns, and total_reg_proc_dns_ns.
Referenced by process_result().
|
static |
Function called with the result of a DNS resolution.
cls | closure with the struct Request |
dns | dns response, never NULL |
dns_len | number of bytes in dns |
Definition at line 1020 of file gnunet-zoneimport.c.
References GNUNET_TIME_Absolute::abs_value_us, GNUNET_GNSRECORD_Data::expiration_time, Request::expires, failures, for_all_records(), free_request(), get_label(), GNUNET_assert, GNUNET_CONTAINER_DLL_remove, GNUNET_DNSPARSER_free_packet(), GNUNET_DNSPARSER_parse(), GNUNET_DNSSTUB_resolve_cancel(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_ERROR_TYPE_ERROR, GNUNET_ERROR_TYPE_INFO, GNUNET_log, GNUNET_NAMESTORE_records_store(), GNUNET_NO, GNUNET_NZL, GNUNET_SCHEDULER_add_now(), GNUNET_STATISTICS_set(), GNUNET_STATISTICS_update(), GNUNET_TIME_absolute_get(), GNUNET_TIME_absolute_get_duration(), GNUNET_TIME_absolute_min(), GNUNET_TIME_relative_add(), GNUNET_TIME_relative_to_absolute(), GNUNET_TIME_UNIT_DAYS, GNUNET_TIME_UNIT_FOREVER_ABS, Record::grd, Request::hn, Request::hostname, Request::id, GNUNET_TUN_DnsHeader::id, insert_sorted(), Request::issue_num, Zone::key, MAX_RETRIES, Record::next, ns, Request::op_start_time, p, pending, pending_rs, process_queue(), process_record(), Request::qe, rd, rd_count, Request::rec_head, record_sets, GNUNET_TIME_Relative::rel_value_us, ProcessRecordContext::req, req_head, req_tail, Request::rs, sleep_time_reg_proc, stats, store_completed_cb(), t, total_dns_latency, total_dns_latency_cnt, total_reg_proc_dns, and Request::zone.
Referenced by process_queue().
|
static |
Iterator called during do_shutdown() to free requests in the ns_pending map.
cls | NULL |
key | unused |
value | the struct Request to free |
Definition at line 1268 of file gnunet-zoneimport.c.
References free_request(), GNUNET_OK, key, and value.
Referenced by do_shutdown().
|
static |
Clean up and terminate the process.
cls | NULL |
Definition at line 1285 of file gnunet-zoneimport.c.
References ctx, free_request(), free_request_it(), GNUNET_CONTAINER_DLL_remove, GNUNET_CONTAINER_heap_destroy(), GNUNET_CONTAINER_heap_remove_root(), GNUNET_CONTAINER_multihashmap_destroy(), GNUNET_CONTAINER_multihashmap_iterate(), GNUNET_DNSSTUB_stop(), GNUNET_free, GNUNET_IDENTITY_disconnect(), GNUNET_NAMESTORE_cancel(), GNUNET_NAMESTORE_disconnect(), GNUNET_NAMESTORE_zone_iteration_stop(), GNUNET_NO, GNUNET_SCHEDULER_cancel(), GNUNET_STATISTICS_destroy(), Request::hn, ns, ns_pending, Request::qe, req_head, req_heap, req_tail, stats, t, zone, zone_head, zone_it, and zone_tail.
Referenced by run().
|
static |
Iterate over all of the zones we care about and see which records we may need to re-fetch when.
cls | NULL |
Definition at line 1585 of file gnunet-zoneimport.c.
References Zone::domain, GNUNET_assert, GNUNET_CONTAINER_multihashmap_destroy(), GNUNET_CONTAINER_multihashmap_iterate(), GNUNET_CONTAINER_multihashmap_size(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_log, GNUNET_NAMESTORE_zone_iteration_start(), GNUNET_NO, GNUNET_STATISTICS_set(), GNUNET_STATISTICS_update(), GNUNET_TIME_absolute_get(), Zone::key, move_to_queue(), Zone::next, ns, ns_iterator_trigger_next, ns_lookup_error_cb(), ns_lookup_result_cb(), ns_pending, start_time_reg_proc, stats, total_reg_proc_dns, total_reg_proc_dns_ns, zone_head, zone_it, and zone_tail.
Referenced by ns_lookup_error_cb(), and process_stdin().
|
static |
Function called if GNUNET_NAMESTORE_records_lookup() failed.
Just logs an error.
cls | a struct Zone |
Definition at line 1372 of file gnunet-zoneimport.c.
References GNUNET_ERROR_TYPE_INFO, GNUNET_log, iterate_zones(), ns_iterator_trigger_next, zone, and zone_it.
Referenced by iterate_zones().
|
static |
Process a record that was stored in the namestore.
cls | a struct Zone * |
key | private key of the zone |
label | label of the records |
rd_count | number of entries in rd array, 0 if label was deleted |
rd | array of records with data to store |
Definition at line 1395 of file gnunet-zoneimport.c.
References GNUNET_TIME_Absolute::abs_value_us, add_record(), cached, GNUNET_GNSRECORD_Data::data, GNUNET_GNSRECORD_Data::data_size, GNUNET_GNSRECORD_Data::expiration_time, Request::expires, GNUNET_GNSRECORD_Data::flags, free_records(), get_label(), GNUNET_asprintf(), GNUNET_assert, GNUNET_break, GNUNET_CONTAINER_multihashmap_get(), GNUNET_CONTAINER_multihashmap_remove(), GNUNET_CRYPTO_hash(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_ERROR_TYPE_INFO, GNUNET_free, GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION, GNUNET_log, GNUNET_memcmp, GNUNET_NAMESTORE_zone_iterator_next(), GNUNET_NO, GNUNET_OK, GNUNET_STATISTICS_update(), GNUNET_STRINGS_absolute_time_to_string(), GNUNET_TIME_absolute_min(), GNUNET_TIME_relative_to_absolute(), GNUNET_TIME_UNIT_FOREVER_ABS, GNUNET_TIME_UNIT_ZERO_ABS, Request::hostname, insert_sorted(), key, Zone::key, Record::next, NS_BATCH_SIZE, ns_iterator_trigger_next, ns_pending, rd, rd_count, Request::rec_head, GNUNET_GNSRECORD_Data::record_type, GNUNET_TIME_Relative::rel_value_us, stats, zone, Request::zone, and zone_it.
Referenced by iterate_zones().
|
static |
Add hostname to the list of requests to be made.
hostname | name to resolve |
Definition at line 1495 of file gnunet-zoneimport.c.
References GNUNET_CONTAINER_multihashmap_put(), GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY, GNUNET_CRYPTO_hash(), GNUNET_CRYPTO_QUALITY_NONCE, GNUNET_CRYPTO_random_u32(), GNUNET_DNSPARSER_check_name(), GNUNET_ERROR_TYPE_ERROR, GNUNET_ERROR_TYPE_WARNING, GNUNET_free, GNUNET_log, GNUNET_malloc, GNUNET_memcpy, GNUNET_OK, Request::hostname, hostname, Request::id, ns_pending, rejects, zone, Request::zone, and zone_head.
Referenced by process_stdin().
|
static |
We have completed the initial iteration over the namestore's database.
This function is called on each of the remaining records in move_to_queue to queue() them, as we will simply not find existing records for them any longer.
cls | NULL |
key | unused |
value | a struct Request |
Definition at line 1567 of file gnunet-zoneimport.c.
References GNUNET_OK, insert_sorted(), key, and value.
Referenced by iterate_zones().
|
static |
Begin processing hostnames from stdin.
cls | NULL |
Definition at line 1653 of file gnunet-zoneimport.c.
References delta, GNUNET_IDENTITY_disconnect(), GNUNET_NO, GNUNET_STATISTICS_set(), GNUNET_STRINGS_relative_time_to_string(), GNUNET_TIME_absolute_get(), GNUNET_TIME_absolute_get_duration(), GNUNET_YES, iterate_zones(), queue(), stats, and t.
Referenced by identity_cb().
|
static |
Method called to inform about the egos of this peer.
When used with GNUNET_IDENTITY_connect, this function is initially called for all egos and then again whenever a ego's name changes or if it is deleted. At the end of the initial pass over all egos, the function is once called with 'NULL' for ego. That does NOT mean that the callback won't be invoked in the future or that there was an error.
When used with GNUNET_IDENTITY_create or GNUNET_IDENTITY_get, this function is only called ONCE, and 'NULL' being passed in ego does indicate an error (for example because name is taken or no default value is known). If ego is non-NULL and if '*ctx' is set in those callbacks, the value WILL be passed to a subsequent call to the identity callback of GNUNET_IDENTITY_connect (if that one was not NULL).
When an identity is renamed, this function is called with the (known) ego but the NEW name.
When an identity is deleted, this function is called with the (known) ego and "NULL" for the name. In this case, the ego is henceforth invalid (and the ctx should also be cleaned up).
cls | closure |
ego | ego handle, NULL for end of list |
ctx | context for application to store data for this ego (during the lifetime of this process, initially NULL) |
name | name assigned by the user for this ego, NULL if the user just deleted the ego and it must thus no longer be used |
Definition at line 1728 of file gnunet-zoneimport.c.
References ctx, GNUNET_CONTAINER_DLL_insert, GNUNET_ERROR_TYPE_ERROR, GNUNET_IDENTITY_ego_get_private_key(), GNUNET_log, GNUNET_new, GNUNET_SCHEDULER_add_now(), GNUNET_SCHEDULER_shutdown(), GNUNET_strdup, name, process_stdin(), t, zone, zone_head, and zone_tail.
Referenced by run().
|
static |
Process requests from the queue, then if the queue is not empty, try again.
cls | NULL |
args | remaining command-line arguments |
cfgfile | name of the configuration file used (for saving, can be NULL!) |
cfg | configuration |
Definition at line 1771 of file gnunet-zoneimport.c.
References consensus-simulation::args, cfg, ctx, do_shutdown(), GNUNET_CONTAINER_heap_create(), GNUNET_CONTAINER_HEAP_ORDER_MIN, GNUNET_CONTAINER_multihashmap_create(), GNUNET_DNSSTUB_add_dns_ip(), GNUNET_DNSSTUB_start(), GNUNET_IDENTITY_connect(), GNUNET_NAMESTORE_connect(), GNUNET_NO, GNUNET_OK, GNUNET_SCHEDULER_add_shutdown(), GNUNET_SCHEDULER_shutdown(), GNUNET_STATISTICS_create(), identity_cb(), map_size, ns, ns_pending, req_heap, and stats.
Referenced by main().
int main | ( | int | argc, |
char *const * | argv | ||
) |
Call with IP address of resolver to query.
argc | should be 2 |
argv[1] | should contain IP address |
Definition at line 1828 of file gnunet-zoneimport.c.
References cached, failures, gettext_noop, GNUNET_free_nz, GNUNET_GETOPT_OPTION_END, GNUNET_GETOPT_option_relative_time(), GNUNET_GETOPT_option_uint(), GNUNET_OK, GNUNET_PROGRAM_run(), GNUNET_STRINGS_get_utf8_args(), lookups, map_size, minimum_expiration_time, options, pending, pending_rs, record_sets, records, rejects, ret, and run().
|
static |
How long do DNS records have to last at least after being imported?
Definition at line 1 of file gnunet-zoneimport.c.
Referenced by check_for_glue(), main(), and process_record().
|
static |
Command-line argument specifying desired size of the hash map with all of our pending names.
Usually, we use an automatically growing map, but this is only OK up to about a million entries. Above that number, the user must explicitly specify the size at startup.
Definition at line 213 of file gnunet-zoneimport.c.
|
static |
Handle to the identity service.
Definition at line 218 of file gnunet-zoneimport.c.
|
static |
Namestore handle.
Definition at line 223 of file gnunet-zoneimport.c.
Referenced by do_shutdown(), iterate_zones(), process_result(), and run().
|
static |
Handle to the statistics service.
Definition at line 228 of file gnunet-zoneimport.c.
Referenced by do_shutdown(), iterate_zones(), ns_lookup_result_cb(), process_record(), process_result(), process_stdin(), run(), and store_completed_cb().
|
static |
Context for DNS resolution.
Definition at line 233 of file gnunet-zoneimport.c.
Referenced by do_shutdown(), identity_cb(), process_queue(), and run().
|
static |
The number of DNS queries that are outstanding.
Definition at line 238 of file gnunet-zoneimport.c.
Referenced by main(), process_queue(), and process_result().
|
static |
The number of NAMESTORE record store operations that are outstanding.
Definition at line 243 of file gnunet-zoneimport.c.
Referenced by main(), process_queue(), process_result(), and store_completed_cb().
|
static |
Number of lookups we performed overall.
Definition at line 248 of file gnunet-zoneimport.c.
Referenced by main(), and process_queue().
|
static |
Number of records we had cached.
Definition at line 253 of file gnunet-zoneimport.c.
Referenced by main(), and ns_lookup_result_cb().
|
static |
How many hostnames did we reject (malformed).
Definition at line 258 of file gnunet-zoneimport.c.
Referenced by build_dns_query(), main(), and queue().
|
static |
Number of lookups that failed.
Definition at line 263 of file gnunet-zoneimport.c.
Referenced by main(), and process_result().
|
static |
Number of records we found.
Definition at line 268 of file gnunet-zoneimport.c.
Referenced by main(), and process_record().
|
static |
Number of record sets given to namestore.
Definition at line 273 of file gnunet-zoneimport.c.
Referenced by main(), and process_result().
|
static |
Heap of all requests to perform, sorted by the time we should next do the request (i.e.
by expires).
Definition at line 279 of file gnunet-zoneimport.c.
Referenced by do_shutdown(), insert_sorted(), process_queue(), and run().
|
static |
Active requests are kept in a DLL.
Definition at line 284 of file gnunet-zoneimport.c.
Referenced by do_shutdown(), process_queue(), and process_result().
|
static |
Active requests are kept in a DLL.
Definition at line 289 of file gnunet-zoneimport.c.
Referenced by do_shutdown(), process_queue(), and process_result().
|
static |
Main task.
Definition at line 294 of file gnunet-zoneimport.c.
Referenced by do_shutdown(), identity_cb(), insert_sorted(), process_queue(), process_result(), process_stdin(), and store_completed_cb().
|
static |
Hash map of requests for which we may still get a response from the namestore.
Set to NULL once the initial namestore iteration is done.
Definition at line 301 of file gnunet-zoneimport.c.
Referenced by do_shutdown(), iterate_zones(), ns_lookup_result_cb(), queue(), and run().
|
static |
Current zone iteration handle.
Definition at line 306 of file gnunet-zoneimport.c.
Referenced by do_shutdown(), iterate_zones(), ns_lookup_error_cb(), and ns_lookup_result_cb().
|
static |
Head of list of zones we are managing.
Definition at line 311 of file gnunet-zoneimport.c.
Referenced by do_shutdown(), identity_cb(), iterate_zones(), and queue().
|
static |
Tail of list of zones we are managing.
Definition at line 316 of file gnunet-zoneimport.c.
Referenced by do_shutdown(), identity_cb(), and iterate_zones().
|
static |
After how many more results must ns_lookup_result_cb() ask the namestore for more?
Definition at line 322 of file gnunet-zoneimport.c.
Referenced by iterate_zones(), ns_lookup_error_cb(), and ns_lookup_result_cb().
|
static |
Number of DNS requests counted in latency total.
Definition at line 327 of file gnunet-zoneimport.c.
Referenced by process_result().
|
static |
Sum of DNS latencies observed.
Definition at line 327 of file gnunet-zoneimport.c.
Referenced by process_result().
|
static |
Number of records processed (DNS lookup, no NAMESTORE) in total.
Definition at line 337 of file gnunet-zoneimport.c.
Referenced by iterate_zones(), process_result(), and store_completed_cb().
|
static |
Number of records processed (DNS lookup, with NAMESTORE) in total.
Definition at line 342 of file gnunet-zoneimport.c.
Referenced by iterate_zones(), and store_completed_cb().
|
static |
Start time of the regular processing.
Definition at line 342 of file gnunet-zoneimport.c.
Referenced by iterate_zones(), and store_completed_cb().
|
static |
Last time we worked before going idle.
Definition at line 342 of file gnunet-zoneimport.c.
Referenced by insert_sorted(), process_queue(), process_result(), and store_completed_cb().
|
static |
Time we slept just waiting for work.
Definition at line 342 of file gnunet-zoneimport.c.
Referenced by process_queue(), and store_completed_cb().