return 0;
}
-int dns_packet_append_answer(DnsPacket *p, DnsAnswer *a) {
+int dns_packet_append_answer(DnsPacket *p, DnsAnswer *a, unsigned *completed) {
DnsResourceRecord *rr;
DnsAnswerFlags flags;
int r;
r = dns_packet_append_rr(p, rr, flags, NULL, NULL);
if (r < 0)
return r;
+
+ if (completed)
+ (*completed)++;
}
return 0;
int dns_packet_append_rr(DnsPacket *p, const DnsResourceRecord *rr, const DnsAnswerFlags flags, size_t *start, size_t *rdata_start);
int dns_packet_append_opt(DnsPacket *p, uint16_t max_udp_size, bool edns0_do, bool include_rfc6975, int rcode, size_t *start);
int dns_packet_append_question(DnsPacket *p, DnsQuestion *q);
-int dns_packet_append_answer(DnsPacket *p, DnsAnswer *a);
+int dns_packet_append_answer(DnsPacket *p, DnsAnswer *a, unsigned *completed);
int dns_packet_patch_max_udp_size(DnsPacket *p, uint16_t max_udp_size);
int dns_packet_patch_ttls(DnsPacket *p, usec_t timestamp);
DnsPacket **ret) {
_cleanup_(dns_packet_unrefp) DnsPacket *p = NULL;
+ unsigned n_answer = 0, n_soa = 0;
int r;
assert(s);
return r;
DNS_PACKET_HEADER(p)->qdcount = htobe16(dns_question_size(q));
- r = dns_packet_append_answer(p, answer);
+ r = dns_packet_append_answer(p, answer, &n_answer);
if (r < 0)
return r;
- DNS_PACKET_HEADER(p)->ancount = htobe16(dns_answer_size(answer));
+ DNS_PACKET_HEADER(p)->ancount = htobe16(n_answer);
- r = dns_packet_append_answer(p, soa);
+ r = dns_packet_append_answer(p, soa, &n_soa);
if (r < 0)
return r;
- DNS_PACKET_HEADER(p)->arcount = htobe16(dns_answer_size(soa));
+ DNS_PACKET_HEADER(p)->arcount = htobe16(n_soa);
*ret = TAKE_PTR(p);
if (r < 0)
return r;
- r = dns_packet_append_answer(p, answer);
+ r = dns_packet_append_answer(p, answer, &nscount);
if (r < 0)
return r;
-
- nscount += dns_answer_size(answer);
}
DNS_PACKET_HEADER(p)->nscount = htobe16(nscount);