static gboolean transferFinished(gpointer data) {
	ReceiveFile *receive = (ReceiveFile *) data;
	AbstractUser *user = receive->user();
	std::string filename(receive->filename());
	Log(user->jid(), "trying to send file "<< filename);
	if (user->account()){
		if (user->isConnected()){
			Log(user->jid(), "sending download message");
			std::vector <std::string> dirs = split(filename, '/');
			std::string url = Transport::instance()->getConfiguration().filetransferWeb;
			std::string basename = dirs.back();
			dirs.pop_back();
			url += dirs.back() + "/";
			url += basename;
			Message s(Message::Chat, receive->target(), "This is an automated message generated on behalf of this user. She/he has sent you the file '" + basename + "'. You may download it from " + url);
			s.setFrom(user->jid());
			// TODO: rewrite me to not use GlooxMessageHandler
#ifndef TESTS
			GlooxMessageHandler::instance()->handleMessage(s, NULL);
#endif
			
		}
	}
	receive->dispose();
	return FALSE;
}
static gpointer receiveFileCallback(gpointer data) {
	ReceiveFile *resender = (ReceiveFile *) data;
	while (true) {
		if (!resender->receive())
			break;
	}
	resender->stopped();
	return NULL;
}
static gboolean transferFinished(gpointer data) {
	ReceiveFile *receive = (ReceiveFile *) data;
	User *user = receive->user();
	std::string filename(receive->filename());
	Log(user->jid(), "trying to send file "<< filename);
	if (user->account()){
		if (user->isConnected()){
			Log(user->jid(), "sending download message");
			std::string basename(g_path_get_basename(filename.c_str()));
			if (user->isVIP()) {
				user->p->sql()->addDownload(basename,"1");
			}
			else {
				user->p->sql()->addDownload(basename,"0");
			}
			Message s(Message::Chat, receive->target(), "Uzivatel Vam poslal soubor '"+basename+"'. Muzete jej stahnout z adresy http://soumar.jabbim.cz/icq/" + basename +" .");
			s.setFrom(user->jid());
			user->receivedMessage(s);
		}
	}
	receive->dispose();
	return FALSE;
}