鉴于libdbus-1是不可协商的,我想为DBus属性实现Get和GetAll。
我真的没有看到任何这方面的例子。
我是否必须将该方法与dbus_message_is_method_call()匹配并做出相应的响应?
或者是否有一种内置的方式来做这个,我有一些代码来完成繁重的工作。
再一次,切换库不是一个选项,所以请不要说使用Qt,glib,libnih,libsystemd或其他任何东西。请具体说明libdbus-1或不回答。
答案 0 :(得分:0)
查看libdbus-1源代码:git://anongit.freedesktop.org/dbus/dbus
这里有一个名为bus_driver_handle_get_all()的bus / driver.c中的示例。此功能实现对" 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中加载它们,然后将此回复发送给发件人。
显然,&#34; Get&#34;响应更容易,我们只需要在这种情况下返回一个字符串,这显然与我们的属性匹配。同样,这是在函数bus_driver_handle_get()中的同一个文件bus / driver.c中。