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
pull/1/head
Tatsuhiro Tsujikawa 2007-12-22 06:08:58 +00:00
parent ccd4a35096
commit 51cb6b5ba9
3 changed files with 35 additions and 8 deletions

View File

@ -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.

View File

@ -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)

View File

@ -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);