This file has functions to send queries to authoritative servers, and wait for the pending answer, with timeouts. More...
#include "util/alloc.h"
#include "util/rbtree.h"
#include "util/regional.h"
#include "util/netevent.h"
#include "dnstap/dnstap_config.h"
Data Structures | |
struct | outside_network |
Send queries to outside servers and wait for answers from servers. More... | |
struct | port_if |
Outgoing interface. More... | |
struct | port_comm |
Outgoing commpoint for UDP port. More... | |
struct | reuse_tcp |
Reuse TCP connection, still open can be used again. More... | |
struct | pending |
A query that has an answer pending for it. More... | |
struct | pending_tcp |
Pending TCP query to server. More... | |
struct | waiting_tcp |
Query waiting for TCP buffer. More... | |
struct | service_callback |
Callback to party interested in serviced query results. More... | |
struct | serviced_query |
Query service record. More... | |
Macros | |
#define | EDNS_FRAG_SIZE_IP4 1472 |
fallback size for fragmentation for EDNS in IPv4 | |
#define | EDNS_FRAG_SIZE_IP6 1232 |
fallback size for EDNS in IPv6, fits one fragment with ip6-tunnel-ids | |
Functions | |
struct outside_network * | outside_network_create (struct comm_base *base, size_t bufsize, size_t num_ports, char **ifs, int num_ifs, int do_ip4, int do_ip6, size_t num_tcp, int dscp, struct infra_cache *infra, struct ub_randstate *rnd, int use_caps_for_id, int *availports, int numavailports, size_t unwanted_threshold, int tcp_mss, void(*unwanted_action)(void *), void *unwanted_param, int do_udp, void *sslctx, int delayclose, int tls_use_sni, struct dt_env *dtenv, int udp_connect, int max_reuse_tcp_queries, int tcp_reuse_timeout, int tcp_auth_query_timeout) |
Create outside_network structure with N udp ports. More... | |
void | outside_network_delete (struct outside_network *outnet) |
Delete outside_network structure. More... | |
void | outside_network_quit_prepare (struct outside_network *outnet) |
Prepare for quit. More... | |
struct pending * | pending_udp_query (struct serviced_query *sq, struct sldns_buffer *packet, int timeout, comm_point_callback_type *callback, void *callback_arg) |
Send UDP query, create pending answer. More... | |
struct waiting_tcp * | pending_tcp_query (struct serviced_query *sq, struct sldns_buffer *packet, int timeout, comm_point_callback_type *callback, void *callback_arg) |
Send TCP query. More... | |
void | pending_delete (struct outside_network *outnet, struct pending *p) |
Delete pending answer. More... | |
struct serviced_query * | outnet_serviced_query (struct outside_network *outnet, struct query_info *qinfo, uint16_t flags, int dnssec, int want_dnssec, int nocaps, int check_ratelimit, int tcp_upstream, int ssl_upstream, char *tls_auth_name, struct sockaddr_storage *addr, socklen_t addrlen, uint8_t *zone, size_t zonelen, struct module_qstate *qstate, comm_point_callback_type *callback, void *callback_arg, struct sldns_buffer *buff, struct module_env *env, int *was_ratelimited) |
Perform a serviced query to the authoritative servers. More... | |
void | outnet_serviced_query_stop (struct serviced_query *sq, void *cb_arg) |
Remove service query callback. More... | |
size_t | outnet_get_mem (struct outside_network *outnet) |
Get memory size in use by outside network. More... | |
size_t | serviced_get_mem (struct serviced_query *sq) |
Get memory size in use by serviced query while it is servicing callbacks. More... | |
uint16_t | reuse_tcp_select_id (struct reuse_tcp *reuse, struct outside_network *outnet) |
Pick random ID value for a tcp stream, avoids existing IDs. More... | |
struct waiting_tcp * | reuse_tcp_by_id_find (struct reuse_tcp *reuse, uint16_t id) |
find element in tree by id | |
void | reuse_tree_by_id_insert (struct reuse_tcp *reuse, struct waiting_tcp *w) |
insert element in tree by id | |
int | reuse_tcp_insert (struct outside_network *outnet, struct pending_tcp *pend_tcp) |
insert element in tcp_reuse tree and LRU list More... | |
void | reuse_tcp_lru_touch (struct outside_network *outnet, struct reuse_tcp *reuse) |
touch the LRU of the element More... | |
void | reuse_tcp_remove_tree_list (struct outside_network *outnet, struct reuse_tcp *reuse) |
remove element from tree and LRU list More... | |
struct reuse_tcp * | reuse_tcp_lru_snip (struct outside_network *outnet) |
snip the last reuse_tcp element off of the LRU list if any More... | |
void | reuse_del_readwait (rbtree_type *tree_by_id) |
delete readwait waiting_tcp elements, deletes the elements in the list | |
void | outnet_waiting_tcp_list_remove (struct outside_network *outnet, struct waiting_tcp *w) |
remove waiting tcp from the outnet waiting list | |
struct waiting_tcp * | outnet_waiting_tcp_list_pop (struct outside_network *outnet) |
pop the first waiting tcp from the outnet waiting list | |
void | outnet_waiting_tcp_list_add (struct outside_network *outnet, struct waiting_tcp *w, int set_timer) |
add waiting_tcp element to the outnet tcp waiting list | |
void | outnet_waiting_tcp_list_add_first (struct outside_network *outnet, struct waiting_tcp *w, int reset_timer) |
add waiting_tcp element as first to the outnet tcp waiting list | |
struct waiting_tcp * | reuse_write_wait_pop (struct reuse_tcp *reuse) |
pop the first element from the writewait list | |
void | reuse_write_wait_remove (struct reuse_tcp *reuse, struct waiting_tcp *w) |
remove the element from the writewait list | |
void | reuse_write_wait_push_back (struct reuse_tcp *reuse, struct waiting_tcp *w) |
push the element after the last on the writewait list | |
int | outnet_get_tcp_fd (struct sockaddr_storage *addr, socklen_t addrlen, int tcp_mss, int dscp) |
get TCP file descriptor for address, returns -1 on failure, tcp_mss is 0 or maxseg size to set for TCP packets. | |
struct comm_point * | outnet_comm_point_for_udp (struct outside_network *outnet, comm_point_callback_type *cb, void *cb_arg, struct sockaddr_storage *to_addr, socklen_t to_addrlen) |
Create udp commpoint suitable for sending packets to the destination. More... | |
struct comm_point * | outnet_comm_point_for_tcp (struct outside_network *outnet, comm_point_callback_type *cb, void *cb_arg, struct sockaddr_storage *to_addr, socklen_t to_addrlen, struct sldns_buffer *query, int timeout, int ssl, char *host) |
Create tcp commpoint suitable for communication to the destination. More... | |
struct comm_point * | outnet_comm_point_for_http (struct outside_network *outnet, comm_point_callback_type *cb, void *cb_arg, struct sockaddr_storage *to_addr, socklen_t to_addrlen, int timeout, int ssl, char *host, char *path, struct config_file *cfg) |
Create http commpoint suitable for communication to the destination. More... | |
int | outnet_tcp_connect (int s, struct sockaddr_storage *addr, socklen_t addrlen) |
connect tcp connection to addr, 0 on failure | |
int | outnet_udp_cb (struct comm_point *c, void *arg, int error, struct comm_reply *reply_info) |
callback for incoming udp answers from the network | |
int | outnet_tcp_cb (struct comm_point *c, void *arg, int error, struct comm_reply *reply_info) |
callback for pending tcp connections | |
void | pending_udp_timer_cb (void *arg) |
callback for udp timeout | |
void | pending_udp_timer_delay_cb (void *arg) |
callback for udp delay for timeout | |
void | outnet_tcptimer (void *arg) |
callback for outgoing TCP timer event | |
void | serviced_timer_cb (void *arg) |
callback to send serviced queries | |
int | serviced_udp_callback (struct comm_point *c, void *arg, int error, struct comm_reply *rep) |
callback for serviced query UDP answers | |
int | serviced_tcp_callback (struct comm_point *c, void *arg, int error, struct comm_reply *rep) |
TCP reply or error callback for serviced queries. | |
int | pending_cmp (const void *key1, const void *key2) |
compare function of pending rbtree | |
int | serviced_cmp (const void *key1, const void *key2) |
compare function of serviced query rbtree | |
int | reuse_cmp (const void *key1, const void *key2) |
compare function of reuse_tcp rbtree in outside_network struct | |
int | reuse_id_cmp (const void *key1, const void *key2) |
compare function of reuse_tcp tree_by_id rbtree | |
This file has functions to send queries to authoritative servers, and wait for the pending answer, with timeouts.
struct outside_network* outside_network_create | ( | struct comm_base * | base, |
size_t | bufsize, | ||
size_t | num_ports, | ||
char ** | ifs, | ||
int | num_ifs, | ||
int | do_ip4, | ||
int | do_ip6, | ||
size_t | num_tcp, | ||
int | dscp, | ||
struct infra_cache * | infra, | ||
struct ub_randstate * | rnd, | ||
int | use_caps_for_id, | ||
int * | availports, | ||
int | numavailports, | ||
size_t | unwanted_threshold, | ||
int | tcp_mss, | ||
void(*)(void *) | unwanted_action, | ||
void * | unwanted_param, | ||
int | do_udp, | ||
void * | sslctx, | ||
int | delayclose, | ||
int | tls_use_sni, | ||
struct dt_env * | dtenv, | ||
int | udp_connect, | ||
int | max_reuse_tcp_queries, | ||
int | tcp_reuse_timeout, | ||
int | tcp_auth_query_timeout | ||
) |
Create outside_network structure with N udp ports.
base | the communication base to use for event handling. |
bufsize | size for network buffers. |
num_ports | number of udp ports to open per interface. |
ifs | interface names (or NULL for default interface). These interfaces must be able to access all authoritative servers. |
num_ifs | number of names in array ifs. |
do_ip4 | service IP4. |
do_ip6 | service IP6. |
num_tcp | number of outgoing tcp buffers to preallocate. |
dscp | DSCP to use. |
infra | pointer to infra cached used for serviced queries. |
rnd | stored to create random numbers for serviced queries. |
use_caps_for_id | enable to use 0x20 bits to encode id randomness. |
availports | array of available ports. |
numavailports | number of available ports in array. |
unwanted_threshold | when to take defensive action. |
unwanted_action | the action to take. |
unwanted_param | user parameter to action. |
tcp_mss | maximum segment size of tcp socket. |
do_udp | if udp is done. |
sslctx | context to create outgoing connections with (if enabled). |
delayclose | if not 0, udp sockets are delayed before timeout closure. msec to wait on timeouted udp sockets. |
tls_use_sni | if SNI is used for TLS connections. |
dtenv | environment to send dnstap events with (if enabled). |
udp_connect | if the udp_connect option is enabled. |
max_reuse_tcp_queries | max number of queries on a reuse connection. |
tcp_reuse_timeout | timeout for REUSE entries in milliseconds. |
tcp_auth_query_timeout | timeout in milliseconds for TCP queries to auth servers. |
References outside_network::base, calc_num46(), comm_base_timept(), port_comm::cp, create_pending_tcp(), outside_network::delay_tv, outside_network::delayclose, outside_network::do_udp, outside_network::infra, outside_network::ip4_ifs, outside_network::ip6_ifs, outside_network::ip_dscp, log_err(), outside_network::max_reuse_tcp_queries, outside_network::now_secs, outside_network::now_tv, outside_network::num_ip4, outside_network::num_ip6, outside_network::num_tcp, outside_network::num_tcp_outgoing, outside_network::num_udp_outgoing, outside_network_delete(), outside_network::pending, pending_cmp(), rbtree_create(), rbtree_init(), reuse_cmp(), outside_network::rnd, outside_network::serviced, serviced_cmp(), sldns_buffer_new(), outside_network::sslctx, outside_network::svcd_overhead, outside_network::tcp_auth_query_timeout, outside_network::tcp_mss, outside_network::tcp_reuse, outside_network::tcp_reuse_max, outside_network::tcp_reuse_timeout, outside_network::tls_use_sni, outside_network::udp_buff, outside_network::udp_connect, outside_network::unwanted_action, outside_network::unwanted_param, outside_network::unwanted_threshold, outside_network::use_caps_for_id, and outside_network::want_to_quit.
void outside_network_delete | ( | struct outside_network * | outnet | ) |
Delete outside_network structure.
outnet | object to delete. |
References port_if::avail_ports, pending_tcp::c, comm_point_delete(), port_comm::cp, decommission_pending_tcp(), port_if::inuse, outside_network::ip4_ifs, outside_network::ip6_ifs, reuse_tcp::item_on_lru_list, port_comm::next, pending::next_waiting, waiting_tcp::next_waiting, outside_network::num_ip4, outside_network::num_ip6, outside_network::num_tcp, port_if::out, pending::outnet, waiting_tcp::outnet, serviced_query::outnet, outside_network::pending, pending_delete(), pending_node_del(), rbtree_init(), pending_tcp::reuse, reuse_cmp(), outside_network::serviced, serviced_node_del(), sldns_buffer_free(), outside_network::tcp_conns, outside_network::tcp_reuse, outside_network::tcp_reuse_first, outside_network::tcp_wait_first, traverse_postorder(), outside_network::udp_buff, outside_network::udp_wait_first, outside_network::unused_fds, waiting_tcp_delete(), and outside_network::want_to_quit.
Referenced by libworker_delete_env(), outside_network_create(), and worker_delete().
void outside_network_quit_prepare | ( | struct outside_network * | outnet | ) |
Prepare for quit.
Sends no more queries, even if queued up.
outnet | object to prepare for removal |
References serviced_query::outnet, and outside_network::want_to_quit.
Referenced by libworker_delete_env(), and worker_delete().
struct pending* pending_udp_query | ( | struct serviced_query * | sq, |
struct sldns_buffer * | packet, | ||
int | timeout, | ||
comm_point_callback_type * | callback, | ||
void * | callback_arg | ||
) |
Send UDP query, create pending answer.
Changes the ID for the query to be random and unique for that destination.
sq | serviced query. |
packet | wireformat query to send to destination. |
timeout | in milliseconds from now. |
callback | function to call on error, timeout or reply. |
callback_arg | user argument for callback function. |
References pending::addr, serviced_query::addr, pending::addrlen, serviced_query::addrlen, outside_network::base, serviced_query::busy, pending::cb, pending::cb_arg, comm_timer_create(), comm_timer_delete(), rbnode_type::key, log_assert, memdup(), pending::next_waiting, pending::node, pending::outnet, serviced_query::outnet, pending_delete(), pending_udp_timer_cb(), pending::pkt, pending::pkt_len, randomize_and_send_udp(), sldns_buffer_begin(), sldns_buffer_capacity(), sldns_buffer_flip(), sldns_buffer_limit(), sldns_buffer_new(), sldns_buffer_write(), pending::sq, pending::timeout, pending::timer, outside_network::udp_wait_first, outside_network::udp_wait_last, outside_network::unused_fds, VERB_ALGO, and verbose().
Referenced by serviced_udp_send().
struct waiting_tcp* pending_tcp_query | ( | struct serviced_query * | sq, |
struct sldns_buffer * | packet, | ||
int | timeout, | ||
comm_point_callback_type * | callback, | ||
void * | callback_arg | ||
) |
Send TCP query.
May wait for TCP buffer. Selects ID to be random, and checks id.
sq | serviced query. |
packet | wireformat query to send to destination. copied from. |
timeout | in milliseconds from now. Timer starts running now. Timer may expire if all buffers are used, without any query been sent to the server yet. |
callback | function to call on error, timeout or reply. |
callback_arg | user argument for callback function. |
References serviced_query::addr, serviced_query::addrlen, outside_network::base, comm_timer_create(), waiting_tcp::id, log_assert, log_reuse_tcp(), serviced_query::outnet, outnet_tcptimer(), reuse_tcp::pending, waiting_tcp::pkt, waiting_tcp::pkt_len, reuse_tcp_close_oldest(), reuse_tcp_find(), reuse_tcp_lru_touch(), sldns_buffer_begin(), sldns_buffer_capacity(), sldns_buffer_flip(), sldns_buffer_limit(), sldns_buffer_new(), sldns_buffer_write(), outside_network::tcp_free, tcp_select_id(), waiting_tcp::timer, VERB_ALGO, VERB_CLIENT, and verbose().
Referenced by serviced_tcp_initiate(), and serviced_tcp_send().
void pending_delete | ( | struct outside_network * | outnet, |
struct pending * | p | ||
) |
Delete pending answer.
outnet | outside network the pending query is part of. Internal feature: if outnet is NULL, p is not unlinked from rbtree. |
p | deleted |
References comm_timer_delete(), rbnode_type::key, log_assert, pending::next_waiting, pending::node, pending::outnet, outside_network::pending, pending::pkt, rbtree_delete(), pending::timer, outside_network::udp_wait_first, and outside_network::udp_wait_last.
Referenced by outnet_send_wait_udp(), outside_network_delete(), pending_node_del(), pending_udp_query(), pending_udp_timer_cb(), pending_udp_timer_delay_cb(), and serviced_delete().
struct serviced_query* outnet_serviced_query | ( | struct outside_network * | outnet, |
struct query_info * | qinfo, | ||
uint16_t | flags, | ||
int | dnssec, | ||
int | want_dnssec, | ||
int | nocaps, | ||
int | check_ratelimit, | ||
int | tcp_upstream, | ||
int | ssl_upstream, | ||
char * | tls_auth_name, | ||
struct sockaddr_storage * | addr, | ||
socklen_t | addrlen, | ||
uint8_t * | zone, | ||
size_t | zonelen, | ||
struct module_qstate * | qstate, | ||
comm_point_callback_type * | callback, | ||
void * | callback_arg, | ||
struct sldns_buffer * | buff, | ||
struct module_env * | env, | ||
int * | was_ratelimited | ||
) |
Perform a serviced query to the authoritative servers.
Duplicate efforts are detected, and EDNS, TCP and UDP retry is performed.
outnet | outside network, with rbtree of serviced queries. |
qinfo | query info. |
flags | flags u16 (host format), includes opcode, CD bit. |
dnssec | if set, DO bit is set in EDNS queries. If the value includes BIT_CD, CD bit is set when in EDNS queries. If the value includes BIT_DO, DO bit is set when in EDNS queries. |
want_dnssec | signatures are needed, without EDNS the answer is likely to be useless. |
nocaps | ignore use_caps_for_id and use unperturbed qname. |
check_ratelimit | if set, will check ratelimit before sending out. |
tcp_upstream | use TCP for upstream queries. |
ssl_upstream | use SSL for upstream queries. |
tls_auth_name | when ssl_upstream is true, use this name to check the server's peer certificate. |
addr | to which server to send the query. |
addrlen | length of addr. |
zone | name of the zone of the delegation point. wireformat dname. This is the delegation point name for which the server is deemed authoritative. |
zonelen | length of zone. |
qstate | module qstate. Mainly for inspecting the available edns_opts_lists. |
callback | callback function. |
callback_arg | user argument to callback function. |
buff | scratch buffer to create query contents in. Empty on exit. |
env | the module environment. |
was_ratelimited | it will signal back if the query failed to pass the ratelimit check. |
References module_env::alloc, alloc_reg_obtain(), alloc_reg_release(), service_callback::cb, service_callback::cb_arg, serviced_query::cblist, module_env::cfg, edns_strings::client_string_opcode, edns_strings::client_strings, edns_opt_copy_region(), edns_opt_list_append(), module_qstate::edns_opts_back_out, edns_string_addr_lookup(), module_env::edns_strings, module_env::infra_cache, infra_ratelimit_dec(), infra_ratelimit_inc(), inplace_cb_query_call(), LDNS_RR_CLASS_IN, LDNS_RR_TYPE_NS, log_nametypeclass(), lookup_serviced(), module_qstate::mesh_info, service_callback::next, serviced_query::node, module_env::now, config_file::pad_queries, config_file::pad_queries_block_size, query_info::qclass, module_qstate::qinfo, query_info::qname, query_info::qname_len, query_info::qtype, mesh_reply::query_reply, config_file::ratelimit_backoff, config_file::ratelimit_factor, rbtree_delete(), serviced_query::region, regional_alloc(), mesh_state::reply_list, module_env::rnd, outside_network::serviced, serviced_create(), serviced_gen_query(), serviced_node_del(), edns_string_addr::string, edns_string_addr::string_len, ub_random_max(), and VERB_ALGO.
Referenced by libworker_send_query(), and worker_send_query().
void outnet_serviced_query_stop | ( | struct serviced_query * | sq, |
void * | cb_arg | ||
) |
Remove service query callback.
If that leads to zero callbacks, the query is completely cancelled.
sq | serviced query to adjust. |
cb_arg | callback argument of callback that needs removal. same as the callback_arg to outnet_serviced_query(). |
References fake_pending::buffer, serviced_query::busy, callback_list_remove(), service_callback::cb_arg, fake_pending::cb_arg, serviced_query::cblist, log_assert, log_info(), fake_pending::next, serviced_query::outnet, replay_runtime::pending_list, fake_pending::pkt, rbtree_delete(), fake_pending::runtime, outside_network::serviced, serviced_delete(), sldns_buffer_free(), serviced_query::to_be_deleted, and fake_pending::zone.
Referenced by outbound_list_clear(), and outbound_list_remove().
size_t outnet_get_mem | ( | struct outside_network * | outnet | ) |
Get memory size in use by outside network.
Counts buffers and outstanding query (serviced queries) malloced data.
outnet | outside network structure. |
References outside_network::base, port_comm::next, sldns_buffer_capacity(), outside_network::udp_buff, and outside_network::unused_fds.
size_t serviced_get_mem | ( | struct serviced_query * | sq | ) |
Get memory size in use by serviced query while it is servicing callbacks.
This takes into account the pre-deleted status of it; it will be deleted when the callbacks are done.
sq | serviced query. |
References serviced_query::cblist, comm_timer_get_mem(), service_callback::next, serviced_query::qbuflen, and serviced_query::status.
uint16_t reuse_tcp_select_id | ( | struct reuse_tcp * | reuse, |
struct outside_network * | outnet | ||
) |
Pick random ID value for a tcp stream, avoids existing IDs.
Pick random ID value for a tcp stream, avoids existing IDs.
That is random and also does not collide with an existing query ID that is in use or waiting
References rbtree_type::count, GET_RANDOM_ID, log_assert, reuse_tcp::node, reuse_tcp::outnet, rbtree_first(), rbtree_last(), rbtree_next(), RBTREE_NULL, reuse_tcp_by_id_find(), outside_network::rnd, reuse_tcp::tree_by_id, tree_by_id_get_id(), and ub_random_max().
Referenced by tcp_select_id(), and tcpid_addmore().
int reuse_tcp_insert | ( | struct outside_network * | outnet, |
struct pending_tcp * | pend_tcp | ||
) |
insert element in tcp_reuse tree and LRU list
insert element in tcp_reuse tree and LRU list
References reuse_tcp::item_on_lru_list, rbnode_type::key, log_assert, log_err(), log_reuse_tcp(), reuse_tcp::lru_next, reuse_tcp::node, waiting_tcp::outnet, reuse_tcp::pending, rbtree_insert(), pending_tcp::reuse, outside_network::tcp_reuse, outside_network::tcp_reuse_first, and VERB_CLIENT.
Referenced by check_removal(), check_snip(), and reuse_tcp_remove_serviced_keep().
void reuse_tcp_lru_touch | ( | struct outside_network * | outnet, |
struct reuse_tcp * | reuse | ||
) |
touch the LRU of the element
touch the LRU of the element
This moves it to the front of the list, where it is not likely to be closed. Items at the back of the list are closed to make space.
References reuse_tcp::item_on_lru_list, log_assert, log_err(), reuse_tcp::lru_next, and outside_network::tcp_reuse_first.
Referenced by pending_tcp_query().
void reuse_tcp_remove_tree_list | ( | struct outside_network * | outnet, |
struct reuse_tcp * | reuse | ||
) |
remove element from tree and LRU list
remove element from tree and LRU list
References reuse_tcp::addr, addr_to_str(), reuse_tcp::addrlen, reuse_tcp::is_ssl, reuse_tcp::item_on_lru_list, rbnode_type::key, log_assert, log_err(), reuse_tcp::lru_next, reuse_tcp::node, waiting_tcp::outnet, reuse_tcp::pending, rbtree_delete(), outside_network::tcp_reuse, outside_network::tcp_reuse_first, VERB_CLIENT, and verbose().
Referenced by check_removal(), check_snip(), decommission_pending_tcp(), empty_tree(), and outnet_tcp_cb().
struct reuse_tcp* reuse_tcp_lru_snip | ( | struct outside_network * | outnet | ) |
snip the last reuse_tcp element off of the LRU list if any
snip the last reuse_tcp element off of the LRU list if any
References reuse_tcp::item_on_lru_list, log_assert, reuse_tcp::lru_next, reuse_tcp::outnet, and outside_network::tcp_reuse_first.
Referenced by check_snip(), and reuse_tcp_close_oldest().
struct comm_point* outnet_comm_point_for_udp | ( | struct outside_network * | outnet, |
comm_point_callback_type * | cb, | ||
void * | cb_arg, | ||
struct sockaddr_storage * | to_addr, | ||
socklen_t | to_addrlen | ||
) |
Create udp commpoint suitable for sending packets to the destination.
outnet | outside_network with the comm_base it is attached to, with the outgoing interfaces chosen from, and rnd gen for random. |
cb | callback function for the commpoint. |
cb_arg | callback argument for cb. |
to_addr | intended destination. |
to_addrlen | length of to_addr. |
References comm_point::fd, and fd_for_dest().
Referenced by xfr_probe_send_probe().
struct comm_point* outnet_comm_point_for_tcp | ( | struct outside_network * | outnet, |
comm_point_callback_type * | cb, | ||
void * | cb_arg, | ||
struct sockaddr_storage * | to_addr, | ||
socklen_t | to_addrlen, | ||
struct sldns_buffer * | query, | ||
int | timeout, | ||
int | ssl, | ||
char * | host | ||
) |
Create tcp commpoint suitable for communication to the destination.
It also performs connect() to the to_addr.
outnet | outside_network with the comm_base it is attached to, and the tcp_mss. |
cb | callback function for the commpoint. |
cb_arg | callback argument for cb. |
to_addr | intended destination. |
to_addrlen | length of to_addr. |
query | initial packet to send writing, in buffer. It is copied to the commpoint buffer that is created. |
timeout | timeout for the TCP connection. timeout in milliseconds, or -1 for no (change to the) timeout. So seconds*1000. |
ssl | set to true for TLS. |
host | hostname for host name verification of TLS (or NULL if no TLS). |
References comm_point::fd, fd_set_nonblock(), outside_network::ip_dscp, outnet_get_tcp_fd(), outnet_tcp_connect(), and outside_network::tcp_mss.
struct comm_point* outnet_comm_point_for_http | ( | struct outside_network * | outnet, |
comm_point_callback_type * | cb, | ||
void * | cb_arg, | ||
struct sockaddr_storage * | to_addr, | ||
socklen_t | to_addrlen, | ||
int | timeout, | ||
int | ssl, | ||
char * | host, | ||
char * | path, | ||
struct config_file * | cfg | ||
) |
Create http commpoint suitable for communication to the destination.
Creates the http request buffer. It also performs connect() to the to_addr.
outnet | outside_network with the comm_base it is attached to, and the tcp_mss. |
cb | callback function for the commpoint. |
cb_arg | callback argument for cb. |
to_addr | intended destination. |
to_addrlen | length of to_addr. |
timeout | timeout for the TCP connection. timeout in milliseconds, or -1 for no (change to the) timeout. So seconds*1000. |
ssl | set to true for https. |
host | hostname to use for the destination. part of http request. |
path | pathname to lookup, eg. name of the file on the destination. |
cfg | running configuration for User-Agent setup. |
References outside_network::base, fake_commpoint::cb, fake_commpoint::cb_arg, replay_runtime::cb_arg, comm_point::cb_arg, comm_point_create_http_out(), comm_point_delete(), FAKE_COMMPOINT_TYPECODE, comm_point::fd, fd_set_nonblock(), outside_network::ip_dscp, log_err(), outnet_get_tcp_fd(), outnet_tcp_connect(), comm_reply::remote_addr, comm_reply::remote_addrlen, comm_point::repinfo, fake_commpoint::runtime, setup_comm_ssl(), comm_point::ssl, outside_network::tcp_mss, fake_commpoint::type_http_out, fake_commpoint::typecode, and outside_network::udp_buff.