mirror of https://github.com/aria2/aria2
2007-12-22 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Allow a peer in incomingPeer to be added peers. * src/DefaultPeerStorage.cc * test/DefaultPeerStorageTest.ccpull/1/head
parent
ccd4a35096
commit
51cb6b5ba9
|
@ -1,3 +1,9 @@
|
|||
2007-12-22 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||
|
||||
Allow a peer in incomingPeer to be added peers.
|
||||
* src/DefaultPeerStorage.cc
|
||||
* test/DefaultPeerStorageTest.cc
|
||||
|
||||
2007-12-22 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||
|
||||
Fixed the bug that causes aria2 not to finish download. BUG#1855875.
|
||||
|
|
|
@ -59,16 +59,19 @@ bool DefaultPeerStorage::isPeerAlreadyAdded(const PeerHandle& peer)
|
|||
}
|
||||
|
||||
bool DefaultPeerStorage::addPeer(const PeerHandle& peer) {
|
||||
if(isPeerAlreadyAdded(peer)) {
|
||||
logger->debug("Adding %s:%u is rejected because it is already in PeerStorage.", peer->ipaddr.c_str(), peer->port);
|
||||
return false;
|
||||
} else {
|
||||
if(peers.size() >= (size_t)maxPeerListSize) {
|
||||
deleteUnusedPeer(peers.size()-maxPeerListSize+1);
|
||||
{
|
||||
Peers::iterator i = find(incomingPeers.begin(), incomingPeers.end(), peer);
|
||||
if(i != incomingPeers.end() && (*i).get() != peer.get() ||
|
||||
find(peers.begin(), peers.end(), peer) != peers.end()) {
|
||||
logger->debug("Adding %s:%u is rejected because it is already in PeerStorage.", peer->ipaddr.c_str(), peer->port);
|
||||
return false;
|
||||
}
|
||||
peers.push_front(peer);
|
||||
return true;
|
||||
}
|
||||
if(peers.size() >= (size_t)maxPeerListSize) {
|
||||
deleteUnusedPeer(peers.size()-maxPeerListSize+1);
|
||||
}
|
||||
peers.push_front(peer);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DefaultPeerStorage::addIncomingPeer(const PeerHandle& peer)
|
||||
|
|
|
@ -12,6 +12,7 @@ class DefaultPeerStorageTest:public CppUnit::TestFixture {
|
|||
CPPUNIT_TEST(testCountPeer);
|
||||
CPPUNIT_TEST(testDeleteUnusedPeer);
|
||||
CPPUNIT_TEST(testAddPeer);
|
||||
CPPUNIT_TEST(testAddPeer_incomingPeer);
|
||||
CPPUNIT_TEST(testGetPeer);
|
||||
CPPUNIT_TEST(testIsPeerAvailable);
|
||||
CPPUNIT_TEST(testActivatePeer);
|
||||
|
@ -38,6 +39,7 @@ public:
|
|||
void testCountPeer();
|
||||
void testDeleteUnusedPeer();
|
||||
void testAddPeer();
|
||||
void testAddPeer_incomingPeer();
|
||||
void testGetPeer();
|
||||
void testIsPeerAvailable();
|
||||
void testActivatePeer();
|
||||
|
@ -97,6 +99,22 @@ void DefaultPeerStorageTest::testDeleteUnusedPeer() {
|
|||
|
||||
}
|
||||
|
||||
void DefaultPeerStorageTest::testAddPeer_incomingPeer()
|
||||
{
|
||||
DefaultPeerStorage ps(btContext, option);
|
||||
|
||||
PeerHandle peer1 = new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
|
||||
btContext->getTotalLength());
|
||||
PeerHandle peer2 = new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
|
||||
btContext->getTotalLength());
|
||||
|
||||
CPPUNIT_ASSERT(ps.addIncomingPeer(peer1));
|
||||
CPPUNIT_ASSERT(ps.addPeer(peer1));// because same instance is stored in incomingPeers and peers.
|
||||
CPPUNIT_ASSERT(!ps.addPeer(peer2));
|
||||
|
||||
|
||||
}
|
||||
|
||||
void DefaultPeerStorageTest::testAddPeer() {
|
||||
DefaultPeerStorage ps(btContext, option);
|
||||
|
||||
|
|
Loading…
Reference in New Issue