unbound  0.1
Data Structures | Defines | Functions | Variables
delayer.c File Reference

This program delays queries made. More...

#include "config.h"
#include <sys/time.h>
#include "util/net_help.h"
#include "util/config_file.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...

Defines

#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 ringbufring_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, ldns_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, ldns_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, ldns_buffer *pkt, struct sockaddr_storage *srv_addr, socklen_t srv_len)
 send out waiting packets
static void do_proxy (struct proxy *p, int retsock, ldns_buffer *pkt)
 do proxy for one readable client
static void service_proxy (fd_set *rset, int retsock, struct proxy *proxies, ldns_buffer *pkt, struct timeval *now)
 proxy return replies to clients
static struct proxyfind_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, ldns_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, ldns_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, ldns_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, ldns_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

Variables

static volatile int do_quit = 0
 signal handler global info
int optind
 getopt global, in case header files fail to declare it.
char * optarg
 getopt global, in case header files fail to declare it.

Detailed Description

This program delays queries made.

It performs as a proxy to another server and delays queries to it.


Variable Documentation

int optind

getopt global, in case header files fail to declare it.

char* optarg

getopt global, in case header files fail to declare it.