diff options
Diffstat (limited to 'service/ControlPlane.cpp')
-rw-r--r-- | service/ControlPlane.cpp | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/service/ControlPlane.cpp b/service/ControlPlane.cpp index 7aa757a9..5ed6b8b7 100644 --- a/service/ControlPlane.cpp +++ b/service/ControlPlane.cpp @@ -28,11 +28,7 @@ #include "../ext/http-parser/http_parser.h" #endif -#ifdef ZT_USE_SYSTEM_JSON_PARSER -#include <json-parser/json.h> -#else -#include "../ext/json-parser/json.h" -#endif +#include "../ext/json/json.hpp" #include "../controller/EmbeddedNetworkController.hpp" @@ -519,23 +515,18 @@ unsigned int ControlPlane::handleRequest( OneService::NetworkSettings localSettings; _svc->getNetworkSettings(nws->networks[i].nwid,localSettings); - json_value *j = json_parse(body.c_str(),body.length()); - if (j) { - if (j->type == json_object) { - for(unsigned int k=0;k<j->u.object.length;++k) { - if (!strcmp(j->u.object.values[k].name,"allowManaged")) { - if (j->u.object.values[k].value->type == json_boolean) - localSettings.allowManaged = (j->u.object.values[k].value->u.boolean != 0); - } else if (!strcmp(j->u.object.values[k].name,"allowGlobal")) { - if (j->u.object.values[k].value->type == json_boolean) - localSettings.allowGlobal = (j->u.object.values[k].value->u.boolean != 0); - } else if (!strcmp(j->u.object.values[k].name,"allowDefault")) { - if (j->u.object.values[k].value->type == json_boolean) - localSettings.allowDefault = (j->u.object.values[k].value->u.boolean != 0); - } - } + try { + nlohmann::json j(nlohmann::json::parse(body)); + if (j.is_object()) { + auto allowManaged = j["allowManaged"]; + if (allowManaged.is_boolean()) localSettings.allowManaged = (bool)allowManaged; + auto allowGlobal = j["allowGlobal"]; + if (allowGlobal.is_boolean()) localSettings.allowGlobal = (bool)allowGlobal; + auto allowDefault = j["allowDefault"]; + if (allowDefault.is_boolean()) localSettings.allowDefault = (bool)allowDefault; } - json_value_free(j); + } catch ( ... ) { + // discard invalid JSON } _svc->setNetworkSettings(nws->networks[i].nwid,localSettings); |