fake_event.c File Reference

Event service that replays a scenario. More...

#include "config.h"
#include "testcode/fake_event.h"
#include "util/netevent.h"
#include "util/net_help.h"
#include "util/data/msgparse.h"
#include "util/data/msgreply.h"
#include "util/data/msgencode.h"
#include "util/data/dname.h"
#include "util/storage/slabhash.h"
#include "util/edns.h"
#include "util/config_file.h"
#include "services/listen_dnsport.h"
#include "services/outside_network.h"
#include "services/cache/infra.h"
#include "testcode/replay.h"
#include "testcode/testpkts.h"
#include "util/log.h"
#include "util/fptr_wlist.h"
#include "sldns/sbuffer.h"
#include "sldns/wire2str.h"
#include "sldns/str2wire.h"
#include "daemon/remote.h"
#include "daemon/daemon.h"
#include "util/timeval_func.h"
#include <signal.h>

Data Structures

struct  fake_commpoint
 fake commpoint, stores information More...
 

Macros

#define FAKE_COMMPOINT_TYPECODE   97347923
 unique code to check that fake_commpoint is that structure
 

Functions

void fake_temp_file (const char *adj, const char *id, char *buf, size_t len)
 Get filename to store temporary config stuff. More...
 
void fake_event_init (struct replay_scenario *scen)
 Initialise fake event services. More...
 
void fake_event_cleanup (void)
 Deinit fake event services.
 
static void log_pkt (const char *desc, uint8_t *pkt, size_t len)
 helper function that logs a sldns_pkt packet to logfile
 
static const char * repevt_string (enum replay_event_type t)
 Returns a string describing the event type.
 
static void delete_fake_pending (struct fake_pending *pend)
 delete a fake pending
 
static void delete_replay_answer (struct replay_answer *a)
 delete a replay answer
 
static int pending_matches_current (struct replay_runtime *runtime, struct entry **entry, struct fake_pending **pend)
 return: true if pending query matches the now event.
 
static int pending_find_match (struct replay_runtime *runtime, struct entry **entry, struct fake_pending *pend)
 Find the range that matches this pending message. More...
 
static int pending_matches_range (struct replay_runtime *runtime, struct entry **entry, struct fake_pending **pend)
 See if outgoing pending query matches an entry. More...
 
static void pending_list_delete (struct replay_runtime *runtime, struct fake_pending *pend)
 Remove the item from the pending list.
 
static int count_reply_packets (struct entry *entry)
 number of replies in entry
 
static void fill_buffer_with_reply (sldns_buffer *buffer, struct entry *entry, uint8_t *q, size_t qlen, int tcp_pkt_counter)
 Fill buffer with reply from the entry.
 
static void answer_callback_from_entry (struct replay_runtime *runtime, struct entry *entry, struct fake_pending *pend)
 Perform range entry on pending message. More...
 
static void answer_check_it (struct replay_runtime *runtime)
 Check the now moment answer check event.
 
static void fake_front_query (struct replay_runtime *runtime, struct replay_moment *todo)
 Create commpoint (as return address) for a fake incoming query.
 
static void fake_pending_callback (struct replay_runtime *runtime, struct replay_moment *todo, int error)
 Perform callback for fake pending message.
 
static void moment_assign (struct replay_runtime *runtime, struct replay_moment *mom)
 pass time
 
static void time_passes (struct replay_runtime *runtime, struct replay_moment *mom)
 pass time
 
static void autotrust_check (struct replay_runtime *runtime, struct replay_moment *mom)
 check autotrust file contents
 
static void tempfile_check (struct replay_runtime *runtime, struct replay_moment *mom)
 check tempfile file contents
 
static void do_infra_rtt (struct replay_runtime *runtime)
 Store RTT in infra cache.
 
static void do_flush_message (struct replay_runtime *runtime)
 Flush message from message cache.
 
static void do_expire_message (struct replay_runtime *runtime)
 Expire message from message cache.
 
static void expon_timeout_backoff (struct replay_runtime *runtime)
 perform exponential backoff on the timeout
 
