How create a reply without dbus_message_new_method_return?

Claudio Takahasi cktakahasi at gmail.com
Tue Oct 25 10:57:05 PDT 2005


Hi folks,

Using dbus_message_set_destination instead of dbus_message_set_sender
works fine. The function names is a little bit confusing. When should
I use dbus_message_set_sender?

BR,
Claudio

On 10/25/05, Claudio Takahasi <cktakahasi at gmail.com> wrote:
> Hi folks,
>
> I am trying create a reply message without use the function
> "dbus_message_new_method_return".
>
> I know that I can create the reply message when I receive the msg and
> add the arguments
> after. But this approach is a little bit "ugly". I want extract the
> values required to create
> the reply and create it after using the "dbus_message_new" function.
>
> My client is receiving a timeout error. I don't know what is problem.
> Could someone help me? The client and the server code are below.
>
>
> Regards,
> Claudio.
> ---------------------------------------------------------
> Claudio Takahasi
> Instituto Nokia de Tecnologia - INdT
>
>
> /********** Client request code **********/
> message = dbus_message_new_method_call(BLUEZ_BUS_NAME, path,
>                                                 MANAGER_INTERFACE,
> HCI_AUTHENTICATE);
>
> dbus_message_iter_init_append(message, &iter);
>         dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING ,&bdaddr);
>
>         dbus_error_init (&error);
>
>         reply = dbus_connection_send_with_reply_and_block(conn,
> message, 30000, &error);
>
>         if (dbus_error_is_set (&error)){
>                 printf("[DBUS] reply error:(%s,%s)\n", error.name,
> error.message);
>                 dbus_error_free(&error);
>                 goto failed;
>         }
> ...
>
> /********** Server reply code **********/
>
> ...
>     /* storing the sender info to reply later */
>     sender = dbus_message_get_sender(msg);
>
>     if (sender) {
>         snprintf(sender, MAX_SENDER_LEN, "%s", sender);
>     } else {
>         memset(sender, 0, MAX_SENDER_LEN);
>     }
>     serial = dbus_message_get_serial(msg);
>
> ...
>
> ///ANOTHER CALLBACK FUNCTION TO AVOID BLOCKING
> ....
>
>     reply = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN);
>     if (reply == NULL) {
>         syslog(LOG_ERR, "Can't allocate D-BUS remote name message");
>             goto failed;
>     }
>
>     dbus_message_set_no_reply (reply, TRUE);
>
>     if (!dbus_message_set_sender(reply, sender)) {
>         syslog(LOG_INFO, "Set sender failed");
>         goto failed;
>     }
>
>     if(!dbus_message_set_reply_serial(reply, serial)) {
>         syslog(LOG_INFO, "Set serial failed");
>         goto failed;
>     }
>
>     if (dbus_connection_send(connection, reply, NULL) == FALSE) {
>         syslog(LOG_ERR, "Can't send D-BUS remote name message");
>         goto failed;
>     }
>
>     dbus_connection_flush(connection);
>
> failed:
>         if (reply)
>                 dbus_message_unref(reply);
> ....
>


--
---------------------------------------------------------
Claudio Takahasi
Instituto Nokia de Tecnologia - INdT


More information about the dbus mailing list