From fac1b1035ad5a0339fc1af600866343452dd77d3 Mon Sep 17 00:00:00 2001 From: Brad Bishop Date: Mon, 15 May 2017 22:29:20 -0400 Subject: Add sdbusplus delegate Add a DBus interface abstraction to facilitate mocking and unit test. Change-Id: I914cba7500d79bc4d3022cb12e4c02adf6a78c19 Signed-off-by: Brad Bishop --- src/sdbusplus.hpp | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 src/sdbusplus.hpp diff --git a/src/sdbusplus.hpp b/src/sdbusplus.hpp new file mode 100644 index 0000000..7dbf44d --- /dev/null +++ b/src/sdbusplus.hpp @@ -0,0 +1,86 @@ +#pragma once + +#include +#include +#include + +namespace phosphor +{ +namespace dbus +{ +namespace monitoring +{ + +/** @class SDBusPlus + * @brief DBus access delegate implementation for sdbusplus. + */ +class SDBusPlus +{ + private: + static auto& getBus() + { + static auto bus = sdbusplus::bus::new_default(); + return bus; + } + + static auto& getWatches() + { + static std::vector watches; + return watches; + } + + public: + /** @brief Invoke a method. */ + template + static auto callMethod( + const std::string& busName, + const std::string& path, + const std::string& interface, + const std::string& method, + Args&& ... args) + { + auto reqMsg = getBus().new_method_call( + busName.c_str(), + path.c_str(), + interface.c_str(), + method.c_str()); + reqMsg.append(std::forward(args)...); + return getBus().call(reqMsg); + } + + /** @brief Invoke a method and read the response. */ + template + static auto callMethodAndRead( + const std::string& busName, + const std::string& path, + const std::string& interface, + const std::string& method, + Args&& ... args) + { + Ret resp; + sdbusplus::message::message respMsg = + callMethod( + busName, + path, + interface, + method, + std::forward(args)...); + respMsg.read(resp); + return resp; + } + + /** @brief Register a DBus signal callback. */ + static auto addMatch( + const std::string& match, + const sdbusplus::bus::match::match::callback_t& callback) + { + getWatches().emplace_back( + getBus(), + match, + callback); + } +}; + +} // namespace monitoring +} // namespace dbus +} // namespace phosphor -- cgit v1.2.1