unbound: util/netevent.h File Reference

unbound 0.1

Data Structures | Macros | Typedefs | Enumerations | Functions
netevent.h File Reference

This file contains event notification functions. More...

`#include "dnscrypt/dnscrypt.h"`

## Data Structures
struct | comm_base
| A communication point dispatcher. More...
struct | comm_reply
| Reply information for a communication point. More...
struct | comm_point
| Communication point to the network These behaviours can be accomplished by setting the flags and passing return values from the callback. More...
struct | comm_timer
| Structure only for making timeout events. More...
struct | comm_signal
| Structure only for signal events. More...
struct | http2_session
| HTTP2 session. More...
struct | http2_stream
| HTTP stream. More...

## Macros
#define | NETEVENT_NOERROR 0
| to pass no_error to callback function
#define | NETEVENT_CLOSED -1
| to pass closed connection to callback function
#define | NETEVENT_TIMEOUT -2
| to pass timeout happened to callback function
#define | NETEVENT_CAPSFAIL -3
| to pass fallback from capsforID to callback function; 0x20 failed
#define | NETEVENT_DONE -4
| to pass done transfer to callback function; http file is complete
#define | NETEVENT_PKT_WRITTEN -5
| to pass write of the write packet is done to callback function used when tcp_write_and_read is enabled
#define | NETEVENT_SLOW_ACCEPT_TIME 2000
| timeout to slow accept calls when not possible, in msec.
#define | SLOW_LOG_TIME 10
| timeout to slow down log print, so it does not spam the logs, in sec

## Typedefs
typedef int | comm_point_callback_type(struct comm_point *, void *, int, struct comm_reply *)
| callback from communication point function type

## Enumerations
enum | http_status { HTTP_STATUS_OK = 200 , HTTP_STATUS_BAD_REQUEST = 400 , HTTP_STATUS_NOT_FOUND = 404 , HTTP_STATUS_PAYLOAD_TOO_LARGE = 413 , HTTP_STATUS_URI_TOO_LONG = 414 , HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE = 415 , HTTP_STATUS_NOT_IMPLEMENTED = 501 }
| enum of HTTP status

## Functions
struct comm_base * | comm_base_create (int sigs)
| Create a new comm base.
struct comm_base * | comm_base_create_event (struct ub_event_base *base)
| Create comm base that uses the given ub_event_base (underlying pluggable event mechanism pointer).
void | comm_base_delete_no_base (struct comm_base *b)
| Delete comm base structure but not the underlying lib event base.
void | comm_base_delete (struct comm_base *b)
| Destroy a comm base.
void | comm_base_timept (struct comm_base *b, time_t **tt, struct timeval **tv)
| Obtain two pointers.
void | comm_base_dispatch (struct comm_base *b)
| Dispatch the comm base events.
void | comm_base_exit (struct comm_base *b)
| Exit from dispatch loop.
void | comm_base_set_slow_accept_handlers (struct comm_base *b, void(*stop_accept)(void *), void(*start_accept)(void *), void *arg)
| Set the slow_accept mode handlers.
struct ub_event_base * | comm_base_internal (struct comm_base *b)
| Access internal data structure (for util/tube.c on windows)
struct comm_point * | comm_point_create_udp (struct comm_base *base, int fd, struct sldns_buffer *buffer, int pp2_enabled, comm_point_callback_type *callback, void *callback_arg, struct unbound_socket *socket)
| Create an UDP comm point.
struct comm_point * | comm_point_create_udp_ancil (struct comm_base *base, int fd, struct sldns_buffer *buffer, int pp2_enabled, comm_point_callback_type *callback, void *callback_arg, struct unbound_socket *socket)
| Create an UDP with ancillary data comm point.
struct comm_point * | comm_point_create_tcp (struct comm_base *base, int fd, int num, int idle_timeout, int harden_large_queries, uint32_t http_max_streams, char *http_endpoint, struct tcl_list *tcp_conn_limit, size_t bufsize, struct sldns_buffer *spoolbuf, enum listen_type port_type, int pp2_enabled, comm_point_callback_type *callback, void *callback_arg, struct unbound_socket *socket)
| Create a TCP listener comm point.
struct comm_point * | comm_point_create_tcp_out (struct comm_base *base, size_t bufsize, comm_point_callback_type *callback, void *callback_arg)
| Create an outgoing TCP commpoint.
struct comm_point * | comm_point_create_http_out (struct comm_base *base, size_t bufsize, comm_point_callback_type *callback, void *callback_arg, struct sldns_buffer *temp)
| Create an outgoing HTTP commpoint.
struct comm_point * | comm_point_create_local (struct comm_base *base, int fd, size_t bufsize, comm_point_callback_type *callback, void *callback_arg)
| Create commpoint to listen to a local domain file descriptor.
struct comm_point * | comm_point_create_raw (struct comm_base *base, int fd, int writing, comm_point_callback_type *callback, void *callback_arg)
| Create commpoint to listen to a local domain pipe descriptor.
void | comm_point_close (struct comm_point *c)
| Close a comm point fd.
void | comm_point_delete (struct comm_point *c)
| Close and deallocate (free) the comm point.
void | comm_point_send_reply (struct comm_reply *repinfo)
| Send reply.
void | comm_point_drop_reply (struct comm_reply *repinfo)
| Drop reply.
int | comm_point_send_udp_msg (struct comm_point *c, struct sldns_buffer *packet, struct sockaddr *addr, socklen_t addrlen, int is_connected)
| Send an udp message over a commpoint.
void | comm_point_stop_listening (struct comm_point *c)
| Stop listening for input on the commpoint.
void | comm_point_start_listening (struct comm_point *c, int newfd, int msec)
| Start listening again for input on the comm point.
void | comm_point_listen_for_rw (struct comm_point *c, int rd, int wr)
| Stop listening and start listening again for reading or writing.
int | adjusted_tcp_timeout (struct comm_point *c)
| For TCP handlers that use c->tcp_timeout_msec, this routine adjusts it with the minimum.
size_t | comm_point_get_mem (struct comm_point *c)
| Get size of memory used by comm point.
struct comm_timer * | comm_timer_create (struct comm_base *base, void(*cb)(void *), void *cb_arg)
| create timer.
void | comm_timer_disable (struct comm_timer *timer)
| disable timer.
void | comm_timer_set (struct comm_timer *timer, struct timeval *tv)
| reset timevalue for timer.
void | comm_timer_delete (struct comm_timer *timer)
| delete timer.
int | comm_timer_is_set (struct comm_timer *timer)
| see if timeout has been set to a value.
size_t | comm_timer_get_mem (struct comm_timer *timer)
| Get size of memory used by comm timer.
struct comm_signal * | comm_signal_create (struct comm_base *base, void(*callback)(int, void *), void *cb_arg)
| Create a signal handler.
int | comm_signal_bind (struct comm_signal *comsig, int sig)
| Bind signal struct to catch a signal.
void | comm_signal_delete (struct comm_signal *comsig)
| Delete the signal communication point.
int | comm_point_perform_accept (struct comm_point *c, struct sockaddr_storage *addr, socklen_t *addrlen)
| perform accept(2) with error checking.
void | comm_point_udp_callback (int fd, short event, void *arg)
| This routine is published for checks and tests, and is only used internally.
void | comm_point_udp_ancil_callback (int fd, short event, void *arg)
| This routine is published for checks and tests, and is only used internally.
void | comm_point_tcp_accept_callback (int fd, short event, void *arg)
| This routine is published for checks and tests, and is only used internally.
void | comm_point_tcp_handle_callback (int fd, short event, void *arg)
| This routine is published for checks and tests, and is only used internally.
void | comm_point_http_handle_callback (int fd, short event, void *arg)
| This routine is published for checks and tests, and is only used internally.
struct http2_stream * | http2_stream_create (int32_t stream_id)
| Create new http2 stream.
void | http2_session_add_stream (struct http2_session *h2_session, struct http2_stream *h2_stream)
| Add new stream to session linked list.
void | http2_stream_add_meshstate (struct http2_stream *h2_stream, struct mesh_area *mesh, struct mesh_state *m)
| Add mesh state to stream.
void | comm_timer_callback (int fd, short event, void *arg)
| This routine is published for checks and tests, and is only used internally.
void | comm_signal_callback (int fd, short event, void *arg)
| This routine is published for checks and tests, and is only used internally.
void | comm_point_local_handle_callback (int fd, short event, void *arg)
| This routine is published for checks and tests, and is only used internally.
void | comm_point_raw_handle_callback (int fd, short event, void *arg)
| This routine is published for checks and tests, and is only used internally.
void | comm_base_handle_slow_accept (int fd, short event, void *arg)
| This routine is published for checks and tests, and is only used internally.
int | tcp_connect_errno_needs_log (struct sockaddr *addr, socklen_t addrlen)
| See if errno for tcp connect has to be logged or not.

