answer: minor refactor – move link local check into RR code
This commit is contained in:
@@ -713,10 +713,7 @@ void dns_answer_order_by_scope(DnsAnswer *a, bool prefer_link_local) {
|
||||
|
||||
items = newa(DnsAnswerItem, a->n_rrs);
|
||||
for (i = 0; i < a->n_rrs; i++) {
|
||||
|
||||
if (a->items[i].rr->key->class == DNS_CLASS_IN &&
|
||||
((a->items[i].rr->key->type == DNS_TYPE_A && in_addr_is_link_local(AF_INET, (union in_addr_union*) &a->items[i].rr->a.in_addr) != prefer_link_local) ||
|
||||
(a->items[i].rr->key->type == DNS_TYPE_AAAA && in_addr_is_link_local(AF_INET6, (union in_addr_union*) &a->items[i].rr->aaaa.in6_addr) != prefer_link_local)))
|
||||
if (dns_resource_record_is_link_local_address(a->items[i].rr) != prefer_link_local)
|
||||
/* Order address records that are not preferred to the end of the array */
|
||||
items[end--] = a->items[i];
|
||||
else
|
||||
|
||||
@@ -1721,6 +1721,20 @@ int dns_resource_record_clamp_ttl(DnsResourceRecord **rr, uint32_t max_ttl) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool dns_resource_record_is_link_local_address(DnsResourceRecord *rr) {
|
||||
|
||||
if (rr->key->class != DNS_CLASS_IN)
|
||||
return false;
|
||||
|
||||
if (rr->key->type == DNS_TYPE_A)
|
||||
return in4_addr_is_link_local(&rr->a.in_addr);
|
||||
|
||||
if (rr->key->type == DNS_TYPE_AAAA)
|
||||
return IN6_IS_ADDR_LINKLOCAL(&rr->aaaa.in6_addr);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
DnsTxtItem *dns_txt_item_free_all(DnsTxtItem *i) {
|
||||
DnsTxtItem *n;
|
||||
|
||||
|
||||
@@ -324,6 +324,8 @@ int dns_resource_record_is_synthetic(DnsResourceRecord *rr);
|
||||
|
||||
int dns_resource_record_clamp_ttl(DnsResourceRecord **rr, uint32_t max_ttl);
|
||||
|
||||
bool dns_resource_record_is_link_local_address(DnsResourceRecord *rr);
|
||||
|
||||
DnsTxtItem *dns_txt_item_free_all(DnsTxtItem *i);
|
||||
bool dns_txt_item_equal(DnsTxtItem *a, DnsTxtItem *b);
|
||||
DnsTxtItem *dns_txt_item_copy(DnsTxtItem *i);
|
||||
|
||||
Reference in New Issue
Block a user