static void advance_moment (struct replay_runtime *runtime)
 Advance to the next moment.
 
static void do_moment_and_advance (struct replay_runtime *runtime)
 Perform actions or checks determined by the moment. More...
 
static void run_scenario (struct replay_runtime *runtime)
 run the scenario in event callbacks
 
struct listen_dnsportlisten_create (struct comm_base *base, struct listen_port *ATTR_UNUSED(ports), size_t bufsize, int ATTR_UNUSED(tcp_accept_count), int ATTR_UNUSED(tcp_idle_timeout), int ATTR_UNUSED(harden_large_queries), uint32_t ATTR_UNUSED(http_max_streams), char *ATTR_UNUSED(http_endpoint), int ATTR_UNUSED(http_notls), struct tcl_list *ATTR_UNUSED(tcp_conn_limit), void *ATTR_UNUSED(sslctx), struct dt_env *ATTR_UNUSED(dtenv), comm_point_callback_type *cb, void *cb_arg)
 
void listen_delete (struct listen_dnsport *listen)
 delete the listening structure More...
 
struct comm_basecomm_base_create (int ATTR_UNUSED(sigs))
 
void comm_base_delete (struct comm_base *b)
 Destroy a comm base. More...
 
void comm_base_timept (struct comm_base *b, time_t **tt, struct timeval **tv)
 Obtain two pointers. More...
 
void comm_base_dispatch (struct comm_base *b)
 Dispatch the comm base events. More...
 
void comm_base_exit (struct comm_base *b)
 Exit from dispatch loop. More...
 
struct comm_signalcomm_signal_create (struct comm_base *base, void(*callback)(int, void *), void *cb_arg)
 Create a signal handler. More...
 
int comm_signal_bind (struct comm_signal *ATTR_UNUSED(comsig), int ATTR_UNUSED(sig))
 
void comm_signal_delete (struct comm_signal *comsig)
 Delete the signal communication point. More...
 
void comm_point_send_reply (struct comm_reply *repinfo)
 Send reply. More...
 
void comm_point_drop_reply (struct comm_reply *repinfo)
 Drop reply. More...
 
struct outside_networkoutside_network_create (struct comm_base *base, size_t bufsize, size_t ATTR_UNUSED(num_ports), char **ATTR_UNUSED(ifs), int ATTR_UNUSED(num_ifs), int ATTR_UNUSED(do_ip4), int ATTR_UNUSED(do_ip6), size_t ATTR_UNUSED(num_tcp), int ATTR_UNUSED(dscp), struct infra_cache *infra, struct ub_randstate *ATTR_UNUSED(rnd), int ATTR_UNUSED(use_caps_for_id), int *ATTR_UNUSED(availports), int ATTR_UNUSED(numavailports), size_t ATTR_UNUSED(unwanted_threshold), int ATTR_UNUSED(outgoing_tcp_mss), void(*unwanted_action)(void *), void *ATTR_UNUSED(unwanted_param), int ATTR_UNUSED(do_udp), void *ATTR_UNUSED(sslctx), int ATTR_UNUSED(delayclose), int ATTR_UNUSED(tls_use_sni), struct dt_env *ATTR_UNUSED(dtenv), int ATTR_UNUSED(udp_connect), int ATTR_UNUSED(max_reuse_tcp_queries), int ATTR_UNUSED(tcp_reuse_timeout), int ATTR_UNUSED(tcp_auth_query_timeout))
 
void outside_network_delete (struct outside_network *outnet)
 Delete outside_network structure. More...
 
void outside_network_quit_prepare (struct outside_network *ATTR_UNUSED(outnet))
 
struct pendingpending_udp_query (struct serviced_query *sq, sldns_buffer *packet, int timeout, comm_point_callback_type *callback, void *callback_arg)
 Send UDP query, create pending answer. More...
 
struct waiting_tcppending_tcp_query (struct serviced_query *sq, sldns_buffer *packet, int timeout, comm_point_callback_type *callback, void *callback_arg)
 Send TCP query. More...
 
