From: Jan Vcelak Date: Mon, 10 Apr 2017 16:22:52 +0000 (+0200) Subject: packet: add ldns_pkt_edns_unassigned and ldns_pkt_set_edns_unassigned X-Git-Tag: release-1.7.1-rc1~75^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=50b930f8791bb2dc0ebb9391b58774166ba5bf92;p=thirdparty%2Fldns.git packet: add ldns_pkt_edns_unassigned and ldns_pkt_set_edns_unassigned --- diff --git a/ldns/packet.h b/ldns/packet.h index e2994193..2e5ee8bd 100644 --- a/ldns/packet.h +++ b/ldns/packet.h @@ -706,6 +706,18 @@ bool ldns_pkt_edns_do(const ldns_pkt *packet); */ void ldns_pkt_set_edns_do(ldns_pkt *packet, bool value); +/** + * return the packet's EDNS header bits that are unassigned. + */ +uint16_t ldns_pkt_edns_unassigned(const ldns_pkt *packet); + +/** + * Set the packet's EDNS header bits that are unassigned. + * \param[in] packet the packet + * \param[in] value the value + */ +void ldns_pkt_set_edns_unassigned(ldns_pkt *packet, uint16_t value); + /** * returns true if this packet needs and EDNS rr to be sent. * At the moment the only reason is an expected packet diff --git a/packet.c b/packet.c index 95f8f3fe..3a8488d8 100644 --- a/packet.c +++ b/packet.c @@ -26,6 +26,7 @@ */ #define LDNS_EDNS_MASK_DO_BIT 0x8000 +#define LDNS_EDNS_MASK_UNASSIGNED (0xFFFF & ~LDNS_EDNS_MASK_DO_BIT) /* TODO defines for 3600 */ /* convert to and from numerical flag values */ @@ -242,6 +243,19 @@ ldns_pkt_set_edns_do(ldns_pkt *packet, bool value) } } +uint16_t +ldns_pkt_edns_unassigned(const ldns_pkt *packet) +{ + return (packet->_edns_z & LDNS_EDNS_MASK_UNASSIGNED); +} + +void +ldns_pkt_set_edns_unassigned(ldns_pkt *packet, uint16_t value) +{ + packet->_edns_z = (packet->_edns_z & ~LDNS_EDNS_MASK_UNASSIGNED) + | (value & LDNS_EDNS_MASK_UNASSIGNED); +} + ldns_rdf * ldns_pkt_edns_data(const ldns_pkt *packet) {