鉴于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/

10-12 05:06