xref: /openbmc/sdbusplus/src/server/interface.cpp (revision 9d8ba947)
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)12*9d8ba947SWilliam A. Kennington III static slot_t makeObjVtable(SdBusInterface* intf, sd_bus* bus, const char* path,
13*9d8ba947SWilliam A. Kennington III                             const char* interf,
14*9d8ba947SWilliam A. Kennington III                             const sdbusplus::vtable_t* vtable, void* context)
1532ffb03dSPatrick Williams {
16*9d8ba947SWilliam A. Kennington III     sd_bus_slot* slot;
17*9d8ba947SWilliam A. Kennington III     int r = intf->sd_bus_add_object_vtable(bus, &slot, path, interf, vtable,
18*9d8ba947SWilliam A. Kennington III                                            context);
1932ffb03dSPatrick Williams     if (r < 0)
2032ffb03dSPatrick Williams     {
2132ffb03dSPatrick Williams         throw exception::SdBusError(-r, "sd_bus_add_object_vtable");
2232ffb03dSPatrick Williams     }
23*9d8ba947SWilliam 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)26*9d8ba947SWilliam A. Kennington III interface::interface(sdbusplus::bus_t& bus, const char* path,
27*9d8ba947SWilliam A. Kennington III                      const char* interf, const sdbusplus::vtable_t* vtable,
28*9d8ba947SWilliam A. Kennington III                      void* context) :
29*9d8ba947SWilliam A. Kennington III     _bus(get_busp(bus), bus.getInterface()),
30*9d8ba947SWilliam A. Kennington III     _path(path), _interf(interf), _interface_added(false),
31*9d8ba947SWilliam A. Kennington III     _slot(makeObjVtable(_bus.getInterface(), get_busp(_bus), _path.c_str(),
32*9d8ba947SWilliam A. Kennington III                         _interf.c_str(), vtable, context))
33*9d8ba947SWilliam A. Kennington III {}
34*9d8ba947SWilliam 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.
46*9d8ba947SWilliam A. Kennington III     _bus.getInterface()->sd_bus_emit_properties_changed_strv(
47*9d8ba947SWilliam 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