DBusMessage*
gkd_secret_dispatch_message (GkdSecretDispatch *self, DBusMessage *message)
{
	g_return_val_if_fail (GKD_SECRET_IS_DISPATCH (self), NULL);
	g_return_val_if_fail (GKD_SECRET_DISPATCH_GET_INTERFACE (self)->dispatch_message, NULL);
	return GKD_SECRET_DISPATCH_GET_INTERFACE (self)->dispatch_message (self, message);
}
void
gkd_secret_service_publish_dispatch (GkdSecretService *self, const gchar *caller,
				     GkdSecretDispatch *object)
{
	ServiceClient *client;
	const gchar *path;

	g_return_if_fail (GKD_SECRET_IS_SERVICE (self));
	g_return_if_fail (caller);
	g_return_if_fail (GKD_SECRET_IS_DISPATCH (object));

	/* Take ownership of the session */
	client = g_hash_table_lookup (self->clients, caller);
	g_return_if_fail (client);
	path = gkd_secret_dispatch_get_object_path (object);
	g_return_if_fail (!g_hash_table_lookup (client->dispatch, path));
	g_hash_table_replace (client->dispatch, (gpointer)path, g_object_ref (object));
}