dbus/glib dbus-gobject.c,1.50,1.51

Robert McQueen robot101 at freedesktop.org
Tue Nov 15 11:34:35 PST 2005


Update of /cvs/dbus/dbus/glib
In directory gabe:/tmp/cvs-serv28988/glib

Modified Files:
	dbus-gobject.c 
Log Message:
2005-11-15  Robert McQueen  <robot101 at 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.

Index: dbus-gobject.c
===================================================================
RCS file: /cvs/dbus/dbus/glib/dbus-gobject.c,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -d -r1.50 -r1.51
--- dbus-gobject.c	27 Oct 2005 16:35:43 -0000	1.50
+++ dbus-gobject.c	15 Nov 2005 19:34:33 -0000	1.51
@@ -1858,6 +1858,40 @@
   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.



More information about the dbus-commit mailing list