20 uint16_unpack_big(header + 6,&numanswers);
24 while (numanswers--) {
27 uint16_unpack_big(header + 8,&datalen);
28 if (byte_equal(header,2,
DNS_T_A))
29 if (byte_equal(header + 2,2,
DNS_C_IN))
32 if (!stralloc_catb(
out,header,4))
return DNS_MEM;
52 if (!stralloc_readyplus(fqdn,1))
return DNS_MEM;
54 fqdn->s[fqdn->len] = 0;
55 if (ip4_scan(fqdn->s,
ip)) {
61 for (i = 0; i <= fqdn->len; ++i) {
67 if ((ch ==
'[') || (ch ==
']'))
continue;
69 if (!stralloc_append(
out,&code))
return DNS_MEM;
73 if ((ch >=
'0') && (ch <=
'9')) {
105 uint16_unpack_big(header + 6,&numanswers);
109 while (numanswers--) {
112 uint16_unpack_big(header + 8,&datalen);
114 if (byte_equal(header + 2,2,
DNS_C_IN))
117 if (!stralloc_catb(
out,header,16))
return DNS_MEM;
119 }
else if (byte_equal(header,2,
DNS_T_A))
120 if (byte_equal(header + 2,2,
DNS_C_IN))
122 byte_copy(header,12,V4mappedprefix);
124 if (!stralloc_catb(
out,header,16))
return DNS_MEM;
144 if (!stralloc_readyplus(fqdn,1))
return DNS_MEM;
146 fqdn->s[fqdn->len] = 0;
147 if (ip6_scan(fqdn->s,
ip)) {
153 for (i = 0; i <= fqdn->len; ++i) {
159 if ((ch ==
'[') || (ch ==
']'))
continue;
161 if (!stralloc_append(
out,&code))
return DNS_MEM;
165 if ((ch >=
'0') && (ch <=
'9')) {
void dns_transmit_free(struct dns_transmit *)
void dns_sortip4(char *, unsigned int)
unsigned int dns_packet_copy(const char *, unsigned int, unsigned int, char *, unsigned int)
int dns_domain_fromdot(char **, const char *, unsigned int)
int dns_resolve(const char *, const char *)
void dns_sortip6(char *, unsigned int)
unsigned int dns_packet_skipname(const char *, unsigned int, unsigned int)
void dns_domain_free(char **)
struct dns_transmit dns_resolve_tx
int dns_ip4_packet(stralloc *out, const char *buf, unsigned int len)
int dns_ip6_packet(stralloc *out, const char *buf, unsigned int len)
int dns_ip4(stralloc *out, stralloc *fqdn)
int dns_ip6(stralloc *out, stralloc *fqdn)
void out(const char *s, unsigned int len)