summaryrefslogtreecommitdiffstats
path: root/control/functor.hpp
diff options
context:
space:
mode:
authorMatthew Barth <msbarth@us.ibm.com>2017-10-03 11:27:06 -0500
committerMatthew Barth <msbarth@us.ibm.com>2017-11-17 13:14:10 -0600
commit5a302576091fb182b57aab482a4731655295046f (patch)
tree71cf2a1af1d3d7568f476333ea84627c5929c24b /control/functor.hpp
parent9f964bf437910cf256da93f5f8110b437ca06308 (diff)
downloadphosphor-fan-presence-5a302576091fb182b57aab482a4731655295046f.tar.gz
phosphor-fan-presence-5a302576091fb182b57aab482a4731655295046f.zip
Fill in NameOwnerChanged signal support
A NameOwnerChanged signal message provides three strings containing the service name that has changed along with its old service owner name and new service owner name. These names are then passed along to the handler to find/update the group associated with the changed owner name. Change-Id: I7d67883b010fec5b282bd00a4dcc29629486af00 Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
Diffstat (limited to 'control/functor.hpp')
-rw-r--r--control/functor.hpp38
1 files changed, 36 insertions, 2 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:
OpenPOWER on IntegriCloud