This program delays queries made. More...
#include "config.h"
#include <sys/time.h>
#include "util/net_help.h"
#include "util/config_file.h"
#include "sldns/sbuffer.h"
#include <signal.h>
Data Structures | |
struct | ringbuf |
The ring buffer. More... | |
struct | proxy |
List of proxy fds that return replies from the server to our clients. More... | |
struct | tcp_send_list |
An item that has to be TCP relayed. More... | |
struct | tcp_proxy |
List of TCP proxy fd pairs to TCP connect client to server. More... | |
Macros | |
#define | TRIES_PER_SELECT 100 |
number of reads per select for delayer | |
Functions | |
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.