132ffb03dSPatrick Williams #include <sdbusplus/server/interface.hpp>
232ffb03dSPatrick Williams
332ffb03dSPatrick Williams namespace sdbusplus
432ffb03dSPatrick Williams {
532ffb03dSPatrick Williams
632ffb03dSPatrick Williams namespace server
732ffb03dSPatrick Williams {
832ffb03dSPatrick Williams
932ffb03dSPatrick Williams namespace interface
1032ffb03dSPatrick Williams {
1132ffb03dSPatrick Williams
makeObjVtable(SdBusInterface * intf,sd_bus * bus,const char * path,const char * interf,const sdbusplus::vtable_t * vtable,void * context)129d8ba947SWilliam A. Kennington III static slot_t makeObjVtable(SdBusInterface* intf, sd_bus* bus, const char* path,
139d8ba947SWilliam A. Kennington III const char* interf,
149d8ba947SWilliam A. Kennington III const sdbusplus::vtable_t* vtable, void* context)
1532ffb03dSPatrick Williams {
169d8ba947SWilliam A. Kennington III sd_bus_slot* slot;
179d8ba947SWilliam A. Kennington III int r = intf->sd_bus_add_object_vtable(bus, &slot, path, interf, vtable,
189d8ba947SWilliam A. Kennington III context);
1932ffb03dSPatrick Williams if (r < 0)
2032ffb03dSPatrick Williams {
2132ffb03dSPatrick Williams throw exception::SdBusError(-r, "sd_bus_add_object_vtable");
2232ffb03dSPatrick Williams }
239d8ba947SWilliam A. Kennington III return slot_t{slot, intf};
2432ffb03dSPatrick Williams }
2532ffb03dSPatrick Williams
interface(sdbusplus::bus_t & bus,const char * path,const char * interf,const sdbusplus::vtable_t * vtable,void * context)269d8ba947SWilliam A. Kennington III interface::interface(sdbusplus::bus_t& bus, const char* path,
279d8ba947SWilliam A. Kennington III const char* interf, const sdbusplus::vtable_t* vtable,
289d8ba947SWilliam A. Kennington III void* context) :
29*06f265f6SPatrick Williams _bus(get_busp(bus), bus.getInterface()), _path(path), _interf(interf),
30*06f265f6SPatrick Williams _interface_added(false),
319d8ba947SWilliam A. Kennington III _slot(makeObjVtable(_bus.getInterface(), get_busp(_bus), _path.c_str(),
329d8ba947SWilliam A. Kennington III _interf.c_str(), vtable, context))
339d8ba947SWilliam A. Kennington III {}
349d8ba947SWilliam A. Kennington III
~interface()3532ffb03dSPatrick Williams interface::~interface()
3632ffb03dSPatrick Williams {
3732ffb03dSPatrick Williams emit_removed();
3832ffb03dSPatrick Williams }
3932ffb03dSPatrick Williams
property_changed(const char * property)4032ffb03dSPatrick Williams void interface::property_changed(const char* property)
4132ffb03dSPatrick Williams {
4232ffb03dSPatrick Williams std::array<const char*, 2> values = {property, nullptr};
4332ffb03dSPatrick Williams
4432ffb03dSPatrick Williams // Note: Converting to use _strv version, could also mock two pointer
4532ffb03dSPatrick Williams // use-case explicitly.
469d8ba947SWilliam A. Kennington III _bus.getInterface()->sd_bus_emit_properties_changed_strv(
479d8ba947SWilliam A. Kennington III get_busp(_bus), _path.c_str(), _interf.c_str(), values.data());
4832ffb03dSPatrick Williams }
4932ffb03dSPatrick Williams
5032ffb03dSPatrick Williams } // namespace interface
5132ffb03dSPatrick Williams } // namespace server
5232ffb03dSPatrick Williams } // namespace sdbusplus
53