static void async_get_connection_response (GVfsDBusDaemon *proxy, GAsyncResult *res, gpointer user_data) { AsyncDBusCall *async_call = user_data; GError *error = NULL; gchar *address1 = NULL; if (! gvfs_dbus_daemon_call_get_connection_finish (proxy, &address1, NULL, res, &error)) { async_call->io_error = g_error_copy (error); g_error_free (error); g_free (address1); async_call_finish (async_call); return; } g_dbus_connection_new_for_address (address1, G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, NULL, /* GDBusAuthObserver */ async_call->cancellable, async_got_private_connection_cb, async_call); g_free (address1); }
/** * Webextension entry point. */ G_MODULE_EXPORT void webkit_web_extension_initialize_with_user_data(WebKitWebExtension *extension, GVariant *data) { char *server_address; GDBusAuthObserver *observer; g_variant_get(data, "(m&s)", &server_address); if (!server_address) { g_warning("UI process did not start D-Bus server"); return; } g_signal_connect(extension, "page-created", G_CALLBACK(on_page_created), NULL); observer = g_dbus_auth_observer_new(); g_signal_connect(observer, "authorize-authenticated-peer", G_CALLBACK(on_authorize_authenticated_peer), extension); g_dbus_connection_new_for_address(server_address, G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, observer, NULL, (GAsyncReadyCallback)on_dbus_connection_created, extension); g_object_unref(observer); }
static void dbus_daemon_notify_bus_address_cb (GObject *gobject, GParamSpec *pspec, MainData *data) { GPtrArray/*<string>*/ *test_program_envp; gchar *envp_pair; g_assert (data->dbus_address == NULL); data->dbus_address = g_strdup (dsim_dbus_daemon_get_bus_address (data->dbus_daemon)); g_message (_("Note: Simulated bus has address: %s"), data->dbus_address); /* Set up the test program ready for spawning. */ test_program_envp = g_ptr_array_new_with_free_func (g_free); if (pass_through_environment == FALSE) { guint i; /* Set up a minimal environment with just the necessary environment variables required for things to function. * Note that this list of necessary environment variables is probably incomplete, and is built on the basis of * trial and error rather than research or standards. */ const gchar *forward_variables[] = { "DISPLAY", "XDG_DATA_HOME", "XDG_CONFIG_HOME", "XDG_DATA_DIRS", "XDG_CONFIG_DIRS", "XDG_CACHE_HOME", "XDG_RUNTIME_DIR", "HOME", "USER", "HOSTNAME", "SSH_CLIENT", "SSH_TTY", "SSH_CONNECTION", }; for (i = 0; i < G_N_ELEMENTS (forward_variables); i++) { forward_envp_pair (test_program_envp, forward_variables[i]); } } else { /* Forward everything from the simulator's environment to the test program's environment. This might make the test * results slightly less reliable. */ gchar **env_variable_names; const gchar * const *i; env_variable_names = g_listenv (); for (i = (const gchar * const *) env_variable_names; *i != NULL; i++) { forward_envp_pair (test_program_envp, *i); } g_strfreev (env_variable_names); } if (system_bus) { envp_pair = g_strdup_printf ("DBUS_SYSTEM_BUS_ADDRESS=%s", data->dbus_address); } else { envp_pair = g_strdup_printf ("DBUS_SESSION_BUS_ADDRESS=%s", data->dbus_address); } g_ptr_array_add (test_program_envp, envp_pair); /* Copy the environment pairs set on the command line. */ if (test_program_environment != NULL) { guint i; for (i = 0; i < test_program_environment->len; i++) { envp_pair = g_ptr_array_index (test_program_environment, i); g_ptr_array_add (test_program_envp, g_strdup (envp_pair)); } } data->test_program = dsim_test_program_new (data->working_directory_file, data->test_program_name, data->test_program_argv, test_program_envp); g_ptr_array_unref (test_program_envp); /* Start building a D-Bus connection with our new bus address. */ g_dbus_connection_new_for_address (data->dbus_address, G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT | G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION, NULL, NULL, (GAsyncReadyCallback) connection_created_cb, data); /* We don't want this to fire again. */ g_signal_handlers_disconnect_by_func (gobject, dbus_daemon_notify_bus_address_cb, data); }
void evd_dbus_agent_new_connection (GObject *object, const gchar *address, gboolean reuse, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { GSimpleAsyncResult *res; ObjectData *data; gchar *addr; ObjConnData *obj_conn_data; ConnData *conn_data; g_return_if_fail (G_IS_OBJECT (object)); g_return_if_fail (address != NULL); data = evd_dbus_agent_get_object_data (object); if (data == NULL) data = evd_dbus_agent_setup_object_data (object); obj_conn_data = g_slice_new (ObjConnData); obj_conn_data->obj_data = data; res = g_simple_async_result_new (object, callback, user_data, evd_dbus_agent_new_connection); /* if 'address' is an alias, dereference it */ if ( (addr = g_hash_table_lookup (data->addr_aliases, address)) == NULL) addr = g_strdup (address); else addr = g_strdup (addr); if (reuse) { /* lookup the connection in global cache */ conn_data = evd_dbus_agent_search_conn_in_global_cache (addr, reuse); if (conn_data != NULL) { guint *conn_id; obj_conn_data->conn_data = conn_data; conn_id = evd_dbus_agent_bind_connection_to_object (data, obj_conn_data); g_simple_async_result_set_op_res_gpointer (res, conn_id, NULL); g_simple_async_result_complete_in_idle (res); g_object_unref (res); return; } } conn_data = evd_dbus_agent_conn_data_new (addr, reuse); obj_conn_data->conn_data = conn_data; g_simple_async_result_set_op_res_gpointer (res, obj_conn_data, NULL); g_dbus_connection_new_for_address (addr, G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION | G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, NULL, cancellable, evd_dbus_agent_on_new_dbus_connection, res); g_free (addr); }