How create a reply without dbus_message_new_method_return?
John (J5) Palmieri
johnp at redhat.com
Tue Oct 25 11:34:51 PDT 2005
You are basically the sender. It is a field to tell the person you
reply to that you sent this message. Changing this might cause the
security policies to drop your message from the bus.
On Tue, 2005-10-25 at 15:57 -0200, Claudio Takahasi wrote:
> 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
> _______________________________________________
> dbus mailing list
> dbus at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dbus
--
John (J5) Palmieri <johnp at redhat.com>
More information about the dbus
mailing list