summaryrefslogtreecommitdiff
path: root/src/libknot/packet/packet.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libknot/packet/packet.c')
-rw-r--r--src/libknot/packet/packet.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/libknot/packet/packet.c b/src/libknot/packet/packet.c
index ed73afa..82b65c6 100644
--- a/src/libknot/packet/packet.c
+++ b/src/libknot/packet/packet.c
@@ -112,6 +112,18 @@ static void knot_packet_init_pointers_response(knot_packet_t *pkt)
pkt->compression.max = DEFAULT_DOMAINS_IN_RESPONSE;
pkt->compression.default_count = DEFAULT_DOMAINS_IN_RESPONSE;
+ // wildcard nodes and SNAMEs associated with them
+ pkt->wildcard_nodes.nodes = (const knot_node_t **)pos;
+ pos += DEFAULT_WILDCARD_NODES * sizeof(const knot_node_t *);
+ pkt->wildcard_nodes.snames = (const knot_dname_t **)pos;
+ pos += DEFAULT_WILDCARD_NODES * sizeof(knot_dname_t *);
+
+ dbg_packet("Wildcard nodes: %p\n", pkt->wildcard_nodes.nodes);
+ dbg_packet("Wildcard SNAMEs: %p\n", pkt->wildcard_nodes.snames);
+
+ pkt->wildcard_nodes.default_count = DEFAULT_WILDCARD_NODES;
+ pkt->wildcard_nodes.max = DEFAULT_WILDCARD_NODES;
+
pkt->tmp_rrsets = (const knot_rrset_t **)pos;
pos += DEFAULT_TMP_RRSETS * sizeof(const knot_rrset_t *);
@@ -639,6 +651,11 @@ static void knot_packet_free_allocated_space(knot_packet_t *pkt)
free(pkt->compression.offsets);
}
+ if (pkt->wildcard_nodes.max > pkt->wildcard_nodes.default_count) {
+ free(pkt->wildcard_nodes.nodes);
+ free(pkt->wildcard_nodes.snames);
+ }
+
if (pkt->tmp_rrsets_max > DEFAULT_RRSET_COUNT(TMP_RRSETS, pkt)) {
free(pkt->tmp_rrsets);
}
@@ -1460,6 +1477,10 @@ void knot_packet_free(knot_packet_t **packet)
dbg_packet("Freeing tmp RRSets...\n");
knot_packet_free_tmp_rrsets(*packet);
+ /*! \note The above code will free the domain names pointed to by
+ * the list of wildcard nodes. It should not matter, however.
+ */
+
// check if some additional space was allocated for the packet
dbg_packet("Freeing additional allocated space...\n");
knot_packet_free_allocated_space(*packet);