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 | |
William A. Kennington III | 9d8ba94 | 2023-07-13 15:13:51 -0700 | [diff] [blame] | 12 | static slot_t makeObjVtable(SdBusInterface* intf, sd_bus* bus, const char* path, |
| 13 | const char* interf, |
| 14 | const sdbusplus::vtable_t* vtable, void* context) |
Patrick Williams | 32ffb03 | 2020-10-12 12:17:48 -0500 | [diff] [blame] | 15 | { |
William A. Kennington III | 9d8ba94 | 2023-07-13 15:13:51 -0700 | [diff] [blame] | 16 | sd_bus_slot* slot; |
| 17 | int r = intf->sd_bus_add_object_vtable(bus, &slot, path, interf, vtable, |
| 18 | context); |
Patrick Williams | 32ffb03 | 2020-10-12 12:17:48 -0500 | [diff] [blame] | 19 | if (r < 0) |
| 20 | { |
| 21 | throw exception::SdBusError(-r, "sd_bus_add_object_vtable"); |
| 22 | } |
William A. Kennington III | 9d8ba94 | 2023-07-13 15:13:51 -0700 | [diff] [blame] | 23 | return slot_t{slot, intf}; |
Patrick Williams | 32ffb03 | 2020-10-12 12:17:48 -0500 | [diff] [blame] | 24 | } |
| 25 | |
William A. Kennington III | 9d8ba94 | 2023-07-13 15:13:51 -0700 | [diff] [blame] | 26 | interface::interface(sdbusplus::bus_t& bus, const char* path, |
| 27 | const char* interf, const sdbusplus::vtable_t* vtable, |
| 28 | void* context) : |
| 29 | _bus(get_busp(bus), bus.getInterface()), |
| 30 | _path(path), _interf(interf), _interface_added(false), |
| 31 | _slot(makeObjVtable(_bus.getInterface(), get_busp(_bus), _path.c_str(), |
| 32 | _interf.c_str(), vtable, context)) |
| 33 | {} |
| 34 | |
Patrick Williams | 32ffb03 | 2020-10-12 12:17:48 -0500 | [diff] [blame] | 35 | interface::~interface() |
| 36 | { |
| 37 | emit_removed(); |
| 38 | } |
| 39 | |
| 40 | void interface::property_changed(const char* property) |
| 41 | { |
| 42 | std::array<const char*, 2> values = {property, nullptr}; |
| 43 | |
| 44 | // Note: Converting to use _strv version, could also mock two pointer |
| 45 | // use-case explicitly. |
William A. Kennington III | 9d8ba94 | 2023-07-13 15:13:51 -0700 | [diff] [blame] | 46 | _bus.getInterface()->sd_bus_emit_properties_changed_strv( |
| 47 | get_busp(_bus), _path.c_str(), _interf.c_str(), values.data()); |
Patrick Williams | 32ffb03 | 2020-10-12 12:17:48 -0500 | [diff] [blame] | 48 | } |
| 49 | |
| 50 | } // namespace interface |
| 51 | } // namespace server |
| 52 | } // namespace sdbusplus |