diff options
author | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2017-01-19 11:06:51 -0500 |
---|---|---|
committer | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2017-01-31 14:10:00 -0500 |
commit | fa51da745c5be2ac85265af43333cf7af1047cb8 (patch) | |
tree | 0e046bc5e02c23558ac67f04c4b03e85679dfd4d /events.cpp | |
parent | 040e18b92bc0be25fc6a5e086474ab69a53e465c (diff) | |
download | phosphor-inventory-manager-fa51da745c5be2ac85265af43333cf7af1047cb8.tar.gz phosphor-inventory-manager-fa51da745c5be2ac85265af43333cf7af1047cb8.zip |
Add propertyIs filter
The existing property match filter tests a property
in the PropertiesChanged signal payload.
Add a match filter that tests any arbitrary property on
any object.
Change-Id: I1c238c03a3ccbf45f7b338693a4342fbd4f670c2
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Diffstat (limited to 'events.cpp')
-rw-r--r-- | events.cpp | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/events.cpp b/events.cpp new file mode 100644 index 0000000..41a6e5f --- /dev/null +++ b/events.cpp @@ -0,0 +1,99 @@ +/** + * Copyright © 2017 IBM Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "events.hpp" +#include <sdbusplus/bus.hpp> + +namespace phosphor +{ +namespace inventory +{ +namespace manager +{ +namespace filters +{ +namespace details +{ +namespace property_condition +{ + +bool PropertyConditionBase::operator()( + sdbusplus::bus::bus& bus, + sdbusplus::message::message&, + Manager&) const +{ + std::string host; + + if (_service) + { + host.assign(_service); + } + else + { + auto mapperCall = bus.new_method_call( + "xyz.openbmc_project.ObjectMapper", + "/xyz/openbmc_project/ObjectMapper", + "xyz.openbmc_project.ObjectMapper", + "GetObject"); + mapperCall.append(_path); + mapperCall.append(std::vector<std::string>({_iface})); + + auto mapperResponseMsg = bus.call(mapperCall); + if (mapperResponseMsg.is_method_error()) + { + return false; + } + + std::map<std::string, std::vector<std::string>> mapperResponse; + mapperResponseMsg.read(mapperResponse); + + if (mapperResponse.begin() == mapperResponse.end()) + { + return false; + } + + host = mapperResponse.begin()->first; + + if (host == bus.get_unique_name()) + { + // TODO I can't call myself here. + return false; + } + } + auto hostCall = bus.new_method_call( + host.c_str(), + _path.c_str(), + "org.freedesktop.DBus.Properties", + "Get"); + hostCall.append(_iface); + hostCall.append(_property); + + auto hostResponseMsg = bus.call(hostCall); + if (hostResponseMsg.is_method_error()) + { + return false; + } + + return eval(hostResponseMsg); +} + +} // namespace property_condition +} // namespace details +} // namespace filters +} // namespace manager +} // namespace inventory +} // namespace phosphor + +// vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 |