/*	WebDownloader for X-Window
 *	Copyright (C) 1999-2006 Koshelev Maxim
 *	This Program is free but not GPL!!! You can't modify it
 *	without agreement with author. You can't distribute modified
 *	program but you can distribute unmodified program.
 *
 *	This program is distributed in the hope that it will be useful,
 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 */

#include "sm.h"
#include <algorithm>
#include <functional>

using namespace d4x;


/*
OldSocket::~OldSocket(){
	if (info.proto==D_PROTO_FTP && sock)
		sock->direct_send("QUIT\r\n");
	if (sock) delete(sock);
};
*/

/*********************************************************/


void SocketsHistory::insert(const URL &url,const SocketPtr &what){
	MutexLocker gain(my_lock);
	Smap[url]=OldSocket(what);
};

SocketPtr SocketsHistory::find_and_remove(const URL &url){
	MutexLocker gain(my_lock);
	std::map<URL,OldSocket>::iterator it=Smap.find(url);
	SocketPtr rval;
	if (it!=Smap.end()){
		rval=it->second.sock;
		Smap.erase(it);
	};
	return rval;
};

static bool time_too_old_(time_t now,const OldSocket &s){
	time_t d=s.birth-now;
	return d<-50 || d>50;
};

void SocketsHistory::kill_old(){
	time_t now=time(NULL);
	MutexLocker gain(my_lock);

	std::map<URL,OldSocket>::iterator it=Smap.begin(),end=Smap.end(),tmp;
	while(it!=end){
		tmp=it;
		++it;
		if (time_too_old_(now,tmp->second))
			Smap.erase(tmp);
	};
};


syntax highlighted by Code2HTML, v. 0.9.1