struct serviced_queryoutnet_serviced_query (struct outside_network *outnet, struct query_info *qinfo, uint16_t flags, int dnssec, int ATTR_UNUSED(want_dnssec), int ATTR_UNUSED(nocaps), int ATTR_UNUSED(check_ratelimit), int ATTR_UNUSED(tcp_upstream), int ATTR_UNUSED(ssl_upstream), char *ATTR_UNUSED(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, sldns_buffer *ATTR_UNUSED(buff), struct module_env *env, int *ATTR_UNUSED(was_ratelimited))
 
void outnet_serviced_query_stop (struct serviced_query *sq, void *cb_arg)
 Remove service query callback. More...
 
int resolve_interface_names (char **ATTR_UNUSED(ifs), int ATTR_UNUSED(num_ifs), struct config_strlist *ATTR_UNUSED(list), char ***ATTR_UNUSED(resif), int *ATTR_UNUSED(num_resif))
 
struct listen_portlistening_ports_open (struct config_file *ATTR_UNUSED(cfg), char **ATTR_UNUSED(ifs), int ATTR_UNUSED(num_ifs), int *ATTR_UNUSED(reuseport))
 
void listening_ports_free (struct listen_port *list)
 Close and delete the (list of) listening ports.
 
struct comm_pointcomm_point_create_local (struct comm_base *ATTR_UNUSED(base), int ATTR_UNUSED(fd), size_t ATTR_UNUSED(bufsize), comm_point_callback_type *ATTR_UNUSED(callback), void *ATTR_UNUSED(callback_arg))
 
struct comm_pointcomm_point_create_raw (struct comm_base *ATTR_UNUSED(base), int ATTR_UNUSED(fd), int ATTR_UNUSED(writing), comm_point_callback_type *ATTR_UNUSED(callback), void *ATTR_UNUSED(callback_arg))
 
void comm_point_start_listening (struct comm_point *ATTR_UNUSED(c), int ATTR_UNUSED(newfd), int ATTR_UNUSED(sec))
 
void comm_point_stop_listening (struct comm_point *ATTR_UNUSED(c))
 
void comm_point_delete (struct comm_point *c)
 Close and deallocate (free) the comm point. More...
 
size_t listen_get_mem (struct listen_dnsport *ATTR_UNUSED(listen))
 
size_t outnet_get_mem (struct outside_network *ATTR_UNUSED(outnet))
 
size_t comm_point_get_mem (struct comm_point *ATTR_UNUSED(c))
 
size_t serviced_get_mem (struct serviced_query *ATTR_UNUSED(c))
 
int outnet_udp_cb (struct comm_point *ATTR_UNUSED(c), void *ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply *ATTR_UNUSED(reply_info))
 
int outnet_tcp_cb (struct comm_point *ATTR_UNUSED(c), void *ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply *ATTR_UNUSED(reply_info))
 
void pending_udp_timer_cb (void *ATTR_UNUSED(arg))
 
void serviced_timer_cb (void *ATTR_UNUSED(arg))
 
void pending_udp_timer_delay_cb (void *ATTR_UNUSED(arg))
 
void outnet_tcptimer (void *ATTR_UNUSED(arg))
 
void comm_point_udp_callback (int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void *ATTR_UNUSED(arg))
 
void comm_point_udp_ancil_callback (int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void *ATTR_UNUSED(arg))
 
void comm_point_tcp_accept_callback (int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void *ATTR_UNUSED(arg))
 
void comm_point_tcp_handle_callback (int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void *ATTR_UNUSED(arg))
 
void comm_timer_callback (int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void *ATTR_UNUSED(arg))
 
void comm_signal_callback (int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void *ATTR_UNUSED(arg))
 
void comm_point_http_handle_callback (int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void *ATTR_UNUSED(arg))
 
void comm_point_local_handle_callback (int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void *ATTR_UNUSED(arg))
 
void comm_point_raw_handle_callback (int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void *ATTR_UNUSED(arg))
 
void comm_base_handle_slow_accept (int ATTR_UNUSED(fd), short ATTR_UNUSED(event), void *ATTR_UNUSED(arg))
 
int serviced_udp_callback (struct comm_point *ATTR_UNUSED(c), void *ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply *ATTR_UNUSED(reply_info))
 
int serviced_tcp_callback (struct comm_point *ATTR_UNUSED(c), void *ATTR_UNUSED(arg), int ATTR_UNUSED(error), struct comm_reply *ATTR_UNUSED(reply_info))
 
int pending_cmp (const void *ATTR_UNUSED(a), const void *ATTR_UNUSED(b))
 
int serviced_cmp (const void *ATTR_UNUSED(a), const void *ATTR_UNUSED(b))
 
int reuse_cmp (const void *ATTR_UNUSED(a), const void *ATTR_UNUSED(b))
 
int reuse_id_cmp (const void *ATTR_UNUSED(a), const void *ATTR_UNUSED(b))
 
struct comm_timercomm_timer_create (struct comm_base *base, void(*cb)(void *), void *cb_arg)
 create timer. More...
 
void comm_timer_disable (struct comm_timer *timer)
 disable timer. More...
 
void comm_timer_set (struct comm_timer *timer, struct timeval *tv)
 reset timevalue for timer. More...
 
void comm_timer_delete (struct comm_timer *timer)
 delete timer. More...
 
void comm_base_set_slow_accept_handlers (struct comm_base *ATTR_UNUSED(b), void(*stop_acc)(void *), void(*start_acc)(void *), void *ATTR_UNUSED(arg))
 
struct ub_event_basecomm_base_internal (struct comm_base *ATTR_UNUSED(b))
 
void daemon_remote_exec (struct worker *ATTR_UNUSED(worker))
 
void listen_start_accept (struct listen_dnsport *ATTR_UNUSED(listen))
 
void listen_stop_accept (struct listen_dnsport *ATTR_UNUSED(listen))
 
void daemon_remote_start_accept (struct daemon_remote *ATTR_UNUSED(rc))
 
void daemon_remote_stop_accept (struct daemon_remote *ATTR_UNUSED(rc))
 
int create_udp_sock (int ATTR_UNUSED(family), int ATTR_UNUSED(socktype), struct sockaddr *ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen), int ATTR_UNUSED(v6only), int *ATTR_UNUSED(inuse), int *ATTR_UNUSED(noproto), int ATTR_UNUSED(rcv), int ATTR_UNUSED(snd), int ATTR_UNUSED(listen), int *ATTR_UNUSED(reuseport), int ATTR_UNUSED(transparent), int ATTR_UNUSED(freebind), int ATTR_UNUSED(use_systemd), int ATTR_UNUSED(dscp))
 
struct comm_pointcomm_point_create_udp (struct comm_base *ATTR_UNUSED(base), int ATTR_UNUSED(fd), sldns_buffer *ATTR_UNUSED(buffer), int ATTR_UNUSED(pp2_enabled), comm_point_callback_type *ATTR_UNUSED(callback), void *ATTR_UNUSED(callback_arg), struct unbound_socket *ATTR_UNUSED(socket))
 
struct comm_pointcomm_point_create_tcp_out (struct comm_base *ATTR_UNUSED(base), size_t ATTR_UNUSED(bufsize), comm_point_callback_type *ATTR_UNUSED(callback), void *ATTR_UNUSED(callback_arg))
 
struct comm_pointoutnet_comm_point_for_udp (struct outside_network *outnet, comm_point_callback_type *cb, void *cb_arg, struct sockaddr_storage *ATTR_UNUSED(to_addr), socklen_t ATTR_UNUSED(to_addrlen))
 
struct comm_pointoutnet_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 ATTR_UNUSED(ssl), char *ATTR_UNUSED(host))
 
struct comm_pointoutnet_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 comm_point_send_udp_msg (struct comm_point *c, sldns_buffer *packet, struct sockaddr *addr, socklen_t addrlen, int ATTR_UNUSED(is_connected))
 
