summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Williams <patrick@stwcx.xyz>2017-05-04 05:42:49 -0500
committerPatrick Williams <patrick@stwcx.xyz>2017-05-11 03:28:41 +0000
commitd22706fb42d777cadd1511447d79ac2a26d9d660 (patch)
tree0d24d47d12fe7a3445577b024929cf50a25e9a5e
parent0135bd5b3c10efe8d4df0f268602a0e0900d3650 (diff)
downloadphosphor-state-manager-d22706fb42d777cadd1511447d79ac2a26d9d660.tar.gz
phosphor-state-manager-d22706fb42d777cadd1511447d79ac2a26d9d660.zip
host: use latest sdbusplus match APIs
Change-Id: Iec0ae14c49c07568110bdebeaa0505db40d92540 Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
-rw-r--r--host_state_manager.cpp14
-rw-r--r--host_state_manager.hpp51
2 files changed, 22 insertions, 43 deletions
diff --git a/host_state_manager.cpp b/host_state_manager.cpp
index 3e06d73..5930d8a 100644
--- a/host_state_manager.cpp
+++ b/host_state_manager.cpp
@@ -291,23 +291,15 @@ bool Host::isAutoReboot()
}
}
-int Host::sysStateChangeSignal(sd_bus_message *msg, void *userData,
- sd_bus_error *retError)
-{
- return static_cast<Host*>(userData)->sysStateChange(msg, retError);
-}
-
-int Host::sysStateChange(sd_bus_message* msg,
- sd_bus_error* retError)
+void Host::sysStateChange(sdbusplus::message::message& msg)
{
uint32_t newStateID {};
sdbusplus::message::object_path newStateObjPath;
std::string newStateUnit{};
std::string newStateResult{};
- auto sdPlusMsg = sdbusplus::message::message(msg);
//Read the msg and populate each variable
- sdPlusMsg.read(newStateID, newStateObjPath, newStateUnit, newStateResult);
+ msg.read(newStateID, newStateObjPath, newStateUnit, newStateResult);
if((newStateUnit == HOST_STATE_POWEROFF_TGT) &&
(newStateResult == "done") &&
@@ -346,8 +338,6 @@ int Host::sysStateChange(sd_bus_message* msg,
}
}
-
- return 0;
}
Host::Transition Host::requestedHostTransition(Transition value)
diff --git a/host_state_manager.hpp b/host_state_manager.hpp
index e9158a3..de9d5fb 100644
--- a/host_state_manager.hpp
+++ b/host_state_manager.hpp
@@ -1,6 +1,7 @@
#pragma once
#include <string>
+#include <functional>
#include <sdbusplus/bus.hpp>
#include "xyz/openbmc_project/State/Host/server.hpp"
@@ -11,13 +12,16 @@ namespace state
namespace manager
{
+using HostInherit = sdbusplus::server::object::object<
+ sdbusplus::xyz::openbmc_project::State::server::Host>;
+namespace sdbusRule = sdbusplus::bus::match::rules;
+
/** @class Host
* @brief OpenBMC host state management implementation.
* @details A concrete implementation for xyz.openbmc_project.State.Host
* DBus API.
*/
-class Host : public sdbusplus::server::object::object<
- sdbusplus::xyz::openbmc_project::State::server::Host>
+class Host : public HostInherit
{
public:
/** @brief Constructs Host State Manager
@@ -31,19 +35,19 @@ class Host : public sdbusplus::server::object::object<
* @param[in] objPath - The Dbus object path
*/
Host(sdbusplus::bus::bus& bus,
- const char* busName,
- const char* objPath) :
- sdbusplus::server::object::object<
- sdbusplus::xyz::openbmc_project::State::server::Host>(
- bus, objPath, true),
+ const char* busName,
+ const char* objPath) :
+ HostInherit(bus, objPath, true),
bus(bus),
- systemdSignals(bus,
- "type='signal',"
- "member='JobRemoved',"
- "path='/org/freedesktop/systemd1',"
- "interface='org.freedesktop.systemd1.Manager'",
- sysStateChangeSignal,
- this)
+ systemdSignals(
+ bus,
+ sdbusRule::type::signal() +
+ sdbusRule::member("JobRemoved") +
+ sdbusRule::path("/org/freedesktop/systemd1") +
+ sdbusRule::interface(
+ "org.freedesktop.systemd1.Manager"),
+ std::bind(std::mem_fn(&Host::sysStateChange),
+ this, std::placeholders::_1))
{
// Enable systemd signals
subscribeToSystemdSignals();
@@ -113,36 +117,21 @@ class Host : public sdbusplus::server::object::object<
**/
bool isAutoReboot();
- /** @brief Callback function on systemd state changes
- *
- * Will just do a call into the appropriate object for processing
- *
- * @param[in] msg - Data associated with subscribed signal
- * @param[in] userData - Pointer to this object instance
- * @param[out] retError - Not used but required with signal API
- *
- */
- static int sysStateChangeSignal(sd_bus_message* msg,
- void* userData,
- sd_bus_error* retError);
-
/** @brief Check if systemd state change is relevant to this object
*
* Instance specific interface to handle the detected systemd state
* change
*
* @param[in] msg - Data associated with subscribed signal
- * @param[out] retError - Not used but required with signal API
*
*/
- int sysStateChange(sd_bus_message* msg,
- sd_bus_error* retError);
+ void sysStateChange(sdbusplus::message::message& msg);
/** @brief Persistent sdbusplus DBus bus connection. */
sdbusplus::bus::bus& bus;
/** @brief Used to subscribe to dbus systemd signals **/
- sdbusplus::server::match::match systemdSignals;
+ sdbusplus::bus::match_t systemdSignals;
};
} // namespace manager
OpenPOWER on IntegriCloud