## Detailed Description

This file contains event notification functions.

There are three types of communication points o UDP socket - perthread buffer. o TCP-accept socket - array of TCP-sockets, socketcount. o TCP socket - own buffer, parent-TCPaccept, read/write state, number of bytes read/written, timeout.

There are sockets aimed towards our clients and towards the internet. o frontside - aimed towards our clients, queries come in, answers back. o behind - aimed towards internet, to the authoritative DNS servers.

Several event types are available: o comm_base - for thread safety of the comm points, one per thread. o comm_point - udp and tcp networking, with callbacks. o comm_timer - a timeout with callback. o comm_signal - callbacks when signal is caught. o comm_reply - holds reply info during networking callback.

## Function Documentation

## ◆ comm_base_create()

struct comm_base * comm_base_create | ( | int | sigs | ) |

Create a new comm base.

Parameters

  sigs | if true it attempts to create a default loop for signal handling.

Returns
  : the new comm base. NULL on error.

References internal_base::base, comm_base::eb, internal_base::now, internal_base::secs, ub_comm_base_now(), ub_default_event_base(), ub_get_event_sys(), VERB_ALGO, and verbose().

## ◆ comm_base_create_event()

struct comm_base * comm_base_create_event | ( | struct ub_event_base * | base | ) |

Create comm base that uses the given ub_event_base (underlying pluggable event mechanism pointer).

Parameters

  base | underlying pluggable event base.

Returns
  : the new comm base. NULL on error.

References internal_base::base, comm_base::eb, and ub_comm_base_now().

Referenced by libworker_setup().

## ◆ comm_base_delete_no_base()

void comm_base_delete_no_base | ( | struct comm_base * | b | ) |

Delete comm base structure but not the underlying lib event base.

All comm points must have been deleted.

Parameters

  b | the base to delete.

References internal_base::base, comm_base::eb, log_err(), internal_base::slow_accept, internal_base::slow_accept_enabled, ub_event_del(), and ub_event_free().

Referenced by libworker_delete_event().

## ◆ comm_base_delete()

void comm_base_delete | ( | struct comm_base * | b | ) |

Destroy a comm base.

All comm points must have been deleted.

Parameters

  b | the base to delete.

References replay_runtime::answer_list, internal_base::base, delete_fake_pending(), delete_replay_answer(), comm_base::eb, log_err(), macro_store_delete(), fake_pending::next, replay_answer::next, fake_timer::next, replay_runtime::pending_list, fake_timer::runtime, replay_runtime::scenario, internal_base::slow_accept, internal_base::slow_accept_enabled, replay_runtime::timer_list, ub_event_base_free(), ub_event_del(), ub_event_free(), and replay_runtime::vars.

Referenced by libworker_delete(), and worker_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

  b | the communication base that will update the time values.
  tt | pointer to time in seconds is returned.
  tv | pointer to time in microseconds is returned.

References comm_base::eb, internal_base::now, replay_runtime::now_secs, replay_runtime::now_tv, and internal_base::secs.

Referenced by libworker_setup(), outside_network_create(), ub_comm_base_now(), and worker_init().

## ◆ comm_base_dispatch()

void comm_base_dispatch | ( | struct comm_base * | b | ) |

Dispatch the comm base events.

Parameters

  b | the communication to perform.

References internal_base::base, comm_base::eb, fatal_exit(), run_scenario(), replay_runtime::sig_cb, replay_runtime::sig_cb_arg, and ub_event_base_dispatch().

Referenced by libworker_dobg(), libworker_fg(), and worker_work().

## ◆ comm_base_exit()

void comm_base_exit | ( | struct comm_base * | b | ) |

Exit from dispatch loop.

Parameters

  b | the communication base that is in dispatch().

References internal_base::base, comm_base::eb, replay_runtime::exit_cleanly, fatal_exit(), log_err(), and ub_event_base_loopexit().

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

## ◆ comm_base_set_slow_accept_handlers()

void comm_base_set_slow_accept_handlers | ( | struct comm_base * | b,
|  | void(*)(void *) | stop_accept,
|  | void(*)(void *) | start_accept,
|  | void * | arg
| ) |  |

Set the slow_accept mode handlers.

You can not provide these if you do not perform accept() calls.

Parameters

  b | comm base
  stop_accept | function that stops listening to accept fds.
  start_accept | function that resumes listening to accept fds.
  arg | callback arg to pass to the functions.

References comm_base::cb_arg, comm_base::start_accept, and comm_base::stop_accept.

## ◆ comm_base_internal()

struct ub_event_base * comm_base_internal | ( | struct comm_base * | b | ) |

Access internal data structure (for util/tube.c on windows)

