|
static void | usage (char *argv[]) |
| usage information for delayer
|
|
static int | dl_tv_smaller (struct timeval *t1, const struct timeval *t2) |
| timeval compare, t1 < t2
|
|
static void | dl_tv_add (struct timeval *t1, const struct timeval *t2) |
| timeval add, t1 += t2
|
|
static void | dl_tv_subtract (struct timeval *t1, const struct timeval *t2) |
| timeval subtract, t1 -= t2
|
|
static struct ringbuf * | ring_create (size_t sz) |
| create new ring buffer
|
|
static void | ring_delete (struct ringbuf *r) |
| delete ring buffer
|
|
static void | ring_add (struct ringbuf *r, sldns_buffer *pkt, struct timeval *now, struct timeval *delay, struct proxy *p) |
| add entry to ringbuffer
|
|
static int | ring_empty (struct ringbuf *r) |
| see if the ringbuffer is empty
|
|
static struct timeval * | ring_peek_time (struct ringbuf *r) |
| peek at timevalue for next item in ring
|
|
static int | ring_pop (struct ringbuf *r, sldns_buffer *pkt, struct timeval *tv, struct proxy **p) |
| get entry from ringbuffer
|
|
static RETSIGTYPE | delayer_sigh (int sig) |
| signal handler for user quit
|
|
static void | service_send (struct ringbuf *ring, struct timeval *now, sldns_buffer *pkt, struct sockaddr_storage *srv_addr, socklen_t srv_len) |
| send out waiting packets
|
|
static void | do_proxy (struct proxy *p, int retsock, sldns_buffer *pkt) |
| do proxy for one readable client
|
|
static void | service_proxy (fd_set *rset, int retsock, struct proxy *proxies, sldns_buffer *pkt, struct timeval *now) |
| proxy return replies to clients
|
|
static struct proxy * | find_create_proxy (struct sockaddr_storage *from, socklen_t from_len, fd_set *rorig, int *max, struct proxy **proxies, int serv_ip6, struct timeval *now, struct timeval *reuse_timeout) |
| find or else create proxy for this remote client
|
|
static void | service_recv (int s, struct ringbuf *ring, sldns_buffer *pkt, fd_set *rorig, int *max, struct proxy **proxies, struct sockaddr_storage *srv_addr, socklen_t srv_len, struct timeval *now, struct timeval *delay, struct timeval *reuse) |
| recv new waiting packets
|
|
static void | tcp_proxy_delete (struct tcp_proxy *p) |
| delete tcp proxy
|
|
static void | service_tcp_listen (int s, fd_set *rorig, int *max, struct tcp_proxy **proxies, struct sockaddr_storage *srv_addr, socklen_t srv_len, struct timeval *now, struct timeval *tcp_timeout) |
| accept new TCP connections, and set them up
|
|
static int | tcp_relay_read (int s, struct tcp_send_list **first, struct tcp_send_list **last, struct timeval *now, struct timeval *delay, sldns_buffer *pkt) |
| relay TCP, read a part
|
|
static int | tcp_relay_write (int s, struct tcp_send_list **first, struct tcp_send_list **last, struct timeval *now) |
| relay TCP, write a part
|
|
static void | service_tcp_relay (struct tcp_proxy **tcp_proxies, struct timeval *now, struct timeval *delay, struct timeval *tcp_timeout, sldns_buffer *pkt, fd_set *rset, fd_set *rorig, fd_set *worig) |
| perform TCP relaying
|
|
static int | service_findwait (struct timeval *now, struct timeval *wait, struct ringbuf *ring, struct tcp_proxy *tcplist) |
| find waiting time
|
|
static void | proxy_list_clear (struct proxy *p) |
| clear proxy list
|
|
static void | tcp_proxy_list_clear (struct tcp_proxy *p) |
| clear TCP proxy list
|
|
static void | service_loop (int udp_s, int listen_s, struct ringbuf *ring, struct timeval *delay, struct timeval *reuse, struct sockaddr_storage *srv_addr, socklen_t srv_len, sldns_buffer *pkt) |
| delayer service loop
|
|
static void | service (const char *bind_str, int bindport, const char *serv_str, size_t memsize, int delay_msec) |
| delayer main service routine
|
|
int | main (int argc, char **argv) |
| main program for delayer
|
|
This program delays queries made.
It performs as a proxy to another server and delays queries to it.