This has two effects. Firstly, we can propagate non-representation bits
(e.g., compatibility flags) from parent to child query. Secondly, we
can have a single typeinfo handle several different low-level record
types. The former is going to pay off very soon; the latter will take a
bit longer, but it'll be worth it.
Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
/* From query.c: */
adns_status adns__internal_submit(adns_state ads, adns_query *query_r,
/* From query.c: */
adns_status adns__internal_submit(adns_state ads, adns_query *query_r,
- const typeinfo *typei, vbuf *qumsg_vb,
- int id,
+ const typeinfo *typei, adns_rrtype type,
+ vbuf *qumsg_vb, int id,
adns_queryflags flags, struct timeval now,
qcontext *ctx);
/* Submits a query (for internal use, called during external submits).
adns_queryflags flags, struct timeval now,
qcontext *ctx);
/* Submits a query (for internal use, called during external submits).
}
adns_status adns__internal_submit(adns_state ads, adns_query *query_r,
}
adns_status adns__internal_submit(adns_state ads, adns_query *query_r,
- const typeinfo *typei, vbuf *qumsg_vb,
- int id,
+ const typeinfo *typei, adns_rrtype type,
+ vbuf *qumsg_vb, int id,
adns_queryflags flags, struct timeval now,
qcontext *ctx) {
adns_query qu;
adns_queryflags flags, struct timeval now,
qcontext *ctx) {
adns_query qu;
err= check_domain_name(ads, flags,ctx,typei, qumsg_vb->buf,qumsg_vb->used);
if (err) goto x_err;
err= check_domain_name(ads, flags,ctx,typei, qumsg_vb->buf,qumsg_vb->used);
if (err) goto x_err;
- qu= query_alloc(ads,typei,typei->typekey,flags,now);
+ qu= query_alloc(ads,typei,type,flags,now);
if (!qu) { err = adns_s_nomemory; goto x_err; }
*query_r= qu;
if (!qu) { err = adns_s_nomemory; goto x_err; }
*query_r= qu;
if (!(pai->qu->flags & adns_qf_cname_loose)) nflags |= adns_qf_cname_forbid;
st= adns__internal_submit(pai->ads, &nqu, adns__findtype(adns_r_addr),
if (!(pai->qu->flags & adns_qf_cname_loose)) nflags |= adns_qf_cname_forbid;
st= adns__internal_submit(pai->ads, &nqu, adns__findtype(adns_r_addr),
+ ((adns_r_addr & adns_rrt_reprmask) |
+ (pai->qu->answer->type & ~adns_rrt_reprmask)),
&pai->qu->vb, id, nflags, pai->now, &ctx);
if (st) return st;
&pai->qu->vb, id, nflags, pai->now, &ctx);
if (st) return st;
memset(&ctx.pinfo,0,sizeof(ctx.pinfo));
memset(&ctx.tinfo,0,sizeof(ctx.tinfo));
st= adns__internal_submit(pai->ads, &nqu, adns__findtype(adns_r_a),
memset(&ctx.pinfo,0,sizeof(ctx.pinfo));
memset(&ctx.tinfo,0,sizeof(ctx.tinfo));
st= adns__internal_submit(pai->ads, &nqu, adns__findtype(adns_r_a),
- &pai->qu->vb, id,
- adns_qf_quoteok_query, pai->now, &ctx);
+ adns_r_a, &pai->qu->vb, id, adns_qf_quoteok_query,
+ pai->now, &ctx);
if (st) return st;
nqu->parent= pai->qu;
if (st) return st;
nqu->parent= pai->qu;