Public Types | Data Fields
comm_point Struct Reference

Communication point to the network These behaviours can be accomplished by setting the flags and passing return values from the callback. More...

#include <netevent.h>

Public Types

enum  {
  comm_ssl_shake_none = 0, comm_ssl_shake_read, comm_ssl_shake_write, comm_ssl_shake_hs_read,
  comm_ssl_shake_hs_write
}
 handshake state for init and renegotiate More...
 
enum  comm_point_type {
  comm_udp, comm_tcp_accept, comm_tcp, comm_local,
  comm_raw
}
 is this a UDP, TCP-accept or TCP socket. More...
 

Data Fields

struct internal_eventev
 behind the scenes structure, with say libevent info. More...
 
int fd
 file descriptor for communication point
 
struct timeval * timeout
 timeout (NULL if it does not). More...
 
struct sldns_bufferbuffer
 buffer pointer. More...
 
int tcp_is_reading
 Read/Write state for TCP.
 
size_t tcp_byte_count
 The current read/write count for TCP.
 
struct comm_pointtcp_parent
 parent communication point (for TCP sockets)
 
struct comm_reply repinfo
 sockaddr from peer, for TCP handlers
 
int max_tcp_count
 the number of TCP handlers for this tcp-accept socket
 
struct comm_point ** tcp_handlers
 malloced array of tcp handlers for a tcp-accept, of size max_tcp_count. More...
 
struct comm_pointtcp_free
 linked list of free tcp_handlers to use for new queries. More...
 
void * ssl
 the SSL object with rw bio (owned) or for commaccept ctx ref
 
enum comm_point:: { ... }  ssl_shake_state
 handshake state for init and renegotiate
 
struct dt_env * dtenv
 the dnstap environment
 
enum comm_point::comm_point_type type
 variable with type of socket, UDP,TCP-accept,TCP,pipe
 
int do_not_close
 if set the connection is NOT closed on delete. More...
 
int tcp_do_close
 if set, the connection is closed on error, on timeout, and after read/write completes. More...
 
int tcp_do_toggle_rw
 if set, read/write completes: read/write state of tcp is toggled. More...
 
int tcp_check_nb_connect
 if set, checks for pending error from nonblocking connect() call. More...
 
int inuse
 number of queries outstanding on this socket, used by outside network for udp ports
 
comm_point_callback_tcallback
 callback when done. More...
 
void * cb_arg
 argument to pass to callback. More...
 

Detailed Description

Communication point to the network These behaviours can be accomplished by setting the flags and passing return values from the callback.

udp frontside: called after readdone. sendafter. tcp frontside: called readdone, sendafter. close. udp behind: called after readdone. No send after. tcp behind: write done, read done, then called. No send after.

Member Enumeration Documentation

anonymous enum

handshake state for init and renegotiate

Enumerator
comm_ssl_shake_none 

no handshake, it has been done

comm_ssl_shake_read 

ssl initial handshake wants to read

comm_ssl_shake_write 

ssl initial handshake wants to write

comm_ssl_shake_hs_read 

ssl_write wants to read

comm_ssl_shake_hs_write 

ssl_read wants to write

is this a UDP, TCP-accept or TCP socket.

Enumerator
comm_udp 

UDP socket - handle datagrams.

comm_tcp_accept 

TCP accept socket - only creates handlers if readable.

comm_tcp 

TCP handler socket - handle byteperbyte readwrite.

comm_local 

AF_UNIX socket - for internal commands.

comm_raw 

raw - not DNS format - for pipe readers and writers

Field Documentation

struct internal_event* comm_point::ev
struct timeval* comm_point::timeout
struct sldns_buffer* comm_point::buffer
struct comm_point** comm_point::tcp_handlers
struct comm_point* comm_point::tcp_free
int comm_point::do_not_close
int comm_point::tcp_do_close

if set, the connection is closed on error, on timeout, and after read/write completes.

No callback is done.

Referenced by comm_point_create_local(), comm_point_create_raw(), comm_point_create_tcp(), comm_point_create_tcp_handler(), comm_point_create_tcp_out(), comm_point_create_udp(), comm_point_create_udp_ancil(), and comm_point_tcp_handle_callback().

int comm_point::tcp_do_toggle_rw

if set, read/write completes: read/write state of tcp is toggled.

buffer reset/bytecount reset. this flag cleared. So that when that is done the callback is called.

Referenced by comm_point_create_local(), comm_point_create_raw(), comm_point_create_tcp(), comm_point_create_tcp_handler(), comm_point_create_tcp_out(), comm_point_create_udp(), comm_point_create_udp_ancil(), tcp_callback_reader(), and tcp_callback_writer().

int comm_point::tcp_check_nb_connect
comm_point_callback_t* comm_point::callback

callback when done.

tcp_accept does not get called back, is NULL then. If a timeout happens, callback with timeout=1 is called. If an error happens, callback is called with error set nonzero. If not NETEVENT_NOERROR, it is an errno value. If the connection is closed (by remote end) then the callback is called with error set to NETEVENT_CLOSED=-1. If a timeout happens on the connection, the error is set to NETEVENT_TIMEOUT=-2. The reply_info can be copied if the reply needs to happen at a later time. It consists of a struct with commpoint and address. It can be passed to a msg send routine some time later. Note the reply information is temporary and must be copied. NULL is passed for_reply info, in cases where error happened.

declare as: int my_callback(struct comm_point* c, void* my_arg, int error, struct comm_reply *reply_info);

if the routine returns 0, nothing is done. Notzero, the buffer will be sent back to client. For UDP this is done without changing the commpoint. In TCP it sets write state.

Referenced by comm_point_create_local(), comm_point_create_raw(), comm_point_create_tcp(), comm_point_create_tcp_handler(), comm_point_create_tcp_out(), comm_point_create_udp(), comm_point_create_udp_ancil(), comm_point_local_handle_callback(), comm_point_tcp_handle_callback(), comm_point_udp_ancil_callback(), comm_point_udp_callback(), and tcp_callback_reader().

void* comm_point::cb_arg

The documentation for this struct was generated from the following file: