reslove: Refactor DNS Answer to support 'until' in DnsAnswerItem
Prepare for mDNS browse services to facilitate scheduled cache maintenance queries when browsing for services. Introduce dns_answer_add_full() and dns_answer_add_extend_full() to explicitly handle the 'until' argument, enabling fine-grained control over the time property of DNS answers. Ensure backward compatibility while providing the flexibility to specify 'until' for specific cases when needed Co-authored-by: Vishwanath Chandapur <vishwanath.chandapur@philips.com>
This commit is contained in:
co-authored by
Vishwanath Chandapur
parent
108bd5c297
commit
f7d5177dd2
@@ -109,7 +109,8 @@ static int dns_answer_add_raw(
|
||||
DnsResourceRecord *rr,
|
||||
int ifindex,
|
||||
DnsAnswerFlags flags,
|
||||
DnsResourceRecord *rrsig) {
|
||||
DnsResourceRecord *rrsig,
|
||||
usec_t until) {
|
||||
|
||||
_cleanup_(dns_answer_item_unrefp) DnsAnswerItem *item = NULL;
|
||||
int r;
|
||||
@@ -131,6 +132,7 @@ static int dns_answer_add_raw(
|
||||
.rr = dns_resource_record_ref(rr),
|
||||
.ifindex = ifindex,
|
||||
.flags = flags,
|
||||
.until = until,
|
||||
.rrsig = dns_resource_record_ref(rrsig),
|
||||
};
|
||||
|
||||
@@ -152,7 +154,8 @@ static int dns_answer_add_raw_all(DnsAnswer *a, DnsAnswer *source) {
|
||||
item->rr,
|
||||
item->ifindex,
|
||||
item->flags,
|
||||
item->rrsig);
|
||||
item->rrsig,
|
||||
/* until= */ USEC_INFINITY);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
@@ -160,12 +163,13 @@ static int dns_answer_add_raw_all(DnsAnswer *a, DnsAnswer *source) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dns_answer_add(
|
||||
int dns_answer_add_full(
|
||||
DnsAnswer *a,
|
||||
DnsResourceRecord *rr,
|
||||
int ifindex,
|
||||
DnsAnswerFlags flags,
|
||||
DnsResourceRecord *rrsig) {
|
||||
DnsResourceRecord *rrsig,
|
||||
usec_t until) {
|
||||
|
||||
DnsAnswerItem tmp, *exist;
|
||||
|
||||
@@ -220,7 +224,7 @@ int dns_answer_add(
|
||||
return 0;
|
||||
}
|
||||
|
||||
return dns_answer_add_raw(a, rr, ifindex, flags, rrsig);
|
||||
return dns_answer_add_raw(a, rr, ifindex, flags, rrsig, until);
|
||||
}
|
||||
|
||||
static int dns_answer_add_all(DnsAnswer *a, DnsAnswer *b) {
|
||||
@@ -236,12 +240,13 @@ static int dns_answer_add_all(DnsAnswer *a, DnsAnswer *b) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dns_answer_add_extend(
|
||||
int dns_answer_add_extend_full(
|
||||
DnsAnswer **a,
|
||||
DnsResourceRecord *rr,
|
||||
int ifindex,
|
||||
DnsAnswerFlags flags,
|
||||
DnsResourceRecord *rrsig) {
|
||||
DnsResourceRecord *rrsig,
|
||||
usec_t until) {
|
||||
|
||||
int r;
|
||||
|
||||
@@ -252,7 +257,7 @@ int dns_answer_add_extend(
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return dns_answer_add(*a, rr, ifindex, flags, rrsig);
|
||||
return dns_answer_add_full(*a, rr, ifindex, flags, rrsig, until);
|
||||
}
|
||||
|
||||
int dns_answer_add_soa(DnsAnswer *a, const char *name, uint32_t ttl, int ifindex) {
|
||||
|
||||
@@ -31,6 +31,7 @@ typedef struct DnsAnswerItem {
|
||||
DnsResourceRecord *rrsig; /* Optionally, also store RRSIG RR that successfully validates this item */
|
||||
int ifindex;
|
||||
DnsAnswerFlags flags;
|
||||
usec_t until;
|
||||
} DnsAnswerItem;
|
||||
|
||||
typedef struct DnsAnswer {
|
||||
@@ -50,8 +51,8 @@ DnsAnswer *dns_answer_unref(DnsAnswer *a);
|
||||
*_a = _b; \
|
||||
} while(0)
|
||||
|
||||
int dns_answer_add(DnsAnswer *a, DnsResourceRecord *rr, int ifindex, DnsAnswerFlags flags, DnsResourceRecord *rrsig);
|
||||
int dns_answer_add_extend(DnsAnswer **a, DnsResourceRecord *rr, int ifindex, DnsAnswerFlags flags, DnsResourceRecord *rrsig);
|
||||
int dns_answer_add_full(DnsAnswer *a, DnsResourceRecord *rr, int ifindex, DnsAnswerFlags flags, DnsResourceRecord *rrsig, usec_t until);
|
||||
int dns_answer_add_extend_full(DnsAnswer **a, DnsResourceRecord *rr, int ifindex, DnsAnswerFlags flags, DnsResourceRecord *rrsig, usec_t until);
|
||||
int dns_answer_add_soa(DnsAnswer *a, const char *name, uint32_t ttl, int ifindex);
|
||||
|
||||
int dns_answer_match_key(DnsAnswer *a, const DnsResourceKey *key, DnsAnswerFlags *ret_flags);
|
||||
@@ -79,6 +80,16 @@ int dns_answer_move_by_key(DnsAnswer **to, DnsAnswer **from, const DnsResourceKe
|
||||
|
||||
int dns_answer_has_dname_for_cname(DnsAnswer *a, DnsResourceRecord *cname);
|
||||
|
||||
static inline int dns_answer_add_extend(DnsAnswer **a, DnsResourceRecord *rr,
|
||||
int ifindex, DnsAnswerFlags flags, DnsResourceRecord *rrsig) {
|
||||
return dns_answer_add_extend_full(a, rr, ifindex, flags, rrsig, /* until= */ USEC_INFINITY);
|
||||
}
|
||||
|
||||
static inline int dns_answer_add(DnsAnswer *a, DnsResourceRecord *rr,
|
||||
int ifindex, DnsAnswerFlags flags, DnsResourceRecord *rrsig) {
|
||||
return dns_answer_add_full(a, rr, ifindex, flags, rrsig, /* until= */ USEC_INFINITY);
|
||||
}
|
||||
|
||||
static inline size_t dns_answer_size(DnsAnswer *a) {
|
||||
return a ? ordered_set_size(a->items) : 0;
|
||||
}
|
||||
|
||||
@@ -1022,7 +1022,7 @@ static int answer_add_clamp_ttl(
|
||||
}
|
||||
}
|
||||
|
||||
r = dns_answer_add_extend(answer, rr, ifindex, answer_flags, rrsig);
|
||||
r = dns_answer_add_extend_full(answer, rr, ifindex, answer_flags, rrsig, until);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user