鉴于libdbus-1是不可转让的,我想为DBus属性实现Get和GetAll。
我真的没有看到任何例子。
我是否只需要将该方法与dbus_message_is_method_call()进行匹配并做出相应的响应?
还是有一种内置的方式来执行此操作,而我需要一些代码来完成繁重的工作。
再一次,切换库不是一个选择,所以请不要说使用Qt,glib,libnih,libsystemd或其他任何东西。请特定于libdbus-1或不回答。
最佳答案
查看libdbus-1源代码:git://anongit.freedesktop.org/dbus/dbus
在bus / driver.c中有一个示例,称为bus_driver_handle_get_all()。此函数实现对“ GetAll”的答复。
当然,为了自省,我们还需要在xml文件中实现GetAll。
<interface name='org.freedesktop.DBus.Properties'>
<method name='Get'>
<arg name='interface' type='s' direction='in' />
<arg name='property' type='s' direction='in' />
<arg name='value' type='s' direction='out' />
</method>
<method name='GetAll'>
<arg name='interface' type='s' direction='in'/>
<arg name='properties' type='a{sv}' direction='out'/>
</method>
</interface>
因此,要回复此问题,我们需要遍历所有属性并将其加载到DBusMessageIter中,然后将此回复发送给发件人。
显然,“获取”响应要容易得多,在这种情况下,我们只需要返回一个显然与我们的属性匹配的字符串即可。同样,该文件位于函数bus_driver_handle_get()中的相同文件bus / driver.c中。
关于c - 使用libdbus-1实现Get和GetAll,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49780586/