typedef struct sampledb sampledb_t;
-/*
- * Get full DNS name from the node.
- *
- * @warning
- * The code silently expects that "node" came from RBTDB and thus
- * assumption dns_dbnode_t (from RBTDB) == dns_rbtnode_t is correct.
- *
- * This should work as long as we use only RBTDB and nothing else.
- */
-static isc_result_t
-sample_name_fromnode(dns_dbnode_t *node, dns_name_t *name) {
- dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node;
- return (dns_rbt_fullnamefromnode(rbtnode, name));
-}
-
static void
destroy(dns_db_t *db) {
sampledb_t *sampledb = (sampledb_t *)db;
if (rdataset->type == dns_rdatatype_a ||
rdataset->type == dns_rdatatype_aaaa)
{
- CHECK(sample_name_fromnode(node, dns_fixedname_name(&name)));
+ CHECK(dns_db_nodefullname(sampledb->rbtdb, node,
+ dns_fixedname_name(&name)));
CHECK(syncptrs(sampledb->inst, dns_fixedname_name(&name),
rdataset, DNS_DIFFOP_ADD));
}
if (rdataset->type == dns_rdatatype_a ||
rdataset->type == dns_rdatatype_aaaa)
{
- CHECK(sample_name_fromnode(node, dns_fixedname_name(&name)));
+ CHECK(dns_db_nodefullname(sampledb->rbtdb, node,
+ dns_fixedname_name(&name)));
CHECK(syncptrs(sampledb->inst, dns_fixedname_name(&name),
rdataset, DNS_DIFFOP_DEL));
}
return (dns_db_setcachestats(sampledb->rbtdb, stats));
}
+static isc_result_t
+nodefullname(dns_db_t *db, dns_dbnode_t *node, dns_name_t *name) {
+ sampledb_t *sampledb = (sampledb_t *)db;
+
+ REQUIRE(VALID_SAMPLEDB(sampledb));
+
+ return (dns_db_nodefullname(sampledb->rbtdb, node, name));
+}
+
/*
* DB interface definition. Database driver uses this structure to
* determine which implementation of dns_db_*() function to call.
.findnodeext = findnodeext,
.findext = findext,
.setcachestats = setcachestats,
+ .nodefullname = nodefullname,
};
/* Auxiliary driver functions. */
#if DNS_DB_TRACE
fprintf(stderr, "dns_db_create:%s:%s:%d:%p->references = 1\n",
- __func__, __FILE__, __LINE__ + 1, *dbp);
+ __func__, __FILE__, __LINE__ 1, *dbp);
#endif
return (result);
}
(db->methods->deletedata)(db, node, data);
}
}
+
+isc_result_t
+dns_db_nodefullname(dns_db_t *db, dns_dbnode_t *node, dns_name_t *name) {
+ REQUIRE(db != NULL);
+ REQUIRE(node != NULL);
+ REQUIRE(name != NULL);
+
+ if (db->methods->nodefullname != NULL) {
+ return ((db->methods->nodefullname)(db, node, name));
+ }
+ return (ISC_R_NOTIMPLEMENTED);
+}
dns_rdataset_t *rdataset, dns_message_t *msg);
void (*expiredata)(dns_db_t *db, dns_dbnode_t *node, void *data);
void (*deletedata)(dns_db_t *db, dns_dbnode_t *node, void *data);
+ isc_result_t (*nodefullname)(dns_db_t *db, dns_dbnode_t *node,
+ dns_name_t *name);
} dns_dbmethods_t;
typedef isc_result_t (*dns_dbcreatefunc_t)(isc_mem_t *mctx,
* data from an LRU list or a heap.
*/
-void
-dns_db_expiredata(dns_db_t *db, dns_dbnode_t *node, void *data);
+isc_result_t
+dns_db_nodefullname(dns_db_t *db, dns_dbnode_t *node, dns_name_t *name);
+/*%<
+ * Get the name associated with a database node.
+ *
+ * Requires:
+ *
+ * \li 'db' is a valid database
+ * \li 'node' and 'name' are not NULL
+ */
ISC_LANG_ENDDECLS