diff options
author | Matthew Barth <msbarth@us.ibm.com> | 2017-04-12 13:48:29 -0500 |
---|---|---|
committer | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2017-05-15 16:58:09 -0400 |
commit | 240bf332d20c31be5abe066945012542d94f5333 (patch) | |
tree | 64d28e1df3c88b9e170214674a000807126bb509 /src/monitor.cpp | |
parent | e6af23313890b82c4fca4d61ec1d2d9ff4817870 (diff) | |
download | phosphor-dbus-monitor-240bf332d20c31be5abe066945012542d94f5333.tar.gz phosphor-dbus-monitor-240bf332d20c31be5abe066945012542d94f5333.zip |
Add support for processing signal event triggers
Process signal event triggers' list of conditions on a group and perform
the defined actions.
This re-uses the following struct directly from
phosphor-inventory-manager:
--struct PropertyChangedCondition
Change-Id: I98552f3d168cfcd9f0c1c357289b7000374ae60e
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
Diffstat (limited to 'src/monitor.cpp')
-rw-r--r-- | src/monitor.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/monitor.cpp b/src/monitor.cpp index 2864924..aeb1fe5 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -16,7 +16,26 @@ const std::vector<std::tuple<std::vector<std::shared_ptr<Event>>, Monitor::Monitor(sdbusplus::bus::bus& bus) : bus(bus) { + // Process thru given events that are type 'signal' + for (auto& event : events) + { + for (auto& pEvent : std::get<std::vector<std::shared_ptr<Event>>>(event)) + { + if (pEvent->trigger != Event::Trigger::SIGNAL) + { + continue; + } + auto signalEvent = static_cast<SignalEvent*>(pEvent.get()); + eventArgs.emplace_back(std::make_unique<eventArg>(this, + signalEvent, + &event)); + matches.emplace_back(bus, + signalEvent->signature, + handleSignal, + eventArgs.back().get()); + } + } } void Monitor::processStart() noexcept @@ -36,6 +55,19 @@ void Monitor::processStart() noexcept } } +int Monitor::handleSignal(sd_bus_message* msg, + void* data, + sd_bus_error* err) +{ + auto sdbpMsg = sdbusplus::message::message(msg); + auto& eventArg = *static_cast<Monitor::eventArg*>(data); + std::get<0>(eventArg)->handleEvent( + sdbpMsg, + static_cast<const SignalEvent&>(*std::get<1>(eventArg)), + *std::get<2>(eventArg)); + return 0; +} + void Monitor::handleEvent(sdbusplus::message::message& msg, const Event& event, const std::tuple<std::vector<std::shared_ptr<Event>>, |