blob: d3a975f4c600be14ef0f944cb2c736570efc6e74 [file] [log] [blame]
Patrick Williams32ffb032020-10-12 12:17:48 -05001#include <sdbusplus/server/interface.hpp>
2
3namespace sdbusplus
4{
5
6namespace server
7{
8
9namespace interface
10{
11
William A. Kennington III9d8ba942023-07-13 15:13:51 -070012static slot_t makeObjVtable(SdBusInterface* intf, sd_bus* bus, const char* path,
13 const char* interf,
14 const sdbusplus::vtable_t* vtable, void* context)
Patrick Williams32ffb032020-10-12 12:17:48 -050015{
William A. Kennington III9d8ba942023-07-13 15:13:51 -070016 sd_bus_slot* slot;
17 int r = intf->sd_bus_add_object_vtable(bus, &slot, path, interf, vtable,
18 context);
Patrick Williams32ffb032020-10-12 12:17:48 -050019 if (r < 0)
20 {
21 throw exception::SdBusError(-r, "sd_bus_add_object_vtable");
22 }
William A. Kennington III9d8ba942023-07-13 15:13:51 -070023 return slot_t{slot, intf};
Patrick Williams32ffb032020-10-12 12:17:48 -050024}
25
William A. Kennington III9d8ba942023-07-13 15:13:51 -070026interface::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 Williams32ffb032020-10-12 12:17:48 -050035interface::~interface()
36{
37 emit_removed();
38}
39
40void 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 III9d8ba942023-07-13 15:13:51 -070046 _bus.getInterface()->sd_bus_emit_properties_changed_strv(
47 get_busp(_bus), _path.c_str(), _interf.c_str(), values.data());
Patrick Williams32ffb032020-10-12 12:17:48 -050048}
49
50} // namespace interface
51} // namespace server
52} // namespace sdbusplus