mirror of https://github.com/aria2/aria2
Remove PeerStorage::getActivePeers() and add getUsedPeers() instead
PeerStorage::getUsedPeers() returns non-active peers, so caller must call Peer::isActive() to get active peers.pull/43/head
parent
ba69f5c0c3
commit
1e4f301ec1
|
@ -121,11 +121,6 @@ void BtLeecherStateChoke::PeerEntry::disableOptUnchoking()
|
||||||
peer_->optUnchoking(false);
|
peer_->optUnchoking(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BtLeecherStateChoke::PeerEntry::isSnubbing() const
|
|
||||||
{
|
|
||||||
return peer_->snubbing();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BtLeecherStateChoke::PeerEntry::operator<(const PeerEntry& peerEntry) const
|
bool BtLeecherStateChoke::PeerEntry::operator<(const PeerEntry& peerEntry) const
|
||||||
{
|
{
|
||||||
return downloadSpeed_ > peerEntry.downloadSpeed_;
|
return downloadSpeed_ > peerEntry.downloadSpeed_;
|
||||||
|
@ -203,24 +198,19 @@ void BtLeecherStateChoke::regularUnchoke(std::vector<PeerEntry>& peerEntries)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void BtLeecherStateChoke::executeChoke(const PeerSet& peerSet)
|
||||||
BtLeecherStateChoke::executeChoke
|
|
||||||
(const std::vector<SharedHandle<Peer> >& peerSet)
|
|
||||||
{
|
{
|
||||||
A2_LOG_INFO(fmt("Leecher state, %d choke round started", round_));
|
A2_LOG_INFO(fmt("Leecher state, %d choke round started", round_));
|
||||||
lastRound_ = global::wallclock();
|
lastRound_ = global::wallclock();
|
||||||
|
|
||||||
std::vector<PeerEntry> peerEntries;
|
std::vector<PeerEntry> peerEntries;
|
||||||
std::transform(peerSet.begin(), peerSet.end(),
|
for(PeerSet::const_iterator i = peerSet.begin(), eoi = peerSet.end();
|
||||||
std::back_inserter(peerEntries),
|
i != eoi; ++i) {
|
||||||
BtLeecherStateChokeGenPeerEntry());
|
if((*i)->isActive() && !(*i)->snubbing()) {
|
||||||
|
(*i)->chokingRequired(true);
|
||||||
peerEntries.erase(std::remove_if(peerEntries.begin(), peerEntries.end(),
|
peerEntries.push_back(PeerEntry(*i));
|
||||||
std::mem_fun_ref(&PeerEntry::isSnubbing)),
|
}
|
||||||
peerEntries.end());
|
}
|
||||||
|
|
||||||
std::for_each(peerEntries.begin(), peerEntries.end(),
|
|
||||||
std::mem_fun_ref(&PeerEntry::enableChokingRequired));
|
|
||||||
|
|
||||||
// planned optimistic unchoke
|
// planned optimistic unchoke
|
||||||
if(round_ == 0) {
|
if(round_ == 0) {
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
|
|
||||||
#include "SharedHandle.h"
|
#include "SharedHandle.h"
|
||||||
#include "TimerA2.h"
|
#include "TimerA2.h"
|
||||||
|
#include "PeerStorage.h"
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
|
@ -74,8 +75,6 @@ private:
|
||||||
|
|
||||||
bool isRegularUnchoker() const;
|
bool isRegularUnchoker() const;
|
||||||
|
|
||||||
bool isSnubbing() const;
|
|
||||||
|
|
||||||
void enableChokingRequired();
|
void enableChokingRequired();
|
||||||
|
|
||||||
void disableChokingRequired();
|
void disableChokingRequired();
|
||||||
|
@ -100,20 +99,12 @@ private:
|
||||||
|
|
||||||
bool operator()(const PeerEntry& peerEntry) const;
|
bool operator()(const PeerEntry& peerEntry) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class BtLeecherStateChokeGenPeerEntry {
|
|
||||||
public:
|
|
||||||
PeerEntry operator()(const SharedHandle<Peer>& peer) const
|
|
||||||
{
|
|
||||||
return PeerEntry(peer);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
public:
|
public:
|
||||||
BtLeecherStateChoke();
|
BtLeecherStateChoke();
|
||||||
|
|
||||||
~BtLeecherStateChoke();
|
~BtLeecherStateChoke();
|
||||||
|
|
||||||
void executeChoke(const std::vector<SharedHandle<Peer> >& peerSet);
|
void executeChoke(const PeerSet& peerSet);
|
||||||
|
|
||||||
const Timer& getLastRound() const;
|
const Timer& getLastRound() const;
|
||||||
|
|
||||||
|
|
|
@ -117,12 +117,6 @@ void BtSeederStateChoke::PeerEntry::disableOptUnchoking()
|
||||||
peer_->optUnchoking(false);
|
peer_->optUnchoking(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BtSeederStateChoke::NotInterestedPeer::operator()
|
|
||||||
(const PeerEntry& peerEntry) const
|
|
||||||
{
|
|
||||||
return !peerEntry.getPeer()->peerInterested();
|
|
||||||
}
|
|
||||||
|
|
||||||
void BtSeederStateChoke::unchoke
|
void BtSeederStateChoke::unchoke
|
||||||
(std::vector<BtSeederStateChoke::PeerEntry>& peers)
|
(std::vector<BtSeederStateChoke::PeerEntry>& peers)
|
||||||
{
|
{
|
||||||
|
@ -151,33 +145,19 @@ void BtSeederStateChoke::unchoke
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
void BtSeederStateChoke::executeChoke(const PeerSet& peerSet)
|
||||||
class ChokingRequired {
|
|
||||||
public:
|
|
||||||
void operator()(const SharedHandle<Peer>& peer) const
|
|
||||||
{
|
|
||||||
peer->chokingRequired(true);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
void
|
|
||||||
BtSeederStateChoke::executeChoke
|
|
||||||
(const std::vector<SharedHandle<Peer> >& peerSet)
|
|
||||||
{
|
{
|
||||||
A2_LOG_INFO(fmt("Seeder state, %d choke round started", round_));
|
A2_LOG_INFO(fmt("Seeder state, %d choke round started", round_));
|
||||||
lastRound_ = global::wallclock();
|
lastRound_ = global::wallclock();
|
||||||
|
|
||||||
std::vector<PeerEntry> peerEntries;
|
std::vector<PeerEntry> peerEntries;
|
||||||
|
for(PeerSet::const_iterator i = peerSet.begin(), eoi = peerSet.end();
|
||||||
std::for_each(peerSet.begin(), peerSet.end(), ChokingRequired());
|
i != eoi; ++i) {
|
||||||
|
if((*i)->isActive() && (*i)->peerInterested()) {
|
||||||
std::transform(peerSet.begin(), peerSet.end(),
|
(*i)->chokingRequired(true);
|
||||||
std::back_inserter(peerEntries), GenPeerEntry());
|
peerEntries.push_back(PeerEntry(*i));
|
||||||
|
}
|
||||||
peerEntries.erase(std::remove_if(peerEntries.begin(), peerEntries.end(),
|
}
|
||||||
NotInterestedPeer()),
|
|
||||||
peerEntries.end());
|
|
||||||
|
|
||||||
unchoke(peerEntries);
|
unchoke(peerEntries);
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
|
|
||||||
#include "SharedHandle.h"
|
#include "SharedHandle.h"
|
||||||
#include "TimerA2.h"
|
#include "TimerA2.h"
|
||||||
|
#include "PeerStorage.h"
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
|
@ -80,25 +81,12 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
void unchoke(std::vector<PeerEntry>& peers);
|
void unchoke(std::vector<PeerEntry>& peers);
|
||||||
|
|
||||||
class GenPeerEntry {
|
|
||||||
public:
|
|
||||||
PeerEntry operator()(const SharedHandle<Peer>& peer) const
|
|
||||||
{
|
|
||||||
return PeerEntry(peer);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class NotInterestedPeer {
|
|
||||||
public:
|
|
||||||
bool operator()(const PeerEntry& peerEntry) const;
|
|
||||||
};
|
|
||||||
public:
|
public:
|
||||||
BtSeederStateChoke();
|
BtSeederStateChoke();
|
||||||
|
|
||||||
~BtSeederStateChoke();
|
~BtSeederStateChoke();
|
||||||
|
|
||||||
void executeChoke(const std::vector<SharedHandle<Peer> >& peerSet);
|
void executeChoke(const PeerSet& peerSet);
|
||||||
|
|
||||||
const Timer& getLastRound() const { return lastRound_; }
|
const Timer& getLastRound() const { return lastRound_; }
|
||||||
|
|
||||||
|
|
|
@ -173,8 +173,7 @@ void printProgress
|
||||||
#ifdef ENABLE_BITTORRENT
|
#ifdef ENABLE_BITTORRENT
|
||||||
const SharedHandle<BtObject>& btObj = e->getBtRegistry()->get(rg->getGID());
|
const SharedHandle<BtObject>& btObj = e->getBtRegistry()->get(rg->getGID());
|
||||||
if(btObj) {
|
if(btObj) {
|
||||||
std::vector<SharedHandle<Peer> > peers;
|
const PeerSet& peers = btObj->peerStorage->getUsedPeers();
|
||||||
btObj->peerStorage->getActivePeers(peers);
|
|
||||||
o << " SD:"
|
o << " SD:"
|
||||||
<< countSeeder(peers.begin(), peers.end());
|
<< countSeeder(peers.begin(), peers.end());
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,11 +123,11 @@ SharedHandle<BtMessage> DefaultBtInteractive::receiveHandshake(bool quickReply)
|
||||||
(fmt("CUID#%" PRId64 " - Drop connection from the same Peer ID",
|
(fmt("CUID#%" PRId64 " - Drop connection from the same Peer ID",
|
||||||
cuid_));
|
cuid_));
|
||||||
}
|
}
|
||||||
std::vector<SharedHandle<Peer> > activePeers;
|
const PeerSet& usedPeers = peerStorage_->getUsedPeers();
|
||||||
peerStorage_->getActivePeers(activePeers);
|
for(PeerSet::const_iterator i = usedPeers.begin(), eoi = usedPeers.end();
|
||||||
for(std::vector<SharedHandle<Peer> >::const_iterator i = activePeers.begin(),
|
i != eoi; ++i) {
|
||||||
eoi = activePeers.end(); i != eoi; ++i) {
|
if((*i)->isActive() &&
|
||||||
if(memcmp((*i)->getPeerId(), message->getPeerId(), PEER_ID_LENGTH) == 0) {
|
memcmp((*i)->getPeerId(), message->getPeerId(), PEER_ID_LENGTH) == 0) {
|
||||||
throw DL_ABORT_EX
|
throw DL_ABORT_EX
|
||||||
(fmt("CUID#%" PRId64 " - Same Peer ID has been already seen.",
|
(fmt("CUID#%" PRId64 " - Same Peer ID has been already seen.",
|
||||||
cuid_));
|
cuid_));
|
||||||
|
@ -485,12 +485,10 @@ void DefaultBtInteractive::addPeerExchangeMessage()
|
||||||
(new UTPexExtensionMessage(peer_->getExtensionMessageID
|
(new UTPexExtensionMessage(peer_->getExtensionMessageID
|
||||||
(ExtensionMessageRegistry::UT_PEX)));
|
(ExtensionMessageRegistry::UT_PEX)));
|
||||||
|
|
||||||
std::vector<SharedHandle<Peer> > activePeers;
|
const PeerSet& usedPeers = peerStorage_->getUsedPeers();
|
||||||
peerStorage_->getActivePeers(activePeers);
|
for(PeerSet::const_iterator i = usedPeers.begin(), eoi = usedPeers.end();
|
||||||
for(std::vector<SharedHandle<Peer> >::const_iterator i =
|
|
||||||
activePeers.begin(), eoi = activePeers.end();
|
|
||||||
i != eoi && !m->freshPeersAreFull(); ++i) {
|
i != eoi && !m->freshPeersAreFull(); ++i) {
|
||||||
if(peer_->getIPAddress() != (*i)->getIPAddress()) {
|
if((*i)->isActive() && peer_->getIPAddress() != (*i)->getIPAddress()) {
|
||||||
m->addFreshPeer(*i);
|
m->addFreshPeer(*i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -172,30 +172,6 @@ bool DefaultPeerStorage::isPeerAvailable() {
|
||||||
return !unusedPeers_.empty();
|
return !unusedPeers_.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
|
||||||
class CollectActivePeer {
|
|
||||||
private:
|
|
||||||
std::vector<SharedHandle<Peer> >& activePeers_;
|
|
||||||
public:
|
|
||||||
CollectActivePeer(std::vector<SharedHandle<Peer> >& activePeers):
|
|
||||||
activePeers_(activePeers) {}
|
|
||||||
|
|
||||||
void operator()(const SharedHandle<Peer>& peer)
|
|
||||||
{
|
|
||||||
if(peer->isActive()) {
|
|
||||||
activePeers_.push_back(peer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
void DefaultPeerStorage::getActivePeers
|
|
||||||
(std::vector<SharedHandle<Peer> >& activePeers)
|
|
||||||
{
|
|
||||||
std::for_each(usedPeers_.begin(), usedPeers_.end(),
|
|
||||||
CollectActivePeer(activePeers));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DefaultPeerStorage::isBadPeer(const std::string& ipaddr)
|
bool DefaultPeerStorage::isBadPeer(const std::string& ipaddr)
|
||||||
{
|
{
|
||||||
std::map<std::string, time_t>::iterator i = badPeers_.find(ipaddr);
|
std::map<std::string, time_t>::iterator i = badPeers_.find(ipaddr);
|
||||||
|
@ -302,12 +278,10 @@ bool DefaultPeerStorage::chokeRoundIntervalElapsed()
|
||||||
|
|
||||||
void DefaultPeerStorage::executeChoke()
|
void DefaultPeerStorage::executeChoke()
|
||||||
{
|
{
|
||||||
std::vector<SharedHandle<Peer> > activePeers;
|
|
||||||
getActivePeers(activePeers);
|
|
||||||
if(pieceStorage_->downloadFinished()) {
|
if(pieceStorage_->downloadFinished()) {
|
||||||
return seederStateChoke_->executeChoke(activePeers);
|
return seederStateChoke_->executeChoke(usedPeers_);
|
||||||
} else {
|
} else {
|
||||||
return leecherStateChoke_->executeChoke(activePeers);
|
return leecherStateChoke_->executeChoke(usedPeers_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,10 +39,8 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <set>
|
|
||||||
|
|
||||||
#include "TimerA2.h"
|
#include "TimerA2.h"
|
||||||
#include "a2functional.h"
|
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
|
@ -51,8 +49,6 @@ class BtSeederStateChoke;
|
||||||
class BtLeecherStateChoke;
|
class BtLeecherStateChoke;
|
||||||
class PieceStorage;
|
class PieceStorage;
|
||||||
|
|
||||||
typedef std::set<SharedHandle<Peer>, RefLess<Peer> > PeerSet;
|
|
||||||
|
|
||||||
class DefaultPeerStorage : public PeerStorage {
|
class DefaultPeerStorage : public PeerStorage {
|
||||||
private:
|
private:
|
||||||
SharedHandle<BtRuntime> btRuntime_;
|
SharedHandle<BtRuntime> btRuntime_;
|
||||||
|
@ -98,14 +94,12 @@ public:
|
||||||
|
|
||||||
const std::deque<SharedHandle<Peer> >& getUnusedPeers();
|
const std::deque<SharedHandle<Peer> >& getUnusedPeers();
|
||||||
|
|
||||||
const PeerSet& getUsedPeers();
|
virtual const PeerSet& getUsedPeers();
|
||||||
|
|
||||||
virtual const std::deque<SharedHandle<Peer> >& getDroppedPeers();
|
virtual const std::deque<SharedHandle<Peer> >& getDroppedPeers();
|
||||||
|
|
||||||
virtual bool isPeerAvailable();
|
virtual bool isPeerAvailable();
|
||||||
|
|
||||||
virtual void getActivePeers(std::vector<SharedHandle<Peer> >& peers);
|
|
||||||
|
|
||||||
virtual bool isBadPeer(const std::string& ipaddr);
|
virtual bool isBadPeer(const std::string& ipaddr);
|
||||||
|
|
||||||
virtual void addBadPeer(const std::string& ipaddr);
|
virtual void addBadPeer(const std::string& ipaddr);
|
||||||
|
|
|
@ -317,7 +317,13 @@ public:
|
||||||
template<typename InputIterator>
|
template<typename InputIterator>
|
||||||
size_t countSeeder(InputIterator first, InputIterator last)
|
size_t countSeeder(InputIterator first, InputIterator last)
|
||||||
{
|
{
|
||||||
return std::count_if(first, last, mem_fun_sh(&Peer::isSeeder));
|
size_t res = 0;
|
||||||
|
for(; first != last; ++first) {
|
||||||
|
if((*first)->isActive() && (*first)->isSeeder()) {
|
||||||
|
++res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace aria2
|
} // namespace aria2
|
||||||
|
|
|
@ -39,15 +39,19 @@
|
||||||
|
|
||||||
#include <deque>
|
#include <deque>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <set>
|
||||||
|
|
||||||
#include "SharedHandle.h"
|
#include "SharedHandle.h"
|
||||||
#include "TransferStat.h"
|
#include "TransferStat.h"
|
||||||
#include "Command.h"
|
#include "Command.h"
|
||||||
|
#include "a2functional.h"
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
class Peer;
|
class Peer;
|
||||||
|
|
||||||
|
typedef std::set<SharedHandle<Peer>, RefLess<Peer> > PeerSet;
|
||||||
|
|
||||||
class PeerStorage {
|
class PeerStorage {
|
||||||
public:
|
public:
|
||||||
virtual ~PeerStorage() {}
|
virtual ~PeerStorage() {}
|
||||||
|
@ -80,9 +84,9 @@ public:
|
||||||
virtual bool isPeerAvailable() = 0;
|
virtual bool isPeerAvailable() = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the list of peers which are currently connected from localhost.
|
* Returns used peer set.
|
||||||
*/
|
*/
|
||||||
virtual void getActivePeers(std::vector<SharedHandle<Peer> >& peers) = 0;
|
virtual const PeerSet& getUsedPeers() = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if peer with ipaddr should be ignored because, for
|
* Returns true if peer with ipaddr should be ignored because, for
|
||||||
|
|
|
@ -775,8 +775,7 @@ void gatherProgressBitTorrent
|
||||||
} else {
|
} else {
|
||||||
const SharedHandle<PeerStorage>& peerStorage = btObject->peerStorage;
|
const SharedHandle<PeerStorage>& peerStorage = btObject->peerStorage;
|
||||||
assert(peerStorage);
|
assert(peerStorage);
|
||||||
std::vector<SharedHandle<Peer> > peers;
|
const PeerSet& peers = peerStorage->getUsedPeers();
|
||||||
peerStorage->getActivePeers(peers);
|
|
||||||
entryDict->put(KEY_NUM_SEEDERS,
|
entryDict->put(KEY_NUM_SEEDERS,
|
||||||
util::uitos(countSeeder(peers.begin(), peers.end())));
|
util::uitos(countSeeder(peers.begin(), peers.end())));
|
||||||
}
|
}
|
||||||
|
@ -788,10 +787,12 @@ namespace {
|
||||||
void gatherPeer
|
void gatherPeer
|
||||||
(const SharedHandle<List>& peers, const SharedHandle<PeerStorage>& ps)
|
(const SharedHandle<List>& peers, const SharedHandle<PeerStorage>& ps)
|
||||||
{
|
{
|
||||||
std::vector<SharedHandle<Peer> > activePeers;
|
const PeerSet& usedPeers = ps->getUsedPeers();
|
||||||
ps->getActivePeers(activePeers);
|
for(PeerSet::const_iterator i = usedPeers.begin(), eoi = usedPeers.end();
|
||||||
for(std::vector<SharedHandle<Peer> >::const_iterator i =
|
i != eoi; ++i) {
|
||||||
activePeers.begin(), eoi = activePeers.end(); i != eoi; ++i) {
|
if(!(*i)->isActive()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
SharedHandle<Dict> peerEntry = Dict::g();
|
SharedHandle<Dict> peerEntry = Dict::g();
|
||||||
peerEntry->put(KEY_PEER_ID, util::torrentPercentEncode((*i)->getPeerId(),
|
peerEntry->put(KEY_PEER_ID, util::torrentPercentEncode((*i)->getPeerId(),
|
||||||
PEER_ID_LENGTH));
|
PEER_ID_LENGTH));
|
||||||
|
|
|
@ -20,7 +20,6 @@ class DefaultPeerStorageTest:public CppUnit::TestFixture {
|
||||||
CPPUNIT_TEST(testDeleteUnusedPeer);
|
CPPUNIT_TEST(testDeleteUnusedPeer);
|
||||||
CPPUNIT_TEST(testAddPeer);
|
CPPUNIT_TEST(testAddPeer);
|
||||||
CPPUNIT_TEST(testIsPeerAvailable);
|
CPPUNIT_TEST(testIsPeerAvailable);
|
||||||
CPPUNIT_TEST(testGetActivePeers);
|
|
||||||
CPPUNIT_TEST(testCheckoutPeer);
|
CPPUNIT_TEST(testCheckoutPeer);
|
||||||
CPPUNIT_TEST(testReturnPeer);
|
CPPUNIT_TEST(testReturnPeer);
|
||||||
CPPUNIT_TEST(testOnErasingPeer);
|
CPPUNIT_TEST(testOnErasingPeer);
|
||||||
|
@ -43,7 +42,6 @@ public:
|
||||||
void testDeleteUnusedPeer();
|
void testDeleteUnusedPeer();
|
||||||
void testAddPeer();
|
void testAddPeer();
|
||||||
void testIsPeerAvailable();
|
void testIsPeerAvailable();
|
||||||
void testGetActivePeers();
|
|
||||||
void testCheckoutPeer();
|
void testCheckoutPeer();
|
||||||
void testReturnPeer();
|
void testReturnPeer();
|
||||||
void testOnErasingPeer();
|
void testOnErasingPeer();
|
||||||
|
@ -135,33 +133,6 @@ void DefaultPeerStorageTest::testIsPeerAvailable() {
|
||||||
CPPUNIT_ASSERT(!ps.isPeerAvailable());
|
CPPUNIT_ASSERT(!ps.isPeerAvailable());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultPeerStorageTest::testGetActivePeers()
|
|
||||||
{
|
|
||||||
DefaultPeerStorage ps;
|
|
||||||
{
|
|
||||||
std::vector<SharedHandle<Peer> > peers;
|
|
||||||
ps.getActivePeers(peers);
|
|
||||||
CPPUNIT_ASSERT_EQUAL((size_t)0, peers.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
SharedHandle<Peer> peer1(new Peer("192.168.0.1", 6889));
|
|
||||||
ps.addPeer(peer1);
|
|
||||||
{
|
|
||||||
std::vector<SharedHandle<Peer> > activePeers;
|
|
||||||
ps.getActivePeers(activePeers);
|
|
||||||
CPPUNIT_ASSERT_EQUAL((size_t)0, activePeers.size());
|
|
||||||
}
|
|
||||||
CPPUNIT_ASSERT(ps.checkoutPeer(1));
|
|
||||||
{
|
|
||||||
peer1->allocateSessionResource(1024*1024, 1024*1024*10);
|
|
||||||
|
|
||||||
std::vector<SharedHandle<Peer> > activePeers;
|
|
||||||
ps.getActivePeers(activePeers);
|
|
||||||
|
|
||||||
CPPUNIT_ASSERT_EQUAL((size_t)1, activePeers.size());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void DefaultPeerStorageTest::testCheckoutPeer()
|
void DefaultPeerStorageTest::testCheckoutPeer()
|
||||||
{
|
{
|
||||||
DefaultPeerStorage ps;
|
DefaultPeerStorage ps;
|
||||||
|
|
|
@ -12,7 +12,7 @@ namespace aria2 {
|
||||||
class MockPeerStorage : public PeerStorage {
|
class MockPeerStorage : public PeerStorage {
|
||||||
private:
|
private:
|
||||||
std::deque<SharedHandle<Peer> > unusedPeers;
|
std::deque<SharedHandle<Peer> > unusedPeers;
|
||||||
std::deque<SharedHandle<Peer> > usedPeers;
|
PeerSet usedPeers;
|
||||||
std::deque<SharedHandle<Peer> > droppedPeers;
|
std::deque<SharedHandle<Peer> > droppedPeers;
|
||||||
std::vector<SharedHandle<Peer> > activePeers;
|
std::vector<SharedHandle<Peer> > activePeers;
|
||||||
int numChokeExecuted_;
|
int numChokeExecuted_;
|
||||||
|
@ -57,10 +57,15 @@ public:
|
||||||
this->activePeers = activePeers;
|
this->activePeers = activePeers;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void getActivePeers(std::vector<SharedHandle<Peer> >& peers) {
|
void getActivePeers(std::vector<SharedHandle<Peer> >& peers) {
|
||||||
peers.insert(peers.end(), activePeers.begin(), activePeers.end());
|
peers.insert(peers.end(), activePeers.begin(), activePeers.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual const PeerSet& getUsedPeers()
|
||||||
|
{
|
||||||
|
return usedPeers;
|
||||||
|
}
|
||||||
|
|
||||||
virtual bool isBadPeer(const std::string& ipaddr)
|
virtual bool isBadPeer(const std::string& ipaddr)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue