Beispiel #1
0
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;
}
Beispiel #2
0
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;
}