// This file is a part of the xMule Project.
//
// Copyright (c) 2004 Theodore R. Smith (hopeseekr@xmule.ws / http://www.xmule.ws/)
// DSA-1024 Fingerprint: 10A0 6372 9092 85A2 BB7F 907B CB8B 654B E33B F1ED
//
//Copyright (C)2002 Merkur ( merkur-@users.sourceforge.net / http://www.xmule-project.net )
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
// 
// 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.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
// ListenSocket.cpp : implementation file

#ifdef PRECOMP
#	include "xmule-headers.h"
#else
#	include "xmule.h"
#	include "ClientList.h"
#endif

bool CClientList::VerifyUpload(uint32_t clientip, uint16_t port)
{
    CUpDownClient *tocheck = FindClientByIP(clientip, port);
    if (tocheck && ((tocheck->GetDownloadState() == DS_DOWNLOADING &&tocheck->GetDatarate() > 1000) || (tocheck->GetTransferedDown() > 400000)))
    return true;
    return false;
}

CUpDownClient *CClientList::VUGetRandomClient()
{
    CTypedPtrList < CPtrList, CUpDownClient *> templist;
    for (POSITION pos = list.GetHeadPosition() ; pos != 0 ; list.GetNext(pos))
    {
        CUpDownClient *cur_client = list.GetAt(pos);
        if (cur_client->socket &&cur_client->socket->IsConnected() &&cur_client->GetMuleVersion() >= 0x20 && (cur_client->GetTransferedUp() > 400000))
        {
            templist.AddTail(cur_client);
        }
    }
    if (templist.IsEmpty())
    return 0;
    uint16_t randomness = (uint16_t) ROUND(((float) rand() /RAND_MAX) * (templist.GetCount() - 1));
    return templist.GetAt(templist.FindIndex(randomness));
}

