chiark / gitweb /
Makes up queries.
[adns.git] / src / adns-internal.h
index 8666614456e5cd0d8db594f4864a7c20e26dee9e..f4fe829c7368505f37dca783c11aaa9dc310b14c 100644 (file)
@@ -16,22 +16,33 @@ struct adns__query {
   adns_query next, back;
   adns_query parent, child;
   adns_rrtype type;
-  struct adns_answer *answer;
-  int flags, udpretries, server;
+  adns_answer *answer;
+  int id, flags, udpretries, nextserver;
+  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  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;
+  unsigned 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;