Parameters

  b | comm base

Returns
  ub_event_base.

References internal_base::base, and comm_base::eb.

## ◆ comm_point_create_udp()

struct comm_point * comm_point_create_udp | ( | struct comm_base * | base,
|  | int | fd,
|  | struct sldns_buffer * | buffer,
|  | int | pp2_enabled,
|  | comm_point_callback_type * | callback,
|  | void * | callback_arg,
|  | struct unbound_socket * | socket
| ) |  |

Create an UDP comm point.

Calls malloc. setups the structure with the parameters you provide.

Parameters

  base | in which base to alloc the commpoint.
  fd | file descriptor of open UDP socket.
  buffer | shared buffer by UDP sockets from this thread.
  pp2_enabled | if the comm point will support PROXYv2.
  callback | callback function pointer.
  callback_arg | will be passed to your callback function.
  socket | and opened socket properties will be passed to your callback function.

Returns
  : returns the allocated communication point. NULL on error. Sets timeout to NULL. Turns off TCP options.

References internal_event::base, internal_base::base, comm_point::buffer, comm_point::callback, comm_point::cb_arg, comm_point_delete(), comm_point_udp_callback(), comm_point::cur_tcp_count, comm_point::do_not_close, comm_base::eb, internal_event::ev, comm_point::ev, comm_point::event_added, comm_point::fd, comm_point::inuse, log_err(), comm_point::max_tcp_count, comm_point::pp2_enabled, comm_point::pp2_header_state, comm_point::tcp_byte_count, comm_point::tcp_check_nb_connect, comm_point::tcp_do_close, comm_point::tcp_do_toggle_rw, comm_point::tcp_free, comm_point::tcp_handlers, comm_point::tcp_is_reading, comm_point::tcp_parent, comm_point::timeout, comm_point::type, UB_EV_PERSIST, UB_EV_READ, ub_event_add(), and ub_event_new().

Referenced by listen_create(), and outnet_comm_point_for_udp().

## ◆ comm_point_create_udp_ancil()

struct comm_point * comm_point_create_udp_ancil | ( | struct comm_base * | base,
|  | int | fd,
|  | struct sldns_buffer * | buffer,
|  | int | pp2_enabled,
|  | comm_point_callback_type * | callback,
|  | void * | callback_arg,
|  | struct unbound_socket * | socket
| ) |  |

Create an UDP with ancillary data comm point.

Calls malloc. Uses recvmsg instead of recv to get udp message. setups the structure with the parameters you provide.

Parameters

  base | in which base to alloc the commpoint.
  fd | file descriptor of open UDP socket.
  buffer | shared buffer by UDP sockets from this thread.
  pp2_enabled | if the comm point will support PROXYv2.
  callback | callback function pointer.
  callback_arg | will be passed to your callback function.
  socket | and opened socket properties will be passed to your callback function.

Returns
  : returns the allocated communication point. NULL on error. Sets timeout to NULL. Turns off TCP options.

References internal_event::base, internal_base::base, comm_point::buffer, comm_point::callback, comm_point::cb_arg, comm_point_delete(), comm_point_udp_ancil_callback(), comm_point::cur_tcp_count, comm_point::do_not_close, comm_base::eb, internal_event::ev, comm_point::ev, comm_point::event_added, comm_point::fd, comm_point::inuse, log_err(), comm_point::max_tcp_count, comm_point::pp2_enabled, comm_point::pp2_header_state, comm_point::tcp_byte_count, comm_point::tcp_check_nb_connect, comm_point::tcp_do_close, comm_point::tcp_do_toggle_rw, comm_point::tcp_free, comm_point::tcp_handlers, comm_point::tcp_is_reading, comm_point::tcp_parent, comm_point::timeout, comm_point::type, UB_EV_PERSIST, UB_EV_READ, ub_event_add(), and ub_event_new().

Referenced by listen_create().

## ◆ comm_point_create_tcp()

struct comm_point * comm_point_create_tcp | ( | struct comm_base * | base,
|  | int | fd,
|  | int | num,
|  | int | idle_timeout,
|  | int | harden_large_queries,
|  | uint32_t | http_max_streams,
|  | char * | http_endpoint,
|  | struct tcl_list * | tcp_conn_limit,
|  | size_t | bufsize,
|  | struct sldns_buffer * | spoolbuf,
|  | enum listen_type | port_type,
|  | int | pp2_enabled,
|  | comm_point_callback_type * | callback,
|  | void * | callback_arg,
|  | struct unbound_socket * | socket
| ) |  |

Create a TCP listener comm point.

Calls malloc. Setups the structure with the parameters you provide. Also Creates TCP Handlers, pre allocated for you. Uses the parameters you provide.

Parameters

  base | in which base to alloc the commpoint.
  fd | file descriptor of open TCP socket set to listen nonblocking.
  num | becomes max_tcp_count, the routine allocates that many tcp handler commpoints.
  idle_timeout | TCP idle timeout in ms.
  harden_large_queries | whether query size should be limited.
  http_max_streams | maximum number of HTTP/2 streams per connection.
  http_endpoint | HTTP endpoint to service queries on
  tcp_conn_limit | TCP connection limit info.
  bufsize | size of buffer to create for handlers.
  spoolbuf | shared spool buffer for tcp_req_info structures. or NULL to not create those structures in the tcp handlers.
  port_type | the type of port we are creating a TCP listener for. Used to select handler type to use.
  pp2_enabled | if the comm point will support PROXYv2.
  callback | callback function pointer for TCP handlers.
  callback_arg | will be passed to your callback function.
  socket | and opened socket properties will be passed to your callback function.

Returns
  : returns the TCP listener commpoint. You can find the TCP handlers in the array inside the listener commpoint. returns NULL on error. Inits timeout to NULL. All handlers are on the free list.

References internal_event::base, internal_base::base, comm_point::buffer, comm_point::callback, comm_point::cb_arg, comm_point_create_tcp_handler(), comm_point_delete(), comm_point_tcp_accept_callback(), comm_point::comm_tcp_accept, comm_point::cur_tcp_count, comm_point::do_not_close, comm_base::eb, internal_event::ev, comm_point::ev, comm_point::event_added, comm_point::fd, comm_point::http_endpoint, listen_type_http, listen_type_ssl, listen_type_tcp, listen_type_tcp_dnscrypt, log_err(), comm_point::max_tcp_count, comm_point::pp2_enabled, comm_point::pp2_header_none, comm_point::pp2_header_state, comm_point::tcl_addr, comm_point::tcp_byte_count, comm_point::tcp_check_nb_connect, comm_point::tcp_conn_limit, comm_point::tcp_do_close, comm_point::tcp_do_toggle_rw, comm_point::tcp_free, comm_point::tcp_handlers, comm_point::tcp_is_reading, comm_point::tcp_keepalive, comm_point::tcp_parent, comm_point::tcp_timeout_msec, comm_point::timeout, comm_point::type, UB_EV_PERSIST, UB_EV_READ, ub_event_add(), and ub_event_new().