int outnet_get_tcp_fd (struct sockaddr_storage *ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen), int ATTR_UNUSED(tcp_mss), int ATTR_UNUSED(dscp))
 
int outnet_tcp_connect (int ATTR_UNUSED(s), struct sockaddr_storage *ATTR_UNUSED(addr), socklen_t ATTR_UNUSED(addrlen))
 
int tcp_req_info_add_meshstate (struct tcp_req_info *ATTR_UNUSED(req), struct mesh_area *ATTR_UNUSED(mesh), struct mesh_state *ATTR_UNUSED(m))
 
void tcp_req_info_remove_mesh_state (struct tcp_req_info *ATTR_UNUSED(req), struct mesh_state *ATTR_UNUSED(m))
 
size_t tcp_req_info_get_stream_buffer_size (void)
 get the size of currently used tcp stream wait buffers (in bytes)
 
size_t http2_get_query_buffer_size (void)
 get the size of currently used HTTP2 query buffers (in bytes)
 
size_t http2_get_response_buffer_size (void)
 get the size of currently used HTTP2 response buffers (in bytes)
 
void http2_stream_add_meshstate (struct http2_stream *ATTR_UNUSED(h2_stream), struct mesh_area *ATTR_UNUSED(mesh), struct mesh_state *ATTR_UNUSED(m))
 

Variables

static struct replay_scenariosaved_scenario = NULL
 Global variable: the scenario. More...
 

Detailed Description

Event service that replays a scenario.

This implements the same exported symbols as the files: util/netevent.c services/listen_dnsport.c services/outside_network.c But these do not actually access the network or events, instead the scenario is played.

Function Documentation

◆ fake_temp_file()

void fake_temp_file ( const char *  adj,
const char *  id,
char *  buf,
size_t  len 
)

Get filename to store temporary config stuff.

The pid is added. in /tmp.

Parameters
adjadjective, like "_cfg_", "_auto_"
ididentifier, like "example.com".
bufwhere to store.
lenlength of buf.

Referenced by autotrust_check(), setup_config(), and tempfile_check().

◆ fake_event_init()

void fake_event_init ( struct replay_scenario scen)

Initialise fake event services.

The fake event services will automatically start when the main program calls netevent.h functions, such as comm_base_dispatch().

Parameters
scenSet the scenario to use for upcoming event handling.

References saved_scenario.

◆ pending_find_match()

static int pending_find_match ( struct replay_runtime runtime,
struct entry **  entry,
struct fake_pending pend 
)
static

Find the range that matches this pending message.

Parameters
runtimeruntime with current moment, and range list.
entryreturns the pointer to entry that matches.
pendthe pending that the entry must match.
Returns
: true if a match is found.

References replay_range::addr, fake_pending::addr, replay_range::addrlen, fake_pending::addrlen, replay_range::end_step, find_match(), log_addr(), log_info(), log_pkt(), replay_range::match, replay_range::next_range, replay_runtime::now, fake_pending::pkt, replay_scenario::range_list, replay_runtime::scenario, sockaddr_cmp(), replay_range::start_step, replay_moment::time_step, and fake_pending::transport.

Referenced by pending_matches_range().

◆ pending_matches_range()

static int pending_matches_range ( struct replay_runtime runtime,
struct entry **  entry,
struct fake_pending **  pend 
)
static

See if outgoing pending query matches an entry.

Parameters
runtimeruntime.
entryif true, the entry that matches is returned.
pendif true, the outgoing message that matches is returned.
Returns
: true if pending query matches the now event.

References fake_pending::next, pending_find_match(), replay_runtime::pending_list, fake_pending::runtime, and fake_pending::tcp_pkt_counter.

Referenced by run_scenario().

◆ answer_callback_from_entry()

static void answer_callback_from_entry ( struct replay_runtime runtime,
struct entry entry,
struct fake_pending pend 
)
static

Perform range entry on pending message.

Parameters
runtimeruntime buffer size preference.
entryentry that codes for the reply to do.
pendpending query that is answered, callback called.

