static DBusMessage * service_introspect (GkdSecretService *self, DBusMessage *message) { GPtrArray *names; DBusMessage *reply; ServiceClient *client; const gchar *caller; const gchar *path; GHashTableIter iter; names = g_ptr_array_new_with_free_func (g_free); gkd_secret_objects_foreach_collection (self->objects, message, on_each_path_append_to_array, names); /* Lookup all sessions and prompts for this client */ caller = dbus_message_get_sender (message); if (caller != NULL) { client = g_hash_table_lookup (self->clients, caller); if (client != NULL) { g_hash_table_iter_init (&iter, client->dispatch); while (g_hash_table_iter_next (&iter, (gpointer *)&path, NULL)) g_ptr_array_add (names, g_strdup (path)); } } g_ptr_array_add (names, NULL); reply = gkd_dbus_introspect_handle (message, gkd_secret_introspect_service, (const gchar **)names->pdata); g_ptr_array_unref (names); return reply; }
GVariant * gkd_secret_objects_append_collection_paths (GkdSecretObjects *self, const gchar *caller) { GVariantBuilder builder; g_return_val_if_fail (GKD_SECRET_IS_OBJECTS (self), NULL); g_variant_builder_init (&builder, G_VARIANT_TYPE ("ao")); gkd_secret_objects_foreach_collection (self, caller, on_object_path_append_to_builder, &builder); return g_variant_builder_end (&builder); }