Referenced by listen_create().

## ◆ comm_point_create_tcp_out()

struct comm_point * comm_point_create_tcp_out | ( | struct comm_base * | base,
|  | size_t | bufsize,
|  | comm_point_callback_type * | callback,
|  | void * | callback_arg
| ) |  |

Create an outgoing TCP commpoint.

No file descriptor is opened, left at -1.

Parameters

  base | in which base to alloc the commpoint.
  bufsize | size of buffer to create for handlers.
  callback | callback function pointer for the handler.
  callback_arg | will be passed to your callback function.

Returns
  : the commpoint or NULL on error.

References internal_event::base, internal_base::base, comm_point::buffer, comm_reply::c, comm_point::callback, comm_point::cb_arg, comm_point_tcp_handle_callback(), comm_point::cur_tcp_count, comm_point::do_not_close, comm_base::eb, internal_event::ev, comm_point::ev, comm_point::fd, log_err(), comm_point::max_tcp_count, comm_point::pp2_enabled, comm_point::pp2_header_state, comm_point::repinfo, sldns_buffer_free(), sldns_buffer_new(), comm_point::tcl_addr, comm_point::tcp_byte_count, comm_point::tcp_check_nb_connect, comm_point::tcp_conn_limit, comm_point::tcp_do_close, comm_point::tcp_do_toggle_rw, comm_point::tcp_free, comm_point::tcp_handlers, comm_point::tcp_is_reading, comm_point::tcp_keepalive, comm_point::tcp_parent, TCP_QUERY_TIMEOUT, comm_point::tcp_timeout_msec, comm_point::timeout, comm_point::type, UB_EV_PERSIST, UB_EV_WRITE, and ub_event_new().

Referenced by outnet_comm_point_for_tcp().

## ◆ comm_point_create_http_out()

struct comm_point * comm_point_create_http_out | ( | struct comm_base * | base,
|  | size_t | bufsize,
|  | comm_point_callback_type * | callback,
|  | void * | callback_arg,
|  | struct sldns_buffer * | temp
| ) |  |

Create an outgoing HTTP commpoint.

No file descriptor is opened, left at -1.

Parameters

  base | in which base to alloc the commpoint.
  bufsize | size of buffer to create for handlers.
  callback | callback function pointer for the handler.
  callback_arg | will be passed to your callback function.
  temp | sldns buffer, shared between other http_out commpoints, for temporary data when performing callbacks.

Returns
  : the commpoint or NULL on error.

References internal_event::base, internal_base::base, comm_point::buffer, comm_reply::c, comm_point::callback, comm_point::cb_arg, comm_point_http_handle_callback(), comm_point::cur_tcp_count, comm_point::do_not_close, comm_base::eb, internal_event::ev, comm_point::ev, comm_point::fd, comm_point::http_in_chunk_headers, comm_point::http_in_headers, comm_point::http_is_chunked, comm_point::http_temp, log_err(), comm_point::max_tcp_count, comm_point::pp2_enabled, comm_point::pp2_header_state, comm_point::repinfo, sldns_buffer_free(), sldns_buffer_new(), comm_point::ssl, comm_point::tcp_byte_count, comm_point::tcp_check_nb_connect, comm_point::tcp_do_close, comm_point::tcp_do_toggle_rw, comm_point::tcp_free, comm_point::tcp_handlers, comm_point::tcp_is_reading, comm_point::tcp_parent, comm_point::timeout, comm_point::type, UB_EV_PERSIST, UB_EV_WRITE, and ub_event_new().

Referenced by outnet_comm_point_for_http().

## ◆ comm_point_create_local()

struct comm_point * comm_point_create_local | ( | struct comm_base * | base,
|  | int | fd,
|  | size_t | bufsize,
|  | comm_point_callback_type * | callback,
|  | void * | callback_arg
| ) |  |

Create commpoint to listen to a local domain file descriptor.

Parameters

  base | in which base to alloc the commpoint.
  fd | file descriptor of open AF_UNIX socket set to listen nonblocking.
  bufsize | size of buffer to create for handlers.
  callback | callback function pointer for the handler.
  callback_arg | will be passed to your callback function.

Returns
  : the commpoint or NULL on error.

References internal_event::base, internal_base::base, comm_point::buffer, comm_point::callback, comm_point::cb_arg, comm_point_local_handle_callback(), comm_point::cur_tcp_count, comm_point::do_not_close, comm_base::eb, internal_event::ev, comm_point::ev, comm_point::event_added, comm_point::fd, log_err(), comm_point::max_tcp_count, comm_point::pp2_enabled, comm_point::pp2_header_state, sldns_buffer_new(), comm_point::tcp_byte_count, comm_point::tcp_check_nb_connect, comm_point::tcp_do_close, comm_point::tcp_do_toggle_rw, comm_point::tcp_free, comm_point::tcp_handlers, comm_point::tcp_is_reading, comm_point::tcp_parent, comm_point::timeout, comm_point::type, UB_EV_PERSIST, UB_EV_READ, ub_event_add(), ub_event_free(), and ub_event_new().

## ◆ comm_point_create_raw()

struct comm_point * comm_point_create_raw | ( | struct comm_base * | base,
|  | int | fd,
|  | int | writing,
|  | comm_point_callback_type * | callback,
|  | void * | callback_arg
| ) |  |

Create commpoint to listen to a local domain pipe descriptor.

Parameters

  base | in which base to alloc the commpoint.
  fd | file descriptor.
  writing | true if you want to listen to writes, false for reads.
  callback | callback function pointer for the handler.
  callback_arg | will be passed to your callback function.

Returns
  : the commpoint or NULL on error.

References internal_event::base, internal_base::base, comm_point::buffer, comm_point::callback, comm_point::cb_arg, comm_point::cur_tcp_count, comm_point::do_not_close, comm_base::eb, internal_event::ev, comm_point::ev, comm_point::event_added, comm_point::fd, log_err(), comm_point::max_tcp_count, comm_point::pp2_enabled, comm_point::pp2_header_state, comm_point::tcp_byte_count, comm_point::tcp_check_nb_connect, comm_point::tcp_do_close, comm_point::tcp_do_toggle_rw, comm_point::tcp_free, comm_point::tcp_handlers, comm_point::tcp_is_reading, comm_point::tcp_parent, comm_point::timeout, comm_point::type, UB_EV_PERSIST, UB_EV_READ, UB_EV_WRITE, ub_event_add(), ub_event_free(), and ub_event_new().

## ◆ comm_point_close()

void comm_point_close | ( | struct comm_point * | c | ) |

