예제 #1
0
login_session_data_t *find_loginsd_byip(uint32 ip)
{
	//////// 19/03/2012 Fix for 1 IP -> Many Accounts
	// Simply increases "serviced" by 1 every time a login is returned via an IP address.
	// The result is the illusion of independancy (though really it's not!)
	unsigned int minserv = 1000; 
	int multiple_ip_count = 0;
	for(login_sd_list_t::iterator i = login_sd_list.begin(); 
		i != login_sd_list.end();
		++i )
	{
		if( (*i)->client_addr == ip ){
			multiple_ip_count++;
			if((*i)->serviced < minserv){
				minserv = (*i)->serviced;
			}
		}
	}

	if(multiple_ip_count>1){
		ShowInfo("Detected %i instances from %s. Returning best account match.\n",multiple_ip_count,ip2str(ip,NULL));
	}
	////////////////
	for(login_sd_list_t::iterator i = login_sd_list.begin(); 
		i != login_sd_list.end();
		++i )
	{
		if( (*i)->client_addr == ip && (*i)->serviced == minserv){
			(*i)->serviced++;
			return (*i);
		}
	}
	return NULL;
}
예제 #2
0
login_session_data_t *find_loginsd_byaccid(int32 accid)
{
	for(login_sd_list_t::iterator i = login_sd_list.begin(); 
		i != login_sd_list.end();
		++i )
	{
		if( (*i)->accid == accid)
			return (*i);
	}
	return NULL;
}
예제 #3
0
login_session_data_t *find_loginsd_byip(uint32 ip)
{
	for(login_sd_list_t::iterator i = login_sd_list.begin(); 
		i != login_sd_list.end();
		++i )
	{
		if( (*i)->client_addr == ip)
			return (*i);
	}
	return NULL;
}
예제 #4
0
void erase_loginsd(int32 loginfd)
{
	for(login_sd_list_t::iterator i = login_sd_list.begin(); 
		i != login_sd_list.end();
		++i )
	{
		if( (*i)->login_fd == loginfd)
		{
			login_sd_list.erase(i);
			return ;
		}
	}
	return;
}
예제 #5
0
void erase_loginsd_byaccid(uint32 accid)
{
	for(login_sd_list_t::iterator i = login_sd_list.begin(); 
		i != login_sd_list.end();
		++i )
	{
		if( (*i)->accid == accid)
		{
			login_sd_list.erase(i);
			return ;
		}
	}
	return;
}