static gboolean on_new_connection (GDBusServer *server, GDBusConnection *connection, gpointer user_data) { guint registration_id; GCredentials *credentials; gchar *s; credentials = g_dbus_connection_get_peer_credentials (connection); if (credentials == NULL) s = g_strdup ("(no credentials received)"); else s = g_credentials_to_string (credentials); g_print ("Client connected.\n" "Peer credentials: %s\n" "Negotiated capabilities: unix-fd-passing=%d\n", s, g_dbus_connection_get_capabilities (connection) & G_DBUS_CAPABILITY_FLAGS_UNIX_FD_PASSING); g_object_ref (connection); registration_id = g_dbus_connection_register_object (connection, "/org/gtk/GDBus/TestObject", introspection_data->interfaces[0], &interface_vtable, NULL, /* user_data */ NULL, /* user_data_free_func */ NULL); /* GError** */ g_assert (registration_id > 0); return TRUE; }
static gboolean ide_worker_manager_new_connection_cb (IdeWorkerManager *self, GDBusConnection *connection, GDBusServer *server) { GCredentials *credentials; GHashTableIter iter; gpointer key, value; IDE_ENTRY; g_assert (IDE_IS_WORKER_MANAGER (self)); g_assert (G_IS_DBUS_CONNECTION (connection)); g_assert (G_IS_DBUS_SERVER (server)); g_dbus_connection_set_exit_on_close (connection, FALSE); credentials = g_dbus_connection_get_peer_credentials (connection); if ((credentials == NULL) || (-1 == g_credentials_get_unix_pid (credentials, NULL))) IDE_RETURN (FALSE); g_hash_table_iter_init (&iter, self->plugin_name_to_worker); while (g_hash_table_iter_next (&iter, &key, &value)) { IdeWorkerProcess *process = value; if (ide_worker_process_matches_credentials (process, credentials)) { ide_worker_process_set_connection (process, connection); IDE_RETURN (TRUE); } } IDE_RETURN (FALSE); }