19 pos = dns_packet_copy(
buf,len,0,header,12);
if (!pos)
return DNS_ERR;
20 uint16_unpack_big(header + 6,&numanswers);
21 pos = dns_packet_skipname(
buf,len,pos);
if (!pos)
return DNS_ERR;
24 while (numanswers--) {
25 pos = dns_packet_skipname(
buf,len,pos);
if (!pos)
return DNS_ERR;
26 pos = dns_packet_copy(
buf,len,pos,header,10);
if (!pos)
return DNS_ERR;
27 uint16_unpack_big(header + 8,&datalen);
28 if (byte_equal(header,2,DNS_T_TLSA))
29 if (byte_equal(header + 2,2,DNS_C_IN)) {
30 if (pos + datalen > len)
return DNS_ERR;
31 if (!stralloc_catb(
out,
buf + pos,datalen))
return DNS_MEM;
36 if (!stralloc_0(
out))
return DNS_MEM;
45 if (dns_domain_fromdot(&q,fqdn->s,fqdn->len) <= 0)
return DNS_ERR;
46 if (dns_resolve(q,DNS_T_TLSA) >= 0) {
47 if ((rc =
dns_tlsa_packet(
out,dns_resolve_tx.packet,dns_resolve_tx.packetlen)) < 0)
return DNS_ERR;
48 dns_transmit_free(&dns_resolve_tx);
int stralloc_copys(stralloc *, char const *)
int dns_tlsa_packet(stralloc *out, const char *buf, unsigned int len)
int dns_tlsa(stralloc *out, const stralloc *fqdn)