diff options
| author | James Feist <james.feist@linux.intel.com> | 2018-08-16 14:07:01 -0700 |
|---|---|---|
| committer | Ed Tanous <ed.tanous@intel.com> | 2018-10-16 17:19:04 +0000 |
| commit | 5b4aa86b670e72d4d6132561bd67f87b1419bb42 (patch) | |
| tree | 90ee84b00a4fbbe08fa3d8ed54f3ed4117a20b0a /include | |
| parent | aef72909b4506c53f7e244a58439919438fa036e (diff) | |
| download | bmcweb-5b4aa86b670e72d4d6132561bd67f87b1419bb42.tar.gz bmcweb-5b4aa86b670e72d4d6132561bd67f87b1419bb42.zip | |
Add PID Get To Redfish
Add doGet to managers for PID configuration data.
Make sure passes schema validation.
Change-Id: Ieeb97bf76a3d8a3c06f59f79cc0887aec746675e
Signed-off-by: James Feist <james.feist@linux.intel.com>
Signed-off-by: Ed Tanous <ed.tanous@intel.com>
Diffstat (limited to 'include')
| -rw-r--r-- | include/dbus_utility.hpp | 87 | ||||
| -rw-r--r-- | include/openbmc_dbus_rest.hpp | 43 |
2 files changed, 109 insertions, 21 deletions
diff --git a/include/dbus_utility.hpp b/include/dbus_utility.hpp new file mode 100644 index 0000000..e527e90 --- /dev/null +++ b/include/dbus_utility.hpp @@ -0,0 +1,87 @@ +/* + // Copyright (c) 2018 Intel Corporation + // + // Licensed under the Apache License, Version 2.0 (the "License"); + // you may not use this file except in compliance with the License. + // You may obtain a copy of the License at + // + // http://www.apache.org/licenses/LICENSE-2.0 + // + // Unless required by applicable law or agreed to in writing, software + // distributed under the License is distributed on an "AS IS" BASIS, + // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + // See the License for the specific language governing permissions and + // limitations under the License. + */ +#pragma once + +#include <regex> +#include <sdbusplus/message.hpp> + +namespace dbus +{ + +namespace utility +{ + +using DbusVariantType = sdbusplus::message::variant< + std::vector<std::tuple<std::string, std::string, std::string>>, + std::vector<std::string>, std::string, int64_t, uint64_t, double, int32_t, + uint32_t, int16_t, uint16_t, uint8_t, bool>; + +using ManagedObjectType = std::vector< + std::pair<sdbusplus::message::object_path, + boost::container::flat_map< + std::string, + boost::container::flat_map<std::string, DbusVariantType>>>>; + +inline void escapePathForDbus(std::string& path) +{ + const std::regex reg("[^A-Za-z0-9_/]"); + std::regex_replace(path.begin(), path.begin(), path.end(), reg, "_"); +} + +// gets the string N strings deep into a path +// i.e. /0th/1st/2nd/3rd +inline bool getNthStringFromPath(const std::string& path, int index, + std::string& result) +{ + int count = 0; + auto first = path.begin(); + auto last = path.end(); + for (auto it = path.begin(); it < path.end(); it++) + { + // skip first character as it's either a leading slash or the first + // character in the word + if (it == path.begin()) + { + continue; + } + if (*it == '/') + { + count++; + if (count == index) + { + first = it; + } + if (count == index + 1) + { + last = it; + break; + } + } + } + if (count < index) + { + return false; + } + if (first != path.begin()) + { + first++; + } + result = path.substr(first - path.begin(), last - first); + return true; +} + +} // namespace utility +} // namespace dbus diff --git a/include/openbmc_dbus_rest.hpp b/include/openbmc_dbus_rest.hpp index 110e6ac..aa6c95f 100644 --- a/include/openbmc_dbus_rest.hpp +++ b/include/openbmc_dbus_rest.hpp @@ -1,5 +1,18 @@ -#pragma once +// Copyright (c) 2018 Intel Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#pragma once #include <crow/app.h> #include <tinyxml2.h> @@ -7,6 +20,7 @@ #include <boost/algorithm/string.hpp> #include <boost/container/flat_set.hpp> #include <dbus_singleton.hpp> +#include <dbus_utility.hpp> #include <experimental/filesystem> #include <fstream> @@ -77,19 +91,6 @@ void introspectObjects(const std::string &processName, "Introspect"); } -// A smattering of common types to unpack. TODO(ed) this should really iterate -// the sdbusplus object directly and build the json response -using DbusRestVariantType = sdbusplus::message::variant< - std::vector<std::tuple<std::string, std::string, std::string>>, std::string, - int64_t, uint64_t, double, int32_t, uint32_t, int16_t, uint16_t, uint8_t, - bool>; - -using ManagedObjectType = std::vector<std::pair< - sdbusplus::message::object_path, - boost::container::flat_map< - std::string, - boost::container::flat_map<std::string, DbusRestVariantType>>>>; - void getManagedObjectsForEnumerate(const std::string &object_name, const std::string &object_manager_path, const std::string &connection_name, @@ -97,9 +98,8 @@ void getManagedObjectsForEnumerate(const std::string &object_name, std::shared_ptr<nlohmann::json> transaction) { crow::connections::systemBus->async_method_call( - [&res, transaction, object_name{std::string(object_name)}]( - const boost::system::error_code ec, - const ManagedObjectType &objects) { + [&res, transaction](const boost::system::error_code ec, + const dbus::utility::ManagedObjectType &objects) { if (ec) { BMCWEB_LOG_ERROR << ec; @@ -840,8 +840,8 @@ void handleGet(crow::Response &res, std::string &objectPath, crow::connections::systemBus->async_method_call( [&res, response, propertyName]( const boost::system::error_code ec, - const std::vector< - std::pair<std::string, DbusRestVariantType>> + const std::vector<std::pair< + std::string, dbus::utility::DbusVariantType>> &properties) { if (ec) { @@ -850,8 +850,9 @@ void handleGet(crow::Response &res, std::string &objectPath, } else { - for (const std::pair<std::string, - DbusRestVariantType> + for (const std::pair< + std::string, + dbus::utility::DbusVariantType> &property : properties) { // if property name is empty, or matches our |

