From: Aki Tuomi Date: Sat, 8 Feb 2014 21:48:30 +0000 (+0200) Subject: Implementation for remotebackend X-Git-Tag: rec-3.6.0-rc1~179^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c731caeabbd55bec4d86f2b65e48b356f08c6610;p=thirdparty%2Fpdns.git Implementation for remotebackend --- diff --git a/modules/remotebackend/remotebackend.cc b/modules/remotebackend/remotebackend.cc index 36cdc5b038..fc3d9799dd 100644 --- a/modules/remotebackend/remotebackend.cc +++ b/modules/remotebackend/remotebackend.cc @@ -305,6 +305,34 @@ bool RemoteBackend::getBeforeAndAfterNamesAbsolute(uint32_t id, const std::strin return true; } +bool RemoteBackend::getAllDomainMetadata(const string& name, std::map >& meta) { + rapidjson::Document query,answer; + rapidjson::Value parameters; + + query.SetObject(); + JSON_ADD_MEMBER(query, "method", "getAllDomainMetadata", query.GetAllocator()); + parameters.SetObject(); + JSON_ADD_MEMBER(parameters, "name", name.c_str(), query.GetAllocator()); + query.AddMember("parameters", parameters, query.GetAllocator()); + + if (this->send(query) == false) + return false; + + meta.clear(); + + // not mandatory to implement + if (this->recv(answer) == false) + return true; + + if (answer["result"].IsObject()) { + for (rapidjson::Value::MemberIterator kind = answer["result"].MemberBegin(); kind != answer["result"].MemberEnd(); kind++) + for(rapidjson::Value::ValueIterator content = kind->value.Begin(); content != kind->value.End(); content++) + meta[kind->name.GetString()].push_back(getString(*content)); + } + + return true; +} + bool RemoteBackend::getDomainMetadata(const std::string& name, const std::string& kind, std::vector& meta) { rapidjson::Document query,answer; rapidjson::Value parameters; diff --git a/modules/remotebackend/remotebackend.hh b/modules/remotebackend/remotebackend.hh index bcbd429083..9bfa087ffe 100644 --- a/modules/remotebackend/remotebackend.hh +++ b/modules/remotebackend/remotebackend.hh @@ -132,6 +132,7 @@ class RemoteBackend : public DNSBackend bool get(DNSResourceRecord &rr); bool list(const std::string &target, int domain_id, bool include_disabled=false); + virtual bool getAllDomainMetadata(const string& name, std::map >& meta); virtual bool getDomainMetadata(const std::string& name, const std::string& kind, std::vector& meta); virtual bool getDomainKeys(const std::string& name, unsigned int kind, std::vector& keys); virtual bool getTSIGKey(const std::string& name, std::string* algorithm, std::string* content);