xref: /openbmc/sdbusplus/src/server/interface.cpp (revision 32ffb03d)
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