summaryrefslogtreecommitdiffstats
path: root/events.cpp
diff options
context:
space:
mode:
authorBrad Bishop <bradleyb@fuzziesquirrel.com>2017-01-19 11:06:51 -0500
committerBrad Bishop <bradleyb@fuzziesquirrel.com>2017-01-31 14:10:00 -0500
commitfa51da745c5be2ac85265af43333cf7af1047cb8 (patch)
tree0e046bc5e02c23558ac67f04c4b03e85679dfd4d /events.cpp
parent040e18b92bc0be25fc6a5e086474ab69a53e465c (diff)
downloadphosphor-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.cpp99
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
OpenPOWER on IntegriCloud