[svn] commit: r2196 - in /branches/trac232/src: bin/auth/auth.spec.pre.in bin/auth/auth_srv.cc bin/auth/auth_srv.h bin/auth/main.cc lib/datasrc/data_source.cc lib/datasrc/data_source.h lib/datasrc/sqlite3_datasrc.cc lib/datasrc/sqlite3_datasrc.h
BIND 10 source code commits
bind10-changes at lists.isc.org
Mon Jun 21 11:35:54 UTC 2010
Author: jelte
Date: Mon Jun 21 11:35:54 2010
New Revision: 2196
Log:
checkpoint commit, some very naive and unfinished functions to add and delete an rr. Added a few temporary functions to authsrv to perform these actions for quick testing.
Modified:
branches/trac232/src/bin/auth/auth.spec.pre.in
branches/trac232/src/bin/auth/auth_srv.cc
branches/trac232/src/bin/auth/auth_srv.h
branches/trac232/src/bin/auth/main.cc
branches/trac232/src/lib/datasrc/data_source.cc
branches/trac232/src/lib/datasrc/data_source.h
branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc
branches/trac232/src/lib/datasrc/sqlite3_datasrc.h
Modified: branches/trac232/src/bin/auth/auth.spec.pre.in
==============================================================================
--- branches/trac232/src/bin/auth/auth.spec.pre.in (original)
+++ branches/trac232/src/bin/auth/auth.spec.pre.in Mon Jun 21 11:35:54 2010
@@ -14,6 +14,73 @@
"command_name": "shutdown",
"command_description": "Shut down authoritative DNS server",
"command_args": []
+ },
+ {
+ "command_name": "add_rr",
+ "command_description": "Add an RR to the given zone (temp for testing)",
+ "command_args": [
+ { "item_name": "zone_name",
+ "item_type": "string",
+ "item_optional": false,
+ "item_default": ""
+ },
+ { "item_name": "rr_name",
+ "item_type": "string",
+ "item_optional": false,
+ "item_default": ""
+ },
+ { "item_name": "rr_class",
+ "item_type": "string",
+ "item_optional": false,
+ "item_default": ""
+ },
+ { "item_name": "rr_type",
+ "item_type": "string",
+ "item_optional": false,
+ "item_default": ""
+ },
+ { "item_name": "rr_ttl",
+ "item_type": "string",
+ "item_optional": false,
+ "item_default": ""
+ },
+ { "item_name": "rr_rdata",
+ "item_type": "string",
+ "item_optional": false,
+ "item_default": ""
+ }
+ ]
+ },
+ {
+ "command_name": "del_rr",
+ "command_description": "Remove rr from the given zone (temp for testing)",
+ "command_args": [
+ { "item_name": "zone_name",
+ "item_type": "string",
+ "item_optional": false,
+ "item_default": ""
+ },
+ { "item_name": "rr_name",
+ "item_type": "string",
+ "item_optional": false,
+ "item_default": ""
+ },
+ { "item_name": "rr_class",
+ "item_type": "string",
+ "item_optional": false,
+ "item_default": ""
+ },
+ { "item_name": "rr_type",
+ "item_type": "string",
+ "item_optional": false,
+ "item_default": ""
+ },
+ { "item_name": "rr_rdata",
+ "item_type": "string",
+ "item_optional": false,
+ "item_default": ""
+ }
+ ]
}
]
}
Modified: branches/trac232/src/bin/auth/auth_srv.cc
==============================================================================
--- branches/trac232/src/bin/auth/auth_srv.cc (original)
+++ branches/trac232/src/bin/auth/auth_srv.cc Mon Jun 21 11:35:54 2010
@@ -76,6 +76,7 @@
/// Currently non-configurable, but will be.
static const uint16_t DEFAULT_LOCAL_UDPSIZE = 4096;
+
};
AuthSrvImpl::AuthSrvImpl() : cs_(NULL), verbose_mode_(false)
@@ -318,3 +319,84 @@
return isc::config::createAnswer(1, error.what());
}
}
+
+//
+// TEMP, just a bindctl command to add an RR
+//
+
+ElementPtr
+AuthSrv::addRR(isc::data::ElementPtr args)
+{
+ Name zone_name = Name(args->get("zone_name")->stringValue());
+ RRClass rrclass = RRClass(args->get("rr_class")->stringValue());
+
+ NameMatch match(zone_name);
+ impl_->data_sources_.findClosestEnclosure(match, rrclass);
+ DataSrc* datasource = (DataSrc*) match.bestDataSrc();
+ if (datasource) {
+ RRset rrset(Name(args->get("rr_name")->stringValue()),
+ rrclass,
+ RRType(args->get("rr_type")->stringValue()),
+ RRTTL(args->get("rr_ttl")->stringValue()));
+ RdataPtr rdata = createRdata(rrset.getType(), rrset.getClass(), args->get("rr_rdata")->stringValue());
+ rrset.addRdata(rdata);
+ DataSrc::Result r = datasource->startTransaction();
+ if (r != DataSrc::SUCCESS) {
+ return isc::config::createAnswer(r, "error starting transaction");
+ }
+ r = datasource->addRRset(zone_name, rrset);
+ std::cout << "[XX] RESULT: " << r << std::endl;
+ if (r != DataSrc::SUCCESS) {
+ // log? rollback immediately?
+ }
+ r = datasource->commitTransaction();
+ std::cout << "[XX] RESULT rollback: " << r << std::endl;
+ if (r == DataSrc::SUCCESS) {
+ return isc::config::createAnswer();
+ } else {
+ return isc::config::createAnswer(r, "error");
+ }
+
+ } else {
+ return isc::config::createAnswer(1, "Not data store found for zone");
+ }
+}
+
+ElementPtr
+AuthSrv::delRR(isc::data::ElementPtr args)
+{
+ Name zone_name = Name(args->get("zone_name")->stringValue());
+ RRClass rrclass = RRClass(args->get("rr_class")->stringValue());
+
+ NameMatch match(zone_name);
+ impl_->data_sources_.findClosestEnclosure(match, rrclass);
+ DataSrc* datasource = (DataSrc*) match.bestDataSrc();
+ if (datasource) {
+ RRset rrset(Name(args->get("rr_name")->stringValue()),
+ rrclass,
+ RRType(args->get("rr_type")->stringValue()),
+ RRTTL(0));
+ RdataPtr rdata = createRdata(rrset.getType(), rrset.getClass(), args->get("rr_rdata")->stringValue());
+ rrset.addRdata(rdata);
+ DataSrc::Result r = datasource->startTransaction();
+ if (r != DataSrc::SUCCESS) {
+ return isc::config::createAnswer(r, "error starting transaction");
+ }
+ r = datasource->delRRset(zone_name, rrset);
+ std::cout << "[XX] RESULT: " << r << std::endl;
+ if (r != DataSrc::SUCCESS) {
+ // log? rollback immediately?
+ }
+ r = datasource->commitTransaction();
+ std::cout << "[XX] RESULT rollback: " << r << std::endl;
+ if (r == DataSrc::SUCCESS) {
+ return isc::config::createAnswer();
+ } else {
+ return isc::config::createAnswer(r, "error");
+ }
+
+ } else {
+ return isc::config::createAnswer(1, "Not data store found for zone");
+ }
+
+}
Modified: branches/trac232/src/bin/auth/auth_srv.h
==============================================================================
--- branches/trac232/src/bin/auth/auth_srv.h (original)
+++ branches/trac232/src/bin/auth/auth_srv.h Mon Jun 21 11:35:54 2010
@@ -58,6 +58,10 @@
isc::data::ElementPtr updateConfig(isc::data::ElementPtr config);
isc::config::ModuleCCSession* configSession() const;
void setConfigSession(isc::config::ModuleCCSession* cs);
+ // temporarily added for manual testing of writable data sources
+ isc::data::ElementPtr addRR(isc::data::ElementPtr arg);
+ isc::data::ElementPtr delRR(isc::data::ElementPtr arg);
+ // end temp add
private:
AuthSrvImpl* impl_;
};
Modified: branches/trac232/src/bin/auth/main.cc
==============================================================================
--- branches/trac232/src/bin/auth/main.cc (original)
+++ branches/trac232/src/bin/auth/main.cc Mon Jun 21 11:35:54 2010
@@ -77,6 +77,10 @@
cout << args << endl;
/* let's add that message to our answer as well */
answer->get("result")->add(args);
+ } else if (command == "add_rr") {
+ answer = auth_server->addRR(args);
+ } else if (command == "del_rr") {
+ answer = auth_server->delRR(args);
} else if (command == "shutdown") {
io_service->stop();
}
Modified: branches/trac232/src/lib/datasrc/data_source.cc
==============================================================================
--- branches/trac232/src/lib/datasrc/data_source.cc (original)
+++ branches/trac232/src/lib/datasrc/data_source.cc Mon Jun 21 11:35:54 2010
@@ -917,6 +917,38 @@
}
DataSrc::Result
+DataSrc::startTransaction()
+{
+ return NOT_IMPLEMENTED;
+}
+
+DataSrc::Result
+DataSrc::commitTransaction()
+{
+ return NOT_IMPLEMENTED;
+}
+
+DataSrc::Result
+DataSrc::rollbackTransaction()
+{
+ return NOT_IMPLEMENTED;
+}
+
+DataSrc::Result
+DataSrc::addRRset(const isc::dns::Name& zonename UNUSED_PARAM,
+ const isc::dns::RRset& rrset UNUSED_PARAM)
+{
+ return NOT_IMPLEMENTED;
+}
+
+DataSrc::Result
+DataSrc::delRRset(const isc::dns::Name& zonename UNUSED_PARAM,
+ const isc::dns::RRset& rrset UNUSED_PARAM)
+{
+ return NOT_IMPLEMENTED;
+}
+
+DataSrc::Result
MetaDataSrc::findRRset(const isc::dns::Name& qname UNUSED_PARAM,
const isc::dns::RRClass& qclass UNUSED_PARAM,
const isc::dns::RRType& qtype UNUSED_PARAM,
@@ -974,5 +1006,62 @@
return (NOT_IMPLEMENTED);
}
-}
-}
+DataSrc::Result
+MetaDataSrc::startTransaction()
+{
+ return NOT_IMPLEMENTED;
+}
+
+DataSrc::Result
+MetaDataSrc::commitTransaction()
+{
+ return NOT_IMPLEMENTED;
+}
+
+DataSrc::Result
+MetaDataSrc::rollbackTransaction()
+{
+ return NOT_IMPLEMENTED;
+}
+
+DataSrc::Result
+MetaDataSrc::addRRset(const isc::dns::Name& zonename UNUSED_PARAM,
+ const isc::dns::RRset& rrset UNUSED_PARAM)
+{
+ return NOT_IMPLEMENTED;
+ // TODO: factor out this code (copied from doQuery)
+ // (with one change, no DS special case)
+ /*
+ NameMatch match(zonename);
+ findClosestEnclosure(match, rrset.getClass());
+ DataSrc* datasource = (DataSrc*) match.bestDataSrc();
+ if (datasource) {
+ return datasource->addRRset(zonename, rrset);
+ } else {
+ return DataSrc::ERROR;
+ }
+ */
+}
+
+DataSrc::Result
+MetaDataSrc::delRRset(const isc::dns::Name& zonename UNUSED_PARAM,
+ const isc::dns::RRset& rrset UNUSED_PARAM)
+{
+ return NOT_IMPLEMENTED;
+
+ // TODO: factor out this code (copied from doQuery)
+ // (with one change, no DS special case)
+ /*
+ NameMatch match(zonename);
+ findClosestEnclosure(match, rrset.getClass());
+ DataSrc* datasource = (DataSrc*) match.bestDataSrc();
+ if (datasource) {
+ return datasource->delRRset(zonename, rrset);
+ } else {
+ return DataSrc::ERROR;
+ }
+ */
+}
+
+}
+}
Modified: branches/trac232/src/lib/datasrc/data_source.h
==============================================================================
--- branches/trac232/src/lib/datasrc/data_source.h (original)
+++ branches/trac232/src/lib/datasrc/data_source.h Mon Jun 21 11:35:54 2010
@@ -225,6 +225,23 @@
std::string& hash,
isc::dns::RRsetList& target) const = 0;
+ //
+ // Writable data sources
+ //
+ // This certainly not the final API, we probably want to
+ // make transactions mandatory (even if start/end are nops),
+ // by either creating a transaction context, or even a 'writable'
+ // class that creates the transaction on init, and move al write
+ // functions there. (keeping in mind that high-level write
+ // functions also need read functionality)
+ virtual Result addRRset(const isc::dns::Name& zonename,
+ const isc::dns::RRset& rrset);
+ virtual Result delRRset(const isc::dns::Name& zonename,
+ const isc::dns::RRset& rrset);
+ virtual Result startTransaction();
+ virtual Result commitTransaction();
+ virtual Result rollbackTransaction();
+
private:
isc::dns::RRClass rrclass;
};
@@ -294,6 +311,19 @@
std::string& hash,
isc::dns::RRsetList& target) const;
+ //
+ // Writable data sources
+ //
+ // see comments at DataSrc
+ virtual Result startTransaction();
+ virtual Result commitTransaction();
+ virtual Result rollbackTransaction();
+
+ virtual Result addRRset(const isc::dns::Name& zonename,
+ const isc::dns::RRset& rrset);
+ virtual Result delRRset(const isc::dns::Name& zonename,
+ const isc::dns::RRset& rrset);
+ // end of writable data sources part
private:
std::vector<ConstDataSrcPtr> data_sources;
};
Modified: branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc
==============================================================================
--- branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc (original)
+++ branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc Mon Jun 21 11:35:54 2010
@@ -38,7 +38,7 @@
Sqlite3Parameters() : db_(NULL), version_(-1),
q_zone_(NULL), q_record_(NULL), q_addrs_(NULL), q_referral_(NULL),
q_any_(NULL), q_count_(NULL), q_previous_(NULL), q_nsec3_(NULL),
- q_prevnsec3_(NULL)
+ q_prevnsec3_(NULL), w_add_rr_(NULL)
{}
sqlite3* db_;
int version_;
@@ -51,6 +51,8 @@
sqlite3_stmt* q_previous_;
sqlite3_stmt* q_nsec3_;
sqlite3_stmt* q_prevnsec3_;
+ sqlite3_stmt* w_add_rr_;
+ sqlite3_stmt* w_del_rr_;
};
namespace {
@@ -111,7 +113,20 @@
const char* const q_prevnsec3_str = "SELECT hash FROM nsec3 "
"WHERE zone_id = ?1 AND hash <= $2 ORDER BY hash DESC LIMIT 1";
-}
+const char* const w_add_rr_str = "INSERT INTO records "
+ "(zone_id, name, rname, ttl, rdtype, sigtype, rdata) "
+ "VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7)";
+
+const char* const w_del_rr_str = "DELETE FROM records WHERE "
+ "zone_id = ?1 AND name = ?2 AND rdtype = ?3 AND rdata = ?4";
+
+const char* const w_start_transaction_str = "BEGIN TRANSACTION";
+
+const char* const w_commit_transaction_str = "COMMIT TRANSACTION";
+
+const char* const w_rollback_transaction_str = "ROLLBACK TRANSACTION";
+}
+
//
// Find the exact zone match. Return -1 if not found, or the zone's
@@ -606,6 +621,12 @@
if (params_.q_prevnsec3_ != NULL) {
sqlite3_finalize(params_.q_prevnsec3_);
}
+ if (params_.w_add_rr_ != NULL) {
+ sqlite3_finalize(params_.w_add_rr_);
+ }
+ if (params_.w_del_rr_ != NULL) {
+ sqlite3_finalize(params_.w_del_rr_);
+ }
if (params_.db_ != NULL) {
sqlite3_close(params_.db_);
}
@@ -659,6 +680,9 @@
initializer->params_.q_previous_ = prepare(db, q_previous_str);
initializer->params_.q_nsec3_ = prepare(db, q_nsec3_str);
initializer->params_.q_prevnsec3_ = prepare(db, q_prevnsec3_str);
+ initializer->params_.w_add_rr_ = prepare(db, w_add_rr_str);
+ initializer->params_.w_del_rr_ = prepare(db, w_del_rr_str);
+
}
}
@@ -719,11 +743,228 @@
sqlite3_finalize(dbparameters->q_nsec3_);
dbparameters->q_nsec3_ = NULL;
+ sqlite3_finalize(dbparameters->w_add_rr_);
+ dbparameters->w_add_rr_ = NULL;
+
+ sqlite3_finalize(dbparameters->w_del_rr_);
+ dbparameters->w_del_rr_ = NULL;
+
sqlite3_close(dbparameters->db_);
dbparameters->db_ = NULL;
return (SUCCESS);
}
-}
-}
+DataSrc::Result
+Sqlite3DataSrc::startTransaction()
+{
+ int result = sqlite3_exec(dbparameters->db_, w_start_transaction_str, NULL, NULL, NULL);
+ if (result == SQLITE_OK) {
+ return DataSrc::SUCCESS;
+ } else {
+ return DataSrc::ERROR;
+ }
+}
+
+DataSrc::Result
+Sqlite3DataSrc::commitTransaction()
+{
+ int result = sqlite3_exec(dbparameters->db_, w_commit_transaction_str, NULL, NULL, NULL);
+ if (result == SQLITE_OK) {
+ return DataSrc::SUCCESS;
+ } else {
+ return DataSrc::ERROR;
+ }
+}
+
+DataSrc::Result
+Sqlite3DataSrc::rollbackTransaction()
+{
+ int result = sqlite3_exec(dbparameters->db_, w_rollback_transaction_str, NULL, NULL, NULL);
+ if (result == SQLITE_OK) {
+ return DataSrc::SUCCESS;
+ } else {
+ return DataSrc::ERROR;
+ }
+}
+
+
+DataSrc::Result
+Sqlite3DataSrc::addRR(int zone_id,
+ const isc::dns::Name& name,
+ const isc::dns::RRType& rrtype,
+ const isc::dns::RRTTL& rrttl,
+ const isc::dns::rdata::Rdata& rdata)
+{
+
+ sqlite3_stmt* query = dbparameters->w_add_rr_;
+
+ sqlite3_reset(query);
+ sqlite3_clear_bindings(query);
+
+ int rc;
+ rc = sqlite3_bind_int(query, 1, zone_id);
+ if (rc != SQLITE_OK) {
+ isc_throw(Sqlite3Error, "Could not bind zone ID " << zone_id <<
+ " to SQL statement (query)");
+ }
+ const string s_name = name.toText();
+ rc = sqlite3_bind_text(query, 2, s_name.c_str(), -1, SQLITE_STATIC);
+ if (rc != SQLITE_OK) {
+ isc_throw(Sqlite3Error, "Could not bind name " << s_name <<
+ " to SQL statement (query)");
+ }
+
+ // reverse name
+ const string r_name = name.reverse().toText();
+ rc = sqlite3_bind_text(query, 3, r_name.c_str(), -1, SQLITE_STATIC);
+ if (rc != SQLITE_OK) {
+ isc_throw(Sqlite3Error, "Could not bind name " << s_name <<
+ " to SQL statement (query)");
+ }
+
+ rc = sqlite3_bind_int(query, 4, rrttl.getValue());
+ if (rc != SQLITE_OK) {
+ isc_throw(Sqlite3Error, "Could not bind RR TTL " <<
+ rrttl.toText() << " to SQL statement (query)");
+ }
+
+ rc = sqlite3_bind_text(query, 5, rrtype.toText().c_str(), -1,
+ SQLITE_STATIC);
+ if (rc != SQLITE_OK) {
+ isc_throw(Sqlite3Error, "Could not bind RR type " <<
+ rrtype.toText() << " to SQL statement (query)");
+ }
+
+ // TODO: sigtype
+
+ rc = sqlite3_bind_text(query, 7, rdata.toText().c_str(), -1,
+ SQLITE_TRANSIENT);
+ if (rc != SQLITE_OK) {
+ isc_throw(Sqlite3Error, "Could not bind RR rdata " <<
+ rdata.toText() << " to SQL statement (query)");
+ }
+
+ std::cout << "[XX] query prepared, executing" << std::endl;
+ int result = sqlite3_step(query);
+
+ sqlite3_reset(query);
+
+ if (result == SQLITE_DONE) {
+ return DataSrc::SUCCESS;
+ } else {
+ std::cout << "[XX] sqlite3 add_rr error: " << result << std::endl;;
+ std::cout << "[XX] " << sqlite3_errmsg(dbparameters->db_) << std::endl;
+
+ return DataSrc::ERROR;
+ }
+
+}
+
+DataSrc::Result
+Sqlite3DataSrc::addRRset(const isc::dns::Name& zonename,
+ const isc::dns::RRset& rrset)
+{
+ std::cout << "[XX] addRR at sqlite3" << std::endl;
+ int zone_id = hasExactZone(zonename.toText().c_str());
+
+ std::cout << "[XX] zone id for: " << zonename << ": " << zone_id << std::endl;
+
+ RdataIteratorPtr rdp = rrset.getRdataIterator();
+ rdp->first();
+ std::cout << "[XX] RDATA: " << rdp->getCurrent().toText() << std::endl;
+ std::cout << "[XX] RDATA: " << rdp->getCurrent().toText().c_str() << std::endl;
+ DataSrc::Result result = DataSrc::SUCCESS;
+ do {
+ result = addRR(zone_id, rrset.getName(), rrset.getType(), rrset.getTTL(), rdp->getCurrent());
+ if (result != DataSrc::SUCCESS) {
+ return result;
+ } else {
+ rdp->next();
+ }
+ } while (!rdp->isLast());
+ return result;
+}
+
+DataSrc::Result
+Sqlite3DataSrc::delRR(int zone_id,
+ const isc::dns::Name& name,
+ const isc::dns::RRType& rrtype,
+ const isc::dns::rdata::Rdata& rdata)
+{
+
+ sqlite3_stmt* query = dbparameters->w_del_rr_;
+
+ sqlite3_reset(query);
+ sqlite3_clear_bindings(query);
+
+ int rc;
+ rc = sqlite3_bind_int(query, 1, zone_id);
+ if (rc != SQLITE_OK) {
+ isc_throw(Sqlite3Error, "Could not bind zone ID " << zone_id <<
+ " to SQL statement (query)");
+ }
+ const string s_name = name.toText();
+ rc = sqlite3_bind_text(query, 2, s_name.c_str(), -1, SQLITE_STATIC);
+ if (rc != SQLITE_OK) {
+ isc_throw(Sqlite3Error, "Could not bind name " << s_name <<
+ " to SQL statement (query)");
+ }
+
+ rc = sqlite3_bind_text(query, 3, rrtype.toText().c_str(), -1,
+ SQLITE_STATIC);
+ if (rc != SQLITE_OK) {
+ isc_throw(Sqlite3Error, "Could not bind RR type " <<
+ rrtype.toText() << " to SQL statement (query)");
+ }
+
+ rc = sqlite3_bind_text(query, 4, rdata.toText().c_str(), -1,
+ SQLITE_TRANSIENT);
+ if (rc != SQLITE_OK) {
+ isc_throw(Sqlite3Error, "Could not bind RR rdata " <<
+ rdata.toText() << " to SQL statement (query)");
+ }
+
+ std::cout << "[XX] query prepared, executing" << std::endl;
+ int result = sqlite3_step(query);
+
+ sqlite3_reset(query);
+
+ if (result == SQLITE_DONE) {
+ return DataSrc::SUCCESS;
+ } else {
+ std::cout << "[XX] sqlite3 add_rr error: " << result << std::endl;;
+ std::cout << "[XX] " << sqlite3_errmsg(dbparameters->db_) << std::endl;
+
+ return DataSrc::ERROR;
+ }
+}
+
+DataSrc::Result
+Sqlite3DataSrc::delRRset(const isc::dns::Name& zonename,
+ const isc::dns::RRset& rrset)
+{
+ std::cout << "[XX] delRR at sqlite3" << std::endl;
+ int zone_id = hasExactZone(zonename.toText().c_str());
+
+ std::cout << "[XX] zone id for: " << zonename << ": " << zone_id << std::endl;
+
+ RdataIteratorPtr rdp = rrset.getRdataIterator();
+ rdp->first();
+ std::cout << "[XX] RDATA: " << rdp->getCurrent().toText() << std::endl;
+ std::cout << "[XX] RDATA: " << rdp->getCurrent().toText().c_str() << std::endl;
+ DataSrc::Result result = DataSrc::SUCCESS;
+ do {
+ result = delRR(zone_id, rrset.getName(), rrset.getType(), rdp->getCurrent());
+ if (result != DataSrc::SUCCESS) {
+ return result;
+ } else {
+ rdp->next();
+ }
+ } while (!rdp->isLast());
+ return result;
+}
+
+
+}
+}
Modified: branches/trac232/src/lib/datasrc/sqlite3_datasrc.h
==============================================================================
--- branches/trac232/src/lib/datasrc/sqlite3_datasrc.h (original)
+++ branches/trac232/src/lib/datasrc/sqlite3_datasrc.h Mon Jun 21 11:35:54 2010
@@ -22,6 +22,11 @@
#include <exceptions/exceptions.h>
#include "data_source.h"
+
+#include <dns/name.h>
+#include <dns/rrttl.h>
+#include <dns/rdata.h>
+#include <dns/rrset.h>
namespace isc {
@@ -99,6 +104,31 @@
Result init(const isc::data::ElementPtr config);
Result close();
+
+ // write access
+
+ // hmz, should we have a transaction context object? (see comments
+ // in datasource.h
+ Result startTransaction();
+ Result commitTransaction();
+ Result rollbackTransaction();
+
+ //DataSrc::Result addRRset(const isc::dns::Name& zonename, const isc::dns::RRset& rrset);
+ DataSrc::Result addRRset(const isc::dns::Name& zonename,
+ const isc::dns::RRset& rrset);
+ DataSrc::Result delRRset(const isc::dns::Name& zonename,
+ const isc::dns::RRset& rrset);
+private:
+ DataSrc::Result addRR(int zone_id,
+ const isc::dns::Name& name,
+ const isc::dns::RRType& rrtype,
+ const isc::dns::RRTTL& rrttl,
+ const isc::dns::rdata::Rdata& rdata);
+ DataSrc::Result delRR(int zone_id,
+ const isc::dns::Name& name,
+ const isc::dns::RRType& rrtype,
+ const isc::dns::rdata::Rdata& rdata);
+
private:
enum Mode {
NORMAL,
More information about the bind10-changes
mailing list