RE: dbus message not received at client from server

Anitha Chandrasekar <[email protected]>
Newsgroups gmane.comp.freedesktop.dbus
Message-ID <[email protected]>
Hi All,

As said below,
`dbus_connection_set_dispatch_status_function` is only called if the status is changed

Here the " dispatch_status" callback is set calling, dbus_connection_set_dispatch_status_function(conn, dispatch_status,        NULL, NULL);

we see that this callback is not being called, even when the data is available. This happens only in certain case, rest of time this code is working fine.

(Since we see that using dbus-monitor that the message is sent , but this status has not changed
dbus-monitor logs->
error time=1509954378.310314 sender=:1.3 -> destination=:1.12 error_name=org.bluez.Error.Failed reply_serial=52
   string "Not connected" ).

-> Please refer to this link(sample reference code of gdbus library of bluez stack),
https://kernel.googlesource.com/pub/scm/bluetooth/bluez/+/5.9/gdbus/mainloop.c

Any idea why this status callback not called, even when the message is sent from dbus sender?

Regards,
Anitha

________________________________________
From: dbus [[email protected]] on behalf of Calvin Lee [[email protected]]
Sent: Tuesday, November 21, 2017 9:05 PM
To: [email protected]
Subject: Re: dbus message not received at client from server

Anitha,
I'm not sure if I can fix your problem with the information given, but
I'll try to help out. Setting up DBus to be asynchronous requires more
than using `dbus_connection_set_dispatch`. First, both DBusWatch[1] and
DBusTimeout[2] must be honored. Second, the
`dbus_connection_set_dispatch_status_function` is only called if the
status is changed, it does not dispatch anything. In order to dispatch
one must call `dbus_connection_dispatch` as many times as needed. See my
implementation below:
```C static bool should_dispatch = true;
static void dispatch_status(DBusConnection *connection,
DBusDispatchStatus new_status,
                void *_data) {
        if (new_status == DBUS_DISPATCH_DATA_REMAINS) {
                should_dispatch = true;
         }
}
void dispatch_dbus() {
        if (!should_dispatch || !conn) {
                return;
        }
        DBusDispatchStatus status;
        do {
                status = dbus_connection_dispatch(conn);
        } while (status == DBUS_DISPATCH_DATA_REMAINS);
        if (status != DBUS_DISPATCH_COMPLETE) {
                log(L_ERROR, "Cannot dispatch dbus events: %d", status);
        }
        should_dispatch = false;
}
```
I call `dispatch_dbus` each time the main loop runs.
Also `dispatch_status` is the callback to
`dbus_connection_set_dispatch_function`.

Best of luck with your project, if you need any more help please reply
with more information.

Regards,
Calvin

[1]https://dbus.freedesktop.org/doc/api/html/group__DBusWatch.html
[2]https://dbus.freedesktop.org/doc/api/html/group__DBusTimeout.html
_______________________________________________
dbus mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dbus

________________________________

SASKEN BUSINESS DISCLAIMER: This message may contain confidential, proprietary or legally privileged information. In case you are not the original intended Recipient of the message, you must not, directly or indirectly, use, disclose, distribute, print, or copy any part of this message and you are requested to delete it and inform the sender. Any views expressed in this message are those of the individual sender unless otherwise stated. Nothing contained in this message shall be construed as an offer or acceptance of any offer by Sasken Technologies Limited ( formerly known as "Sasken Communication Technologies Limited" ) unless sent with that express intent and with due authority of Sasken. Sasken has taken enough precautions to prevent the spread of viruses. However the company accepts no liability for any damage caused by any virus transmitted by this email.
Read Disclaimer at http://www.sasken.com/mail-disclaimer/

________________________________
_______________________________________________
dbus mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dbus
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.