X-Git-Url: https://git.distorted.org.uk/~mdw/adns/blobdiff_plain/4f9225e6d9dcc19ff9a2fff8e9ddecce5c0195d0..31af3b4524f2a8d88a755900e934424ac6a5aab2:/src/query.c diff --git a/src/query.c b/src/query.c index ebbfd53..6a1ec75 100644 --- a/src/query.c +++ b/src/query.c @@ -104,8 +104,8 @@ static void query_submit(adns_state ads, adns_query qu, qu->id= id; qu->query_dglen= qu->vb.used; memcpy(qu->query_dgram,qu->vb.buf,qu->vb.used); - - adns__query_send(qu,now); + + typei->query_send(qu,now); } adns_status adns__ckl_hostname(adns_state ads, adns_queryflags flags, @@ -148,6 +148,7 @@ static adns_status check_domain_name(adns_state ads, adns_queryflags flags, } adns_status adns__internal_submit(adns_state ads, adns_query *query_r, + adns_query parent, const typeinfo *typei, adns_rrtype type, vbuf *qumsg_vb, int id, adns_queryflags flags, struct timeval now, @@ -161,6 +162,8 @@ adns_status adns__internal_submit(adns_state ads, adns_query *query_r, if (!qu) { err = adns_s_nomemory; goto x_err; } *query_r= qu; + qu->parent= parent; + LIST_LINK_TAIL_PART(parent->children,qu,siblings.); memcpy(&qu->ctx,ctx,sizeof(qu->ctx)); query_submit(ads,qu, typei,qumsg_vb,id,flags,now); @@ -464,7 +467,7 @@ void *adns__alloc_final(adns_query qu, size_t sz) { return rp; } -static void cancel_children(adns_query qu) { +void adns__cancel_children(adns_query qu) { adns_query cqu, ncqu; for (cqu= qu->children.head; cqu; cqu= ncqu) { @@ -475,7 +478,7 @@ static void cancel_children(adns_query qu) { void adns__reset_preserved(adns_query qu) { assert(!qu->final_allocspace); - cancel_children(qu); + adns__cancel_children(qu); qu->answer->nrrs= 0; qu->answer->rrs.untyped= 0; qu->interim_allocd= qu->preserved_allocd; @@ -484,7 +487,7 @@ void adns__reset_preserved(adns_query qu) { static void free_query_allocs(adns_query qu) { allocnode *an, *ann; - cancel_children(qu); + adns__cancel_children(qu); for (an= qu->allocations.head; an; an= ann) { ann= an->next; free(an); } LIST_INIT(qu->allocations); adns__vbuf_free(&qu->vb); @@ -572,7 +575,7 @@ void adns__query_done(adns_query qu) { adns_answer *ans; adns_query parent; - cancel_children(qu); + adns__cancel_children(qu); qu->id= -1; ans= qu->answer;