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