答复: The dbus_message_has_interface method return false, my service can't start, please help!

刘铁罡 liutiegang at navchina.com
Mon Feb 27 07:08:39 UTC 2017


Dear all,

Attached is my session.conf file.

Thanks.
Tiegang


发件人: 刘铁罡
发送时间: 2017年2月27日 15:02
收件人: 'dbus at lists.freedesktop.org'
主题: The dbus_message_has_interface method return false, my service can't start, please help!

Dear all,

I am investigating on DBUS porting on QNX. DBus-daemon can be run now.
And then I download the dbus-example.c on http://www.matthew.ath.cx/misc/dbus. Compile and run dbus_example_g.

My running steps are:

1.      #DBUS_VERSION=1 dbus-daemon --print-address --config-file=/home/test/dbus/share/dbus-1/session.conf --nofork &

2.      #export DBUS_SESSION_BUS_ADDRESS=unix:path=/home/test/dbus/temp/dbus-WmaQFMvqxD,guid=7a9055f9b14393e3276108b958b3b792

3.      #./dbus_example_g receive
In daemon process, I got the null connection, I debug into the source code, find the following clue, please see the red lines.
dbus_message_has_interface (DBusMessage   *message,
                            const char    *iface)
{
  const char *msg_interface;
  msg_interface = dbus_message_get_interface (message); // msg_interface is Org.freedesktop.dbus.local, but iface is org.freedesktop.dbus.peer

  if (msg_interface == NULL)
    {
      if (iface == NULL)
      {
        return TRUE;
      }
      else
      {
        return FALSE;
      }
    }

  if (iface == NULL)
  {
    return FALSE;
  }

  if (strcmp (msg_interface, iface) == 0) //org.freedesktop.dbus.local!=org.freedesktop.dbus.peer
    return TRUE;

  return FALSE;

}

So

static DBusHandlerResult
_dbus_connection_peer_filter_unlocked_no_update (DBusConnection *connection,
                                                 DBusMessage    *message)
{
  ……
  if (!dbus_message_has_interface (message, DBUS_INTERFACE_PEER))
    {
      return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; //quit, so the following Ping and GetMachineId can’t be run!
}
  ……
  if (dbus_message_is_method_call (message,
                                   DBUS_INTERFACE_PEER,
                                   "Ping"))
{
……
    }
  else if (dbus_message_is_method_call (message,
                                        DBUS_INTERFACE_PEER,
                                        "GetMachineId"))
{
……
}

Any help will be appreciated.

Thanks!
Tiegang

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/dbus/attachments/20170227/a450da39/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: session.conf
Type: application/octet-stream
Size: 5201 bytes
Desc: session.conf
URL: <https://lists.freedesktop.org/archives/dbus/attachments/20170227/a450da39/attachment-0001.obj>


More information about the dbus mailing list