Close a comm point fd.

Parameters

  c | comm point to close.

References comm_point::do_not_close, internal_event::ev, comm_point::ev, comm_point::event_added, comm_point::fd, comm_point::h2_session, http2_session_server_delete(), log_err(), sock_close(), comm_point::tcl_addr, tcl_close_connection(), comm_point::tcp_more_read_again, comm_point::tcp_more_write_again, comm_point::tcp_req_info, tcp_req_info_clear(), comm_point::type, UB_EV_READ, UB_EV_WRITE, ub_event_del(), ub_winsock_tcp_wouldblock(), VERB_ALGO, and verbose().

Referenced by comm_point_delete(), comm_point_tcp_accept_callback(), decommission_pending_tcp(), outnet_tcp_take_into_use(), portcomm_loweruse(), reclaim_http_handler(), and reclaim_tcp_handler().

## ◆ comm_point_delete()

void comm_point_delete | ( | struct comm_point * | c | ) |

Close and deallocate (free) the comm point.

If the comm point is a tcp-accept point, also its tcp-handler points are deleted.

Parameters

  c | comm point to delete.

References comm_point::buffer, comm_point_close(), comm_point_delete(), internal_event::ev, comm_point::ev, FAKE_COMMPOINT_TYPECODE, comm_point::h2_session, http2_session_delete(), comm_point::http_endpoint, log_assert, comm_point::max_tcp_count, fake_commpoint::pending, pending_list_delete(), fake_commpoint::runtime, sldns_buffer_free(), comm_point::ssl, comm_point::tcp_handlers, comm_point::tcp_req_info, tcp_req_info_delete(), comm_point::timeout, comm_point::type, fake_commpoint::type_tcp_out, fake_commpoint::typecode, and ub_event_free().

Referenced by auth_xfer_delete(), auth_xfer_probe_timer_callback(), auth_xfer_probe_udp_callback(), auth_xfer_transfer_http_callback(), auth_xfer_transfer_tcp_callback(), auth_xfer_transfer_timer_callback(), clean_point(), comm_point_create_tcp(), comm_point_create_udp(), comm_point_create_udp_ancil(), comm_point_delete(), daemon_remote_clear(), listen_create(), listen_list_delete(), outnet_comm_point_for_http(), outnet_comm_point_for_tcp(), outside_network_delete(), tube_remove_bg_listen(), tube_remove_bg_write(), xfr_probe_disown(), xfr_probe_send_probe(), xfr_transfer_disown(), and xfr_transfer_init_fetch().

## ◆ comm_point_send_reply()

void comm_point_send_reply | ( | struct comm_reply * | repinfo | ) |

Send reply.

Put message into commpoint buffer.

Parameters

  repinfo | The reply info copied from a commpoint callback call.

References unbound_socket::addr, adjusted_tcp_timeout(), replay_runtime::answer_last, replay_runtime::answer_list, comm_point::buffer, comm_reply::c, comm_reply::client_addr, comm_reply::client_addrlen, comm_point_drop_reply(), comm_point_send_udp_msg(), comm_point_send_udp_msg_if(), comm_point_start_listening(), comm_point_stop_listening(), comm_point::dtenv, comm_point::ev, fatal_exit(), comm_point::h2_session, comm_point::h2_stream, log_addr(), log_assert, log_info(), log_pkt(), memdup(), replay_answer::next, replay_answer::pkt, comm_reply::remote_addr, comm_reply::remote_addrlen, replay_answer::repinfo, sldns_buffer_begin(), sldns_buffer_limit(), tcp_req_info::spool_buffer, comm_reply::srctype, comm_point::tcp_is_reading, comm_point::tcp_parent, comm_point::tcp_req_info, tcp_req_info_send_reply(), comm_point::type, comm_point::use_h2, and VERB_ALGO.

Referenced by fake_front_query(), mesh_new_client(), mesh_send_reply(), and reply_and_prefetch().

## ◆ comm_point_drop_reply()

void comm_point_drop_reply | ( | struct comm_reply * | repinfo | ) |

Drop reply.

Cleans up.

Parameters

  repinfo | The reply info copied from a commpoint callback call.

References comm_point::buffer, comm_reply::c, comm_point::h2_session, tcp_req_info::is_drop, http2_session::is_drop, log_assert, log_info(), http2_session::postpone_drop, reclaim_http_handler(), reclaim_tcp_handler(), sldns_buffer_free(), comm_point::tcp_req_info, and comm_point::type.

Referenced by comm_point_send_reply(), dnsc_handle_curved_request(), mesh_new_client(), mesh_query_done(), mesh_state_cleanup(), tcp_req_info_handle_writedone(), tcp_req_info_send_reply(), and worker_handle_request().

## ◆ comm_point_send_udp_msg()

int comm_point_send_udp_msg | ( | struct comm_point * | c,
|  | struct sldns_buffer * | packet,
|  | struct sockaddr * | addr,
|  | socklen_t | addrlen,
|  | int | is_connected
| ) |  |

Send an udp message over a commpoint.

Parameters

  c | commpoint to send it from.
  packet | what to send.
  addr | where to send it to. If NULL, send is performed, for connected sockets, to the connected address.
  addrlen | length of addr.
  is_connected | if the UDP socket is connect()ed.

Returns
  : false on a failure.

References internal_event::base, comm_base::eb, comm_point::ev, comm_point::fd, internal_base::last_writewait_log, log_addr(), log_assert, log_err(), log_info(), comm_reply::pktinfo, internal_base::secs, SEND_BLOCKED_WAIT_TIMEOUT, sldns_buffer_begin(), sldns_buffer_remaining(), SLOW_LOG_TIME, sock_strerror(), comm_reply::srctype, udp_send_errno_needs_log(), VERB_OPS, and verbose().

Referenced by comm_point_send_reply(), and comm_point_udp_callback().

## ◆ comm_point_stop_listening()

void comm_point_stop_listening | ( | struct comm_point * | c | ) |

Stop listening for input on the commpoint.

No callbacks will happen.

Parameters

  c | commpoint to disable. The fd is not closed.

References internal_event::ev, comm_point::ev, comm_point::event_added, comm_point::fd, log_err(), ub_event_del(), VERB_ALGO, and verbose().

Referenced by comm_point_http2_handle_read(), comm_point_http2_handle_write(), comm_point_http_handle_write(), comm_point_send_reply(), comm_point_tcp_accept_callback(), tcp_callback_reader(), tcp_callback_writer(), and tcp_req_info_handle_readdone().

## ◆ comm_point_start_listening()

void comm_point_start_listening | ( | struct comm_point * | c,
|  | int | newfd,
|  | int | msec
| ) |  |

Start listening again for input on the comm point.

