req.POST()["serial"] = sparam;
req.preparePost();
verb = "PATCH";
+ } else if (method == "directBackendCmd") {
+ json2string(parameters["query"],sparam);
+ req.POST()["query"] = sparam;
+ req.preparePost();
+ verb = "POST";
} else {
// perform normal get
verb = "GET";
return true;
}
+string RemoteBackend::directBackendCmd(const string& querystr) {
+ rapidjson::Document query,answer;
+ rapidjson::Value parameters;
+
+ query.SetObject();
+ JSON_ADD_MEMBER(query, "method", "directBackendCmd", query.GetAllocator());
+ parameters.SetObject();
+ JSON_ADD_MEMBER(parameters, "query", querystr.c_str(), query.GetAllocator());
+ query.AddMember("parameters", parameters, query.GetAllocator());
+
+ if (this->send(query) == false || this->recv(answer) == false)
+ return "backend command failed";
+
+ return getString(answer["result"]);
+}
+
// some rapidjson helpers
bool RemoteBackend::getBool(rapidjson::Value &value) {
if (value.IsNull()) return false;
virtual bool setTSIGKey(const string& name, const string& algorithm, const string& content);
virtual bool deleteTSIGKey(const string& name);
virtual bool getTSIGKeys(std::vector< struct TSIGKey > &keys);
+ virtual string directBackendCmd(const string& querystr);
static DNSBackend *maker();