return TAKE_PTR(s);
}
-ssize_t dns_resource_record_payload(DnsResourceRecord *rr, void **out) {
+ssize_t dns_resource_record_payload(DnsResourceRecord *rr, const void **ret) {
assert(rr);
- assert(out);
+ assert(ret);
switch (rr->unparsable ? _DNS_TYPE_INVALID : rr->key->type) {
case DNS_TYPE_SRV:
case DNS_TYPE_HINFO:
case DNS_TYPE_SPF:
case DNS_TYPE_TXT:
- case DNS_TYPE_A:
- case DNS_TYPE_AAAA:
case DNS_TYPE_SOA:
case DNS_TYPE_MX:
case DNS_TYPE_LOC:
case DNS_TYPE_NSEC3:
return -EINVAL;
+ case DNS_TYPE_A:
+ *ret = &rr->a.in_addr;
+ return sizeof(rr->a.in_addr);
+
+ case DNS_TYPE_AAAA:
+ *ret = &rr->aaaa.in6_addr;
+ return sizeof(rr->aaaa.in6_addr);
+
case DNS_TYPE_SSHFP:
- *out = rr->sshfp.fingerprint;
+ *ret = rr->sshfp.fingerprint;
return rr->sshfp.fingerprint_size;
case DNS_TYPE_TLSA:
- *out = rr->tlsa.data;
+ *ret = rr->tlsa.data;
return rr->tlsa.data_size;
case DNS_TYPE_OPENPGPKEY:
default:
- *out = rr->generic.data;
+ *ret = rr->generic.data;
return rr->generic.data_size;
}
}
#define DNS_RESOURCE_KEY_STRING_MAX (_DNS_CLASS_STRING_MAX + _DNS_TYPE_STRING_MAX + DNS_HOSTNAME_MAX + 1)
char* dns_resource_key_to_string(const DnsResourceKey *key, char *buf, size_t buf_size);
-ssize_t dns_resource_record_payload(DnsResourceRecord *rr, void **out);
+ssize_t dns_resource_record_payload(DnsResourceRecord *rr, const void **ret);
#define DNS_RESOURCE_KEY_TO_STRING(key) \
dns_resource_key_to_string(key, (char[DNS_RESOURCE_KEY_STRING_MAX]) {}, DNS_RESOURCE_KEY_STRING_MAX)