References comm_point::buffer, replay_runtime::bufsize, comm_reply::c, fake_pending::callback, fake_pending::cb_arg, comm_point::fd, sldns_buffer_new(), fake_pending::transport, and comm_point::type.

Referenced by run_scenario().

◆ do_moment_and_advance()

static void do_moment_and_advance ( struct replay_runtime runtime)
static

Perform actions or checks determined by the moment.

Also advances the time by one step.

Parameters
runtimescenario runtime information.

References advance_moment(), replay_runtime::answer_list, replay_moment::evt_type, fake_front_query(), log_err(), log_info(), replay_runtime::now, replay_moment::repevt_front_query, replay_moment::repevt_front_reply, replay_moment::repevt_nothing, repevt_string(), and replay_moment::time_step.

Referenced by run_scenario().

◆ listen_delete()

void listen_delete ( struct listen_dnsport listen)

delete the listening structure

Parameters
listenlistening structure.

References sldns_buffer_free(), and listen_dnsport::udp_buff.

◆ comm_base_delete()

◆ comm_base_timept()

void comm_base_timept ( struct comm_base b,
time_t **  tt,
struct timeval **  tv 
)

Obtain two pointers.

The pointers never change (until base_delete()). The pointers point to time values that are updated regularly.

Parameters
bthe communication base that will update the time values.
ttpointer to time in seconds is returned.
tvpointer to time in microseconds is returned.

References replay_runtime::now_secs, and replay_runtime::now_tv.

Referenced by outside_network_create(), and ub_comm_base_now().

◆ comm_base_dispatch()

void comm_base_dispatch ( struct comm_base b)

Dispatch the comm base events.

Parameters
bthe communication to perform.

References run_scenario(), replay_runtime::sig_cb, and replay_runtime::sig_cb_arg.

Referenced by libworker_dobg(), and worker_work().

◆ comm_base_exit()

void comm_base_exit ( struct comm_base b)

Exit from dispatch loop.

Parameters
bthe communication base that is in dispatch().

References replay_runtime::exit_cleanly.

Referenced by do_reload(), do_stop(), libworker_do_cmd(), libworker_fg_done_cb(), and worker_sighandler().

◆ comm_signal_create()

struct comm_signal* comm_signal_create ( struct comm_base base,
void(*)(int, void *)  callback,
void *  cb_arg 
)

Create a signal handler.

Call signal_bind() later to bind to a signal.

Parameters
basecommunication base to use.
callbackcalled when signal is caught.
cb_arguser argument to callback
Returns
: the signal struct or NULL on error.

References replay_runtime::cb_arg, replay_runtime::sig_cb, and replay_runtime::sig_cb_arg.

◆ comm_signal_delete()

void comm_signal_delete ( struct comm_signal comsig)

Delete the signal communication point.

Parameters
comsigto delete.

Referenced by worker_delete().

◆ comm_point_send_reply()

void comm_point_send_reply ( struct comm_reply repinfo)

Send reply.

Put message into commpoint buffer.

Parameters
repinfoThe reply info copied from a commpoint callback call.

References replay_runtime::answer_last, replay_runtime::answer_list, comm_point::buffer, comm_reply::c, comm_point::ev, log_assert, log_info(), memdup(), replay_answer::next, replay_answer::pkt, replay_answer::repinfo, sldns_buffer_begin(), and sldns_buffer_limit().

Referenced by reply_and_prefetch().

◆ comm_point_drop_reply()

void comm_point_drop_reply ( struct comm_reply repinfo)

Drop reply.

Cleans up.

Parameters
repinfoThe reply info copied from a commpoint callback call.

References comm_point::buffer, comm_reply::c, log_info(), and sldns_buffer_free().

Referenced by dnsc_handle_curved_request(), mesh_new_client(), mesh_serve_expired_callback(), mesh_state_cleanup(), and tcp_req_info_handle_writedone().

◆ outside_network_delete()

void outside_network_delete ( struct outside_network outnet)

