2005-11-15 Robert McQueen <robot101@debian.org>
authorRobert McQueen <robot101@debian.org>
Tue, 15 Nov 2005 19:34:33 +0000 (19:34 +0000)
committerRobert McQueen <robot101@debian.org>
Tue, 15 Nov 2005 19:34:33 +0000 (19:34 +0000)
* dbus/dbus-glib-lowlevel.h, glib/dbus-gobject.c: Patch from Rob
Taylor to add two methods, dbus_g_method_return_get_reply and
dbus_g_method_return_send_reply, to allow you to get the reply
message from a DBusGMethodInvocation, append arbitrary stuff to it,
and send it. The GLib bindings can't marshal a return value of
something like a(s) if the array is empty - ultimately they should be
made to heed the signature of the out arguments as the Python bindings
now can, but this is a workable interim solution which might have
other applications.

ChangeLog
dbus/dbus-glib-lowlevel.h
glib/dbus-gobject.c

index 39e6783..c63f80a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
 2005-11-15  Robert McQueen  <robot101@debian.org>
 
+       * dbus/dbus-glib-lowlevel.h, glib/dbus-gobject.c: Patch from Rob
+       Taylor to add two methods, dbus_g_method_return_get_reply and
+       dbus_g_method_return_send_reply, to allow you to get the reply
+       message from a DBusGMethodInvocation, append arbitrary stuff to it,
+       and send it. The GLib bindings can't marshal a return value of
+       something like a(s) if the array is empty - ultimately they should be
+       made to heed the signature of the out arguments as the Python bindings
+       now can, but this is a workable interim solution which might have
+       other applications.
+
+2005-11-15  Robert McQueen  <robot101@debian.org>
+
        * bus/driver.c, bus/services.c, bus/services.h: Add a ReleaseName
        method to org.freedesktop.DBus to release a bus name or give up
        waiting in the queue for it.
index 9413215..9f6fc84 100644 (file)
@@ -57,6 +57,10 @@ DBusMessage*     dbus_g_message_get_message       (DBusGMessage    *gmessage);
  * g-functions anyhow)
  */
 
+DBusMessage * dbus_g_method_return_get_reply (DBusGMethodInvocation *context);
+
+void dbus_g_method_return_send_reply (DBusGMethodInvocation *context, DBusMessage *reply);
+
 G_END_DECLS
 
 #endif /* DBUS_GLIB_LOWLEVEL_H */
index 66bd60d..1abe258 100644 (file)
@@ -1858,6 +1858,40 @@ dbus_g_object_register_marshaller_array (GClosureMarshal  marshaller,
   g_static_rw_lock_writer_unlock (&globals_lock);
 }
 
+
+/**
+ * Get the reply message to append reply values
+ * Used as a sidedoor when you can't generate dbus values
+ * of the correct type due to glib binding limitations
+ *
+ * @param context the method context
+ */
+DBusMessage *
+dbus_g_method_return_get_reply (DBusGMethodInvocation *context)
+{
+    return dbus_message_new_method_return (dbus_g_message_get_message (context->message));
+}
+
+/**
+ * Send a manually created reply message
+ * Used as a sidedoor when you can't generate dbus values
+ * of the correct type due to glib binding limitations
+ *
+ * @param context the method context
+ * @param reply the reply message, will be unreffed
+ */
+void
+dbus_g_method_return_send_reply (DBusGMethodInvocation *context, DBusMessage *reply)
+{
+  dbus_connection_send (dbus_g_connection_get_connection (context->connection), reply, NULL);
+  dbus_message_unref (reply);
+
+  dbus_g_connection_unref (context->connection);
+  dbus_g_message_unref (context->message);
+  g_free (context);
+}
+
+
 /**
  * Send a return message for a given method invocation, with arguments.
  * This function also frees the sending context.