Modify D-Bus to using asio server
DBus updates are now using the asio server way.
Tested:
Tested with unit tests and locally on a machine.
Signed-off-by: Kasun Athukorala <kasunath@google.com>
Change-Id: I77553bcc3baae70e5d684a62f2c19592ff844665
Signed-off-by: Brandon Kim <brandonkim@google.com>
diff --git a/include/dbus/file_notifier.hpp b/include/dbus/file_notifier.hpp
index da37158..1e72a6b 100644
--- a/include/dbus/file_notifier.hpp
+++ b/include/dbus/file_notifier.hpp
@@ -1,6 +1,6 @@
#pragma once
-#include <sdbusplus/server.hpp>
+#include <sdbusplus/asio/object_server.hpp>
#include <xyz/openbmc_project/Common/FilePath/server.hpp>
#include <format>
@@ -9,36 +9,46 @@
namespace bios_bmc_smm_error_logger
{
-using FileNotifierInterface = sdbusplus::server::object_t<
- sdbusplus::xyz::openbmc_project::Common::server::FilePath>;
-
/**
* @brief A class for notifying file paths of CPER logs.
*/
-class CperFileNotifier : public FileNotifierInterface
+class CperFileNotifier
{
public:
/**
* @brief Constructor for the CperFileNotifier class.
*
- * @param bus - bus to attach to.
+ * @param server - sdbusplus asio object server.
* @param filePath - full path of the CPER log JSON file.
* @param entry - index of the DBus file path object.
*/
- CperFileNotifier(sdbusplus::bus_t& bus, const std::string& filePath,
- uint64_t entry) :
- FileNotifierInterface(bus, generatePath(entry).c_str(),
- action::emit_no_signals)
+ CperFileNotifier(sdbusplus::asio::object_server& server,
+ const std::string& filePath, uint64_t entry) :
+ server(server)
{
- // We only need the interface added signal for the fault monitor. So
- // stop emitting properties changed signal.
- path(filePath, /*skipSignal=*/true);
+ pathIface = server.add_interface(generatePath(entry).c_str(),
+ "xyz.openbmc_project.Common.FilePath");
+ pathIface->register_property("Path", filePath);
+ pathIface->initialize();
}
+ ~CperFileNotifier()
+ {
+ server.remove_interface(pathIface);
+ }
+
+ CperFileNotifier& operator=(const CperFileNotifier&) = delete;
+ CperFileNotifier& operator=(CperFileNotifier&&) = delete;
+ CperFileNotifier(const CperFileNotifier&) = delete;
+ CperFileNotifier(CperFileNotifier&&) = default;
+
static constexpr const char* cperBasePath =
"/xyz/openbmc_project/external_storer/bios_bmc_smm_error_logger/CPER";
private:
+ sdbusplus::asio::object_server& server;
+ std::shared_ptr<sdbusplus::asio::dbus_interface> pathIface;
+
/**
* @brief Generate a path for the CperFileNotifier DBus object.
*
diff --git a/include/rde/external_storer_file.hpp b/include/rde/external_storer_file.hpp
index 8eda3c6..6d813af 100644
--- a/include/rde/external_storer_file.hpp
+++ b/include/rde/external_storer_file.hpp
@@ -76,14 +76,15 @@
/**
* @brief Constructor for the ExternalStorerFileInterface.
*
- * @param[in] bus - bus to attach to.
+ * @param[in] conn - sdbusplus asio connection.
* @param[in] rootPath - root path for creating redfish folders.
* Eg: "/run/bmcweb"
* @param[in] fileHandler - an ExternalStorerFileWriter object. This class
* will take the ownership of this object.
*/
ExternalStorerFileInterface(
- sdbusplus::bus_t& bus, std::string_view rootPath,
+ const std::shared_ptr<sdbusplus::asio::connection>& conn,
+ std::string_view rootPath,
std::unique_ptr<FileHandlerInterface> fileHandler);
bool publishJson(std::string_view jsonStr) override;
diff --git a/include/rde/notifier_dbus_handler.hpp b/include/rde/notifier_dbus_handler.hpp
index e90fa71..708a45a 100644
--- a/include/rde/notifier_dbus_handler.hpp
+++ b/include/rde/notifier_dbus_handler.hpp
@@ -2,6 +2,8 @@
#include "dbus/file_notifier.hpp"
+#include <sdbusplus/asio/object_server.hpp>
+
#include <memory>
#include <vector>
@@ -19,9 +21,10 @@
/**
* @brief Constructor for the CperFileNotifierHandler class.
*
- * @param bus - bus to attache to.
+ * @param conn - sdbusplus asio connection.
*/
- explicit CperFileNotifierHandler(sdbusplus::bus_t& bus);
+ explicit CperFileNotifierHandler(
+ const std::shared_ptr<sdbusplus::asio::connection>& conn);
/**
* @brief Create a DBus object with the provided filePath value.
@@ -31,8 +34,8 @@
void createEntry(const std::string& filePath);
private:
- sdbusplus::bus_t& bus;
sdbusplus::server::manager_t objManager;
+ sdbusplus::asio::object_server objServer;
/**
* @brief A vector to keep track of DBus FilePath objects.