From: Christian Hofstaedtler Date: Wed, 4 Sep 2013 09:57:31 +0000 (+0200) Subject: recursor json: reimplement domains list using rapidjson X-Git-Tag: rec-3.6.0-rc1~462^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e72500bfde6e84bc0fe2fb617f4c60ea93c23005;p=pdns recursor json: reimplement domains list using rapidjson Note that this changes types of servers and rdbit. --- diff --git a/pdns/json_ws.cc b/pdns/json_ws.cc index faa2c5c1b..30567a444 100644 --- a/pdns/json_ws.cc +++ b/pdns/json_ws.cc @@ -135,23 +135,30 @@ string JWebserver::handleRequest(const string &method, const string &uri, const map stats; if(command == "domains") { - content += "["; - bool first=1; + Document doc; + doc.SetArray(); BOOST_FOREACH(const SyncRes::domainmap_t::value_type& val, *t_sstorage->domainmap) { - if(!first) content+= ", "; - first=false; - stats.clear(); - stats["name"] = val.first; - stats["type"] = val.second.d_servers.empty() ? "Native" : "Forwarded"; - stats["servers"]; - BOOST_FOREACH(const ComboAddress& server, val.second.d_servers) { - stats["servers"]+= server.toStringWithPort() + " "; + Value jzone; + jzone.SetObject(); + + const SyncRes::AuthDomain& zone = val.second; + Value zonename(val.first.c_str(), doc.GetAllocator()); + jzone.AddMember("name", zonename, doc.GetAllocator()); + jzone.AddMember("type", "Zone", doc.GetAllocator()); + jzone.AddMember("kind", zone.d_servers.empty() ? "Native" : "Forwarded", doc.GetAllocator()); + Value servers; + servers.SetArray(); + BOOST_FOREACH(const ComboAddress& server, zone.d_servers) { + Value value(server.toStringWithPort().c_str(), doc.GetAllocator()); + servers.PushBack(value, doc.GetAllocator()); } - stats["rdbit"] = lexical_cast(val.second.d_servers.empty() ? 0 : val.second.d_rdForward); - // fill out forwarders too one day, and rdrequired - content += returnJSONObject(stats); + jzone.AddMember("servers", servers, doc.GetAllocator()); + bool rdbit = zone.d_servers.empty() ? false : zone.d_rdForward; + jzone.AddMember("rdbit", rdbit, doc.GetAllocator()); + + doc.PushBack(jzone, doc.GetAllocator()); } - content += "]"; + content += makeStringFromDocument(doc); } else if(command == "get-zone") { SyncRes::domainmap_t::const_iterator ret = t_sstorage->domainmap->find(varmap["zone"]);