11#define X(s) if (!stralloc_cats(out,s)) return 0;
12#define NUM(u) if (!stralloc_catulong0(out,u,0)) return 0;
28 uint16_unpack_big(
data + 6,&numanswers);
29 uint16_unpack_big(
data + 8,&numauthority);
30 uint16_unpack_big(
data + 10,&numglue);
43 if (
data[2] & 128)
X(
", response")
44 if (
data[2] & 120)
X(
", weird op")
45 if (
data[2] & 4)
X(
", authoritative")
46 if (
data[2] & 2)
X(
", truncated")
47 if (
data[2] & 1)
X(
", weird rd")
48 if (
data[3] & 128)
X(
", weird ra")
50 switch (
data[3] & 15) {
51 case 0:
X(
", noerror");
break;
52 case 3:
X(
", nxdomain");
break;
53 case 4:
X(
", notimp");
break;
54 case 5:
X(
", refused");
break;
55 default:
X(
", weird rcode");
57 if (
data[3] & 112)
X(
", weird z")
81 if (numanswers) { --numanswers;
X(
"answer: ") }
82 else if (numauthority) { --numauthority;
X(
"authority: ") }
83 else if (numglue) { --numglue;
X(
"additional: ") }
90 if (pos !=
len) { errno = EPROTO;
return 0; }
int dns_domain_todot_cat(stralloc *out, const char *d)
unsigned int dns_packet_getname(const char *buf, unsigned int len, unsigned int pos, char **d)
unsigned int dns_packet_copy(const char *buf, unsigned int len, unsigned int pos, char *out, unsigned int outlen)
void out(const char *s, unsigned int len)
unsigned int printpacket_cat(stralloc *out, char *buf, unsigned int len)
unsigned int printrecord_cat(stralloc *, const char *, unsigned int, unsigned int, const char *, const char *)