forked from Kistler-Group/sdbus-cpp
Add object manager support to IConnection interface (#54)
This commit is contained in:
committed by
GitHub
parent
c13ee60b7e
commit
4b0c23204d
@ -90,6 +90,17 @@ namespace sdbus {
|
|||||||
*/
|
*/
|
||||||
virtual void leaveProcessingLoop() = 0;
|
virtual void leaveProcessingLoop() = 0;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief Add an ObjectManager at the specified D-Bus object path
|
||||||
|
*
|
||||||
|
* Creates an ObjectManager interface at the specified object path on
|
||||||
|
* the connection. This is a convenient way to interrogate a connection
|
||||||
|
* to see what objects it has.
|
||||||
|
*
|
||||||
|
* @throws sdbus::Error in case of failure
|
||||||
|
*/
|
||||||
|
virtual void addObjectManager( const std::string& objectPath ) = 0;
|
||||||
|
|
||||||
inline virtual ~IConnection() = 0;
|
inline virtual ~IConnection() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -103,6 +103,15 @@ ISdBus& Connection::getSdBusInterface()
|
|||||||
return *iface_.get();
|
return *iface_.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Connection::addObjectManager( const std::string& objectPath )
|
||||||
|
{
|
||||||
|
auto r = iface_->sd_bus_add_object_manager( bus_.get()
|
||||||
|
, NULL
|
||||||
|
, objectPath.c_str() );
|
||||||
|
|
||||||
|
SDBUS_THROW_ERROR_IF(r < 0, "Failed to add object manager", -r);
|
||||||
|
}
|
||||||
|
|
||||||
sd_bus_slot* Connection::addObjectVTable( const std::string& objectPath
|
sd_bus_slot* Connection::addObjectVTable( const std::string& objectPath
|
||||||
, const std::string& interfaceName
|
, const std::string& interfaceName
|
||||||
, const sd_bus_vtable* vtable
|
, const sd_bus_vtable* vtable
|
||||||
|
@ -56,6 +56,7 @@ namespace sdbus { namespace internal {
|
|||||||
void enterProcessingLoop() override;
|
void enterProcessingLoop() override;
|
||||||
void enterProcessingLoopAsync() override;
|
void enterProcessingLoopAsync() override;
|
||||||
void leaveProcessingLoop() override;
|
void leaveProcessingLoop() override;
|
||||||
|
void addObjectManager( const std::string& objectPath ) override;
|
||||||
|
|
||||||
const ISdBus& getSdBusInterface() const override;
|
const ISdBus& getSdBusInterface() const override;
|
||||||
ISdBus& getSdBusInterface() override;
|
ISdBus& getSdBusInterface() override;
|
||||||
|
@ -58,6 +58,7 @@ namespace sdbus { namespace internal {
|
|||||||
virtual int sd_bus_request_name(sd_bus *bus, const char *name, uint64_t flags) = 0;
|
virtual int sd_bus_request_name(sd_bus *bus, const char *name, uint64_t flags) = 0;
|
||||||
virtual int sd_bus_release_name(sd_bus *bus, const char *name) = 0;
|
virtual int sd_bus_release_name(sd_bus *bus, const char *name) = 0;
|
||||||
virtual int sd_bus_add_object_vtable(sd_bus *bus, sd_bus_slot **slot, const char *path, const char *interface, const sd_bus_vtable *vtable, void *userdata) = 0;
|
virtual int sd_bus_add_object_vtable(sd_bus *bus, sd_bus_slot **slot, const char *path, const char *interface, const sd_bus_vtable *vtable, void *userdata) = 0;
|
||||||
|
virtual int sd_bus_add_object_manager(sd_bus *bus, sd_bus_slot **slot, const char *path) = 0;
|
||||||
virtual int sd_bus_add_match(sd_bus *bus, sd_bus_slot **slot, const char *match, sd_bus_message_handler_t callback, void *userdata) = 0;
|
virtual int sd_bus_add_match(sd_bus *bus, sd_bus_slot **slot, const char *match, sd_bus_message_handler_t callback, void *userdata) = 0;
|
||||||
virtual sd_bus_slot* sd_bus_slot_unref(sd_bus_slot *slot) = 0;
|
virtual sd_bus_slot* sd_bus_slot_unref(sd_bus_slot *slot) = 0;
|
||||||
|
|
||||||
|
@ -122,6 +122,13 @@ int SdBus::sd_bus_add_object_vtable(sd_bus *bus, sd_bus_slot **slot, const char
|
|||||||
return ::sd_bus_add_object_vtable(bus, slot, path, interface, vtable, userdata);
|
return ::sd_bus_add_object_vtable(bus, slot, path, interface, vtable, userdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int SdBus::sd_bus_add_object_manager(sd_bus *bus, sd_bus_slot **slot, const char *path)
|
||||||
|
{
|
||||||
|
std::unique_lock<std::recursive_mutex> lock(sdbusMutex_);
|
||||||
|
|
||||||
|
return ::sd_bus_add_object_manager(bus, slot, path);
|
||||||
|
}
|
||||||
|
|
||||||
int SdBus::sd_bus_add_match(sd_bus *bus, sd_bus_slot **slot, const char *match, sd_bus_message_handler_t callback, void *userdata)
|
int SdBus::sd_bus_add_match(sd_bus *bus, sd_bus_slot **slot, const char *match, sd_bus_message_handler_t callback, void *userdata)
|
||||||
{
|
{
|
||||||
std::unique_lock<std::recursive_mutex> lock(sdbusMutex_);
|
std::unique_lock<std::recursive_mutex> lock(sdbusMutex_);
|
||||||
|
@ -52,6 +52,7 @@ public:
|
|||||||
virtual int sd_bus_request_name(sd_bus *bus, const char *name, uint64_t flags) override;
|
virtual int sd_bus_request_name(sd_bus *bus, const char *name, uint64_t flags) override;
|
||||||
virtual int sd_bus_release_name(sd_bus *bus, const char *name) override;
|
virtual int sd_bus_release_name(sd_bus *bus, const char *name) override;
|
||||||
virtual int sd_bus_add_object_vtable(sd_bus *bus, sd_bus_slot **slot, const char *path, const char *interface, const sd_bus_vtable *vtable, void *userdata) override;
|
virtual int sd_bus_add_object_vtable(sd_bus *bus, sd_bus_slot **slot, const char *path, const char *interface, const sd_bus_vtable *vtable, void *userdata) override;
|
||||||
|
virtual int sd_bus_add_object_manager(sd_bus *bus, sd_bus_slot **slot, const char *path) override;
|
||||||
virtual int sd_bus_add_match(sd_bus *bus, sd_bus_slot **slot, const char *match, sd_bus_message_handler_t callback, void *userdata) override;
|
virtual int sd_bus_add_match(sd_bus *bus, sd_bus_slot **slot, const char *match, sd_bus_message_handler_t callback, void *userdata) override;
|
||||||
virtual sd_bus_slot* sd_bus_slot_unref(sd_bus_slot *slot) override;
|
virtual sd_bus_slot* sd_bus_slot_unref(sd_bus_slot *slot) override;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user