tool to manipulate DNS and VPN services to perform protocol translation (IPvX over GNUnet) More...
#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_dns_service.h"
#include "gnunet_cadet_service.h"
#include "gnunet_dht_service.h"
#include "gnunet_vpn_service.h"
#include "gnunet_statistics_service.h"
#include "gnunet_applications.h"
#include "block_dns.h"
Go to the source code of this file.
Data Structures | |
struct | ReplyContext |
Information tracked per DNS reply that we are processing. More... | |
struct | CadetExit |
Handle to a peer that advertised that it is willing to serve as a DNS exit. More... | |
struct | RequestContext |
State we keep for a request that is going out via CADET. More... | |
struct | DnsResponseMessage |
Message with a DNS response. More... | |
Macros | |
#define | TIMEOUT GNUNET_TIME_UNIT_MINUTES |
After how long do we time out if we could not get an IP from VPN or CADET? More... | |
#define | MAX_DNS_SIZE (8 * 1024) |
How many bytes of payload do we allow at most for a DNS reply? Given that this is pretty much limited to loopback, we can be pretty high (Linux loopback defaults to 16k, most local UDP packets should survive up to 9k (NFS), so 8k should be pretty safe in general). More... | |
#define | MAX_OPEN_TUNNELS 4 |
How many channels do we open at most at the same time? More... | |
Enumerations | |
enum | RequestGroup { ANSWERS = 0 , AUTHORITY_RECORDS = 1 , ADDITIONAL_RECORDS = 2 , END = 3 } |
Which group of DNS records are we currently processing? More... | |
Functions | |
static void | try_open_exit (void) |
We are short on cadet exits, try to open another one. More... | |
static uint32_t | get_channel_weight (struct CadetExit *exit) |
Compute the weight of the given exit. More... | |
static struct CadetExit * | choose_exit () |
Choose a cadet exit for a DNS request. More... | |
static void | finish_request (struct ReplyContext *rc) |
We're done modifying all records in the response. More... | |
static void | submit_request (struct ReplyContext *rc) |
Process the next record of the given request context. More... | |
static void | vpn_allocation_callback (void *cls, int af, const void *address) |
Callback invoked from the VPN service once a redirection is available. More... | |
static void | modify_address (struct ReplyContext *rc, struct GNUNET_DNSPARSER_Record *rec) |
Modify the given DNS record by asking VPN to create a channel to the given address. More... | |
static int | work_test (const struct GNUNET_DNSPARSER_Record *ra, unsigned int ra_len) |
Test if any of the given records need protocol-translation work. More... | |
static void | dns_post_request_handler (void *cls, struct GNUNET_DNS_RequestHandle *rh, size_t request_length, const char *request) |
This function is called AFTER we got an IP address for a DNS request. More... | |
static void | timeout_request (void *cls) |
Task run if the time to answer a DNS request via CADET is over. More... | |
static void | dns_pre_request_handler (void *cls, struct GNUNET_DNS_RequestHandle *rh, size_t request_length, const char *request) |
This function is called before the DNS request has been given to a "local" DNS resolver. More... | |
static GNUNET_NETWORK_STRUCT_END int | check_dns_response (void *cls, const struct DnsResponseMessage *msg) |
Process a request via cadet to perform a DNS query. More... | |
static void | handle_dns_response (void *cls, const struct DnsResponseMessage *msg) |
Process a request via cadet to perform a DNS query. More... | |
static void | abort_all_requests (struct CadetExit *exit) |
Abort all pending DNS requests with the given cadet exit. More... | |
static void | cleanup (void *cls) |
Function scheduled as very last function, cleans up after us. More... | |
static void | cadet_channel_end_cb (void *cls, const struct GNUNET_CADET_Channel *channel) |
Function called whenever a channel is destroyed. More... | |
static void | channel_idle_notify_cb (void *cls, const struct GNUNET_CADET_Channel *channel, int window_size) |
Function called whenever a channel has excess capacity. More... | |
static void | handle_dht_result (void *cls, struct GNUNET_TIME_Absolute exp, const struct GNUNET_HashCode *key, 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, enum GNUNET_BLOCK_Type type, size_t size, const void *data) |
Function called whenever we find an advertisement for a DNS exit in the DHT. More... | |
static void | run (void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg_) |
Main function that will be run by the scheduler. More... | |
int | main (int argc, char *const *argv) |
The main function. More... | |
Variables | |
static struct CadetExit * | exit_head |
Head of DLL of cadet exits. More... | |
static struct CadetExit * | exit_tail |
Tail of DLL of cadet exits. More... | |
static const struct GNUNET_CONFIGURATION_Handle * | cfg |
The handle to the configuration used throughout the process. More... | |
static struct GNUNET_VPN_Handle * | vpn_handle |
The handle to the VPN. More... | |
static struct GNUNET_CADET_Handle * | cadet_handle |
The handle to the CADET service. More... | |
static struct GNUNET_STATISTICS_Handle * | stats |
Statistics. More... | |
static struct GNUNET_DNS_Handle * | dns_post_handle |
The handle to DNS post-resolution modifications. More... | |
static struct GNUNET_DNS_Handle * | dns_pre_handle |
The handle to DNS pre-resolution modifications. More... | |
static struct GNUNET_DHT_Handle * | dht |
Handle to access the DHT. More... | |
static struct GNUNET_DHT_GetHandle * | dht_get |
Our DHT GET operation to find DNS exits. More... | |
static int | ipv4_pt |
Are we doing IPv4-pt? More... | |
static int | ipv6_pt |
Are we doing IPv6-pt? More... | |
static int | dns_channel |
Are we channeling DNS queries? More... | |
static unsigned int | dns_exit_available |
Number of DNS exit peers we currently have in the cadet channel. More... | |
tool to manipulate DNS and VPN services to perform protocol translation (IPvX over GNUnet)
Definition in file gnunet-daemon-pt.c.
#define TIMEOUT GNUNET_TIME_UNIT_MINUTES |
After how long do we time out if we could not get an IP from VPN or CADET?
Definition at line 39 of file gnunet-daemon-pt.c.
#define MAX_DNS_SIZE (8 * 1024) |
How many bytes of payload do we allow at most for a DNS reply? Given that this is pretty much limited to loopback, we can be pretty high (Linux loopback defaults to 16k, most local UDP packets should survive up to 9k (NFS), so 8k should be pretty safe in general).
Definition at line 48 of file gnunet-daemon-pt.c.
#define MAX_OPEN_TUNNELS 4 |
How many channels do we open at most at the same time?
Definition at line 53 of file gnunet-daemon-pt.c.
enum RequestGroup |
Which group of DNS records are we currently processing?
Enumerator | |
---|---|
ANSWERS | DNS answers. |
AUTHORITY_RECORDS | DNS authority records. |
ADDITIONAL_RECORDS | DNS additional records. |
END | We're done processing. |
Definition at line 59 of file gnunet-daemon-pt.c.
|
static |
We are short on cadet exits, try to open another one.
Definition at line 1052 of file gnunet-daemon-pt.c.
References CadetExit::cadet_channel, cadet_channel_end_cb(), cadet_handle, channel_idle_notify_cb(), dns_exit_available, exit_head, exit_tail, GNUNET_APPLICATION_PORT_INTERNET_RESOLVER, GNUNET_assert, GNUNET_break, GNUNET_CADET_channel_create(), GNUNET_CONTAINER_DLL_insert, GNUNET_CONTAINER_DLL_remove, GNUNET_CRYPTO_hash(), GNUNET_CRYPTO_QUALITY_WEAK, GNUNET_CRYPTO_random_u32(), GNUNET_ERROR_TYPE_WARNING, GNUNET_log, GNUNET_MESSAGE_TYPE_VPN_DNS_FROM_INTERNET, GNUNET_MQ_handler_end, GNUNET_MQ_hd_var_size, CadetExit::next, CadetExit::peer, and port.
Referenced by cadet_channel_end_cb(), handle_dht_result(), and timeout_request().
|
static |
Compute the weight of the given exit.
The higher the weight, the more likely it will be that the channel will be chosen. A weigt of zero means that we should close the channel as it is so bad, that we should not use it.
exit | exit to calculate the weight for |
Definition at line 319 of file gnunet-daemon-pt.c.
References drop_percent, GNUNET_assert, CadetExit::num_answered, and CadetExit::num_transmitted.
Referenced by choose_exit(), and timeout_request().
|
static |
Choose a cadet exit for a DNS request.
We try to use a channel that is reliable and currently available. All existing channels are given a base weight of 1, plus a score relating to the total number of queries answered in relation to the total number of queries we sent to that channel. That score is doubled if the channel is currently idle.
Definition at line 354 of file gnunet-daemon-pt.c.
References CadetExit::cadet_channel, exit_head, get_channel_weight(), GNUNET_break, GNUNET_CRYPTO_QUALITY_WEAK, GNUNET_CRYPTO_random_u64(), CadetExit::idle, and CadetExit::next.
Referenced by cadet_channel_end_cb(), and dns_pre_request_handler().
|
static |
We're done modifying all records in the response.
Submit the reply and free the resources of the rc.
rc | context to process |
Definition at line 404 of file gnunet-daemon-pt.c.
References _, ReplyContext::dns, gettext_noop, GNUNET_DNS_request_answer(), GNUNET_DNS_request_drop(), GNUNET_DNSPARSER_free_packet(), GNUNET_DNSPARSER_pack(), GNUNET_ERROR_TYPE_ERROR, GNUNET_free, GNUNET_log, GNUNET_NO, GNUNET_STATISTICS_update(), GNUNET_SYSERR, MAX_DNS_SIZE, ReplyContext::rh, and stats.
Referenced by submit_request().
|
static |
Process the next record of the given request context.
When done, submit the reply and free the resources of the rc.
rc | context to process |
Definition at line 555 of file gnunet-daemon-pt.c.
References GNUNET_DNSPARSER_Packet::additional_records, ADDITIONAL_RECORDS, GNUNET_DNSPARSER_Packet::answers, ANSWERS, GNUNET_DNSPARSER_Packet::authority_records, AUTHORITY_RECORDS, ReplyContext::dns, END, finish_request(), GNUNET_assert, GNUNET_DNSPARSER_TYPE_A, GNUNET_DNSPARSER_TYPE_AAAA, ReplyContext::group, ipv4_pt, ipv6_pt, modify_address(), GNUNET_DNSPARSER_Packet::num_additional_records, GNUNET_DNSPARSER_Packet::num_answers, GNUNET_DNSPARSER_Packet::num_authority_records, ReplyContext::offset, and type.
Referenced by dns_post_request_handler(), and vpn_allocation_callback().
|
static |
Callback invoked from the VPN service once a redirection is available.
Provides the IP address that can now be used to reach the requested destination. We substitute the active record and then continue with 'submit_request' to look at the other records.
cls | our struct ReplyContext |
af | address family, AF_INET or AF_INET6; AF_UNSPEC on error; will match 'result_af' from the request |
address | IP address (struct in_addr or struct in_addr6, depending on 'af') that the VPN allocated for the redirection; traffic to this IP will now be redirected to the specified target peer; NULL on error |
Definition at line 461 of file gnunet-daemon-pt.c.
References address, GNUNET_DNSPARSER_RawRecord::data, GNUNET_DNSPARSER_Record::data, ReplyContext::dns, gettext_noop, GNUNET_assert, GNUNET_DNS_request_drop(), GNUNET_DNSPARSER_free_packet(), GNUNET_DNSPARSER_TYPE_A, GNUNET_DNSPARSER_TYPE_AAAA, GNUNET_free, GNUNET_memcpy, GNUNET_NO, GNUNET_STATISTICS_update(), GNUNET_DNSPARSER_Record::raw, ReplyContext::rec, ReplyContext::rh, ReplyContext::rr, stats, submit_request(), and GNUNET_DNSPARSER_Record::type.
Referenced by modify_address().
|
static |
Modify the given DNS record by asking VPN to create a channel to the given address.
When done, continue with submitting other records from the request context ('submit_request' is our continuation).
rc | context to process |
rec | record to modify |
Definition at line 514 of file gnunet-daemon-pt.c.
References GNUNET_DNSPARSER_RawRecord::data, GNUNET_DNSPARSER_Record::data, GNUNET_DNSPARSER_RawRecord::data_len, GNUNET_assert, GNUNET_DNSPARSER_TYPE_A, GNUNET_DNSPARSER_TYPE_AAAA, GNUNET_TIME_relative_to_absolute(), GNUNET_VPN_redirect_to_ip(), GNUNET_DNSPARSER_Record::raw, ReplyContext::rec, ReplyContext::rr, TIMEOUT, GNUNET_DNSPARSER_Record::type, vpn_allocation_callback(), and vpn_handle.
Referenced by submit_request().
|
static |
Test if any of the given records need protocol-translation work.
ra | array of records |
ra_len | number of entries in ra |
Definition at line 625 of file gnunet-daemon-pt.c.
References GNUNET_DNSPARSER_TYPE_A, GNUNET_DNSPARSER_TYPE_AAAA, GNUNET_NO, GNUNET_YES, ipv4_pt, ipv6_pt, and type.
Referenced by dns_post_request_handler().
|
static |
This function is called AFTER we got an IP address for a DNS request.
Now, the PT daemon has the chance to substitute the IP address with one from the VPN range to channel requests destined for this IP address via VPN and CADET.
cls | closure |
rh | request handle to user for reply |
request_length | number of bytes in request |
request | udp payload of the DNS request |
Definition at line 661 of file gnunet-daemon-pt.c.
References _, GNUNET_DNSPARSER_Packet::additional_records, GNUNET_DNSPARSER_Packet::answers, ANSWERS, GNUNET_DNSPARSER_Packet::authority_records, ReplyContext::dns, gettext_noop, GNUNET_DNS_request_drop(), GNUNET_DNS_request_forward(), GNUNET_DNSPARSER_free_packet(), GNUNET_DNSPARSER_parse(), GNUNET_ERROR_TYPE_ERROR, GNUNET_log, GNUNET_new, GNUNET_NO, GNUNET_STATISTICS_update(), ReplyContext::group, GNUNET_DNSPARSER_Packet::num_additional_records, GNUNET_DNSPARSER_Packet::num_answers, GNUNET_DNSPARSER_Packet::num_authority_records, ReplyContext::offset, request, ReplyContext::rh, stats, submit_request(), work(), and work_test().
Referenced by run().
|
static |
Task run if the time to answer a DNS request via CADET is over.
cls | the struct RequestContext to abort |
Definition at line 710 of file gnunet-daemon-pt.c.
References CadetExit::cadet_channel, dns_exit_available, RequestContext::exit, exit_head, exit_tail, get_channel_weight(), gettext_noop, GNUNET_CADET_channel_destroy(), GNUNET_CONTAINER_DLL_insert_tail, GNUNET_CONTAINER_DLL_remove, GNUNET_DNS_request_drop(), GNUNET_free, GNUNET_NO, GNUNET_STATISTICS_update(), CadetExit::num_answered, CadetExit::num_transmitted, CadetExit::receive_queue_head, RequestContext::rh, stats, and try_open_exit().
Referenced by dns_pre_request_handler().
|
static |
This function is called before the DNS request has been given to a "local" DNS resolver.
Channeling for DNS requests was enabled, so we now need to send the request via some CADET channel to a DNS EXIT for resolution.
cls | closure |
rh | request handle to user for reply |
request_length | number of bytes in request |
request | udp payload of the DNS request |
Definition at line 759 of file gnunet-daemon-pt.c.
References CadetExit::cadet_channel, choose_exit(), dns_exit_available, RequestContext::dns_id, env, RequestContext::env, RequestContext::exit, gettext_noop, GNUNET_assert, GNUNET_CADET_get_mq(), GNUNET_CONTAINER_DLL_remove, GNUNET_DNS_request_drop(), GNUNET_memcpy, GNUNET_MESSAGE_TYPE_VPN_DNS_TO_INTERNET, GNUNET_MQ_env_copy(), GNUNET_MQ_msg_extra, GNUNET_MQ_send(), GNUNET_new, GNUNET_NO, GNUNET_SCHEDULER_add_delayed(), GNUNET_STATISTICS_update(), GNUNET_TUN_DnsHeader::id, CadetExit::idle, CadetExit::num_transmitted, CadetExit::receive_queue_head, CadetExit::receive_queue_tail, request, RequestContext::rh, stats, TIMEOUT, timeout_request(), and RequestContext::timeout_task.
Referenced by run().
|
static |
Process a request via cadet to perform a DNS query.
cls | the struct CadetExit which got the message |
msg | the actual message |
Definition at line 854 of file gnunet-daemon-pt.c.
References GNUNET_OK.
|
static |
Process a request via cadet to perform a DNS query.
cls | the struct CadetExit which got the message |
msg | the actual message |
Definition at line 868 of file gnunet-daemon-pt.c.
References RequestContext::dns_id, RequestContext::env, RequestContext::exit, gettext_noop, GNUNET_CONTAINER_DLL_remove, GNUNET_DNS_request_answer(), GNUNET_free, GNUNET_MQ_discard(), GNUNET_NO, GNUNET_SCHEDULER_cancel(), GNUNET_STATISTICS_update(), RequestContext::mlen, msg, RequestContext::next, CadetExit::num_answered, CadetExit::receive_queue_head, CadetExit::receive_queue_tail, RequestContext::rh, GNUNET_MessageHeader::size, stats, and RequestContext::timeout_task.
|
static |
Abort all pending DNS requests with the given cadet exit.
exit | cadet exit to abort requests for |
Definition at line 909 of file gnunet-daemon-pt.c.
References RequestContext::env, RequestContext::exit, GNUNET_CONTAINER_DLL_remove, GNUNET_DNS_request_drop(), GNUNET_free, GNUNET_MQ_discard(), GNUNET_SCHEDULER_cancel(), CadetExit::receive_queue_head, CadetExit::receive_queue_tail, RequestContext::rh, and RequestContext::timeout_task.
Referenced by cleanup().
|
static |
Function scheduled as very last function, cleans up after us.
cls | closure, NULL |
Definition at line 932 of file gnunet-daemon-pt.c.
References abort_all_requests(), CadetExit::cadet_channel, cadet_handle, dht, dht_get, dns_post_handle, dns_pre_handle, exit_head, exit_tail, GNUNET_CADET_channel_destroy(), GNUNET_CADET_disconnect(), GNUNET_CONTAINER_DLL_remove, GNUNET_DHT_disconnect(), GNUNET_DHT_get_stop(), GNUNET_DNS_disconnect(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_log, GNUNET_STATISTICS_destroy(), GNUNET_VPN_disconnect(), GNUNET_YES, stats, and vpn_handle.
Referenced by run().
|
static |
Function called whenever a channel is destroyed.
Should clean up the associated state and attempt to build a new one.
It must NOT call GNUNET_CADET_channel_destroy on the channel.
cls | closure (the struct CadetExit set from GNUNET_CADET_connect) |
channel | connection to the other end (henceforth invalid) |
channel_ctx | place where local state associated with the channel is stored |
Definition at line 1001 of file gnunet-daemon-pt.c.
References CadetExit::cadet_channel, choose_exit(), dns_exit_available, RequestContext::env, RequestContext::exit, GNUNET_CADET_get_mq(), GNUNET_CONTAINER_DLL_insert, GNUNET_CONTAINER_DLL_remove, GNUNET_MQ_env_copy(), GNUNET_MQ_send(), CadetExit::receive_queue_head, CadetExit::receive_queue_tail, and try_open_exit().
Referenced by try_open_exit().
|
static |
Function called whenever a channel has excess capacity.
cls | the struct CadetExit |
channel | connection to the other end |
window_size | how much capacity do we have |
Definition at line 1038 of file gnunet-daemon-pt.c.
References CadetExit::idle.
Referenced by try_open_exit().
|
static |
Function called whenever we find an advertisement for a DNS exit in the DHT.
If we don't have a cadet channel, we should build one; otherwise, we should save the advertisement for later use.
cls | closure |
exp | when will this value expire |
key | key of the result |
trunc_peer | peer that was truncated (or NULL if not truncated) |
get_path | peers on reply path (or NULL if not recorded) [0] = datastore's first neighbor, [length - 1] = local peer |
get_path_length | number of entries in get_path |
put_path | peers on the PUT path (or NULL if not recorded) [0] = origin, [length - 1] = datastore |
put_path_length | number of entries in put_path |
type | type of the result |
size | number of bytes in data |
data | pointer to the result data |
Definition at line 1139 of file gnunet-daemon-pt.c.
References data, dns_exit_available, exit_head, exit_tail, CadetExit::expiration, GNUNET_DNS_Advertisement::expiration_time, GNUNET_break, GNUNET_CONTAINER_DLL_insert_tail, GNUNET_memcmp, GNUNET_new, GNUNET_TIME_absolute_max(), GNUNET_TIME_absolute_ntoh(), MAX_OPEN_TUNNELS, CadetExit::next, GNUNET_DNS_Advertisement::peer, CadetExit::peer, size, and try_open_exit().
Referenced by run().
|
static |
Main function that will be run by the scheduler.
cls | closure |
args | remaining command-line arguments |
cfgfile | name of the configuration file used (for saving, can be NULL!) |
cfg_ | configuration |
Definition at line 1189 of file gnunet-daemon-pt.c.
References _, cadet_handle, cfg, cleanup(), dht, dht_get, dns_channel, dns_post_handle, dns_post_request_handler(), dns_pre_handle, dns_pre_request_handler(), GNUNET_BLOCK_TYPE_DNS, GNUNET_CADET_connect(), GNUNET_CONFIGURATION_get_value_yesno(), GNUNET_CRYPTO_hash(), GNUNET_DHT_connect(), GNUNET_DHT_get_start(), GNUNET_DHT_RO_DEMULTIPLEX_EVERYWHERE, GNUNET_DNS_connect(), GNUNET_DNS_FLAG_POST_RESOLUTION, GNUNET_DNS_FLAG_PRE_RESOLUTION, GNUNET_ERROR_TYPE_ERROR, GNUNET_log, GNUNET_SCHEDULER_add_shutdown(), GNUNET_SCHEDULER_shutdown(), GNUNET_STATISTICS_create(), GNUNET_VPN_connect(), handle_dht_result(), ipv4_pt, ipv6_pt, stats, and vpn_handle.
Referenced by main().
int main | ( | int | argc, |
char *const * | argv | ||
) |
The main function.
argc | number of arguments from the command line |
argv | command line arguments |
Definition at line 1296 of file gnunet-daemon-pt.c.
References gettext_noop, GNUNET_GETOPT_OPTION_END, GNUNET_OK, GNUNET_PROGRAM_run(), options, ret, and run().
|
static |
Head of DLL of cadet exits.
Cadet exits with an open channel are always at the beginning (so we do not have to traverse the entire list to find them).
Definition at line 232 of file gnunet-daemon-pt.c.
Referenced by choose_exit(), cleanup(), handle_dht_result(), timeout_request(), and try_open_exit().
|
static |
Tail of DLL of cadet exits.
Definition at line 237 of file gnunet-daemon-pt.c.
Referenced by cleanup(), handle_dht_result(), timeout_request(), and try_open_exit().
|
static |
The handle to the configuration used throughout the process.
Definition at line 242 of file gnunet-daemon-pt.c.
Referenced by run().
|
static |
The handle to the VPN.
Definition at line 247 of file gnunet-daemon-pt.c.
Referenced by cleanup(), modify_address(), and run().
|
static |
The handle to the CADET service.
Definition at line 252 of file gnunet-daemon-pt.c.
Referenced by cleanup(), run(), and try_open_exit().
|
static |
Statistics.
Definition at line 257 of file gnunet-daemon-pt.c.
Referenced by cleanup(), dns_post_request_handler(), dns_pre_request_handler(), finish_request(), handle_dns_response(), run(), timeout_request(), and vpn_allocation_callback().
|
static |
The handle to DNS post-resolution modifications.
Definition at line 262 of file gnunet-daemon-pt.c.
|
static |
The handle to DNS pre-resolution modifications.
Definition at line 267 of file gnunet-daemon-pt.c.
|
static |
Handle to access the DHT.
Definition at line 272 of file gnunet-daemon-pt.c.
|
static |
Our DHT GET operation to find DNS exits.
Definition at line 277 of file gnunet-daemon-pt.c.
|
static |
Are we doing IPv4-pt?
Definition at line 282 of file gnunet-daemon-pt.c.
Referenced by run(), submit_request(), and work_test().
|
static |
Are we doing IPv6-pt?
Definition at line 287 of file gnunet-daemon-pt.c.
Referenced by run(), submit_request(), and work_test().
|
static |
Are we channeling DNS queries?
Definition at line 292 of file gnunet-daemon-pt.c.
Referenced by run().
|
static |
Number of DNS exit peers we currently have in the cadet channel.
Used to see if using the cadet channel makes any sense right now, as well as to decide if we should open new channels.
Definition at line 299 of file gnunet-daemon-pt.c.
Referenced by cadet_channel_end_cb(), dns_pre_request_handler(), handle_dht_result(), timeout_request(), and try_open_exit().