From 6df780dba3a8dc901771c537bd0cbf354f6586fe Mon Sep 17 00:00:00 2001 From: stephb9959 Date: Fri, 2 Sep 2022 08:03:48 -0700 Subject: [PATCH] https://telecominfraproject.atlassian.net/browse/WIFI-10714 Signed-off-by: stephb9959 --- build | 2 +- src/RESTAPI/RESTAPI_db_helpers.h | 15 ++++++++--- src/RESTObjects/RESTAPI_ProvObjects.cpp | 35 +++++++++++++++++++++++++ src/RESTObjects/RESTAPI_ProvObjects.h | 15 +++++++++++ 4 files changed, 63 insertions(+), 4 deletions(-) diff --git a/build b/build index 9a03714..9d60796 100644 --- a/build +++ b/build @@ -1 +1 @@ -10 \ No newline at end of file +11 \ No newline at end of file diff --git a/src/RESTAPI/RESTAPI_db_helpers.h b/src/RESTAPI/RESTAPI_db_helpers.h index 8e7e279..d6e4e32 100644 --- a/src/RESTAPI/RESTAPI_db_helpers.h +++ b/src/RESTAPI/RESTAPI_db_helpers.h @@ -543,9 +543,18 @@ namespace OpenWifi { inline bool ValidRRM(const std::string &v) { if((v=="no") || (v=="inherit")) return true; - auto parts = Poco::StringTokenizer(v,":"); - if(parts.count()!=4) return false; - return ValidSchedule(parts[2]); + try { + Poco::JSON::Parser P; + auto O = P.parse(v).extract(); + + ProvObjects::RRMDetails D; + if(D.from_json(O)) { + return ValidSchedule(D.schedule); + } + } catch (...) { + + } + return false; } inline bool ValidDeviceRules(const ProvObjects::DeviceRules & DR) { diff --git a/src/RESTObjects/RESTAPI_ProvObjects.cpp b/src/RESTObjects/RESTAPI_ProvObjects.cpp index 948c787..927730a 100644 --- a/src/RESTObjects/RESTAPI_ProvObjects.cpp +++ b/src/RESTObjects/RESTAPI_ProvObjects.cpp @@ -1159,5 +1159,40 @@ namespace OpenWifi::ProvObjects { return false; } + void RRMAlgorithmDetails::to_json(Poco::JSON::Object &Obj) const { + field_to_json(Obj,"name",name); + field_to_json(Obj,"parameters",parameters); + } + + bool RRMAlgorithmDetails::from_json(const Poco::JSON::Object::Ptr &Obj) { + try { + field_from_json(Obj,"name",name); + field_from_json(Obj,"parameters",parameters); + return true; + } catch(...) { + + } + return false; + } + + void RRMDetails::to_json(Poco::JSON::Object &Obj) const { + field_to_json(Obj,"vendor",vendor); + field_to_json(Obj,"schedule",schedule); + field_to_json(Obj,"algorithms",algorithms); + } + + bool RRMDetails::from_json(const Poco::JSON::Object::Ptr &Obj) { + try { + field_from_json(Obj,"vendor",vendor); + field_from_json(Obj,"schedule",schedule); + field_from_json(Obj,"algorithms",algorithms); + return true; + } catch(...) { + + } + return false; + } + } + diff --git a/src/RESTObjects/RESTAPI_ProvObjects.h b/src/RESTObjects/RESTAPI_ProvObjects.h index 4452af9..c417230 100644 --- a/src/RESTObjects/RESTAPI_ProvObjects.h +++ b/src/RESTObjects/RESTAPI_ProvObjects.h @@ -62,6 +62,21 @@ namespace OpenWifi::ProvObjects { }; typedef std::vector ManagementPolicyVec; + struct RRMAlgorithmDetails { + std::string name; + std::string parameters; + void to_json(Poco::JSON::Object &Obj) const; + bool from_json(const Poco::JSON::Object::Ptr &Obj); + }; + + struct RRMDetails { + std::string vendor; + std::string schedule; + std::vector algorithms; + void to_json(Poco::JSON::Object &Obj) const; + bool from_json(const Poco::JSON::Object::Ptr &Obj); + }; + struct DeviceRules { std::string rcOnly{"inherit"}; std::string rrm{"inherit"};