From 110b4f4627c6ee3325f3107ae441861755abe6d0 Mon Sep 17 00:00:00 2001 From: Jan Kadlec <jan.kadlec@nic.cz> Date: Mon, 24 Mar 2014 16:51:19 +0100 Subject: [PATCH] new_node: rdata.h are now used with knot_rrs_t instead of knot_rrset_t - simplified all the functions while I was at it --- src/libknot/dnssec/nsec3.c | 10 +- src/libknot/rdata.h | 429 ++++++++++++++----------------------- 2 files changed, 161 insertions(+), 278 deletions(-) diff --git a/src/libknot/dnssec/nsec3.c b/src/libknot/dnssec/nsec3.c index 1f80486a1..71bdd4b39 100644 --- a/src/libknot/dnssec/nsec3.c +++ b/src/libknot/dnssec/nsec3.c @@ -118,13 +118,13 @@ int knot_nsec3_params_from_wire(knot_nsec3_params_t *params, knot_nsec3_params_t result = { 0 }; - result.algorithm = knot_rdata_nsec3param_algorithm(rrset, 0); - result.iterations = knot_rdata_nsec3param_iterations(rrset, 0); - result.flags = knot_rdata_nsec3param_flags(rrset, 0); - result.salt_length = knot_rdata_nsec3param_salt_length(rrset, 0); + result.algorithm = knot_rrs_nsec3param_algorithm(rrset, 0); + result.iterations = knot_rrs_nsec3param_iterations(rrset, 0); + result.flags = knot_rrs_nsec3param_flags(rrset, 0); + result.salt_length = knot_rrs_nsec3param_salt_length(rrset, 0); if (result.salt_length > 0) { - result.salt = knot_memdup(knot_rdata_nsec3param_salt(rrset, 0), + result.salt = knot_memdup(knot_rrs_nsec3param_salt(rrset, 0), result.salt_length); if (!result.salt) { return KNOT_ENOMEM; diff --git a/src/libknot/rdata.h b/src/libknot/rdata.h index 3af16ef6a..3e8195a48 100644 --- a/src/libknot/rdata.h +++ b/src/libknot/rdata.h @@ -29,228 +29,183 @@ #include "common/descriptor.h" #include "libknot/dname.h" -#include "libknot/rrset.h" +#include "libknot/rr.h" #include "libknot/util/utils.h" #define KNOT_RDATA_DNSKEY_FLAG_KSK 1 -static inline -const knot_dname_t *knot_rdata_cname_name(const knot_rrset_t *rrset) -{ - if (rrset == NULL) { - return NULL; +#define RRS_CHECK(rrs, pos, code) \ + if (rrs == NULL || rrs->data == NULL || rrs->rr_count == 0 || \ + pos >= rrs->rr_count) { \ + code; \ } - return knot_rrset_rr_rdata(rrset, 0); +static inline uint8_t *data_offset(const knot_rrs_t *rrs, size_t pos, + size_t offset) { + knot_rr_t *rr = knot_rrs_get_rr(rrs, pos); + return knot_rr_get_rdata(rr) + offset; } static inline -const knot_dname_t *knot_rdata_dname_target(const knot_rrset_t *rrset) +const knot_dname_t *knot_rrs_cname_name(const knot_rrs_t *rrs) { - if (rrset == NULL) { - return NULL; - } - - return knot_rrset_rr_rdata(rrset, 0); + RRS_CHECK(rrs, 0, return NULL); + return data_offset(rrs, 0, 0); } static inline -const knot_dname_t *knot_rdata_soa_primary_ns(const knot_rrset_t *rrset) +const knot_dname_t *knot_rrs_dname_target(const knot_rrs_t *rrs) { - if (rrset == NULL) { - return NULL; - } - - return knot_rrset_rr_rdata(rrset, 0); + RRS_CHECK(rrs, 0, return NULL); + return data_offset(rrs, 0, 0); } static inline -const knot_dname_t *knot_rdata_soa_mailbox(const knot_rrset_t *rrset) +const knot_dname_t *knot_rrs_soa_primary_ns(const knot_rrs_t *rrs) { - if (rrset == NULL || knot_rrset_rr_count(rrset) == 0) { - return NULL; - } - - return knot_rrset_rr_rdata(rrset, 0) + - knot_dname_size(knot_rrset_rr_rdata(rrset, 0)); + RRS_CHECK(rrs, 0, return NULL); + return data_offset(rrs, 0, 0); } static inline -size_t knot_rrset_rdata_soa_names_len(const knot_rrset_t *rrset) +const knot_dname_t *knot_rrs_soa_mailbox(const knot_rrs_t *rrs) { - if (rrset == NULL) { - return 0; - } - - return knot_dname_size(knot_rdata_soa_primary_ns(rrset)) - + knot_dname_size(knot_rdata_soa_mailbox(rrset)); + RRS_CHECK(rrs, 0, return NULL); + return data_offset(rrs, 0, knot_dname_size(knot_rrs_soa_primary_ns(rrs))); } static inline -uint32_t knot_rdata_soa_serial(const knot_rrset_t *rrset) +size_t knot_rrs_soa_names_len(const knot_rrs_t *rrs) { - if (rrset == NULL) { - return 0; - } - - return knot_wire_read_u32(knot_rrset_rr_rdata(rrset, 0) - + knot_rrset_rdata_soa_names_len(rrset)); + RRS_CHECK(rrs, 0, return 0); + return knot_dname_size(knot_rrs_soa_primary_ns(rrs)) + + knot_dname_size(knot_rrs_soa_mailbox(rrs)); } static inline -void knot_rdata_soa_serial_set(knot_rrset_t *rrset, uint32_t serial) +uint32_t knot_rrs_soa_serial(const knot_rrs_t *rrs) { - if (rrset == NULL) { - return; - } + RRS_CHECK(rrs, 0, return 0); + return knot_wire_read_u32(data_offset(rrs, 0, + knot_rrs_soa_names_len(rrs))); +} +static inline +void knot_rrs_soa_serial_set(knot_rrs_t *rrs, uint32_t serial) +{ + RRS_CHECK(rrs, 0, return); // the number is in network byte order, transform it - knot_wire_write_u32(knot_rrset_rr_rdata(rrset, 0) - + knot_rrset_rdata_soa_names_len(rrset), serial); + knot_wire_write_u32(data_offset(rrs, 0, knot_rrs_soa_names_len(rrs)), + serial); } static inline -uint32_t knot_rdata_soa_refresh(const knot_rrset_t *rrset) +uint32_t knot_rrs_soa_refresh(const knot_rrs_t *rrs) { - if (rrset == NULL) { - return 0; - } - - return knot_wire_read_u32(knot_rrset_rr_rdata(rrset, 0) - + knot_rrset_rdata_soa_names_len(rrset) + 4); + RRS_CHECK(rrs, 0, return 0); + return knot_wire_read_u32(data_offset(rrs, 0, + knot_rrs_soa_names_len(rrs) + 4)); } static inline -uint32_t knot_rdata_soa_retry(const knot_rrset_t *rrset) +uint32_t knot_rrs_soa_retry(const knot_rrs_t *rrs) { - if (rrset == NULL) { - return 0; - } - - return knot_wire_read_u32(knot_rrset_rr_rdata(rrset, 0) - + knot_rrset_rdata_soa_names_len(rrset) + 8); + RRS_CHECK(rrs, 0, return 0); + return knot_wire_read_u32(data_offset(rrs, 0, + knot_rrs_soa_names_len(rrs) + 8)); } static inline -uint32_t knot_rdata_soa_expire(const knot_rrset_t *rrset) +uint32_t knot_rrs_soa_expire(const knot_rrs_t *rrs) { - if (rrset == NULL) { - return 0; - } - - return knot_wire_read_u32(knot_rrset_rr_rdata(rrset, 0) - + knot_rrset_rdata_soa_names_len(rrset) + 12); + RRS_CHECK(rrs, 0, return 0); + return knot_wire_read_u32(data_offset(rrs, 0, + knot_rrs_soa_names_len(rrs) + 12)); } static inline -uint32_t knot_rdata_soa_minimum(const knot_rrset_t *rrset) +uint32_t knot_rrs_soa_minimum(const knot_rrs_t *rrs) { - if (rrset == NULL) { - return 0; - } - - return knot_wire_read_u32(knot_rrset_rr_rdata(rrset, 0) - + knot_rrset_rdata_soa_names_len(rrset) + 16); + RRS_CHECK(rrs, 0, return 0); + return knot_wire_read_u32(data_offset(rrs, 0, + knot_rrs_soa_names_len(rrs) + 16)); } static inline -uint16_t knot_rdata_rrsig_type_covered(const knot_rrset_t *rrset, size_t pos) +uint16_t knot_rrs_rrsig_type_covered(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { - return 0; - } - - return knot_wire_read_u16(knot_rrset_rr_rdata(rrset, pos)); + RRS_CHECK(rrs, pos, return 0); + return knot_wire_read_u16(data_offset(rrs, pos, 0)); } static inline -uint8_t knot_rdata_rrsig_algorithm(const knot_rrset_t *rrset, size_t pos) +uint8_t knot_rrs_rrsig_algorithm(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { - return 0; - } - - return *(knot_rrset_rr_rdata(rrset, pos) + 2); + RRS_CHECK(rrs, pos, return 0); + return *data_offset(rrs, pos, 2); } static inline -uint8_t knot_rdata_rrsig_labels(const knot_rrset_t *rrset, size_t pos) +uint8_t knot_rrs_rrsig_labels(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { - return 0; - } - - return *(knot_rrset_rr_rdata(rrset, pos) + 3); + RRS_CHECK(rrs, pos, return 0); + return *data_offset(rrs, pos, 3); } static inline -uint32_t knot_rdata_rrsig_original_ttl(const knot_rrset_t *rrset, size_t pos) +uint32_t knot_rrs_rrsig_original_ttl(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { - return 0; - } - - return knot_wire_read_u32(knot_rrset_rr_rdata(rrset, pos) + 4); + RRS_CHECK(rrs, pos, return 0); + return knot_wire_read_u32(data_offset(rrs, pos, 4)); } static inline -uint32_t knot_rdata_rrsig_sig_expiration(const knot_rrset_t *rrset, size_t pos) +uint32_t knot_rrs_rrsig_sig_expiration(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { - return 0; - } - - return knot_wire_read_u32(knot_rrset_rr_rdata(rrset, pos) + 8); + RRS_CHECK(rrs, pos, return 0); + return knot_wire_read_u32(data_offset(rrs, pos, 8)); } static inline -uint32_t knot_rdata_rrsig_sig_inception(const knot_rrset_t *rrset, size_t pos) +uint32_t knot_rrs_rrsig_sig_inception(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { - return 0; - } - - return knot_wire_read_u32(knot_rrset_rr_rdata(rrset, pos) + 12); + RRS_CHECK(rrs, pos, return 0); + return knot_wire_read_u32(data_offset(rrs, pos, 12)); } static inline -uint16_t knot_rdata_rrsig_key_tag(const knot_rrset_t *rrset, size_t pos) +uint16_t knot_rrs_rrsig_key_tag(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { - return 0; - } - - return knot_wire_read_u16(knot_rrset_rr_rdata(rrset, pos) + 16); + RRS_CHECK(rrs, pos, return 0); + return knot_wire_read_u16(data_offset(rrs, pos, 16)); } static inline -const knot_dname_t *knot_rdata_rrsig_signer_name(const knot_rrset_t *rrset, +const knot_dname_t *knot_rrs_rrsig_signer_name(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { - return NULL; - } - - return knot_rrset_rr_rdata(rrset, pos) + 18; + RRS_CHECK(rrs, pos, return 0); + return data_offset(rrs, pos, 18); } static inline -void knot_rdata_rrsig_signature(const knot_rrset_t *rrset, size_t pos, +void knot_rrs_rrsig_signature(const knot_rrs_t *rrs, size_t pos, uint8_t **signature, size_t *signature_size) { if (!signature || !signature_size) { return; } - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { + if (rrs == NULL || pos >= rrs->rr_count) { *signature = NULL; *signature_size = 0; return; } - uint8_t *rdata = knot_rrset_rr_rdata(rrset, pos); + uint8_t *rdata = data_offset(rrs, pos, 0); uint8_t *signer = rdata + 18; - size_t total_size = knot_rrset_rr_size(rrset, pos); + const knot_rr_t *rr = knot_rrs_rr(rrs, pos); + size_t total_size = knot_rr_size(rr); size_t header_size = 18 + knot_dname_size(signer); *signature = rdata + header_size; @@ -258,249 +213,177 @@ void knot_rdata_rrsig_signature(const knot_rrset_t *rrset, size_t pos, } static inline -uint16_t knot_rdata_dnskey_flags(const knot_rrset_t *rrset, size_t pos) +uint16_t knot_rrs_dnskey_flags(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { - return 0; - } - - return knot_wire_read_u16(knot_rrset_rr_rdata(rrset, pos)); + RRS_CHECK(rrs, pos, return 0); + return knot_wire_read_u16(data_offset(rrs, pos, 0)); } static inline -uint8_t knot_rdata_dnskey_proto(const knot_rrset_t *rrset, size_t pos) +uint8_t knot_rrs_dnskey_proto(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { - return 0; - } + RRS_CHECK(rrs, pos, return 0); - return *(knot_rrset_rr_rdata(rrset, pos) + 2); + return *data_offset(rrs, pos, 2); } static inline -uint8_t knot_rdata_dnskey_alg(const knot_rrset_t *rrset, size_t pos) +uint8_t knot_rrs_dnskey_alg(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { - return 0; - } - - return *(knot_rrset_rr_rdata(rrset, pos) + 3); + RRS_CHECK(rrs, pos, return 0); + return *data_offset(rrs, pos, 3); } static inline -void knot_rdata_dnskey_key(const knot_rrset_t *rrset, size_t pos, uint8_t **key, +void knot_rrs_dnskey_key(const knot_rrs_t *rrs, size_t pos, uint8_t **key, uint16_t *key_size) { - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { - return; - } - - *key = knot_rrset_rr_rdata(rrset, pos) + 4; - *key_size = knot_rrset_rr_size(rrset, pos) - 4; + RRS_CHECK(rrs, pos, return); + *key = data_offset(rrs, pos, 4); + const knot_rr_t *rr = knot_rrs_rr(rrs, pos); + *key_size = knot_rr_size(rr) - 4; } static inline -const knot_dname_t *knot_rdata_nsec_next(const knot_rrset_t *rrset) +const knot_dname_t *knot_rrs_nsec_next(const knot_rrs_t *rrs) { - return knot_rrset_rr_rdata(rrset, 0); + RRS_CHECK(rrs, 0, return NULL); + return data_offset(rrs, 0, 0); } static inline -void knot_rdata_nsec_bitmap(const knot_rrset_t *rrset, +void knot_rrs_nsec_bitmap(const knot_rrs_t *rrs, uint8_t **bitmap, uint16_t *size) { - uint8_t *rdata = knot_rrset_rr_rdata(rrset, 0); - int next_size = knot_dname_size(rdata); + RRS_CHECK(rrs, 0, return); + knot_rr_t *rr = knot_rrs_get_rr(rrs, 0); + int next_size = knot_dname_size(knot_rrs_nsec_next(rrs)); - *bitmap = rdata + next_size; - *size = knot_rrset_rr_size(rrset, 0) - next_size; + *bitmap = knot_rr_get_rdata(rr) + next_size; + *size = knot_rr_size(rr) - next_size; } static inline -uint8_t knot_rdata_nsec3_algorithm(const knot_rrset_t *rrset, size_t pos) +uint8_t knot_rrs_nsec3_algorithm(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { - return 0; - } - - return *(knot_rrset_rr_rdata(rrset, pos)); + RRS_CHECK(rrs, pos, return 0); + return *data_offset(rrs, pos, 0); } static inline -uint8_t knot_rdata_nsec3_flags(const knot_rrset_t *rrset, size_t pos) +uint8_t knot_rrs_nsec3_flags(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { - return 0; - } - - return *(knot_rrset_rr_rdata(rrset, pos) + 1); + RRS_CHECK(rrs, pos, return 0); + return *data_offset(rrs, pos, 1); } static inline -uint16_t knot_rdata_nsec3_iterations(const knot_rrset_t *rrset, size_t pos) +uint16_t knot_rrs_nsec3_iterations(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { - return 0; - } - - return knot_wire_read_u16(knot_rrset_rr_rdata(rrset, pos) + 2); + RRS_CHECK(rrs, pos, return 0); + return knot_wire_read_u16(data_offset(rrs, pos, 2)); } static inline -uint8_t knot_rdata_nsec3_salt_length(const knot_rrset_t *rrset, size_t pos) +uint8_t knot_rrs_nsec3_salt_length(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { - return 0; - } + RRS_CHECK(rrs, pos, return 0); - return *(knot_rrset_rr_rdata(rrset, pos) + 4); + return *(data_offset(rrs, pos, 0) + 4); } static inline -const uint8_t *knot_rdata_nsec3_salt(const knot_rrset_t *rrset, size_t pos) +const uint8_t *knot_rrs_nsec3_salt(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { - return NULL; - } - - return knot_rrset_rr_rdata(rrset, pos) + 5; + RRS_CHECK(rrs, pos, return NULL); + return data_offset(rrs, pos, 5); } static inline -void knot_rdata_nsec3_next_hashed(const knot_rrset_t *rrset, size_t pos, +void knot_rrs_nsec3_next_hashed(const knot_rrs_t *rrs, size_t pos, uint8_t **name, uint8_t *name_size) { - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { - return; - } - - uint8_t salt_size = knot_rdata_nsec3_salt_length(rrset, pos); - *name_size = *(knot_rrset_rr_rdata(rrset, pos) + 4 + salt_size + 1); - *name = knot_rrset_rr_rdata(rrset, pos) + 4 + salt_size + 2; + RRS_CHECK(rrs, pos, return); + uint8_t salt_size = knot_rrs_nsec3_salt_length(rrs, pos); + *name_size = *data_offset(rrs, pos, 4 + salt_size + 1); + *name = data_offset(rrs, pos, 4 + salt_size + 2); } static inline -void knot_rdata_nsec3_bitmap(const knot_rrset_t *rrset, size_t pos, +void knot_rrs_nsec3_bitmap(const knot_rrs_t *rrs, size_t pos, uint8_t **bitmap, uint16_t *size) { - if (rrset == NULL || pos >= knot_rrset_rr_count(rrset)) { - return; - } + RRS_CHECK(rrs, pos, return); /* Bitmap is last, skip all the items. */ size_t offset = 6; //hash alg., flags, iterations, salt len., hash len. - offset += knot_rdata_nsec3_salt_length(rrset, pos); //salt + offset += knot_rrs_nsec3_salt_length(rrs, pos); //salt uint8_t *next_hashed = NULL; uint8_t next_hashed_size = 0; - knot_rdata_nsec3_next_hashed(rrset, pos, &next_hashed, - &next_hashed_size); + knot_rrs_nsec3_next_hashed(rrs, pos, &next_hashed, &next_hashed_size); offset += next_hashed_size; //hash - *bitmap = knot_rrset_rr_rdata(rrset, pos) + offset; - *size = knot_rrset_rr_size(rrset, pos) - offset; + *bitmap = data_offset(rrs, pos, offset); + const knot_rr_t *rr = knot_rrs_rr(rrs, pos); + *size = knot_rr_size(rr) - offset; } static inline -uint8_t knot_rdata_nsec3param_algorithm(const knot_rrset_t *rrset, size_t pos) +uint8_t knot_rrs_nsec3param_algorithm(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || knot_rrset_rr_count(rrset) <= pos) { - return 0; - } - - return *(knot_rrset_rr_rdata(rrset, pos)); + RRS_CHECK(rrs, pos, return 0); + return *data_offset(rrs, pos, 0); } static inline -uint8_t knot_rdata_nsec3param_flags(const knot_rrset_t *rrset, size_t pos) +uint8_t knot_rrs_nsec3param_flags(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || knot_rrset_rr_count(rrset) <= pos) { - return 0; - } - - return *(knot_rrset_rr_rdata(rrset, pos) + 1); + RRS_CHECK(rrs, pos, return 0); + return *data_offset(rrs, pos, 1); } static inline -uint16_t knot_rdata_nsec3param_iterations(const knot_rrset_t *rrset, size_t pos) +uint16_t knot_rrs_nsec3param_iterations(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || knot_rrset_rr_count(rrset) <= pos) { - return 0; - } - - return knot_wire_read_u16(knot_rrset_rr_rdata(rrset, pos) + 2); + RRS_CHECK(rrs, pos, return 0); + return knot_wire_read_u16(data_offset(rrs, pos, 2)); } static inline -uint8_t knot_rdata_nsec3param_salt_length(const knot_rrset_t *rrset, size_t pos) +uint8_t knot_rrs_nsec3param_salt_length(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || knot_rrset_rr_count(rrset) <= pos) { - return 0; - } - - return *(knot_rrset_rr_rdata(rrset, pos) + 4); + RRS_CHECK(rrs, pos, return 0); + return *data_offset(rrs, pos, 4); } static inline -const uint8_t *knot_rdata_nsec3param_salt(const knot_rrset_t *rrset, size_t pos) +const uint8_t *knot_rrs_nsec3param_salt(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || knot_rrset_rr_count(rrset) <= pos) { - return NULL; - } - - return knot_rrset_rr_rdata(rrset, pos) + 5; + RRS_CHECK(rrs, pos, return 0); + return data_offset(rrs, pos, 5); } static inline -const knot_dname_t *knot_rdata_ns_name(const knot_rrset_t *rrset, size_t pos) +const knot_dname_t *knot_rrs_ns_name(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || knot_rrset_rr_count(rrset) <= pos) { - return NULL; - } - - return knot_rrset_rr_rdata(rrset, pos); + RRS_CHECK(rrs, pos, return 0); + return data_offset(rrs, pos, 0); } static inline -const knot_dname_t *knot_rdata_mx_name(const knot_rrset_t *rrset, size_t pos) +const knot_dname_t *knot_rrs_mx_name(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || knot_rrset_rr_count(rrset) <= pos) { - return NULL; - } - - return knot_rrset_rr_rdata(rrset, pos) + 2; + RRS_CHECK(rrs, pos, return 0); + return data_offset(rrs, pos, 2); } static inline -const knot_dname_t *knot_rdata_srv_name(const knot_rrset_t *rrset, size_t pos) +const knot_dname_t *knot_rrs_srv_name(const knot_rrs_t *rrs, size_t pos) { - if (rrset == NULL || knot_rrset_rr_count(rrset) <= pos) { - return NULL; - } - - return knot_rrset_rr_rdata(rrset, pos) + 6; -} - -static inline -const knot_dname_t *knot_rdata_name(const knot_rrset_t *rrset, size_t pos) -{ - if (rrset == NULL || knot_rrset_rr_count(rrset) <= pos) { - return NULL; - } - - switch (rrset->type) { - case KNOT_RRTYPE_NS: - return knot_rdata_ns_name(rrset, pos); - case KNOT_RRTYPE_MX: - return knot_rdata_mx_name(rrset, pos); - case KNOT_RRTYPE_SRV: - return knot_rdata_srv_name(rrset, pos); - case KNOT_RRTYPE_CNAME: - return knot_rdata_cname_name(rrset); - } - - return NULL; + RRS_CHECK(rrs, pos, return 0); + return data_offset(rrs, pos, 6); } -#endif /* _KNOT_RDATA_H_ */ +#endif /* _knot_rrs_H_ */ /*! @} */ -- GitLab