X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=adns.git;a=blobdiff_plain;f=src%2Fadns-internal.h;h=08a29488ab6c638fe8a7b078b6404b8794dbe2c7;hp=cabb271604a910dab677262291af26058361b2ad;hb=c6bc229718c914227b46c18bd8511abaf9cd0135;hpb=a17d3a1d960ca40434205a80aa106ca4c7224ec9 diff --git a/src/adns-internal.h b/src/adns-internal.h index cabb271..08a2948 100644 --- a/src/adns-internal.h +++ b/src/adns-internal.h @@ -3,35 +3,68 @@ #ifndef ADNS_INTERNAL_H_INCLUDED #define ADNS_INTERNAL_H_INCLUDED +#include + #include "adns.h" #define MAXSERVERS 5 -#define MAXUDPRETRIES 10 +#define MAXUDPRETRIES 15 #define UDPRETRYMS 2000 -#define TCPMS 20000 +#define TCPMS 30000 +#define LOCALRESOURCEMS 20 + +union adns__align { + adns_status status; + char *cp; + adns_rrtype type; + int int; + struct in_addr ia; + unsigned long ul; +}; struct adns__query { - adns_query next, back; - adns_query parent, child; + /* FIXME: make sure this is all init'd properly */ + adns_query back, next; + adns_query parent; + struct { adns_query head, tail; } children; + struct { adns_query back, next; } siblings; adns_rrtype type; - stuct adns_answer *answer; - int flags, udpretries, server; + adns_answer *answer; + size_t ansalloc; ansused; + int id, flags, udpretries; /* udpretries==-1 => _f_usevc or too big for UDP */ + int nextudpserver; + unsigned long sentudp, senttcp; /* bitmaps indexed by server */ struct timeval timeout; void *context; + unsigned char *querymsg; + int querylen; char owner[1]; + /* Possible states: + * Queue child id answer nextserver sentudp senttcp + * tosend null >=0 null any any any + * timew null >=0 null any at least 1 bit set any + * childw set >=0 partial any any any + * output null -1 set/null any any any + */ +}; + +struct adns__vbuf { + size_t used, avail; + unsigned char *buf; }; struct adns__state { - struct { adns_query head, tail } input, timew, childw, output; - int udpsocket; - int qbufavail, tcpbufavail, tcpbufused, tcpbufdone; - char *qbuf, *tcpbuf; - int nservers; - struct { + /* FIXME: make sure this is all init'd properly */ + adns_initflags iflags; + struct { adns_query head, tail; } tosend, timew, childw, output; + int nextid, udpsocket; + adns_vbuf rqbuf, tcpsend, tcprecv; + int nservers, tcpserver; + enum adns__tcpstate { server_disc, server_connecting, server_ok } tcpstate; + int tcpsocket; + struct timeval tcptimeout; + struct server { struct in_addr addr; - int tcpsocket; - struct timeval timeout; - struct { adns_query head, tail } connw; } servers[MAXSERVERS]; };