blob: 653e6d6e67dc08b35be5f5853794638a0b0e5b6d [file] [log] [blame]
#include <sdbusplus/server/interface.hpp>
namespace sdbusplus
{
namespace server
{
namespace interface
{
interface::interface(sdbusplus::bus_t& bus, const char* path,
const char* interf, const sdbusplus::vtable_t* vtable,
void* context) :
_bus(bus.get(), bus.getInterface()),
_path(path), _interf(interf), _intf(bus.getInterface()),
_interface_added(false)
{
sd_bus_slot* slot = nullptr;
int r = _intf->sd_bus_add_object_vtable(_bus.get(), &slot, _path.c_str(),
_interf.c_str(), vtable, context);
if (r < 0)
{
throw exception::SdBusError(-r, "sd_bus_add_object_vtable");
}
_slot = std::move(slot);
}
interface::~interface()
{
emit_removed();
}
void interface::property_changed(const char* property)
{
std::array<const char*, 2> values = {property, nullptr};
// Note: Converting to use _strv version, could also mock two pointer
// use-case explicitly.
_intf->sd_bus_emit_properties_changed_strv(_bus.get(), _path.c_str(),
_interf.c_str(), values.data());
}
} // namespace interface
} // namespace server
} // namespace sdbusplus