chiark / gitweb /
Extra infra.
[adns.git] / src / adns-internal.h
index 05dd29c389d060aa04e6ee23d4e65d224fd0c57e..e3a013254cbc875fb76b012ad5cc76ef76887027 100644 (file)
@@ -17,21 +17,30 @@ struct adns__query {
   adns_query parent, child;
   adns_rrtype type;
   adns_answer *answer;
-  int flags, udpretries, server;
+  int id, flags, udpretries, nextserver;
+  unsigned long sentudp, senttcp; /* bitmaps indexed by server */
   struct timeval timeout;
   void *context;
   char owner[1];
+  /* Possible states:
+   *  Queue   child  answer   nextserver  sentudp             senttcp
+   *  input   null   null     0           all bits zero       all bits zero
+   *  timew   null   null     any         at least 1 bit set  any
+   *  childw  set    partial  any         any                 any
+   *  output  null   set      any         any                 any
+   */
 };
 
 struct adns__state {
   adns_initflags iflags;
   struct { adns_query head, tail; } input, timew, childw, output;
-  int udpsocket;
+  int nextid, udpsocket;
   int qbufavail, tcpbufavail, tcpbufused, tcpbufdone;
   char *qbuf, *tcpbuf;
   int nservers;
-  struct {
+  struct server {
     struct in_addr addr;
+    enum { server_disc, server_connecting, server_ok } state;
     int tcpsocket;
     struct timeval timeout;
     struct { adns_query head, tail; } connw;