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;
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);
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;
}
*/
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