]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
provide a way to generate wires without compressed domain names 107/head
authorEli Lindsey <eli@siliconsprawl.com>
Thu, 9 Jul 2020 01:26:05 +0000 (21:26 -0400)
committerEli Lindsey <eli@siliconsprawl.com>
Thu, 9 Jul 2020 01:26:05 +0000 (21:26 -0400)
host2wire.c
ldns/host2wire.h

index a12b6b035e426d037819e4bd9a60f97741708afc..96fbd6ec54ed75c07d2e26f7dfb24b10ab4d67db 100644 (file)
@@ -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;
 }
 
index 94693cda36666e2327bc0d0940ffcf88ffaa0ec3..2d7dbea544d3e08b8919cb4cf4973ed411143fa3 100644 (file)
@@ -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