summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--control/functor.hpp38
-rw-r--r--control/handlers.hpp3
2 files changed, 38 insertions, 3 deletions
diff --git a/control/functor.hpp b/control/functor.hpp
index 1f3e4d8..faf0d3e 100644
--- a/control/functor.hpp
+++ b/control/functor.hpp
@@ -13,6 +13,7 @@ namespace control
class Zone;
using namespace phosphor::fan;
+using namespace sdbusplus::bus::match;
using namespace phosphor::logging;
using InternalFailure = sdbusplus::xyz::openbmc_project::Common::
Error::InternalFailure;
@@ -283,14 +284,47 @@ struct NameOwnerChanged
sdbusplus::message::message& msg,
Zone& zone) const
{
+ std::string name;
+ bool hasOwner = false;
if (msg)
{
- // TODO Handle NameOwnerChanged signals
+ // Handle NameOwnerChanged signals
+ msg.read(name);
+
+ std::string oldOwn;
+ msg.read(oldOwn);
+
+ std::string newOwn;
+ msg.read(newOwn);
+ if (!newOwn.empty())
+ {
+ hasOwner = true;
+ }
}
else
{
- // TODO Initialize NameOwnerChanged data store with service names
+ try
+ {
+ // Initialize NameOwnerChanged data store with service name
+ name = util::SDBusPlus::getService(bus,
+ _path,
+ _iface);
+ hasOwner = util::SDBusPlus::callMethodAndRead<bool>(
+ bus,
+ "org.freedesktop.DBus",
+ "/org/freedesktop/DBus",
+ "org.freedesktop.DBus",
+ "NameHasOwner",
+ name);
+ }
+ catch (const InternalFailure& ife)
+ {
+ // Failed to get service name owner state
+ hasOwner = false;
+ }
}
+
+ _handler(zone, name, hasOwner);
}
private:
diff --git a/control/handlers.hpp b/control/handlers.hpp
index 3f42d3c..96cfa2f 100644
--- a/control/handlers.hpp
+++ b/control/handlers.hpp
@@ -44,7 +44,8 @@ auto setService(Group&& group)
{
return [group = std::move(group)](auto& zone, auto& name, bool hasOwner)
{
- // TODO Update service name owner state list of a group
+ // Update service name owner state list of a group
+ zone.setServiceOwner(&group, name, hasOwner);
};
}
OpenPOWER on IntegriCloud