+
+ qu->query_dgram= malloc(qu->vb.used);
+ if (!qu->query_dgram) { adns__query_fail(qu,adns_s_nomemory); return; }
+
+ qu->id= id;
+ qu->query_dglen= qu->vb.used;
+ memcpy(qu->query_dgram,qu->vb.buf,qu->vb.used);
+
+ adns__query_send(qu,now);
+}
+
+adns_status adns__internal_submit(adns_state ads, adns_query *query_r,
+ const typeinfo *typei, vbuf *qumsg_vb, int id,
+ adns_queryflags flags, struct timeval now,
+ const qcontext *ctx) {
+ adns_query qu;
+
+ qu= query_alloc(ads,typei,flags,now);
+ if (!qu) { adns__vbuf_free(qumsg_vb); return adns_s_nomemory; }
+ *query_r= qu;
+
+ memcpy(&qu->ctx,ctx,sizeof(qu->ctx));
+ query_submit(ads,qu, typei,qumsg_vb,id,flags,now);
+
+ return adns_s_ok;
+}
+
+static void query_simple(adns_state ads, adns_query qu,
+ const char *owner, int ol,
+ const typeinfo *typei, adns_queryflags flags,
+ struct timeval now) {
+ vbuf vb;
+ int id;
+ adns_status stat;
+
+ adns__vbuf_init(&vb);
+
+ stat= adns__mkquery(ads,&vb,&id, owner,ol, typei,flags);
+ if (stat) { adns__query_fail(qu,stat); return; }
+
+ query_submit(ads,qu, typei,&vb,id, flags,now);
+}
+
+void adns__search_next(adns_state ads, adns_query qu, struct timeval now) {
+ const char *nextentry;
+ adns_status stat;