#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;
+ adns_query back, next;
+ adns_query parent;
+ struct { adns_query head, tail; } children;
+ struct { adns_query back, next; } siblings;
adns_rrtype type;
adns_answer *answer;
- int flags, udpretries, server;
+ 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__state {
adns_initflags iflags;
- struct { adns_query head, tail; } input, timew, childw, output;
- int udpsocket;
+ struct { adns_query head, tail; } tosend, timew, childw, output;
+ int nextid, udpsocket;
int qbufavail, tcpbufavail, tcpbufused, tcpbufdone;
- char *qbuf, *tcpbuf;
- int nservers;
- struct {
+ unsigned char *qbuf, *tcpbuf;
+ int nservers, tcpserver;
+ enum { server_disc, server_connecting, server_ok } tcpstate;
+ int tcpsocket;
+ struct timeval tcptimeout;
+ int opbufavail, opbufused;
+ unsigned char *opbuf;
+ struct server {
struct in_addr addr;
- int tcpsocket;
- struct timeval timeout;
- struct { adns_query head, tail; } connw;
} servers[MAXSERVERS];
};