f
     �Âa–Ü4ý()¨‰P@ŠË‚rà ¦-ÿÈ      File not found.
  $   ˆl–äY>”ËmJq@³p/\h
bÑ¿Ì„l4çÀ¿É ?÷     /*
 * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, you can obtain one at https://mozilla.org/MPL/2.0/.
 *
 * See the COPYRIGHT file distributed with this work for additional
 * information regarding copyright ownership.
 */

#ifndef DNS_DB_H
#define DNS_DB_H 1

/*****
***** Module Info
*****/

/*! \file dns/db.h
 * \brief
 * The DNS DB interface allows named rdatasets to be stored and retrieved.
 *
 * The dns_db_t type is like a "virtual class".  To actually use
 * DBs, an implementation of the class is required.
 *
 * XXX more XXX
 *
 * MP:
 * \li	The module ensures appropriate synchronization of data structures it
 *	creates and manipulates.
 *
 * Reliability:
 * \li	No anticipated impact.
 *
 * Resources:
 * \li	TBS
 *
 * Security:
 * \li	No anticipated impact.
 *
 * Standards:
 * \li	None.
 */

/*****
***** Imports
*****/

#include <inttypes.h>
#include <stdbool.h>

#include <isc/deprecated.h>
#include <isc/lang.h>
#include <isc/magic.h>
#include <isc/stats.h>
#include <isc/stdtime.h>

#include <dns/clientinfo.h>
#include <dns/fixedname.h>
#include <dns/name.h>
#include <dns/rdata.h>
#include <dns/rdataset.h>
#include <dns/types.h>

ISC_LANG_BEGINDECLS

/*****
***** Types
*****/

typedef struct dns_dbmethods {
	void (*attach)(dns_db_t *source, dns_db_t **targetp);
	void (*detach)(dns_db_t **dbp);
	isc_result_t (*beginload)(dns_db_t		   *db,
				  dns_rdatacallbacks_t *callbacks);
	isc_result_t (*endload)(dns_db_t *db, dns_rdatacallbacks_t *callbacks);
	isc_result_t (*serialize)(dns_db_t *db, dns_dbversion_t *version,
				  FILE *file);
	isc_result_t (*dump)(dns_db_t *db, dns_dbversion_t *version,
			     const char	*filename,
			     dns_masterformat_t masterformat);
	void (*currentversion)(dns_db_t *db, dns_dbversion_t **versionp);
	isc_result_t (*newversion)(dns_db_t *db, dns_dbversion_t **versionp);
	void (*attachversion)(dns_db_t *db, dns_dbversion_t *source,
			      dns_dbversion_t **targetp);
	void (*closeversion)(dns_db_t *db, dns_dbversion_t **versionp,
			     bool commit);
	isc_result_t (*findnode)(dns_db_t *db, const dns_name_t *name,
				 bool create, dns_dbnode_t **nodep);
	isc_result_t (*find)(dns_db_t *db, const dns_name_t *name,
			     dns_dbversion_t *version, dns_rdatatype_t type,
			     unsigned int options, isc_stdtime_t now,
			     dns_dbnode_t **nodep, dns_name_t *foundname,
			     dns_rdataset_t *rdataset,
			     dns_rdataset_t *sigrdataset);
	isc_result_t (*findzonecut)(dns_db_t *db, const dns_name_t *name,
				    unsigned int options, isc_stdtime_t now,
				    dns_dbnode_t **nodep, dns_name_t *foundname,
				    dns_name_t     *dcname,
				    dns_rdataset_t *rdataset,
				    dns_rdataset_t *sigrdataset);
	void (*attachnode)(dns_db_t *db, dns_dbnode_t *source,
			   dns_dbnode_t **targetp);
	void (*detachnode)(dns_db_t *db, dns_dbnode_t **targetp);
	isc_result_t (*expirenode)(dns_db_t *db, dns_dbnode_t *node,
				   isc_stdtime_t now);
	void (*printnode)(dns_db_t *db, dns_dbnode_t *node, FILE *out);
	isc_result_t (*createiterator)(dns_db_t *db, unsigned int options,
				       dns_dbiterator_t **iteratorp);
	isc_result_t (*findrdataset)(dns_db_t *db, dns_dbnode_t *node,
				     dns_dbversion_t *version,
				     dns_rdatatype_t  type,
				     dns_rdatatype_t covers, isc_stdtime_t now,
				     dns_rdataset_t *rdataset,
				     dns_rdataset_t *sigrdataset);
	isc_result_t (*allrdatasets)(dns_db_t *db, dns_dbnode_t *node,
				     dns_dbversion_t     *version,
				     isc_stdtime_t	  now,
				     dns_rdatasetiter_t **iteratorp);
	isc_result_t (*addrdataset)(dns_db_t *db, dns_dbnode_t *node,
				    dns_dbversion_t *version, isc_stdtime_t now,
				    dns_rdataset_t *rdataset,
				    unsigned int    options,
				    dns_rdataset_t *addedrdataset);
	isc_result_t (*subtractrdataset)(dns_db_t *db, dns_dbnode