Skip to content
Snippets Groups Projects
Commit 38c4006f authored by Jan Kadlec's avatar Jan Kadlec
Browse files

Added parent handling in node.

Refs #9
parent 3755e922
No related branches found
No related tags found
No related merge requests found
......@@ -24,7 +24,7 @@ void dnslib_rdata_dump(dnslib_rdata_t *rdata, uint32_t type)
desc->wireformat[i] == DNSLIB_RDATA_WF_UNCOMPRESSED_DNAME ||
desc->wireformat[i] == DNSLIB_RDATA_WF_LITERAL_DNAME ) {
assert(rdata->items[i].dname != NULL);
printf("%d: %s\n",
printf("DNAME: %d: %s\n",
i, dnslib_dname_to_str(rdata->items[i].dname));
} else {
......
......@@ -89,7 +89,7 @@ void dnslib_zone_adjust_node(dnslib_node_t *node, dnslib_rr_type_t type,
dnslib_rrtype_descriptor_by_type(type);
dnslib_rdata_t *rdata = dnslib_rrset_get_rdata(rrset);
while (rdata != NULL) {
while (rdata->next != rrset->rdata) {
for (int i = 0; i < desc->length; ++i) {
if (desc->wireformat[i]
== DNSLIB_RDATA_WF_COMPRESSED_DNAME) {
......@@ -104,6 +104,19 @@ void dnslib_zone_adjust_node(dnslib_node_t *node, dnslib_rr_type_t type,
}
rdata = rdata->next;
}
for (int i = 0; i < desc->length; ++i) {
if (desc->wireformat[i]
== DNSLIB_RDATA_WF_COMPRESSED_DNAME) {
debug_dnslib_zone("Adjusting domain name at"
"position %d of RDATA of record with owner"
"%s and type %s.\n",
i, rrset->owner->name,
dnslib_rrtype_to_string(type));
dnslib_zone_adjust_rdata(rdata, zone, i);
}
}
}
/*----------------------------------------------------------------------------*/
......@@ -164,9 +177,9 @@ dnslib_zone_t *dnslib_zone_new(dnslib_node_t *apex)
int dnslib_zone_add_node(dnslib_zone_t *zone, dnslib_node_t *node)
{
int ret = 0;
if ((ret = dnslib_zone_check_node(zone, node)) != 0) {
/* if ((ret = dnslib_zone_check_node(zone, node)) != 0) {
return ret;
}
}*/
// add the node to the tree
// how to know if this is successfull??
......
......@@ -138,6 +138,12 @@ void dnslib_node_dump_binary(dnslib_node_t *node, FILE *f)
printf("Writing id: %u\n", node->owner->node);
if (node->parent != NULL) {
fwrite(&(node->parent->owner->node), sizeof(void *), 1, f);
} else {
fwrite(&(node->parent), sizeof(void *), 1, f);
}
/* Now we need (or do we?) count of rrsets to be read
* but that number is yet unknown */
......
......@@ -154,17 +154,23 @@ dnslib_node_t *dnslib_load_node(FILE *f)
dnslib_node_t *node;
/* first, owner */
uint8_t dname_wire[255]; //XXX in respect to remark below, should be dynamic
//but I couldn't make it work
uint rrset_count;
void *dname_id; //ID, technically it's an integer
void *parent_id;
printf("read %d bytes\n", fread(&dname_size, sizeof(dname_size), 1, f));
assert(dname_size < 256);
printf("read %d bytes\n", fread(&dname_wire, sizeof(uint8_t), dname_size, f));
printf("read %d bytes\n", fread(&dname_id, sizeof(dname_id), 1, f));
printf("read %d bytes\n", fread(&parent_id, sizeof(dname_id), 1, f));
printf("read %d bytes\n", fread(&rrset_count, sizeof(rrset_count), 1, f));
printf("dname_id: %d\n", dname_id);
......@@ -191,6 +197,14 @@ dnslib_node_t *dnslib_load_node(FILE *f)
owner->node = node;
//XXX will have to be set already...canocical order should do it
if ((uint)parent_id != 0) {
node->parent = id_array[(uint)parent_id]->node;
} else {
node->parent = NULL;
}
dnslib_rrset_t *tmp_rrset;
printf("loading %u rrsets\n", rrset_count);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment