void filetransfer_free() {
	ft->shadowlib->log(SHADOW_LOG_LEVEL_DEBUG, __FUNCTION__, "filetransfer_free called");

	if(ft->client) {
		/* stop the client */
		service_filegetter_stop(ft->client);

		/* cleanup */
		g_free(ft->client);
		ft->client = NULL;
	}

	if(ft->server) {
		/* log statistics */
		ft->shadowlib->log(SHADOW_LOG_LEVEL_MESSAGE, __FUNCTION__,
				"fileserver stats: %lu bytes in, %lu bytes out, %lu replies",
				ft->server->bytes_received, ft->server->bytes_sent,
				ft->server->replies_sent);

		/* shutdown fileserver */
		ft->shadowlib->log(SHADOW_LOG_LEVEL_INFO, __FUNCTION__, "shutting down fileserver");
		fileserver_shutdown(ft->server);

		/* cleanup */
		g_free(ft->server);
		ft->server = NULL;
	}
}
static enum filegetter_code service_filegetter_expire(service_filegetter_tp sfg) {
	/* all done */
	filegetter_filestats_t total;
	filegetter_stat_aggregate(&sfg->fg, &total);

	/* report aggregate stats */
	service_filegetter_report(sfg, SFG_NOTICE, "[fg-finished]", &total, sfg->downloads_completed, sfg->downloads_requested);

	service_filegetter_stop(sfg);

	return FG_OK_200;
}