static adns_status mkquery_header(adns_state ads, vbuf * vb, int *id_r, int qdlen) { int id; byte *rqp; if (!adns__vbuf_ensure(vb, DNS_HDRSIZE + qdlen + 4)) return adns_s_nomemory; vb->used = 0; MKQUERY_START(vb); *id_r = id = (ads->nextid++) & 0x0ffff; MKQUERY_ADDW(id); MKQUERY_ADDB(0x01); /* QR=Q(0), OPCODE=QUERY(0000), !AA, !TC, RD */ MKQUERY_ADDB(0x00); /* !RA, Z=000, RCODE=NOERROR(0000) */ MKQUERY_ADDW(1); /* QDCOUNT=1 */ MKQUERY_ADDW(0); /* ANCOUNT=0 */ MKQUERY_ADDW(0); /* NSCOUNT=0 */ MKQUERY_ADDW(0); /* ARCOUNT=0 */ MKQUERY_STOP(vb); return adns_s_ok; }
static adns_status mkquery_footer(vbuf *vb, adns_rrtype type) { byte *rqp; MKQUERY_START(vb); MKQUERY_ADDW(type & adns__rrt_typemask); /* QTYPE */ MKQUERY_ADDW(DNS_CLASS_IN); /* QCLASS=IN */ MKQUERY_STOP(vb); assert(vb->used <= vb->avail); return adns_s_ok; }