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

Fixed the bug: aria2 doesn't utilize fast set index offered by peer.
	* src/Peer.{h, cc}
	* src/DefaultPieceStorage.cc
	* test/DefaultPieceStorageTest.cc
pull/1/head
Tatsuhiro Tsujikawa 2007-12-05 17:57:08 +00:00
parent 2850c16f8a
commit 30739b0763
5 changed files with 21 additions and 22 deletions

View File

@ -1,3 +1,10 @@
2007-12-06 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Fixed the bug: aria2 doesn't utilize fast set index offered by peer.
* src/Peer.{h, cc}
* src/DefaultPieceStorage.cc
* test/DefaultPieceStorageTest.cc
2007-12-06 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Rewritten direct I/O support routine

View File

@ -166,11 +166,11 @@ PieceHandle DefaultPieceStorage::getMissingPiece(const PeerHandle& peer)
int32_t DefaultPieceStorage::getMissingFastPieceIndex(const PeerHandle& peer)
{
int32_t index = -1;
if(peer->isFastExtensionEnabled() && peer->countFastSet() > 0) {
if(peer->isFastExtensionEnabled() && peer->countPeerAllowedIndexSet() > 0) {
BitfieldMan tempBitfield(bitfieldMan->getBlockLength(),
bitfieldMan->getTotalLength());
for(Integers::const_iterator itr = peer->getFastSet().begin();
itr != peer->getFastSet().end(); itr++) {
for(Integers::const_iterator itr = peer->getPeerAllowedIndexSet().begin();
itr != peer->getPeerAllowedIndexSet().end(); itr++) {
if(!bitfieldMan->isBitSet(index) && peer->hasPiece(*itr)) {
tempBitfield.setBit(*itr);
}

View File

@ -114,22 +114,11 @@ void Peer::resetStatus() {
snubbing = false;
fastExtensionEnabled = false;
latency = DEFAULT_LATENCY;
fastSet.clear();
peerAllowedIndexSet.clear();
amAllowedIndexSet.clear();
peerStat.reset();
}
bool Peer::isInFastSet(int32_t index) const {
return find(fastSet.begin(), fastSet.end(), index) != fastSet.end();
}
void Peer::addFastSetIndex(int32_t index) {
if(!isInFastSet(index)) {
fastSet.push_back(index);
}
}
bool Peer::isInPeerAllowedIndexSet(int32_t index) const {
return find(peerAllowedIndexSet.begin(), peerAllowedIndexSet.end(),
index) != peerAllowedIndexSet.end();

View File

@ -63,8 +63,6 @@ private:
unsigned char peerId[PEER_ID_LENGTH];
BitfieldMan* bitfield;
bool fastExtensionEnabled;
// allowed fast indexes that peer has sent by Allowed Fast message
Integers fastSet;
// fast index set which a peer has sent to localhost.
Integers peerAllowedIndexSet;
// fast index set which localhost has sent to a peer.
@ -179,14 +177,19 @@ public:
}
bool isFastExtensionEnabled() const { return fastExtensionEnabled; }
void addFastSetIndex(int32_t index);
const Integers& getFastSet() const { return fastSet; }
bool isInFastSet(int32_t index) const;
int32_t countFastSet() const { return fastSet.size(); }
void addPeerAllowedIndex(int32_t index);
bool isInPeerAllowedIndexSet(int32_t index) const;
int32_t countPeerAllowedIndexSet() const
{
return peerAllowedIndexSet.size();
}
const Integers& getPeerAllowedIndexSet() const
{
return peerAllowedIndexSet;
}
void addAmAllowedIndex(int32_t index);
bool isInAmAllowedIndexSet(int32_t index) const;

View File

@ -100,7 +100,7 @@ void DefaultPieceStorageTest::testGetMissingFastPiece() {
peer->setAllBitfield();
peer->setFastExtensionEnabled(true);
peer->addFastSetIndex(2);
peer->addPeerAllowedIndex(2);
PieceHandle piece = pss.getMissingFastPiece(peer);
CPPUNIT_ASSERT_EQUAL(string("piece: index=2, length=128"),