Browse Source

2007-12-26 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

	Allocate bitfield in Peer when it is really used. More 
specifically,
	bitfield in Peer is allocated after the connection is 
established and
	deallocated when the connection is dropped.
	Since 2 parameters(piece length and total length) was removed 
from the
	constructor of Peer class, many test classes were modified 
accordingly.
	See svn log for more detailed information.
	* src/PeerInteractionCommand.cc
	* src/CompactPeerListProcessor.cc
	* src/Peer.cc
	* src/DefaultPeerListProcessor.cc
	* src/PeerListenCommand.cc
	* src/PeerReceiveHandshakeCommand.cc

	Fixed memory leak
	* src/Piece.cc
Tatsuhiro Tsujikawa 18 years ago
parent
commit
e39f7a7e9c

+ 18 - 0
ChangeLog

@@ -1,3 +1,21 @@
+2007-12-26  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
+
+	Allocate bitfield in Peer when it is really used. More specifically,
+	bitfield in Peer is allocated after the connection is established and
+	deallocated when the connection is dropped.
+	Since 2 parameters(piece length and total length) was removed from the
+	constructor of Peer class, many test classes were modified accordingly.
+	See svn log for more detailed information.
+	* src/PeerInteractionCommand.cc
+	* src/CompactPeerListProcessor.cc
+	* src/Peer.cc
+	* src/DefaultPeerListProcessor.cc
+	* src/PeerListenCommand.cc
+	* src/PeerReceiveHandshakeCommand.cc
+
+	Fixed memory leak
+	* src/Piece.cc
+
 2007-12-25  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
 
 	Changed the default value of PREF_PEER_CONNECTION_TIMEOUT and

+ 1 - 1
src/CompactPeerListProcessor.cc

@@ -49,7 +49,7 @@ Peers CompactPeerListProcessor::extractPeer(const MetaEntry* peersEntry) {
       in.s_addr = *(uint32_t*)(peersData->getData()+i);
       string ipaddr = inet_ntoa(in);
       uint16_t port = ntohs(*(uint16_t*)(peersData->getData()+i+4));
-      PeerHandle peer = new Peer(ipaddr, port, pieceLength, totalLength);      
+      PeerHandle peer = new Peer(ipaddr, port);      
       peers.push_back(peer);
     }
   }

+ 1 - 2
src/DefaultPeerListProcessor.cc

@@ -60,8 +60,7 @@ Peers DefaultPeerListProcessor::extractPeer(const MetaEntry* peersEntry) {
     if(!ip || !port || !port->isNumber()) {
       continue;
     }
-    PeerHandle peer = new Peer(ip->toString(), port->toInt(), pieceLength,
-			       totalLength);
+    PeerHandle peer = new Peer(ip->toString(), port->toInt());
     peers.push_back(peer);
   }
   return peers;

+ 32 - 17
src/Peer.cc

@@ -39,18 +39,19 @@
 # include "MessageDigestHelper.h"
 #endif // ENABLE_MESSAGE_DIGEST
 
-Peer::Peer(string ipaddr, uint16_t port, int32_t pieceLength, int64_t totalLength):
+#define BAD_CONDITION_INTERVAL 10
+
+Peer::Peer(string ipaddr, uint16_t port):
   ipaddr(ipaddr),
   port(port),
+  _bitfield(0),
   sessionUploadLength(0),
   sessionDownloadLength(0),
   active(false),
   _badConditionStartTime(0),
