]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
replaceRRSet implementation
authorAki Tuomi <cmouse@desteem.org>
Sat, 1 Jun 2013 18:45:32 +0000 (21:45 +0300)
committerAki Tuomi <cmouse@desteem.org>
Tue, 4 Jun 2013 07:33:04 +0000 (10:33 +0300)
modules/remotebackend/remotebackend.cc

index ef259729df3d6e7f3a20f382a5067294569da4b2..a5b34076b0c7910cf76988797bc9d062d589e688 100644 (file)
@@ -559,7 +559,35 @@ bool RemoteBackend::createSlaveDomain(const string &ip, const string &domain, co
    return true;
 }
 
-bool RemoteBackend::replaceRRSet(uint32_t domain_id, const string& qname, const QType& qt, const vector<DNSResourceRecord>& rrset) { return false; }
+bool RemoteBackend::replaceRRSet(uint32_t domain_id, const string& qname, const QType& qtype, const vector<DNSResourceRecord>& rrset) {
+   rapidjson::Document query,answer;
+   rapidjson::Value parameters;
+   rapidjson::Value rj_rrset;
+   JSON_ADD_MEMBER(parameters, "domain_id", domain_id, query.GetAllocator());
+   JSON_ADD_MEMBER(parameters, "qname", qname.c_str(), query.GetAllocator());
+   JSON_ADD_MEMBER(parameters, "qtype", qtype.getName().c_str(), query.GetAllocator());
+   rj_rrset.SetArray();
+   rj_rrset.Reserve(rrset.size(), query.GetAllocator());
+
+   for(size_t i = 0; i < rrset.size(); i++) {
+      rapidjson::Value &rr = rj_rrset[i];
+      rr.SetObject();
+      JSON_ADD_MEMBER(rr, "qtype", rrset[i].qtype.getName().c_str(), query.GetAllocator());
+      JSON_ADD_MEMBER(rr, "qname", rrset[i].qname.c_str(), query.GetAllocator());
+      JSON_ADD_MEMBER(rr, "qclass", QClass::IN, query.GetAllocator());
+      JSON_ADD_MEMBER(rr, "content", rrset[i].content.c_str(), query.GetAllocator());
+      JSON_ADD_MEMBER(rr, "ttl", rrset[i].ttl, query.GetAllocator());
+      JSON_ADD_MEMBER(rr, "priority", rrset[i].priority, query.GetAllocator());
+      JSON_ADD_MEMBER(rr, "auth", rrset[i].auth, query.GetAllocator());
+   }
+   parameters.AddMember("rrset", rj_rrset, query.GetAllocator());
+   query.AddMember("parameters", parameters, query.GetAllocator());
+
+   if (connector->send(query) == false || connector->recv(answer) == false)
+     return false;
+   return true;
+}
+
 bool RemoteBackend::feedRecord(const DNSResourceRecord &r, string *ordername) { return false; }
 bool RemoteBackend::feedEnts(int domain_id, set<string>& nonterm) { return false; }
 bool RemoteBackend::feedEnts3(int domain_id, const string &domain, set<string> &nonterm, unsigned int times, const string &salt, bool narrow) { return false; }