Patrick Williams | 32ffb03 | 2020-10-12 12:17:48 -0500 | [diff] [blame] | 1 | #include <sdbusplus/server/interface.hpp> |
| 2 | |
| 3 | namespace sdbusplus |
| 4 | { |
| 5 | |
| 6 | namespace server |
| 7 | { |
| 8 | |
| 9 | namespace interface |
| 10 | { |
| 11 | |
| 12 | interface::interface(sdbusplus::bus::bus& bus, const char* path, |
| 13 | const char* interf, |
| 14 | const sdbusplus::vtable::vtable_t* vtable, void* context) : |
| 15 | _bus(bus.get(), bus.getInterface()), |
| 16 | _path(path), _interf(interf), _slot(nullptr), _intf(bus.getInterface()), |
| 17 | _interface_added(false) |
| 18 | { |
| 19 | sd_bus_slot* slot = nullptr; |
| 20 | int r = _intf->sd_bus_add_object_vtable(_bus.get(), &slot, _path.c_str(), |
| 21 | _interf.c_str(), vtable, context); |
| 22 | if (r < 0) |
| 23 | { |
| 24 | throw exception::SdBusError(-r, "sd_bus_add_object_vtable"); |
| 25 | } |
| 26 | |
| 27 | _slot = decltype(_slot){slot}; |
| 28 | } |
| 29 | |
| 30 | interface::~interface() |
| 31 | { |
| 32 | emit_removed(); |
| 33 | } |
| 34 | |
| 35 | void interface::property_changed(const char* property) |
| 36 | { |
| 37 | std::array<const char*, 2> values = {property, nullptr}; |
| 38 | |
| 39 | // Note: Converting to use _strv version, could also mock two pointer |
| 40 | // use-case explicitly. |
| 41 | _intf->sd_bus_emit_properties_changed_strv(_bus.get(), _path.c_str(), |
| 42 | _interf.c_str(), values.data()); |
| 43 | } |
| 44 | |
| 45 | } // namespace interface |
| 46 | } // namespace server |
| 47 | } // namespace sdbusplus |