使用libdbus-1实现Get和GetAll

时间:2018-04-11 16:52:02

标签: c linux dbus

鉴于libdbus-1是不可协商的,我想为DBus属性实现Get和GetAll。

我真的没有看到任何这方面的例子。

我是否必须将该方法与dbus_message_is_method_call()匹配并做出相应的响应?

或者是否有一种内置的方式来做这个,我有一些代码来完成繁重的工作。

再一次,切换库不是一个选项,所以请不要说使用Qt,glib,libnih,libsystemd或其他任何东西。请具体说明libdbus-1或不回答。

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中。