From 41f52c96d651003b3d0a266a582d401228a8368e Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Sun, 30 Jan 2005 05:18:44 +0000 Subject: 2005-01-30 Havoc Pennington dbus-viewer introspected and displayed the bus driver * dbus/dbus-object-tree.c (object_tree_test_iteration): add tests for a handler registered on "/" * dbus/dbus-object-tree.c (_dbus_decompose_path): fix to handle path "/" properly (run_decompose_tests): add tests for path decomposition * glib/dbus-gutils.c (_dbus_gutils_split_path): fix to handle "/" properly * glib/dbus-gobject.c (handle_introspect): fix quotes * test/glib/run-test.sh: support launching the bus, then running dbus-viewer * test/glib/test-service-glib.c (main): put in a trivial gobject subclass and register it on the connection * bus/driver.c (bus_driver_handle_introspect): implement introspection of the bus driver service * dbus/dbus-protocol.h: add #defines for the XML namespace, identifiers, doctype decl * bus/driver.c (bus_driver_handle_get_service_owner): handle attempts to get owner of DBUS_SERVICE_ORG_FREEDESKTOP_DBUS by returning the service unchanged. (bus_driver_handle_message): remove old check for reply_serial in method calls, now the message type deals with that (bus_driver_handle_message): handle NULL interface * glib/dbus-gproxy.c (dbus_g_proxy_get_bus_name): new function * glib/dbus-gloader-expat.c (description_load_from_string): allow -1 for len * tools/dbus-viewer.c: add support for introspecting a service on a bus * glib/dbus-gproxy.c (dbus_g_pending_call_ref): add (dbus_g_pending_call_unref): add --- glib/dbus-gproxy.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 55 insertions(+), 7 deletions(-) (limited to 'glib/dbus-gproxy.c') diff --git a/glib/dbus-gproxy.c b/glib/dbus-gproxy.c index 624a95ca..39f8ba86 100644 --- a/glib/dbus-gproxy.c +++ b/glib/dbus-gproxy.c @@ -1032,11 +1032,30 @@ dbus_g_proxy_new_for_peer (DBusGConnection *connection, g_return_val_if_fail (interface_name != NULL, NULL); proxy = dbus_g_proxy_new (connection, NULL, - path_name, interface_name); + path_name, interface_name); return proxy; } +/** + * Gets the bus name a proxy is bound to (may be #NULL in some cases). + * If you created the proxy with dbus_g_proxy_new_for_name(), then + * the name you passed to that will be returned. + * If you created it with dbus_g_proxy_new_for_name_owner(), then the + * unique connection name will be returned. If you created it + * with dbus_g_proxy_new_for_peer() then #NULL will be returned. + * + * @param proxy the proxy + * @returns the bus name the proxy sends messages to + */ +const char* +dbus_g_proxy_get_bus_name (DBusGProxy *proxy) +{ + g_return_val_if_fail (DBUS_IS_G_PROXY (proxy), NULL); + + return proxy->name; +} + /** * Invokes a method on a remote interface. This function does not * block; instead it returns an opaque #DBusPendingCall object that @@ -1113,23 +1132,28 @@ dbus_g_proxy_begin_call (DBusGProxy *proxy, * * Otherwise, the "out" parameters and return value of the * method are stored in the provided varargs list. - * The list should be terminated with DBUS_TYPE_INVALID. + * The list should be terminated with #DBUS_TYPE_INVALID. * * This function doesn't affect the reference count of the * #DBusPendingCall, the caller of dbus_g_proxy_begin_call() still owns * a reference. * + * @todo this should be changed to make a g_malloc() copy of the + * data returned probably; right now the data vanishes + * when you free the PendingCall which is sort of strange. + * * @param proxy a proxy for a remote interface * @param pending the pending call from dbus_g_proxy_begin_call() * @param error return location for an error * @param first_arg_type type of first "out" argument - * @returns #FALSE if an error is set */ + * @returns #FALSE if an error is set + */ gboolean dbus_g_proxy_end_call (DBusGProxy *proxy, - DBusGPendingCall *pending, - GError **error, - int first_arg_type, - ...) + DBusGPendingCall *pending, + GError **error, + int first_arg_type, + ...) { DBusMessage *message; va_list args; @@ -1222,6 +1246,30 @@ dbus_g_proxy_call_no_reply (DBusGProxy *proxy, g_error ("Out of memory"); } +/** + * Increments refcount on a pending call. + * + * @param call the call + * @returns the same call + */ +DBusGPendingCall* +dbus_g_pending_call_ref (DBusGPendingCall *call) +{ + dbus_pending_call_ref (DBUS_PENDING_CALL_FROM_G_PENDING_CALL (call)); + return call; +} + +/** + * Decrements refcount on a pending call. + * + * @param call the call + */ +void +dbus_g_pending_call_unref (DBusGPendingCall *call) +{ + dbus_pending_call_unref (DBUS_PENDING_CALL_FROM_G_PENDING_CALL (call)); +} + /** * Sends a message to the interface we're proxying for. Does not * block or wait for a reply. The message is only actually written out -- cgit