chiark / gitweb /
Introduce custom typeinfo for addr subqueries; kill __qf_senddirect.
authorMark Wooding <mdw@distorted.org.uk>
Sat, 17 May 2014 13:04:04 +0000 (14:04 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 17 May 2014 13:04:04 +0000 (14:04 +0100)
src/types.c

index 56a65af2eeb23a2fff8443fab13e59d648a995f4..d6d028d3fa6ca9174231bf4d02491f6274c8bf78 100644 (file)
@@ -339,6 +339,8 @@ static adns_status cs_in6addr(vbuf *vb, const void *datap) {
  *             addr_rrtypes)
  */
 
+static const typeinfo tinfo_addrsub;
+
 /* About CNAME handling in addr queries.
  *
  * A user-level addr query is translated into a number of protocol-level
@@ -542,9 +544,7 @@ static void addr_subqueries(adns_query qu, struct timeval now,
 {
   int i, err, id;
   adns_query cqu;
-  adns_queryflags qf =
-    (qu->flags | adns__qf_senddirect) &
-    ~(adns_qf_search);
+  adns_queryflags qf =qu->flags & ~adns_qf_search;
   qcontext ctx;
 
   /* This always makes child queries, even if there's only the one.  This
@@ -558,7 +558,7 @@ static void addr_subqueries(adns_query qu, struct timeval now,
     err = adns__mkquery_frdgram(qu->ads, &qu->vb, &id, qd_dgram, qd_dglen,
                                DNS_HDRSIZE, qu->ctx.tinfo.addr.rrty[i], qf);
     if (err) goto x_error;
-    err = adns__internal_submit(qu->ads, &cqu, qu->typei,
+    err = adns__internal_submit(qu->ads, &cqu, &tinfo_addrsub,
                                qu->ctx.tinfo.addr.rrty[i],
                                &qu->vb, id, qf, now, &ctx);
     if (err) goto x_error;
@@ -1734,6 +1734,10 @@ DEEP_TYPE(soa,    "SOA","822",  soa,     pa_soa,     0,        cs_soa        ),
 DEEP_TYPE(rp,     "RP", "822",  strpair, pa_rp,      0,        cs_rp         ),
 };
 
+static const typeinfo tinfo_addrsub =
+XTRA_TYPE(none,          "<addr>","sub",addr,   pa_addr,    0,        cs_addr,
+                                  mf_flat, adns__qdpl_normal, 0, gsz_addr, 0);
+
 static const typeinfo typeinfo_unknown=
 DEEP_TYPE(unknown,0, "unknown",byteblock,pa_opaque,  0,        cs_opaque     );