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,
}
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,
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);
query_simple(ads,qu, owner,ol, typei,flags, now);
}
adns__autosys(ads,now);
- adns__consistency(ads,qu,cc_entex);
+ adns__returning(ads,qu);
return 0;
x_adnsfail:
adns__query_fail(qu,stat);
- adns__consistency(ads,qu,cc_entex);
+ adns__returning(ads,qu);
return 0;
x_errno:
r= errno;
assert(r);
- adns__consistency(ads,0,cc_entex);
+ adns__returning(ads,0);
return r;
}
for (cqu= qu->children.head; cqu; cqu= ncqu) {
ncqu= cqu->siblings.next;
- adns_cancel(cqu);
+ adns__cancel(cqu);
}
}
qu->query_dgram= 0;
}
-void adns_cancel(adns_query qu) {
+void adns__returning(adns_state ads, adns_query qu_for_caller) {
+ adns__consistency(ads,qu_for_caller,cc_entex);
+}
+
+void adns__cancel(adns_query qu) {
adns_state ads;
ads= qu->ads;
- adns__consistency(ads,qu,cc_entex);
+ adns__consistency(ads,qu,cc_freq);
if (qu->parent) LIST_UNLINK_PART(qu->parent->children,qu,siblings.);
switch (qu->state) {
case query_tosend:
free_query_allocs(qu);
free(qu->answer);
free(qu);
- adns__consistency(ads,0,cc_entex);
+}
+
+void adns_cancel(adns_query qu) {
+ adns_state ads;
+
+ assert(!qu->parent);
+ ads= qu->ads;
+ adns__consistency(ads,qu,cc_entex);
+ adns__cancel(qu);
+ adns__returning(ads,0);
}
void adns__update_expires(adns_query qu, unsigned long ttl,