-  _badConditionInterval(10)
+  _seeder(false)
 {
   resetStatus();
-  this->bitfield = BitfieldManFactory::getFactoryInstance()->
-    createBitfieldMan(pieceLength, totalLength);
   string idSeed = ipaddr+":"+Util::itos(port);
 #ifdef ENABLE_MESSAGE_DIGEST
   id = MessageDigestHelper::digestString("sha1", idSeed);
@@ -59,19 +60,34 @@ Peer::Peer(string ipaddr, uint16_t port, int32_t pieceLength, int64_t totalLengt
 #endif // ENABLE_MESSAGE_DIGEST
 }
 
-void Peer::reconfigure(int32_t pieceLength, int64_t totalLength)
+void Peer::allocateBitfield(int32_t pieceLength, int64_t totalLength)
 {
-  delete bitfield;
-  this->bitfield = BitfieldManFactory::getFactoryInstance()->
-    createBitfieldMan(pieceLength, totalLength);  
+  delete _bitfield;
+  _bitfield = BitfieldManFactory::getFactoryInstance()->createBitfieldMan(pieceLength, totalLength);  
+}
+
+void Peer::deallocateBitfield()
+{
+  delete _bitfield;
+  _bitfield = 0;
+}
+
+void Peer::updateSeeder()
+{
+  assert(_bitfield);
+  if(_bitfield->isAllBitSet()) {
+    _seeder = true;
+  }  
 }
 
 void Peer::updateBitfield(int32_t index, int32_t operation) {
+  assert(_bitfield);
   if(operation == 1) {
-    bitfield->setBit(index);
+    _bitfield->setBit(index);
   } else if(operation == 0) {
-    bitfield->unsetBit(index);
+    _bitfield->unsetBit(index);
   }
+  updateSeeder();
 }
 
 #define THRESHOLD 1024*1024*2
@@ -84,11 +100,8 @@ bool Peer::shouldBeChoking() const {
 }
 
 bool Peer::hasPiece(int32_t index) const {
-  return bitfield->isBitSet(index);
-}
-
-bool Peer::isSeeder() const {
-  return bitfield->isAllBitSet();
+  assert(_bitfield);
+  return _bitfield->isBitSet(index);
 }
 
 void Peer::resetStatus() {
@@ -133,7 +146,9 @@ void Peer::addAmAllowedIndex(int32_t index) {
 }
 
 void Peer::setAllBitfield() {
-  bitfield->setAllBit();
+  assert(_bitfield);
+  _bitfield->setAllBit();
+  _seeder = true;
 }
 
 void Peer::updateLatency(int32_t latency) {
@@ -147,7 +162,7 @@ void Peer::startBadCondition()
 
 bool Peer::isGood() const
 {
-  return _badConditionStartTime.elapsed(_badConditionInterval);
+  return _badConditionStartTime.elapsed(BAD_CONDITION_INTERVAL);
 }
 
 uint8_t Peer::getExtensionMessageID(const string& name)

+ 27 - 9
src/Peer.h

@@ -63,7 +63,7 @@ public:
   bool snubbing;
 private:
   unsigned char peerId[PEER_ID_LENGTH];
-  BitfieldMan* bitfield;
+  BitfieldMan* _bitfield;
   bool fastExtensionEnabled;
   // fast index set which a peer has sent to localhost.
   Integers peerAllowedIndexSet;
@@ -79,12 +79,14 @@ private:
   string id;
   Time _firstContactTime;
   Time _badConditionStartTime;
-  int32_t _badConditionInterval;
+  bool _seeder;
+
+  void updateSeeder();
 public:
-  Peer(string ipaddr, uint16_t port, int32_t pieceLength, int64_t totalLength);
+  Peer(string ipaddr, uint16_t port);
 
   ~Peer() {
-    delete bitfield;
+    delete _bitfield;
   }
 
   bool operator==(const Peer& p) {
@@ -163,10 +165,21 @@ public:
   const unsigned char* getPeerId() const { return this->peerId; }
   
   void setBitfield(const unsigned char* bitfield, int32_t bitfieldLength) {
-    this->bitfield->setBitfield(bitfield, bitfieldLength);
+    assert(_bitfield);
+    _bitfield->setBitfield(bitfield, bitfieldLength);
+    updateSeeder();
+  }
+
+  const unsigned char* getBitfield() const {
+    assert(_bitfield);
+    return _bitfield->getBitfield();
+  }
+
+  int32_t getBitfieldLength() const {
+    assert(_bitfield);
+    return _bitfield->getBitfieldLength();
   }
-  const unsigned char* getBitfield() const { return bitfield->getBitfield(); }
-  int32_t getBitfieldLength() const { return bitfield->getBitfieldLength(); }
+
   void setAllBitfield();
 
   /**
@@ -210,7 +223,10 @@ public:
 
   bool hasPiece(int32_t index) const;
 
-  bool isSeeder() const;
+  bool isSeeder() const
+  {
+    return _seeder;
+  }
 
   void updateLatency(int32_t latency);
   int32_t getLatency() const { return latency; }
@@ -223,7 +239,9 @@ public:
 
   bool isGood() const;
 
-  void reconfigure(int32_t pieceLength, int64_t totalLength);
+  void allocateBitfield(int32_t pieceLength, int64_t totalLength);
+
+  void deallocateBitfield();
 
   Time getFirstContactTime() const
   {

+ 2 - 0
src/PeerInteractionCommand.cc

@@ -133,6 +133,7 @@ PeerInteractionCommand::PeerInteractionCommand(int32_t cuid,
 
   setUploadLimit(e->option->getAsInt(PREF_MAX_UPLOAD_LIMIT));
   peer->activate();
+  peer->allocateBitfield(btContext->getPieceLength(), btContext->getTotalLength());
 
   maxDownloadSpeedLimit = e->option->getAsInt(PREF_MAX_DOWNLOAD_LIMIT);
 
@@ -140,6 +141,7 @@ PeerInteractionCommand::PeerInteractionCommand(int32_t cuid,
 }
 
 PeerInteractionCommand::~PeerInteractionCommand() {
+  peer->deallocateBitfield();
   peer->deactivate();
   PEER_OBJECT_CLUSTER(btContext)->unregisterHandle(peer->getId());
 					

+ 1 - 1
src/PeerListenCommand.cc

@@ -93,7 +93,7 @@ bool PeerListenCommand::execute() {
       if(peerInfo.first == localInfo.first) {
 	continue;
       }
-      PeerHandle peer = new Peer(peerInfo.first, 0, 0, 0);
+      PeerHandle peer = new Peer(peerInfo.first, 0);
       PeerReceiveHandshakeCommand* command =
 	new PeerReceiveHandshakeCommand(CUIDCounterSingletonHolder::instance()->newID(),
 					peer, e, peerSocket);

+ 0 - 1
src/PeerReceiveHandshakeCommand.cc

@@ -76,7 +76,6 @@ bool PeerReceiveHandshakeCommand::executeInternal()
     TransferStat tstat = PEER_STORAGE(btContext)->calculateStat();
     if(!PIECE_STORAGE(btContext)->downloadFinished() && tstat.getDownloadSpeed() < _lowestSpeedLimit ||
        BT_RUNTIME(btContext)->getConnections() < MAX_PEERS) {
-      peer->reconfigure(btContext->getPieceLength(), btContext->getTotalLength());
       if(PEER_STORAGE(btContext)->addPeer(peer)) {
 
 	peer->cuid = cuid;

+ 1 - 0
src/Piece.cc

@@ -105,6 +105,7 @@ string Piece::toString() const {
 
 void Piece::reconfigure(int32_t length)
 {
+  delete bitfield;
   this->length = length;
   bitfield =
     BitfieldManFactory::getFactoryInstance()->createBitfieldMan(_blockLength, length);

+ 2 - 2
test/BtAllowedFastMessageTest.cc

@@ -68,7 +68,7 @@ void BtAllowedFastMessageTest::testGetMessage() {
 void BtAllowedFastMessageTest::testDoReceivedAction() {
   BtAllowedFastMessage msg;
   msg.setIndex(1);
-  PeerHandle peer = new Peer("localhost", 6969, 16*1024, 256*1024*1024);
+  PeerHandle peer = new Peer("localhost", 6969);
   peer->setFastExtensionEnabled(true);
   msg.setPeer(peer);
   CPPUNIT_ASSERT(!peer->isInPeerAllowedIndexSet(1));
@@ -85,7 +85,7 @@ void BtAllowedFastMessageTest::testDoReceivedAction() {
 void BtAllowedFastMessageTest::testOnSendComplete() {
   BtAllowedFastMessage msg;
   msg.setIndex(1);
-  PeerHandle peer = new Peer("localhost", 6969, 16*1024, 256*1024*1024);
+  PeerHandle peer = new Peer("localhost", 6969);
   peer->setFastExtensionEnabled(true);
   msg.setPeer(peer);
   CPPUNIT_ASSERT(!peer->isInAmAllowedIndexSet(1));

+ 2 - 1
test/BtBitfieldMessageTest.cc

@@ -68,7 +68,8 @@ void BtBitfieldMessageTest::testGetMessage() {
 }
 
 void BtBitfieldMessageTest::testDoReceivedAction() {
-  PeerHandle peer = new Peer("host1", 6969, 16*1024, 16*16*1024);
+  PeerHandle peer = new Peer("host1", 6969);
+  peer->allocateBitfield(16*1024, 16*16*1024);
   BtBitfieldMessage msg;
   msg.setPeer(peer);
   unsigned char bitfield[] = { 0xff, 0xff };

+ 1 - 1
test/BtCancelMessageTest.cc

@@ -23,7 +23,7 @@ public:
 
   void setUp() {
     BtRegistry::unregisterAll();    
-    peer = new Peer("host", 6969, 16*1024, 256*1024);
+    peer = new Peer("host", 6969);
     btContext = new MockBtContext();
     btContext->setInfoHash((const unsigned char*)"12345678901234567890");
     BtRegistry::registerPeerObjectCluster(btContext->getInfoHashAsString(),

+ 1 - 3
test/BtChokeMessageTest.cc

@@ -26,7 +26,7 @@ public:
 
   void setUp() {
     BtRegistry::unregisterAll();    
-    peer = new Peer("host", 6969, 16*1024, 256*1024);
+    peer = new Peer("host", 6969);
     btContext = new MockBtContext();
     btContext->setInfoHash((const unsigned char*)"12345678901234567890");
     BtRegistry::registerPeerObjectCluster(btContext->getInfoHashAsString(),
@@ -108,7 +108,6 @@ void BtChokeMessageTest::testGetMessage() {
 
 void BtChokeMessageTest::testDoReceivedAction() {
   BtChokeMessage msg;
-  PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
   msg.setPeer(peer);
   msg.setBtContext(btContext);
 
@@ -125,7 +124,6 @@ void BtChokeMessageTest::testDoReceivedAction() {
 
 void BtChokeMessageTest::testOnSendComplete() {
   BtChokeMessage msg;
-  PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
   msg.setPeer(peer);
   msg.setBtContext(btContext);
 

+ 1 - 1
test/BtExtendedMessageTest.cc

@@ -37,7 +37,7 @@ public:
 CPPUNIT_TEST_SUITE_REGISTRATION(BtExtendedMessageTest);
 
 void BtExtendedMessageTest::testCreate() {
-  PeerHandle peer = new Peer("192.168.0.1", 6969, 16*1024, 256*1024);
+  PeerHandle peer = new Peer("192.168.0.1", 6969);
   peer->setExtension("charlie", 1);
   MockBtContextHandle ctx = new MockBtContext();
   unsigned char infohash[20];

+ 2 - 1
test/BtHaveAllMessageTest.cc

@@ -58,7 +58,8 @@ void BtHaveAllMessageTest::testGetMessage() {
 
 void BtHaveAllMessageTest::testDoReceivedAction() {
   BtHaveAllMessage msg;
-  PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
+  PeerHandle peer = new Peer("host", 6969);
+  peer->allocateBitfield(16*1024, 256*1024);
   peer->setFastExtensionEnabled(true);
   msg.setPeer(peer);
   

+ 2 - 1
test/BtHaveMessageTest.cc

@@ -63,7 +63,8 @@ void BtHaveMessageTest::testGetMessage() {
 }
 
 void BtHaveMessageTest::testDoReceivedAction() {
-  PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
+  PeerHandle peer = new Peer("host", 6969);
+  peer->allocateBitfield(16*1024, 256*1024);
   BtHaveMessage msg;
   msg.setIndex(1);
   msg.setPeer(peer);

+ 1 - 1
test/BtHaveNoneMessageTest.cc

@@ -60,7 +60,7 @@ void BtHaveNoneMessageTest::testGetMessage() {
 
 void BtHaveNoneMessageTest::testDoReceivedAction() {
   BtHaveNoneMessage msg;
-  PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
+  PeerHandle peer = new Peer("host", 6969);
   peer->setFastExtensionEnabled(true);
   msg.setPeer(peer);
   msg.doReceivedAction();

+ 2 - 2
test/BtInterestedMessageTest.cc

@@ -62,7 +62,7 @@ void BtInterestedMessageTest::testGetMessage() {
 
 void BtInterestedMessageTest::testDoReceivedAction() {
   BtInterestedMessage msg;
-  PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
+  PeerHandle peer = new Peer("host", 6969);
   msg.setPeer(peer);
   CPPUNIT_ASSERT(!peer->peerInterested);
   msg.doReceivedAction();
@@ -71,7 +71,7 @@ void BtInterestedMessageTest::testDoReceivedAction() {
 
 void BtInterestedMessageTest::testOnSendComplete() {
   BtInterestedMessage msg;
-  PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
+  PeerHandle peer = new Peer("host", 6969);
   msg.setPeer(peer);
   CPPUNIT_ASSERT(!peer->amInterested);
   msg.onSendComplete();

+ 2 - 2
test/BtNotInterestedMessageTest.cc

@@ -61,7 +61,7 @@ void BtNotInterestedMessageTest::testGetMessage() {
 }
 
 void BtNotInterestedMessageTest::testDoReceivedAction() {
-  PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
+  PeerHandle peer = new Peer("host", 6969);
   peer->peerInterested = true;
   BtNotInterestedMessage msg;
   msg.setPeer(peer);
@@ -71,7 +71,7 @@ void BtNotInterestedMessageTest::testDoReceivedAction() {
 }
 
 void BtNotInterestedMessageTest::testOnSendComplete() {
-  PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
+  PeerHandle peer = new Peer("host", 6969);
   peer->amInterested = true;
   BtNotInterestedMessage msg;
   msg.setPeer(peer);

+ 1 - 1
test/BtPieceMessageTest.cc

@@ -80,7 +80,7 @@ public:
     btContext->setPieceLength(16*1024);
     btContext->setTotalLength(256*1024);
 
-    peer = new Peer("host", 6969, 16*1024, 256*1024);
+    peer = new Peer("host", 6969);
     BtRegistry::registerPeerObjectCluster(btContext->getInfoHashAsString(),
 					  new PeerObjectCluster());
     PEER_OBJECT_CLUSTER(btContext)->registerHandle(peer->getId(), new PeerObject());

+ 1 - 1
test/BtRejectMessageTest.cc

@@ -66,7 +66,7 @@ public:
 
   void setUp() {
     BtRegistry::unregisterAll();
-    peer = new Peer("host", 6969, 16*1024, 256*1024);
+    peer = new Peer("host", 6969);
 
     MockBtContextHandle btContext = new MockBtContext();
     btContext->setInfoHash((const unsigned char*)"12345678901234567890");

+ 1 - 1
test/BtRequestMessageTest.cc

@@ -98,7 +98,7 @@ public:
     BtRegistry::registerPieceStorage(btContext->getInfoHashAsString(),
 				     pieceStorage);
 
-    peer = new Peer("host", 6969, btContext->getPieceLength(), btContext->getTotalLength());
+    peer = new Peer("host", 6969);
 
     BtRegistry::registerPeerObjectCluster(btContext->getInfoHashAsString(),
 					  new PeerObjectCluster());

+ 2 - 2
test/BtUnchokeMessageTest.cc

@@ -60,7 +60,7 @@ void BtUnchokeMessageTest::testGetMessage() {
 }
 
 void BtUnchokeMessageTest::testDoReceivedAction() {
-  PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
+  PeerHandle peer = new Peer("host", 6969);
   peer->peerChoking = true;
   BtUnchokeMessage msg;
   msg.setPeer(peer);
@@ -71,7 +71,7 @@ void BtUnchokeMessageTest::testDoReceivedAction() {
 }
 
 void BtUnchokeMessageTest::testOnSendComplete() {
-  PeerHandle peer = new Peer("host", 6969, 16*1024, 256*1024);
+  PeerHandle peer = new Peer("host", 6969);
   peer->amChoking = true;
   BtUnchokeMessage msg;
   msg.setPeer(peer);

+ 1 - 3
test/DefaultBtMessageDispatcherTest.cc

@@ -129,9 +129,7 @@ public:
   void setUp() {
     btContext = new DefaultBtContext();
     btContext->load("test.torrent");
-    peer = new Peer("192.168.0.1", 6969,
-		    btContext->getPieceLength(),
-		    btContext->getTotalLength());    
+    peer = new Peer("192.168.0.1", 6969);
     peerStorage = new MockPeerStorage();
     pieceStorage = new MockPieceStorage();
     BtRegistry::unregisterAll();

+ 1 - 1
test/DefaultBtMessageFactoryTest.cc

@@ -27,7 +27,7 @@ public:
     btContext->setInfoHash(infohash);
     _btContext = btContext;
 
-    _peer = new Peer("192.168.0.1", 6969, 16*1024, 256*1024);
+    _peer = new Peer("192.168.0.1", 6969);
     _peer->setExtendedMessagingEnabled(true);
 
     MockExtensionMessageFactoryHandle exmsgFactory = new MockExtensionMessageFactory();

+ 1 - 1
test/DefaultBtRequestFactoryTest.cc

@@ -84,7 +84,7 @@ public:
     BtRegistry::registerPieceStorage(btContext->getInfoHashAsString(),
 				     new MockPieceStorage());
 
-    PeerHandle peer = new Peer("host", 6969, btContext->getPieceLength(), btContext->getTotalLength());
+    PeerHandle peer = new Peer("host", 6969);
 
     BtRegistry::registerPeerObjectCluster(btContext->getInfoHashAsString(),
 					  new PeerObjectCluster());

+ 1 - 1
test/DefaultExtensionMessageFactoryTest.cc

@@ -35,7 +35,7 @@ public:
     BtRegistry::registerBtRuntime(_btContext->getInfoHashAsString(),
 				  btRuntime);
 
-    _peer = new Peer("192.168.0.1", 6969, 16*1024, 256*1024);
+    _peer = new Peer("192.168.0.1", 6969);
     _peer->setExtension("ut_pex", 1);
   }
 

+ 17 - 30
test/DefaultPeerStorageTest.cc

@@ -54,8 +54,8 @@ void DefaultPeerStorageTest::testCountPeer() {
   CPPUNIT_ASSERT_EQUAL((int32_t)0,
 		       ps.countPeer());
 
-  PeerHandle peer(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
-			   btContext->getTotalLength()));
+  PeerHandle peer(new Peer("192.168.0.1", 6889));
+
   ps.addPeer(peer);
   CPPUNIT_ASSERT_EQUAL((int32_t)1,
 		       ps.countPeer());
@@ -64,12 +64,9 @@ void DefaultPeerStorageTest::testCountPeer() {
 void DefaultPeerStorageTest::testDeleteUnusedPeer() {
   DefaultPeerStorage ps(btContext, option);
 
-  PeerHandle peer1(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
-			   btContext->getTotalLength()));
-  PeerHandle peer2(new Peer("192.168.0.2", 6889, btContext->getPieceLength(),
-			   btContext->getTotalLength()));
-  PeerHandle peer3(new Peer("192.168.0.3", 6889, btContext->getPieceLength(),
-			   btContext->getTotalLength()));
+  PeerHandle peer1(new Peer("192.168.0.1", 6889));
+  PeerHandle peer2(new Peer("192.168.0.2", 6889));
+  PeerHandle peer3(new Peer("192.168.0.3", 6889));
 
   ps.addPeer(peer1);
   ps.addPeer(peer2);
@@ -98,12 +95,9 @@ void DefaultPeerStorageTest::testDeleteUnusedPeer() {
 void DefaultPeerStorageTest::testAddPeer() {
   DefaultPeerStorage ps(btContext, option);
 
-  PeerHandle peer1(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
-			   btContext->getTotalLength()));
-  PeerHandle peer2(new Peer("192.168.0.2", 6889, btContext->getPieceLength(),
-			   btContext->getTotalLength()));
-  PeerHandle peer3(new Peer("192.168.0.3", 6889, btContext->getPieceLength(),
-			   btContext->getTotalLength()));
+  PeerHandle peer1(new Peer("192.168.0.1", 6889));
+  PeerHandle peer2(new Peer("192.168.0.2", 6889));
+  PeerHandle peer3(new Peer("192.168.0.3", 6889));
 
   ps.addPeer(peer1);
   ps.addPeer(peer2);
@@ -118,15 +112,14 @@ void DefaultPeerStorageTest::testAddPeer() {
 
   ps.setMaxPeerListSize(3);
 
-  PeerHandle peer4(new Peer("192.168.0.4", 6889, btContext->getPieceLength(),
-			    btContext->getTotalLength()));
+  PeerHandle peer4(new Peer("192.168.0.4", 6889));
 
   CPPUNIT_ASSERT(ps.addPeer(peer4));
   // peer1 was deleted.
   CPPUNIT_ASSERT_EQUAL((int32_t)3, ps.countPeer());
   
-  PeerHandle peer5(new Peer("192.168.0.4", 0, btContext->getPieceLength(),
-			    btContext->getTotalLength()));
+  PeerHandle peer5(new Peer("192.168.0.4", 0));
+
   peer5->port = 6889;
 
   // this returns false because the peer which has same ip and port has already added
@@ -137,8 +130,7 @@ void DefaultPeerStorageTest::testGetPeer() {
   DefaultPeerStorage ps(btContext, option);
   ps.setBtRuntime(btRuntime);
 
-  PeerHandle peer1(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
-			   btContext->getTotalLength()));
+  PeerHandle peer1(new Peer("192.168.0.1", 6889));
 
   ps.addPeer(peer1);
 
@@ -161,8 +153,7 @@ void DefaultPeerStorageTest::testIsPeerAvailable() {
 
   CPPUNIT_ASSERT_EQUAL(false, ps.isPeerAvailable());
 
-  PeerHandle peer1(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
-			   btContext->getTotalLength()));
+  PeerHandle peer1(new Peer("192.168.0.1", 6889));
 
   ps.addPeer(peer1);
 
@@ -184,8 +175,7 @@ void DefaultPeerStorageTest::testActivatePeer() {
 
   CPPUNIT_ASSERT_EQUAL((size_t)0, ps.getActivePeers().size());
 
-  PeerHandle peer1(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
-			   btContext->getTotalLength()));
+  PeerHandle peer1(new Peer("192.168.0.1", 6889));
 
   ps.addPeer(peer1);
 
@@ -205,15 +195,12 @@ void DefaultPeerStorageTest::testReturnPeer()
 {
   DefaultPeerStorage ps(btContext, option);
 
-  PeerHandle peer1(new Peer("192.168.0.1", 6889, btContext->getPieceLength(),
-			   btContext->getTotalLength()));
-  PeerHandle peer2(new Peer("192.168.0.2", 6889, btContext->getPieceLength(),
-			   btContext->getTotalLength()));
+  PeerHandle peer1(new Peer("192.168.0.1", 6889));
+  PeerHandle peer2(new Peer("192.168.0.2", 6889));
   ps.addPeer(peer1);
   ps.addPeer(peer2);
 
-  PeerHandle peer3(new Peer("192.168.0.3", 0, btContext->getPieceLength(),
-			   btContext->getTotalLength()));  
+  PeerHandle peer3(new Peer("192.168.0.3", 0));
   ps.addPeer(peer3);
 
   ps.returnPeer(peer2);

+ 3 - 3
test/DefaultPieceStorageTest.cc

@@ -41,9 +41,9 @@ public:
   void setUp() {
     btContext = new DefaultBtContext();
     btContext->load("test.torrent");
-    peer = PeerHandle(new Peer("192.168.0.1", 6889,
-			       btContext->getPieceLength(),
-			       btContext->getTotalLength()));
+    peer = new Peer("192.168.0.1", 6889);
+    peer->allocateBitfield(btContext->getPieceLength(),
+			   btContext->getTotalLength());
     option = new Option();
   }
 

+ 1 - 1
test/HandshakeExtensionMessageTest.cc

@@ -70,7 +70,7 @@ void HandshakeExtensionMessageTest::testToString()
 
 void HandshakeExtensionMessageTest::testDoReceivedAction()
 {
-  PeerHandle peer = new Peer("192.168.0.1", 0, 1, 1);
+  PeerHandle peer = new Peer("192.168.0.1", 0);
   HandshakeExtensionMessage msg;
   msg.setClientVersion("aria2");
   msg.setTCPPort(6889);

+ 1 - 1
test/PeerTest.cc

@@ -16,7 +16,7 @@ public:
   PeerTest():peer(0) {}
 
   void setUp() {
-    peer = new Peer("localhost", 6969, 16*1024, 256*1024*1024);
+    peer = new Peer("localhost", 6969);
   }
 
   void testPeerAllowedIndexSet();

+ 0 - 191
test/TorrentManTest.cc

@@ -1,191 +0,0 @@
-#include "TorrentMan.h"
-#include <string>
-#include <cppunit/extensions/HelperMacros.h>
-
-using namespace std;
-
-class TorrentManTest:public CppUnit::TestFixture {
-
-  CPPUNIT_TEST_SUITE(TorrentManTest);
-  /*
-  CPPUNIT_TEST(testUpdatePeers);
-  //CPPUNIT_TEST(testUpdatePeer);
-  CPPUNIT_TEST(testGetPeer);
-  CPPUNIT_TEST(testGetMissingPiece);
-  CPPUNIT_TEST(testCancelPiece);
-  CPPUNIT_TEST(testAddPeer);
-  */
-  CPPUNIT_TEST_SUITE_END();
-private:
-
-public:
-  void setUp() {
-  }
-
-  void testUpdatePeers();
-  //void testUpdatePeer();
-  void testGetPeer();
-  void testGetMissingPiece();
-  void testCancelPiece();
-  void testAddPeer();
-};
-
-
-CPPUNIT_TEST_SUITE_REGISTRATION( TorrentManTest );
-
-Peers createPeers() {
-  Peers peers;
-  Peer* peer1 = new Peer("192.168.0.1", 6881, 512*1024, 5242870);
-  peer1->entryId = 1;
-  Peer* peer2 = new Peer("192.168.0.2", 6881, 512*1024, 5242870);
-  peer2->entryId = 2;
-  Peer* peer3 = new Peer("192.168.0.3", 6881, 512*1024, 5242870);
-  peer3->entryId = 3;
-  peers.push_back(peer1);
-  peers.push_back(peer2);
-  peers.push_back(peer3);
-  return peers;
-}
-/*
-void TorrentManTest::testUpdatePeers() {
-  TorrentMan tm;
-  Peers peers = createPeers();
-  tm.updatePeers(peers);
-  const Peers& peersGot = tm.getPeers();
-  Peers::const_iterator itr = peersGot.begin();
-  CPPUNIT_ASSERT_EQUAL(string("192.168.0.1"), (*itr)->ipaddr);
-  itr++;
-  CPPUNIT_ASSERT_EQUAL(string("192.168.0.2"), (*itr)->ipaddr);
-  itr++;
-  CPPUNIT_ASSERT_EQUAL(string("192.168.0.3"), (*itr)->ipaddr);
-  itr++;
-}
-*/
-/*
-void TorrentManTest::testUpdatePeer() {
-  TorrentMan tm;
-  Peers peers = createPeers();
-  tm.updatePeers(peers);
-  Peer* peer = tm.getPeer(1);
-  peer->amChocking = true;
-  peer->amInterested = true;
-  tm.updatePeer(peer);
-  
-  Peers::const_iterator itr = tm.getPeers().begin();
-  CPPUNIT_ASSERT_EQUAL(3, (int)tm.getPeers().size());
-  CPPUNIT_ASSERT_EQUAL(string("192.168.0.1"), itr->ipaddr);
-  CPPUNIT_ASSERT_EQUAL(true, itr->amChocking);
-  CPPUNIT_ASSERT_EQUAL(true, itr->amInterested);
-  CPPUNIT_ASSERT_EQUAL(1, itr->cuid);
-  itr++;
-  CPPUNIT_ASSERT_EQUAL(string("192.168.0.2"), itr->ipaddr);
-  CPPUNIT_ASSERT_EQUAL(false, itr->amChocking);
-  CPPUNIT_ASSERT_EQUAL(false, itr->amInterested);
-  CPPUNIT_ASSERT_EQUAL(0, itr->cuid);
-  itr++;
-  CPPUNIT_ASSERT_EQUAL(string("192.168.0.3"), itr->ipaddr);
-  CPPUNIT_ASSERT_EQUAL(false, itr->amChocking);
-  CPPUNIT_ASSERT_EQUAL(false, itr->amInterested);
-  CPPUNIT_ASSERT_EQUAL(0, itr->cuid);
-  itr++;
-}
-*/
-/*
-void TorrentManTest::testGetPeer() {
-  TorrentMan tm;
-  Peers peers = createPeers();
-  tm.updatePeers(peers);
-  CPPUNIT_ASSERT(tm.getPeer() != Peer::nullPeer);
-  CPPUNIT_ASSERT(tm.getPeer() != Peer::nullPeer);
-  CPPUNIT_ASSERT(tm.getPeer() != Peer::nullPeer);
-  CPPUNIT_ASSERT(tm.getPeer() == Peer::nullPeer);
-}
-
-void TorrentManTest::testGetMissingPiece() {
-  TorrentMan tm;
-  tm.pieceLength = 512*1024;
-  tm.pieces = 10;
-  tm.totalSize = 5242870;
-  tm.initBitfield();
-
-  unsigned char peerBitfield[2] = { 0xff, 0xff };
-  Piece piece1 = tm.getMissingPiece(peerBitfield, 2);
-  CPPUNIT_ASSERT_EQUAL(0, piece1.getIndex());
-  CPPUNIT_ASSERT_EQUAL(512*1024, piece1.getLength());
-
-  Piece piece2 = tm.getMissingPiece(peerBitfield, 2);
-  CPPUNIT_ASSERT_EQUAL(1, piece2.getIndex());
-  CPPUNIT_ASSERT_EQUAL(512*1024, piece2.getLength());
- 
-  tm.completePiece(piece1);
-
-  int len = tm.getBitfieldLength();
-  const unsigned char* bitfield = tm.getBitfield();
-  CPPUNIT_ASSERT_EQUAL(2, len);
-  CPPUNIT_ASSERT(bitfield[0]&(1 << 7));
-  for(int i = 0; i < 7; i++) {
-    CPPUNIT_ASSERT(!(bitfield[0]&(1 << i)));
-  }
-
-  tm.completePiece(piece2);
-  bitfield = tm.getBitfield();
-  CPPUNIT_ASSERT_EQUAL(2, len);
-  CPPUNIT_ASSERT(bitfield[0]&(1 << 7));
-  CPPUNIT_ASSERT(bitfield[0]&(1 << 6));
-  for(int i = 0; i < 6; i++) {
-    CPPUNIT_ASSERT(!(bitfield[0]&(1 << i)));
-  }
-
-  for(int i = 0; i < 8; i++) {
-    CPPUNIT_ASSERT(!IS_NULL_PIECE(tm.getMissingPiece(peerBitfield, 2)));
-  }
-  CPPUNIT_ASSERT(IS_NULL_PIECE(tm.getMissingPiece(peerBitfield, 2)));
-}
-
-void TorrentManTest::testCancelPiece() {
-  TorrentMan tm;
-  tm.pieceLength = 512*1024;
-  tm.pieces = 10;
-  tm.totalSize = 5242870;
-  tm.initBitfield();
-
-  unsigned char peerBitfield[2] = { 0xff, 0xff };
-  Piece piece = tm.getMissingPiece(peerBitfield, 2);
-  CPPUNIT_ASSERT_EQUAL(0, piece.getIndex());
-  CPPUNIT_ASSERT_EQUAL(512*1024, piece.getLength());
-
-  tm.cancelPiece(piece);
-  int len = tm.getBitfieldLength();
-  const unsigned char* bitfield = tm.getBitfield();
-  for(int i = 0; i < 8; i++) {
-    CPPUNIT_ASSERT(!(bitfield[0]&(1 << i)));
-  }  
-}
-
-void TorrentManTest::testAddPeer() {
-  TorrentMan tm;
-  Peers peers = createPeers();
-  tm.updatePeers(peers);
-
-  // try to add already added peer
-  Peer* dupPeer = new Peer("192.168.0.2", 6881);
-  CPPUNIT_ASSERT(!tm.addPeer(dupPeer));
-  CPPUNIT_ASSERT_EQUAL(3, (int)tm.getPeers().size());
-
-  // duplicate flag on
-  CPPUNIT_ASSERT(tm.addPeer(dupPeer, true));
-  CPPUNIT_ASSERT_EQUAL(4, (int)tm.getPeers().size());
-
-  // cannot add error peer even though duplicte flag turns on
-  dupPeer->error = 1;
-  Peer* dupPeer2 = new Peer("192.168.0.2", 6881);
-  CPPUNIT_ASSERT(!tm.addPeer(dupPeer2, true));
-  CPPUNIT_ASSERT_EQUAL(4, (int)tm.getPeers().size());
-
-  // try to add new peer
-  Peer* newPeer = new Peer("10.1.0.1", 6881);
-  CPPUNIT_ASSERT(tm.addPeer(newPeer));
-  CPPUNIT_ASSERT_EQUAL(5, (int)tm.getPeers().size());
-
-}
-*/

+ 15 - 12
test/UTPexExtensionMessageTest.cc

@@ -67,14 +67,15 @@ void UTPexExtensionMessageTest::testGetExtensionName()
 void UTPexExtensionMessageTest::testGetBencodedData()
 {
   UTPexExtensionMessage msg(1);
-  PeerHandle p1 = new Peer("192.168.0.1", 6881, 1, 1);
+  PeerHandle p1 = new Peer("192.168.0.1", 6881);
+  p1->allocateBitfield(256*1024, 1024*1024);
   p1->setAllBitfield();
   msg.addFreshPeer(p1);// added seeder, check add.f flag
-  PeerHandle p2 = new Peer("10.1.1.2", 9999, 1, 1);
+  PeerHandle p2 = new Peer("10.1.1.2", 9999);
   msg.addFreshPeer(p2);
-  PeerHandle p3 = new Peer("192.168.0.2", 6882, 1, 1);
+  PeerHandle p3 = new Peer("192.168.0.2", 6882);
   msg.addDroppedPeer(p3);
-  PeerHandle p4 = new Peer("10.1.1.3", 10000, 1, 1);
+  PeerHandle p4 = new Peer("10.1.1.3", 10000);
   msg.addDroppedPeer(p4);
 
   char c1[6];
@@ -99,14 +100,15 @@ void UTPexExtensionMessageTest::testGetBencodedData()
 void UTPexExtensionMessageTest::testToString()
 {
   UTPexExtensionMessage msg(1);
-  PeerHandle p1 = new Peer("192.168.0.1", 6881, 1, 1);
+  PeerHandle p1 = new Peer("192.168.0.1", 6881);
+  p1->allocateBitfield(256*1024, 1024*1024);
   p1->setAllBitfield();
   msg.addFreshPeer(p1);// added seeder, check add.f flag
-  PeerHandle p2 = new Peer("10.1.1.2", 9999, 1, 1);
+  PeerHandle p2 = new Peer("10.1.1.2", 9999);
   msg.addFreshPeer(p2);
-  PeerHandle p3 = new Peer("192.168.0.2", 6882, 1, 1);
+  PeerHandle p3 = new Peer("192.168.0.2", 6882);
   msg.addDroppedPeer(p3);
-  PeerHandle p4 = new Peer("10.1.1.3", 10000, 1, 1);
+  PeerHandle p4 = new Peer("10.1.1.3", 10000);
   msg.addDroppedPeer(p4);
   CPPUNIT_ASSERT_EQUAL(string("ut_pex added=2, dropped=2"), msg.toString());
 }
@@ -114,14 +116,15 @@ void UTPexExtensionMessageTest::testToString()
 void UTPexExtensionMessageTest::testDoReceivedAction()
 {
   UTPexExtensionMessage msg(1);
-  PeerHandle p1 = new Peer("192.168.0.1", 6881, 1, 1);
+  PeerHandle p1 = new Peer("192.168.0.1", 6881);
+  p1->allocateBitfield(256*1024, 1024*1024);
   p1->setAllBitfield();
   msg.addFreshPeer(p1);// added seeder, check add.f flag
-  PeerHandle p2 = new Peer("10.1.1.2", 9999, 1, 1);
+  PeerHandle p2 = new Peer("10.1.1.2", 9999);
   msg.addFreshPeer(p2);
-  PeerHandle p3 = new Peer("192.168.0.2", 6882, 1, 1);
+  PeerHandle p3 = new Peer("192.168.0.2", 6882);
   msg.addDroppedPeer(p3);
-  PeerHandle p4 = new Peer("10.1.1.3", 10000, 1, 1);
+  PeerHandle p4 = new Peer("10.1.1.3", 10000);
   msg.addDroppedPeer(p4);
   msg.setBtContext(_btContext);