chiark / gitweb /
@@ -1,12 +1,15 @@
[adns] / src / query.c
index c092a30c25a79a94837510691e5c5a8747767b46..e6bc7a0bf862e5c9a3e6b8321e7b290bf517b889 100644 (file)
@@ -68,9 +68,9 @@ static adns_query query_alloc(adns_state ads, const typeinfo *typei,
 
   qu->id= 0;
   qu->flags= flags;
-  qu->udpretries= 0;
+  qu->retries= 0;
   qu->udpnextserver= 0;
-  qu->udpsent= qu->tcpfailed= 0;
+  qu->udpsent= 0;
   timerclear(&qu->timeout);
   qu->expires= now.tv_sec + MAXTTLBELIEVE;
 
@@ -195,7 +195,7 @@ static int save_owner(adns_query qu, const char *owner, int ol) {
 int adns_submit(adns_state ads,
                const char *owner,
                adns_rrtype type,
-               int flags,
+               adns_queryflags flags,
                void *context,
                adns_query *query_r) {
   int r, ol, ndots;
@@ -225,6 +225,7 @@ int adns_submit(adns_state ads,
                                 
   if (ol>=1 && owner[ol-1]=='.' && (ol<2 || owner[ol-2]!='\\')) {
     flags &= ~adns_qf_search;
+    qu->flags= flags;
     ol--;
   }
 
@@ -261,7 +262,7 @@ int adns_submit(adns_state ads,
 int adns_submit_reverse(adns_state ads,
                        const struct sockaddr *addr,
                        adns_rrtype type,
-                       int flags,
+                       adns_queryflags flags,
                        void *context,
                        adns_query *query_r) {
   const unsigned char *iaddr;
@@ -282,7 +283,7 @@ int adns_submit_reverse(adns_state ads,
 int adns_synchronous(adns_state ads,
                     const char *owner,
                     adns_rrtype type,
-                    int flags,
+                    adns_queryflags flags,
                     adns_answer **answer_r) {
   adns_query qu;
   int r;
@@ -389,6 +390,7 @@ static void free_query_allocs(adns_query qu) {
   for (an= qu->allocations.head; an; an= ann) { ann= an->next; free(an); }
   LIST_INIT(qu->allocations);
   adns__vbuf_free(&qu->vb);
+  free(qu->query_dgram);
 }
 
 void adns_cancel(adns_query qu) {
@@ -398,10 +400,13 @@ void adns_cancel(adns_query qu) {
   adns__consistency(ads,qu,cc_entex);
   if (qu->parent) LIST_UNLINK_PART(qu->parent->children,qu,siblings.);
   switch (qu->state) {
-  case query_tosend: case query_tcpwait: case query_tcpsent:
-    LIST_UNLINK(ads->timew,qu);
+  case query_tosend:
+    LIST_UNLINK(ads->udpw,qu);
+    break;
+  case query_tcpw:
+    LIST_UNLINK(ads->tcpw,qu);
     break;
-  case query_child:
+  case query_childw:
     LIST_UNLINK(ads->childw,qu);
     break;
   case query_done:
@@ -496,6 +501,7 @@ void adns__query_done(adns_query qu) {
     LIST_UNLINK(qu->ads->childw,parent);
     qu->ctx.callback(parent,qu);
     free_query_allocs(qu);
+    free(qu->answer);
     free(qu);
   } else {
     makefinal_query(qu);