Parameters

  c | commpoint to enable again.
  newfd | new fd, or -1 to leave fd be.
  msec | timeout in milliseconds, or -1 for no (change to the) timeout. So seconds*1000.

References internal_event::ev, comm_point::ev, comm_point::event_added, comm_point::fd, log_err(), sock_close(), comm_point::tcp_free, comm_point::tcp_is_reading, comm_point::tcp_write_and_read, comm_point::timeout, comm_point::type, UB_EV_READ, UB_EV_TIMEOUT, UB_EV_WRITE, ub_event_add(), ub_event_add_bits(), ub_event_del(), ub_event_del_bits(), ub_event_set_fd(), VERB_ALGO, and verbose().

Referenced by comm_point_http2_handle_read(), comm_point_http2_handle_write(), comm_point_http_handle_write(), comm_point_send_reply(), outnet_comm_point_for_http(), outnet_comm_point_for_tcp(), reclaim_http_handler(), reclaim_tcp_handler(), setup_tcp_handler(), tcp_callback_reader(), tcp_callback_writer(), and tcp_req_info_handle_readdone().

## ◆ comm_point_listen_for_rw()

void comm_point_listen_for_rw | ( | struct comm_point * | c,
|  | int | rd,
|  | int | wr
| ) |  |

Stop listening and start listening again for reading or writing.

Parameters

  c | commpoint
  rd | if true, listens for reading.
  wr | if true, listens for writing.

References internal_event::ev, comm_point::ev, comm_point::event_added, comm_point::fd, log_err(), comm_point::timeout, UB_EV_READ, UB_EV_TIMEOUT, UB_EV_WRITE, ub_event_add(), ub_event_add_bits(), ub_event_del(), ub_event_del_bits(), VERB_ALGO, and verbose().

Referenced by remote_handshake_later(), ssl_handle_read(), ssl_handle_write(), ssl_http_read_more(), ssl_http_write_more(), and tcp_req_info_setup_listen().

## ◆ adjusted_tcp_timeout()

int adjusted_tcp_timeout | ( | struct comm_point * | c | ) |

For TCP handlers that use c->tcp_timeout_msec, this routine adjusts it with the minimum.

Otherwise, a 0 value advertised without the minimum applied moves to a 0 in comm_point_start_listening and that routine treats it as no timeout, listen forever, which is not wanted.

Parameters

  c | comm point to use the tcp_timeout_msec of.

Returns
  adjusted tcp_timeout_msec value with the minimum if smaller.

References TCP_QUERY_TIMEOUT_MINIMUM, and comm_point::tcp_timeout_msec.

Referenced by comm_point_http2_handle_read(), comm_point_http2_handle_write(), comm_point_send_reply(), setup_tcp_handler(), tcp_callback_reader(), tcp_callback_writer(), tcp_req_info_handle_readdone(), tcp_req_info_send_reply(), and tcp_req_info_setup_listen().

## ◆ comm_point_get_mem()

size_t comm_point_get_mem | ( | struct comm_point * | c | ) |

Get size of memory used by comm point.

For TCP handlers this includes subhandlers. For UDP handlers, this does not include the (shared) UDP buffer.

Parameters

  c | commpoint.

Returns
  size in bytes.

References comm_point::buffer, comm_point_get_mem(), comm_point::ev, comm_point::max_tcp_count, sldns_buffer_capacity(), comm_point::tcp_handlers, comm_point::timeout, and comm_point::type.

Referenced by comm_point_get_mem(), and if_get_mem().

## ◆ 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

  base | event handling base.
  cb | callback function: void myfunc(void* myarg);
  cb_arg | user callback argument.

Returns
  : the new timer or NULL on error.

References internal_base::base, internal_timer::base, comm_timer::callback, fake_timer::cb, fake_timer::cb_arg, comm_timer::cb_arg, comm_base::eb, internal_timer::ev, comm_timer::ev_timer, fatal_exit(), fptr_ok, fptr_whitelist_comm_timer(), log_err(), fake_timer::next, fake_timer::runtime, internal_timer::super, replay_runtime::timer_list, UB_EV_TIMEOUT, and ub_event_new().

Referenced by dt_msg_queue_create(), mesh_serve_expired_init(), pending_tcp_query(), pending_udp_query(), serviced_create(), worker_init(), wsvc_setup_worker(), xfr_probe_send_probe(), xfr_set_timeout(), and xfr_transfer_init_fetch().

## ◆ comm_timer_disable()

void comm_timer_disable | ( | struct comm_timer * | timer | ) |

disable timer.

Stops callbacks from happening.

Parameters

  timer | to disable.

References fake_timer::enabled, internal_timer::enabled, internal_timer::ev, comm_timer::ev_timer, log_info(), and ub_timer_del().

Referenced by auth_xfer_probe_udp_callback(), auth_xfer_transfer_http_callback(), auth_xfer_transfer_tcp_callback(), comm_timer_delete(), comm_timer_set(), outnet_udp_cb(), and use_free_buffer().

## ◆ comm_timer_set()

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

reset timevalue for timer.

Parameters

  timer | timer to (re)set.
  tv | when the timer should activate. if NULL timer is disabled.

References internal_base::base, internal_timer::base, comm_timer_disable(), comm_base::eb, fake_timer::enabled, internal_timer::enabled, internal_timer::ev, comm_timer::ev_timer, log_assert, log_err(), log_info(), replay_runtime::now_tv, fake_timer::runtime, timeval_add(), fake_timer::tv, and ub_timer_add().

Referenced by dt_msg_queue_start_timer(), mesh_serve_expired_init(), outnet_tcp_take_query_setup(), outnet_waiting_tcp_list_add(), outnet_waiting_tcp_list_add_first(), pending_udp_timer_cb(), randomize_and_send_udp(), reset_worker_timer(), serviced_create(), set_cron_timer(), worker_init(), worker_probe_timer_cb(), worker_restart_timer(), xfr_probe_send_probe(), xfr_set_timeout(), and xfr_transfer_init_fetch().

## ◆ comm_timer_delete()

void comm_timer_delete | ( | struct comm_timer * | timer | ) |

delete timer.

Parameters

  timer | to delete.

References comm_timer_disable(), internal_timer::ev, comm_timer::ev_timer, fake_timer::next, fake_timer::runtime, replay_runtime::timer_list, and ub_event_free().

Referenced by auth_xfer_delete(), dt_msg_queue_delete(), mesh_query_done(), mesh_serve_expired_callback(), mesh_state_cleanup(), pending_delete(), pending_udp_query(), serviced_node_del(), waiting_tcp_delete(), worker_delete(), wsvc_desetup_worker(), xfr_nextprobe_disown(), xfr_probe_disown(), and xfr_transfer_disown().

## ◆ comm_timer_is_set()

int comm_timer_is_set | ( | struct comm_timer * | timer | ) |