Delete outside_network structure.

Parameters
outnetobject to delete.

References sldns_buffer_free(), and outside_network::udp_buff.

◆ pending_udp_query()

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.

Parameters
sqserviced query.
packetwireformat query to send to destination.
timeoutin milliseconds from now.
callbackfunction to call on error, timeout or reply.
callback_arguser argument for callback function.
Returns
: NULL on error for malloc or socket. Else the pending query object.

References serviced_query::addr, serviced_query::addrlen, outside_network::base, log_assert, serviced_query::outnet, sldns_buffer_begin(), sldns_buffer_capacity(), sldns_buffer_flip(), sldns_buffer_limit(), sldns_buffer_new(), and sldns_buffer_write().

◆ pending_tcp_query()

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.

Parameters
sqserviced query.
packetwireformat query to send to destination. copied from.
timeoutin milliseconds from now. Timer starts running now. Timer may expire if all buffers are used, without any query been sent to the server yet.
callbackfunction to call on error, timeout or reply.
callback_arguser argument for callback function.
Returns
: false on error for malloc or socket. Else the pending TCP object.

References serviced_query::addr, serviced_query::addrlen, outside_network::base, log_assert, serviced_query::outnet, sldns_buffer_begin(), sldns_buffer_capacity(), sldns_buffer_flip(), sldns_buffer_limit(), sldns_buffer_new(), and sldns_buffer_write().

◆ outnet_serviced_query_stop()

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.

Parameters
sqserviced query to adjust.
cb_argcallback argument of callback that needs removal. same as the callback_arg to outnet_serviced_query().

References fake_pending::buffer, fake_pending::cb_arg, log_assert, log_info(), fake_pending::next, replay_runtime::pending_list, fake_pending::pkt, fake_pending::runtime, sldns_buffer_free(), and fake_pending::zone.

◆ comm_point_delete()

◆ comm_timer_create()

struct comm_timer* comm_timer_create ( struct comm_base base,
void(*)(void *)  cb,
void *  cb_arg 
)

create timer.

Not active upon creation.

Parameters
baseevent handling base.
cbcallback function: void myfunc(void* myarg);
cb_arguser callback argument.
Returns
: the new timer or NULL on error.

Referenced by dt_msg_queue_create(), mesh_serve_expired_init(), pending_tcp_query(), pending_udp_query(), serviced_create(), validate_suspend_setup_timer(), xfr_probe_send_probe(), and xfr_transfer_init_fetch().

◆ comm_timer_disable()

void comm_timer_disable ( struct comm_timer timer)

disable timer.

Stops callbacks from happening.

Parameters
timerto disable.

References fake_timer::enabled, and log_info().

Referenced by auth_xfer_probe_udp_callback(), and auth_xfer_transfer_http_callback().

◆ comm_timer_set()

void comm_timer_set ( struct comm_timer timer,
struct timeval *  tv 
)

◆ comm_timer_delete()

◆ outnet_comm_point_for_http()

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.

Parameters
outnetoutside_network with the comm_base it is attached to, and the tcp_mss.
cbcallback function for the commpoint.
cb_argcallback argument for cb.
to_addrintended destination.
to_addrlenlength of to_addr.
timeouttimeout for the TCP connection. timeout in milliseconds, or -1 for no (change to the) timeout. So seconds*1000.
sslset to true for https.
hosthostname to use for the destination. part of http request.
pathpathname to lookup, eg. name of the file on the destination.
cfgrunning configuration for User-Agent setup.
Returns
http_out commpoint, or NULL.

References outside_network::base, fake_commpoint::cb, fake_commpoint::cb_arg, replay_runtime::cb_arg, FAKE_COMMPOINT_TYPECODE, fake_commpoint::runtime, fake_commpoint::type_http_out, and fake_commpoint::typecode.

Variable Documentation

◆ saved_scenario

struct replay_scenario* saved_scenario = NULL
static

Global variable: the scenario.

Saved here for when event_init is done.

Referenced by fake_event_cleanup(), and fake_event_init().