From f5c4d6b55cdc73c2aaa6a19d96be573d6f521590 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Tue, 14 Jun 2005 15:52:41 +0000 Subject: 2005-06-14 Ross Burton . * glib/dbus-glib.h: Make DBusGMethodInvocation a private structure. Rearrange prototypes a bit. * glib/dbus-gproxy.c (dbus_g_proxy_invoke): Add documentation for first_arg_type. * glib/dbus-gobject.c: Move DBusGMethodInvocation here, add documentation. Move dbus_g_method_return and dbus_g_method_return_error into public API section. --- glib/dbus-gobject.c | 119 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 70 insertions(+), 49 deletions(-) (limited to 'glib/dbus-gobject.c') diff --git a/glib/dbus-gobject.c b/glib/dbus-gobject.c index 4495c6c0..5928e261 100644 --- a/glib/dbus-gobject.c +++ b/glib/dbus-gobject.c @@ -724,6 +724,17 @@ gerror_to_dbus_error_message (const DBusGObjectInfo *object_info, return reply; } +/** + * The context of an asynchronous method call. See dbus_g_method_return() and + * dbus_g_method_return_error(). + */ +struct DBusGMethodInvocation { + DBusGConnection *connection; /**< The connection */ + DBusGMessage *message; /**< The message which generated the method call */ + const DBusGObjectInfo *object; /**< The object the method was called on */ + const DBusGMethodInfo *method; /**< The method called */ +}; + static DBusHandlerResult invoke_object_method (GObject *object, const DBusGObjectInfo *object_info, @@ -946,55 +957,6 @@ invoke_object_method (GObject *object, goto done; } -void -dbus_g_method_return (DBusGMethodInvocation *context, ...) -{ - DBusMessage *reply; - DBusMessageIter iter; - va_list args; - char *out_sig; - GArray *argsig; - guint i; - - reply = dbus_message_new_method_return (dbus_g_message_get_message (context->message)); - out_sig = method_output_signature_from_object_info (context->object, context->method); - argsig = dbus_gtypes_from_arg_signature (out_sig, FALSE); - - dbus_message_iter_init_append (reply, &iter); - - va_start (args, context); - for (i = 0; i < argsig->len; i++) { - GValue value = {0,}; - char *error; - g_value_init (&value, g_array_index (argsig, GType, i)); - error = NULL; - G_VALUE_COLLECT (&value, args, 0, &error); - if (error) { - g_warning(error); - g_free (error); - } - dbus_gvalue_marshal (&iter, &value); - } - va_end (args); - - 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); -} - -void -dbus_g_method_return_error (DBusGMethodInvocation *context, GError *error) -{ - DBusMessage *reply; - reply = gerror_to_dbus_error_message (context->object, dbus_g_message_get_message (context->message), error); - dbus_connection_send (dbus_g_connection_get_connection (context->connection), reply, NULL); - dbus_message_unref (reply); -} - - static DBusHandlerResult gobject_message_function (DBusConnection *connection, DBusMessage *message, @@ -1486,6 +1448,65 @@ dbus_g_object_register_marshaller (GType rettype, g_static_rw_lock_writer_unlock (&globals_lock); } +/** + * Send a return message for a given method invocation, with arguments. + * + * @param context the method context + */ +void +dbus_g_method_return (DBusGMethodInvocation *context, ...) +{ + DBusMessage *reply; + DBusMessageIter iter; + va_list args; + char *out_sig; + GArray *argsig; + guint i; + + reply = dbus_message_new_method_return (dbus_g_message_get_message (context->message)); + out_sig = method_output_signature_from_object_info (context->object, context->method); + argsig = dbus_gtypes_from_arg_signature (out_sig, FALSE); + + dbus_message_iter_init_append (reply, &iter); + + va_start (args, context); + for (i = 0; i < argsig->len; i++) { + GValue value = {0,}; + char *error; + g_value_init (&value, g_array_index (argsig, GType, i)); + error = NULL; + G_VALUE_COLLECT (&value, args, 0, &error); + if (error) { + g_warning(error); + g_free (error); + } + dbus_gvalue_marshal (&iter, &value); + } + va_end (args); + + 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 error message for a given method invocation. + * + * @param context the method context + * @param error the error to send. + */ +void +dbus_g_method_return_error (DBusGMethodInvocation *context, GError *error) +{ + DBusMessage *reply; + reply = gerror_to_dbus_error_message (context->object, dbus_g_message_get_message (context->message), error); + dbus_connection_send (dbus_g_connection_get_connection (context->connection), reply, NULL); + dbus_message_unref (reply); +} + /** @} */ /* end of public API */ const char * _dbus_gobject_get_path (GObject *obj) -- cgit