see if timeout has been set to a value.

Parameters

  timer | the timer to examine.

Returns
  : false if disabled or not set.

References internal_timer::enabled, and comm_timer::ev_timer.

## ◆ comm_timer_get_mem()

size_t comm_timer_get_mem | ( | struct comm_timer * | timer | ) |

Get size of memory used by comm timer.

Parameters

  timer | the timer to examine.

Returns
  size in bytes.

Referenced by waiting_tcp_get_mem(), and waiting_udp_get_mem().

## ◆ 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

  base | communication base to use.
  callback | called when signal is caught.
  cb_arg | user argument to callback

Returns
  : the signal struct or NULL on error.

References comm_signal::base, comm_signal::callback, replay_runtime::cb_arg, comm_signal::cb_arg, comm_signal::ev_signal, log_err(), replay_runtime::sig_cb, and replay_runtime::sig_cb_arg.

Referenced by worker_init().

## ◆ comm_signal_bind()

int comm_signal_bind | ( | struct comm_signal * | comsig,
|  | int | sig
| ) |  |

Bind signal struct to catch a signal.

A single comm_signal can be bound to multiple signals, calling comm_signal_bind multiple times.

Parameters

  comsig | the communication point, with callback information.
  sig | signal number.

Returns
  : true on success. false on error.

References internal_base::base, comm_signal::base, comm_signal_callback(), comm_base::eb, comm_signal::ev_signal, log_assert, log_err(), entry::next, ub_event_free(), ub_signal_add(), and ub_signal_new().

## ◆ comm_signal_delete()

void comm_signal_delete | ( | struct comm_signal * | comsig | ) |

Delete the signal communication point.

Parameters

  comsig | to delete.

References internal_signal::ev, comm_signal::ev_signal, internal_signal::next, ub_event_free(), and ub_signal_del().

Referenced by worker_delete().

## ◆ comm_point_perform_accept()

int comm_point_perform_accept | ( | struct comm_point * | c,
|  | struct sockaddr_storage * | addr,
|  | socklen_t * | addrlen
| ) |  |

perform accept(2) with error checking.

Parameters

  c | commpoint with accept fd.
  addr | remote end returned here.
  addrlen | length of remote end returned here.

Returns
  new fd, or -1 on error. if -1, error message has been printed if necessary, simply drop out of the reading handler.

References internal_event::base, internal_base::base, comm_base::cb_arg, comm_base::eb, internal_event::ev, comm_point::ev, comm_point::fd, fd_set_nonblock(), fptr_ok, fptr_whitelist_stop_accept(), internal_base::last_slow_log, log_err(), log_err_addr(), NETEVENT_SLOW_ACCEPT_TIME, internal_base::secs, internal_base::slow_accept, internal_base::slow_accept_enabled, SLOW_LOG_TIME, sock_strerror(), comm_base::stop_accept, comm_point::tcl_addr, tcl_addr_lookup(), tcl_new_connection(), comm_point::tcp_conn_limit, comm_point::type, ub_comm_base_now(), UB_EV_READ, UB_EV_TIMEOUT, ub_event_add(), ub_event_new(), ub_winsock_tcp_wouldblock(), VERB_ALGO, VERB_OPS, verbose(), and verbosity.

Referenced by comm_point_tcp_accept_callback().

## ◆ comm_point_udp_callback()

void comm_point_udp_callback | ( | int | fd,
|  | short | event,
|  | void * | arg
| ) |  |

This routine is published for checks and tests, and is only used internally.

handle libevent callback for udp comm point.

Parameters

  fd | file descriptor.
  event | event bits from libevent: EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
  arg | the comm_point structure.

References internal_event::base, comm_point::buffer, comm_reply::c, comm_point::callback, comm_point::cb_arg, comm_reply::client_addr, comm_reply::client_addrlen, comm_point_send_udp_msg(), comm_point::comm_udp, consume_pp2_header(), comm_point::ev, comm_point::fd, fptr_ok, fptr_whitelist_comm_point(), log_assert, log_err(), MSG_DONTWAIT, NETEVENT_NOERROR, NUM_UDP_PER_SELECT, comm_point::pp2_enabled, comm_reply::remote_addr, comm_reply::remote_addrlen, sldns_buffer_begin(), sldns_buffer_clear(), sldns_buffer_flip(), sldns_buffer_remaining(), sldns_buffer_skip(), comm_reply::srctype, comm_point::type, ub_comm_base_now(), UB_EV_READ, and udp_recv_needs_log().

Referenced by comm_point_create_udp().

## ◆ comm_point_udp_ancil_callback()

void comm_point_udp_ancil_callback | ( | int | fd,
|  | short | event,
|  | void * | arg
| ) |  |

This routine is published for checks and tests, and is only used internally.

handle libevent callback for udp ancillary data comm point.

Parameters

  fd | file descriptor.
  event | event bits from libevent: EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
  arg | the comm_point structure.

References internal_event::base, comm_point::buffer, comm_reply::c, comm_point::callback, comm_point::cb_arg, comm_reply::client_addr, comm_reply::client_addrlen, comm_point_send_udp_msg_if(), comm_point::comm_udp, consume_pp2_header(), comm_point::ev, fatal_exit(), comm_point::fd, fptr_ok, fptr_whitelist_comm_point(), log_assert, log_err(), MSG_DONTWAIT, NETEVENT_NOERROR, NUM_UDP_PER_SELECT, comm_reply::pktinfo, comm_point::pp2_enabled, comm_reply::remote_addr, comm_reply::remote_addrlen, sldns_buffer_begin(), sldns_buffer_clear(), sldns_buffer_flip(), sldns_buffer_remaining(), sldns_buffer_skip(), comm_reply::srctype, comm_point::type, ub_comm_base_now(), UB_EV_READ, udp_recv_needs_log(), VERB_ALGO, and verbosity.

Referenced by comm_point_create_udp_ancil().

## ◆ comm_point_tcp_accept_callback()

void comm_point_tcp_accept_callback | ( | int | fd,
|  | short | event,
|  | void * | arg
| ) |  |

This routine is published for checks and tests, and is only used internally.

handle libevent callback for tcp accept comm point

Parameters

  fd | file descriptor.
  event | event bits from libevent: EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
  arg | the comm_point structure.

References internal_event::base, comm_point::comm_http, comm_point::comm_local, comm_point_close(), comm_point_http_handle_callback(), comm_point_perform_accept(), comm_point_stop_listening(), comm_point_tcp_handle_callback(), comm_point::comm_raw, comm_point::comm_ssl_shake_read, comm_point::comm_tcp, comm_point::comm_tcp_accept, comm_point::cur_tcp_count, comm_point::ev, comm_point::fd, incoming_ssl_fd(), log_assert, log_info(), log_warn(), comm_point::max_tcp_count, comm_reply::remote_addr, comm_point::repinfo, setup_tcp_handler(), comm_point::ssl, comm_point::tcp_free, comm_point::type, ub_comm_base_now(), UB_EV_PERSIST, UB_EV_READ, UB_EV_TIMEOUT, ub_event_free(), and ub_event_new().

