From: Eli Lindsey Date: Thu, 9 Jul 2020 01:26:05 +0000 (-0400) Subject: provide a way to generate wires without compressed domain names X-Git-Tag: 1.8.0-rc.1~16^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=778797953f6e1287507b687e71f188e6ae589d02;p=thirdparty%2Fldns.git provide a way to generate wires without compressed domain names --- diff --git a/host2wire.c b/host2wire.c index a12b6b03..96fbd6ec 100644 --- a/host2wire.c +++ b/host2wire.c @@ -374,6 +374,20 @@ compression_node_free(ldns_rbnode_t *node, void *arg) ldns_status ldns_pkt2buffer_wire(ldns_buffer *buffer, const ldns_pkt *packet) +{ + ldns_status status; + ldns_rbtree_t *compression_data = ldns_rbtree_create((int (*)(const void *, const void *))ldns_dname_compare); + + status = ldns_pkt2buffer_wire_compress(buffer, packet, compression_data); + + ldns_traverse_postorder(compression_data,compression_node_free,NULL); + ldns_rbtree_free(compression_data); + + return status; +} + +ldns_status +ldns_pkt2buffer_wire_compress(ldns_buffer *buffer, const ldns_pkt *packet, ldns_rbtree_t *compression_data) { ldns_rr_list *rr_list; uint16_t i; @@ -382,8 +396,6 @@ ldns_pkt2buffer_wire(ldns_buffer *buffer, const ldns_pkt *packet) ldns_rr *edns_rr; uint8_t edata[4]; - ldns_rbtree_t *compression_data = ldns_rbtree_create((int (*)(const void *, const void *))ldns_dname_compare); - (void) ldns_hdr2buffer_wire(buffer, packet); rr_list = ldns_pkt_question(packet); @@ -443,9 +455,6 @@ ldns_pkt2buffer_wire(ldns_buffer *buffer, const ldns_pkt *packet) ldns_pkt_tsig(packet), LDNS_SECTION_ADDITIONAL, compression_data); } - ldns_traverse_postorder(compression_data,compression_node_free,NULL); - ldns_rbtree_free(compression_data); - return LDNS_STATUS_OK; } diff --git a/ldns/host2wire.h b/ldns/host2wire.h index 94693cda..2d7dbea5 100644 --- a/ldns/host2wire.h +++ b/ldns/host2wire.h @@ -146,6 +146,15 @@ ldns_status ldns_rr_rdata2buffer_wire(ldns_buffer *output, const ldns_rr *rr); */ ldns_status ldns_pkt2buffer_wire(ldns_buffer *output, const ldns_pkt *pkt); +/** + * Copies the packet data to the buffer in wire format + * \param[out] *output buffer to append the result to + * \param[in] *pkt packet to convert + * \param[out] *compression_data data structure holding state for compression + * \return ldns_status + */ +ldns_status ldns_pkt2buffer_wire_compress(ldns_buffer *output, const ldns_pkt *pkt, ldns_rbtree_t *compression_data); + /** * Copies the rr_list data to the buffer in wire format * \param[out] *output buffer to append the result to