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")
49 switch(
data[3] & 15) {
50 case 0:
X(
", noerror");
break;
51 case 3:
X(
", nxdomain");
break;
52 case 4:
X(
", notimp");
break;
53 case 5:
X(
", refused");
break;
54 default:
X(
", weird rcode");
56 if (
data[3] & 112)
X(
", weird z")
80 if (numanswers) { --numanswers;
X(
"answer: ") }
81 else if (numauthority) { --numauthority;
X(
"authority: ") }
82 else if (numglue) { --numglue;
X(
"additional: ") }
89 if (pos !=
len) { errno = EPROTO;
return 0; }
unsigned int dns_packet_copy(const char *, unsigned int, unsigned int, char *, unsigned int)
int dns_domain_todot_cat(stralloc *, const char *)
unsigned int dns_packet_getname(const char *, unsigned int, unsigned int, char **)
void out(const char *s, unsigned int len)
unsigned int printpacket_cat(stralloc *out, char *buf, unsigned int len)
unsigned int printrecord_cat(stralloc *out, const char *buf, unsigned int len, unsigned int pos, const char *q, const char qtype[2])