Referenced by comm_point_create_tcp().

## ◆ comm_point_tcp_handle_callback()

void comm_point_tcp_handle_callback | ( | int | fd,
|  | short | event,
|  | void * | arg
| ) |  |

This routine is published for checks and tests, and is only used internally.

handle libevent callback for tcp data comm point

Parameters

  fd | file descriptor.
  event | event bits from libevent: EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
  arg | the comm_point structure.

References internal_event::base, comm_point::buffer, comm_point::callback, comm_point::cb_arg, comm_point_tcp_handle_read(), comm_point_tcp_handle_write(), comm_point::comm_tcp, comm_point::ev, comm_point::fd, fptr_ok, fptr_whitelist_comm_point(), log_assert, log_err(), NETEVENT_CLOSED, NETEVENT_TIMEOUT, tcp_req_info::read_again, reclaim_tcp_handler(), sldns_buffer_capacity(), sldns_buffer_new(), comm_point::tcp_do_close, tcp_more_read_again(), comm_point::tcp_more_read_again, tcp_more_write_again(), comm_point::tcp_more_write_again, comm_point::tcp_parent, comm_point::tcp_req_info, tcp_req_info_read_again(), comm_point::type, ub_comm_base_now(), UB_EV_READ, UB_EV_TIMEOUT, UB_EV_WRITE, VERB_QUERY, and verbose().

Referenced by comm_point_create_tcp_handler(), comm_point_create_tcp_out(), and comm_point_tcp_accept_callback().

## ◆ comm_point_http_handle_callback()

void comm_point_http_handle_callback | ( | int | fd,
|  | short | event,
|  | void * | arg
| ) |  |

This routine is published for checks and tests, and is only used internally.

handle libevent callback for tcp data comm point

Parameters

  fd | file descriptor.
  event | event bits from libevent: EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
  arg | the comm_point structure.

References internal_event::base, comm_point::callback, comm_point::cb_arg, comm_point::comm_http, comm_point_http_handle_read(), comm_point_http_handle_write(), comm_point::ev, comm_point::fd, fptr_ok, fptr_whitelist_comm_point(), log_assert, log_err(), NETEVENT_CLOSED, NETEVENT_TIMEOUT, reclaim_http_handler(), comm_point::tcp_do_close, comm_point::type, ub_comm_base_now(), UB_EV_READ, UB_EV_TIMEOUT, UB_EV_WRITE, VERB_QUERY, and verbose().

Referenced by comm_point_create_http_out(), and comm_point_tcp_accept_callback().

## ◆ http2_stream_create()

struct http2_stream * http2_stream_create | ( | int32_t | stream_id | ) |

Create new http2 stream.

Parameters

  stream_id | ID for stream to create.

Returns
  malloc'ed stream, NULL on error

## ◆ http2_session_add_stream()

void http2_session_add_stream | ( | struct http2_session * | h2_session,
|  | struct http2_stream * | h2_stream
| ) |  |

Add new stream to session linked list.

Parameters

  h2_session | http2 session to add stream to
  h2_stream | stream to add to session list

## ◆ http2_stream_add_meshstate()

void http2_stream_add_meshstate | ( | struct http2_stream * | h2_stream,
|  | struct mesh_area * | mesh,
|  | struct mesh_state * | m
| ) |  |

Add mesh state to stream.

To be able to remove mesh reply on stream closure

References http2_stream::mesh, and http2_stream::mesh_state.

## ◆ comm_timer_callback()

void comm_timer_callback | ( | int | fd,
|  | short | event,
|  | void * | arg
| ) |  |

This routine is published for checks and tests, and is only used internally.

handle libevent callback for timer comm.

Parameters

  fd | file descriptor (always -1).
  event | event bits from libevent: EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
  arg | the comm_timer structure.

## ◆ comm_signal_callback()

void comm_signal_callback | ( | int | fd,
|  | short | event,
|  | void * | arg
| ) |  |

This routine is published for checks and tests, and is only used internally.

handle libevent callback for signal comm.

Parameters

  fd | file descriptor (used for the signal number).
  event | event bits from libevent: EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
  arg | the internal commsignal structure.

References comm_signal::base, comm_signal::callback, comm_signal::cb_arg, fptr_ok, fptr_whitelist_comm_signal(), ub_comm_base_now(), and UB_EV_SIGNAL.

Referenced by comm_signal_bind().

## ◆ comm_point_local_handle_callback()

void comm_point_local_handle_callback | ( | int | fd,
|  | short | event,
|  | void * | arg
| ) |  |

This routine is published for checks and tests, and is only used internally.

libevent callback for AF_UNIX fds

Parameters

  fd | file descriptor.
  event | event bits from libevent: EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
  arg | the comm_point structure.

References internal_event::base, comm_point::callback, comm_point::cb_arg, comm_point::comm_local, comm_point_tcp_handle_read(), comm_point::ev, comm_point::fd, fptr_ok, fptr_whitelist_comm_point(), log_assert, log_err(), NETEVENT_CLOSED, comm_point::type, ub_comm_base_now(), and UB_EV_READ.

Referenced by comm_point_create_local().

## ◆ comm_point_raw_handle_callback()

void comm_point_raw_handle_callback | ( | int | fd,
|  | short | event,
|  | void * | arg
| ) |  |

This routine is published for checks and tests, and is only used internally.

libevent callback for raw fd access.

Parameters

  fd | file descriptor.
  event | event bits from libevent: EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
  arg | the comm_point structure.

## ◆ comm_base_handle_slow_accept()

void comm_base_handle_slow_accept | ( | int | fd,
|  | short | event,
|  | void * | arg
| ) |  |

This routine is published for checks and tests, and is only used internally.

libevent callback for timeout on slow accept.

Parameters

  fd | file descriptor.
  event | event bits from libevent: EV_READ, EV_WRITE, EV_SIGNAL, EV_TIMEOUT.
  arg | the comm_point structure.

## ◆ tcp_connect_errno_needs_log()

int tcp_connect_errno_needs_log | ( | struct sockaddr * | addr,
|  | socklen_t | addrlen
| ) |  |

See if errno for tcp connect has to be logged or not.

This uses errno

Parameters

  addr | apart from checking errno, the addr is checked for ip4mapped and broadcast type, hence passed.
  addrlen | length of the addr parameter.

Returns
  true if it needs to be logged.

References udp_send_errno_needs_log().

Referenced by comm_point_tcp_handle_write().