![]() |
GNUnet
0.11.x
|
#include "platform.h"
#include <gnunet_util_lib.h>
#include <gnunet_dnsstub_lib.h>
#include <gnunet_dnsparser_lib.h>
Go to the source code of this file.
Data Structures | |
struct | Request |
Request we should make. More... | |
Macros | |
#define | THRESH 20 |
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... | |
Functions | |
static void | process_record (struct Request *req, struct GNUNET_DNSPARSER_Record *rec) |
We received rec for req. More... | |
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 | submit_req (struct Request *req) |
Submit a request to DNS unless we need to slow down because we are at the rate limit. More... | |
static void | process_queue (void *cls) |
Process as many requests as possible from the queue. More... | |
static void | do_shutdown (void *cls) |
Clean up and terminate the process. More... | |
static void | run (void *cls) |
Process requests from the queue, then if the queue is not empty, try again. More... | |
static void | queue (const char *hostname) |
Add hostname to the list of requests to be made. More... | |
int | main (int argc, char **argv) |
Call with IP address of resolver to query. More... | |
Variables | |
static struct GNUNET_DNSSTUB_Context * | ctx |
Context for DNS resolution. More... | |
static unsigned int | pending |
The number of queries that are outstanding. More... | |
static unsigned int | lookups |
Number of lookups we performed overall. More... | |
static unsigned int | failures |
Number of lookups that failed. More... | |
static unsigned int | records |
Number of records we found. More... | |
static struct Request * | req_head |
Head of DLL of all requests to perform. More... | |
static struct Request * | req_tail |
Tail of DLL of all requests to perform. More... | |
static struct GNUNET_SCHEDULER_Task * | t |
Main task. More... | |
#define THRESH 20 |
Maximum number of queries pending at the same time.
Definition at line 126 of file gnunet-zonewalk.c.
Referenced by submit_req().
#define TIME_THRESH 10 |
TIME_THRESH is in usecs.
How quickly do we submit fresh queries. Used as an additional throttle.
Definition at line 132 of file gnunet-zonewalk.c.
Referenced by submit_req().
#define MAX_RETRIES 5 |
How often do we retry a query before giving up for good?
Definition at line 137 of file gnunet-zonewalk.c.
Referenced by process_result().
|
static |
We received rec for req.
Remember the answer.
req | request |
rec | response |
Definition at line 147 of file gnunet-zonewalk.c.
References buf, GNUNET_DNSPARSER_RawRecord::data, GNUNET_DNSPARSER_Record::data, GNUNET_DNSPARSER_RawRecord::data_len, GNUNET_DNSPARSER_SoaRecord::expire, GNUNET_DNSPARSER_TYPE_A, GNUNET_DNSPARSER_TYPE_AAAA, GNUNET_DNSPARSER_TYPE_AFSDB, GNUNET_DNSPARSER_TYPE_APL, GNUNET_DNSPARSER_TYPE_CDNSKEY, GNUNET_DNSPARSER_TYPE_CDS, GNUNET_DNSPARSER_TYPE_CERT, GNUNET_DNSPARSER_TYPE_CNAME, GNUNET_DNSPARSER_TYPE_DHCID, GNUNET_DNSPARSER_TYPE_DNAME, GNUNET_DNSPARSER_TYPE_DNSKEY, GNUNET_DNSPARSER_TYPE_DS, GNUNET_DNSPARSER_TYPE_HIP, GNUNET_DNSPARSER_TYPE_IPSECKEY, GNUNET_DNSPARSER_TYPE_KEY, GNUNET_DNSPARSER_TYPE_KX, GNUNET_DNSPARSER_TYPE_LOC, GNUNET_DNSPARSER_TYPE_MX, GNUNET_DNSPARSER_TYPE_NAPTR, GNUNET_DNSPARSER_TYPE_NS, GNUNET_DNSPARSER_TYPE_NSEC, GNUNET_DNSPARSER_TYPE_NSEC3, GNUNET_DNSPARSER_TYPE_NSEC3PARAM, GNUNET_DNSPARSER_TYPE_OPENPGPKEY, GNUNET_DNSPARSER_TYPE_PTR, GNUNET_DNSPARSER_TYPE_RP, GNUNET_DNSPARSER_TYPE_RRSIG, GNUNET_DNSPARSER_TYPE_SIG, GNUNET_DNSPARSER_TYPE_SOA, GNUNET_DNSPARSER_TYPE_SRV, GNUNET_DNSPARSER_TYPE_SSHFP, GNUNET_DNSPARSER_TYPE_TA, GNUNET_DNSPARSER_TYPE_TKEY, GNUNET_DNSPARSER_TYPE_TLSA, GNUNET_DNSPARSER_TYPE_TSIG, GNUNET_DNSPARSER_TYPE_TXT, GNUNET_DNSPARSER_TYPE_URI, GNUNET_free, GNUNET_STRINGS_data_to_string_alloc(), Request::hostname, GNUNET_DNSPARSER_Record::hostname, GNUNET_DNSPARSER_SoaRecord::minimum_ttl, GNUNET_DNSPARSER_SoaRecord::mname, GNUNET_DNSPARSER_Record::mx, GNUNET_DNSPARSER_MxRecord::mxhost, GNUNET_DNSPARSER_SrvRecord::port, GNUNET_DNSPARSER_MxRecord::preference, GNUNET_DNSPARSER_SrvRecord::priority, GNUNET_DNSPARSER_Record::raw, records, GNUNET_DNSPARSER_SoaRecord::refresh, GNUNET_DNSPARSER_SoaRecord::retry, GNUNET_DNSPARSER_SoaRecord::rname, GNUNET_DNSPARSER_SoaRecord::serial, GNUNET_DNSPARSER_Record::soa, GNUNET_DNSPARSER_Record::srv, GNUNET_DNSPARSER_SrvRecord::target, GNUNET_DNSPARSER_Record::type, and GNUNET_DNSPARSER_SrvRecord::weight.
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 307 of file gnunet-zonewalk.c.
References GNUNET_DNSPARSER_Packet::additional_records, GNUNET_DNSPARSER_Packet::answers, GNUNET_DNSPARSER_Packet::authority_records, failures, GNUNET_CONTAINER_DLL_insert_tail, GNUNET_CONTAINER_DLL_remove, GNUNET_DNSPARSER_free_packet(), GNUNET_DNSPARSER_parse(), GNUNET_DNSSTUB_resolve_cancel(), GNUNET_ERROR_TYPE_ERROR, GNUNET_free, GNUNET_log, Request::hostname, Request::id, GNUNET_TUN_DnsHeader::id, Request::issue_num, MAX_RETRIES, GNUNET_DNSPARSER_Packet::num_additional_records, GNUNET_DNSPARSER_Packet::num_answers, GNUNET_DNSPARSER_Packet::num_authority_records, p, pending, process_record(), Request::raw, and Request::rs.
Referenced by submit_req().
|
static |
Submit a request to DNS unless we need to slow down because we are at the rate limit.
req | request to submit |
Definition at line 404 of file gnunet-zonewalk.c.
References GNUNET_assert, GNUNET_DNSSTUB_resolve(), GNUNET_NO, GNUNET_OK, GNUNET_SYSERR, Request::issue_num, lookups, pending, process_result(), Request::raw, Request::raw_len, Request::rs, THRESH, Request::time, and TIME_THRESH.
Referenced by process_queue().
|
static |
Process as many requests as possible from the queue.
cls | NULL |
Definition at line 439 of file gnunet-zonewalk.c.
References GNUNET_SCHEDULER_add_delayed(), GNUNET_SCHEDULER_shutdown(), GNUNET_SYSERR, GNUNET_TIME_UNIT_MILLISECONDS, Request::next, and submit_req().
Referenced by run().
|
static |
Clean up and terminate the process.
cls | NULL |
Definition at line 465 of file gnunet-zonewalk.c.
References GNUNET_DNSSTUB_stop(), and GNUNET_SCHEDULER_cancel().
Referenced by run().
|
static |
Process requests from the queue, then if the queue is not empty, try again.
cls | NULL |
Definition at line 485 of file gnunet-zonewalk.c.
References do_shutdown(), GNUNET_SCHEDULER_add_now(), GNUNET_SCHEDULER_add_shutdown(), and process_queue().
Referenced by main().
|
static |
Add hostname to the list of requests to be made.
hostname | name to resolve |
Definition at line 502 of file gnunet-zonewalk.c.
References GNUNET_DNSPARSER_Query::dns_traffic_class, GNUNET_CONTAINER_DLL_insert_tail, GNUNET_CRYPTO_QUALITY_NONCE, GNUNET_CRYPTO_random_u32(), GNUNET_DNSPARSER_check_name(), GNUNET_DNSPARSER_pack(), GNUNET_DNSPARSER_TYPE_NS, GNUNET_ERROR_TYPE_ERROR, GNUNET_free, GNUNET_log, GNUNET_new, GNUNET_NO, GNUNET_OK, GNUNET_TUN_DNS_CLASS_INTERNET, Request::hostname, Request::id, GNUNET_DNSPARSER_Packet::id, GNUNET_DNSPARSER_Query::name, GNUNET_DNSPARSER_Packet::num_queries, q, GNUNET_DNSPARSER_Packet::queries, Request::raw, Request::raw_len, ret, and GNUNET_DNSPARSER_Query::type.
Referenced by check_vl_transmission(), core_read_finished_cb(), free_pending_acknowledgement(), get_audiobin(), get_queue_delete_it(), handle_add_queue_message(), handle_del_queue_message(), handle_send_message_ack(), handshake_ack_monotime_cb(), handshake_ack_monotime_store_cb(), handshake_monotime_cb(), handshake_monotime_store_cb(), lookup_queue_it(), main(), mq_cancel(), mq_destroy(), mq_error(), mq_init(), mq_send(), prepare_pending_acknowledgement(), proto_read_kx(), queue_read(), queue_read_kx(), queue_send_msg(), queue_timeout(), queue_write(), rekey_monotime_cb(), rekey_monotime_store_cb(), select_read_cb(), select_write_cb(), setup_queue(), and transmit_on_queue().
int main | ( | int | argc, |
char ** | argv | ||
) |
Call with IP address of resolver to query.
argc | should be 2 |
argv[1] | should contain IP address |
Definition at line 563 of file gnunet-zonewalk.c.
References failures, GNUNET_DNSSTUB_add_dns_ip(), GNUNET_DNSSTUB_start(), GNUNET_OK, GNUNET_SCHEDULER_run(), Request::hn, lookups, pending, queue(), records, and run().
|
static |
Context for DNS resolution.
Definition at line 86 of file gnunet-zonewalk.c.
Referenced by add_address_to_hello(), add_address_to_uri(), add_plugin(), cadet_connect_adapter(), cadet_connect_cb(), cadet_test_run(), cancel_get(), check_connection_quality(), check_edge(), checkvec(), core_env_sent_cb(), create_peer_ctx(), curl_download_cb(), datacache_get_iterator(), debugctx(), delayed_put(), derive_aes_key(), derive_auth_key(), derive_iv(), derive_pong_iv(), dfa_add_multi_strides_helper(), dht_connect_cb(), dht_connected(), dht_get_string_accept_handler(), dht_get_string_handler(), dht_test_run(), find_best_address_it(), get_iter(), get_peer_ctx(), GNUNET_BLOCK_context_create(), GNUNET_CADET_TEST_ruN(), GNUNET_CRYPTO_ecdsa_private_key_derive(), GNUNET_CRYPTO_ecdsa_public_key_derive(), GNUNET_CRYPTO_hkdf_v(), GNUNET_DHT_TEST_run(), GNUNET_SET_element_hash(), GNUNET_SETI_element_hash(), GNUNET_SETU_element_hash(), GNUNET_SIGNAL_raise(), handle_raw_message(), iterate_channels_cb(), new_regex_ctx(), op_get_element_iterator(), output_vectors(), regex_edge_iterator(), REGEX_INTERNAL_search(), regex_result_iterator(), REGEX_TEST_automaton_save_graph_step(), REGEX_TEST_combine(), remove_by_unique_id(), service_started(), start_profiling(), t_ax_decrypt_and_validate(), t_ax_encrypt(), t_ax_hmac_hash(), t_hmac(), t_hmac_derive_key(), tcp_send(), tmain(), and try_send_tcp().
|
static |
The number of queries that are outstanding.
Definition at line 91 of file gnunet-zonewalk.c.
Referenced by end(), GNUNET_NETWORK_socket_recvfrom_amount(), main(), process_result(), and submit_req().
|
static |
Number of lookups we performed overall.
Definition at line 96 of file gnunet-zonewalk.c.
Referenced by main(), and submit_req().
|
static |
Number of lookups that failed.
Definition at line 101 of file gnunet-zonewalk.c.
Referenced by main(), and process_result().
|
static |
Number of records we found.
Definition at line 106 of file gnunet-zonewalk.c.
Referenced by GNUNET_GNSRECORD_JSON_from_gnsrecord(), main(), and process_record().
|
static |
Head of DLL of all requests to perform.
Definition at line 111 of file gnunet-zonewalk.c.
|
static |
Tail of DLL of all requests to perform.
Definition at line 116 of file gnunet-zonewalk.c.
|
static |
Main task.
Definition at line 121 of file gnunet-zonewalk.c.
Referenced by add_address_to_uri(), add_without_sets(), automaton_create_proofs(), automaton_destroy_state(), automaton_merge_states(), automaton_state_traverse(), compute_scalar_product(), consider_path_cb(), construct_task_graph(), destroy_tunnels_now(), dfa_add_multi_strides_helper(), dfa_compress_paths(), dfa_compress_paths_helper(), dfa_move(), dfa_remove_dead_states(), extract_abs_time(), find_peer_context(), GCCH_channel_incoming_new(), GCT_add_inbound_connection(), GCT_create_tunnel(), GCT_handle_kx(), GCT_handle_kx_auth(), GCT_send(), get_all_tunnels_iterator(), get_next_free_ctn(), GNUNET_CRYPTO_hkdf_v(), GNUNET_DISK_file_seek(), GNUNET_log_setup(), GNUNET_SCHEDULER_add_at_with_priority(), GNUNET_SCHEDULER_add_now(), GNUNET_SCHEDULER_add_now_with_lifeness(), GNUNET_SCHEDULER_add_select(), GNUNET_SCHEDULER_add_shutdown(), GNUNET_SCHEDULER_add_with_reason_and_priority(), GNUNET_SERVICE_client_drop(), GNUNET_STRINGS_fancy_time_to_absolute(), GNUNET_TIME_get_current_year(), GNUNET_TIME_time_to_year(), GNUNET_TRANSPORT_TESTING_done(), GNUNET_TRANSPORT_TESTING_get_test_plugin_name(), handle_connection_create(), handle_p2p_estimate(), helper_read(), helper_write(), iterate_initial_edge(), mark_connection_unready(), parse_definitions(), parse_pattern(), progress_cb(), put_task(), REGEX_INTERNAL_dfa_add_multi_strides(), restore_fair(), retry_kx(), rsa_gcd_validate(), scc_tarjan_strongconnect(), send_create(), shutdown_if_no_lifeness(), state_add_transition(), state_get_edges(), and vec_for().