Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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);
}