utils: Add DBusHandler functions
Add helper functions to get dbus property
Signed-off-by: John Wang <wangzqbj@inspur.com>
Change-Id: I9921848729f00b63290598679d6e7e1d2b2e7eea
diff --git a/libpldmresponder/utils.hpp b/libpldmresponder/utils.hpp
index 5f366be..f494291 100644
--- a/libpldmresponder/utils.hpp
+++ b/libpldmresponder/utils.hpp
@@ -5,6 +5,7 @@
#include <unistd.h>
#include <exception>
+#include <phosphor-logging/log.hpp>
#include <sdbusplus/server.hpp>
#include <string>
#include <variant>
@@ -127,6 +128,41 @@
method.append(dbusInterface, dbusProp, value);
bus.call_noreply(method);
}
+
+ template <typename Variant>
+ auto getDbusPropertyVariant(const char* objPath, const char* dbusProp,
+ const char* dbusInterface)
+ {
+ using namespace phosphor::logging;
+ Variant value;
+ auto bus = sdbusplus::bus::new_default();
+ auto service = getService(bus, objPath, dbusInterface);
+ auto method = bus.new_method_call(service.c_str(), objPath,
+ dbusProperties, "Get");
+ method.append(dbusInterface, dbusProp);
+ try
+ {
+ auto reply = bus.call(method);
+ reply.read(value);
+ }
+ catch (const sdbusplus::exception::SdBusError& e)
+ {
+ log<level::ERR>("dbus call expection", entry("OBJPATH=%s", objPath),
+ entry("INTERFACE=%s", dbusInterface),
+ entry("PROPERTY=%s", dbusProp),
+ entry("EXPECTION=%s", e.what()));
+ }
+ return value;
+ }
+
+ template <typename Property>
+ auto getDbusProperty(const char* objPath, const char* dbusProp,
+ const char* dbusInterface)
+ {
+ auto VariantValue = getDbusPropertyVariant<std::variant<Property>>(
+ objPath, dbusProp, dbusInterface);
+ return std::get<Property>(VariantValue);
+ }
};
} // namespace responder