X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=adns.git;a=blobdiff_plain;f=src%2Finternal.h;h=cd58d7a2d46135f9069919ed70f9cda76df65948;hp=b652f2304903d4cd4c44d0e8bfb5d80643136ef7;hb=0ba0614a998909d8b4f51988d7a8af3ba369a5d9;hpb=4353a5c47b202786905257e520fe570a570e67bc diff --git a/src/internal.h b/src/internal.h index b652f23..cd58d7a 100644 --- a/src/internal.h +++ b/src/internal.h @@ -17,13 +17,16 @@ typedef unsigned char byte; /* Configuration and constants */ #define MAXSERVERS 5 -#define MAXUDPRETRIES 15 +#define UDPMAXRETRIES /*15*/5 #define UDPRETRYMS 2000 #define TCPMS 30000 #define LOCALRESOURCEMS 20 -#define MAXUDPDGRAM 512 -#define NSPORT 53 -#define MAXDNAME 255 + +#define DNS_UDPPORT 53 +#define DNS_MAXUDP 512 +#define DNS_MAXDOMAIN 255 +#define DNS_HDRSIZE 12 +#define DNS_CLASS_IN 1 /* Shared data structures */ @@ -46,14 +49,20 @@ typedef union { int dmaddr_index; } qcontext; +typedef struct { + unsigned long searchkey; /* flags and typecode swapped */ + adns_rrtype type; +} typeinfo; + struct adns__query { /* FIXME: make sure this is all init'd properly */ enum { query_udp, query_tcpwait, query_tcpsent, query_child, query_done } state; adns_query back, next, parent; struct { adns_query head, tail; } children; struct { adns_query back, next; } siblings; - adns_rrtype type; - vbuf answer; + + const typeinfo *typei; + vbuf ans; int id, flags, udpretries; int udpnextserver; unsigned long udpsent, tcpfailed; /* bitmap indexed by server */ @@ -175,9 +184,9 @@ static inline void timevaladd(struct timeval *tv_io, long ms) { struct timeval tmp; assert(ms>=0); tmp= *tv_io; - tmp.tv_usec += (ms%1000)*1000; + tmp.tv_usec += (ms%1000)*1000000; tmp.tv_sec += ms/1000; - if (tmp.tv_usec >= 1000) { tmp.tv_sec++; tmp.tv_usec -= 1000; } + if (tmp.tv_usec >= 1000000) { tmp.tv_sec++; tmp.tv_usec -= 1000; } *tv_io= tmp; }