uint8_t ldns_pkt_edns_version(const ldns_pkt *packet);
uint16_t ldns_pkt_edns_z(const ldns_pkt *packet);
ldns_rdf *ldns_pkt_edns_data(const ldns_pkt *packet);
+bool ldns_pkt_edns_do(const ldns_pkt *packet);
+void ldns_pkt_set_edns_do(ldns_pkt *packet, bool value);
/**
* returns true if this packet needs and EDNS rr to be sent.
return packet->_edns_z;
}
+bool
+ldns_pkt_edns_do(const ldns_pkt *packet)
+{
+ return (packet->_edns_z & 0x8000);
+}
+
+void
+ldns_pkt_set_edns_do(ldns_pkt *packet, bool value)
+{
+ if (value) {
+ packet->_edns_z = packet->_edns_z | 0x8000;
+ } else {
+ packet->_edns_z = packet->_edns_z | 0x7fff;
+ }
+}
+
ldns_rdf *
ldns_pkt_edns_data(const ldns_pkt *packet)
{
for(i = 0; i < ldns_rr_list_rr_count(rrs); i++) {
if (type == ldns_rr_get_type(ldns_rr_list_rr(rrs, i))) {
/* types match */
- ldns_rr_list_push_rr(new, ldns_rr_list_rr(rrs, i));
+ ldns_rr_list_push_rr(new,
+ ldns_rr_deep_clone(
+ ldns_rr_list_rr(rrs, i))
+ );
ret = new;
}
}
+ if (!ret) {
+ ldns_rr_list_free(new);
+ }
+
return ret;
}
*/
ldns_resolver_set_random(r, true);
+ ldns_resolver_set_debug(r, 0);
+
r->_timeout.tv_sec = LDNS_DEFAULT_TIMEOUT_SEC;
r->_timeout.tv_usec = LDNS_DEFAULT_TIMEOUT_USEC;
/* set DO bit if necessary */
if (ldns_resolver_dnssec(r)) {
ldns_resolver_set_edns_udp_size(r, 4096);
+ ldns_pkt_set_edns_do(query_pkt, true);
}
/* transfer the udp_edns_size from the resolver to the packet */