diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-06-17 11:43:29 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-06-17 11:43:29 +0000 |
| commit | dfe2f993454bea38614bf1ad70d12a7bec947e69 (patch) | |
| tree | d9ade0f4c9a3a25ba478d92d4a7f20c55fc3a268 /src/DefaultBtInteractive.cc | |
| parent | 09502fc3db5462a2a0ae096dc0d3985ca9a190b5 (diff) | |
2008-06-17 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Filled up pieces based on the number of missing blocks, rather
than
simplay the number of piece * block length.
* src/BtRequestFactory.h
* src/DefaultBtInteractive.cc
* src/DefaultBtInteractive.h
* src/DefaultBtRequestFactory.cc
* src/DefaultBtRequestFactory.h
* src/Piece.cc
* src/Piece.h
* test/BitfieldManTest.cc
* test/DefaultBtRequestFactoryTest.cc
* test/MockBtRequestFactory.h
Diffstat (limited to 'src/DefaultBtInteractive.cc')
| -rw-r--r-- | src/DefaultBtInteractive.cc | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/src/DefaultBtInteractive.cc b/src/DefaultBtInteractive.cc index a1b45c47..9d24e475 100644 --- a/src/DefaultBtInteractive.cc +++ b/src/DefaultBtInteractive.cc @@ -288,26 +288,32 @@ void DefaultBtInteractive::decideInterest() { } } -void DefaultBtInteractive::fillPiece(size_t maxPieceNum) { +void DefaultBtInteractive::fillPiece(size_t maxMissingBlock) { if(pieceStorage->hasMissingPiece(peer)) { + + size_t numMissingBlock = btRequestFactory->countMissingBlock(); + if(peer->peerChoking()) { if(peer->isFastExtensionEnabled()) { - while(btRequestFactory->countTargetPiece() < maxPieceNum) { + + while(numMissingBlock < maxMissingBlock) { PieceHandle piece = pieceStorage->getMissingFastPiece(peer); if(piece.isNull()) { break; } else { btRequestFactory->addTargetPiece(piece); + numMissingBlock += piece->countMissingBlock(); } } } } else { - while(btRequestFactory->countTargetPiece() < maxPieceNum) { + while(numMissingBlock < maxMissingBlock) { PieceHandle piece = pieceStorage->getMissingPiece(peer); if(piece.isNull()) { break; } else { btRequestFactory->addTargetPiece(piece); + numMissingBlock += piece->countMissingBlock(); } } } @@ -323,14 +329,7 @@ void DefaultBtInteractive::addRequests() { } else { MAX_PENDING_REQUEST = 6; } - size_t pieceNum; - if(pieceStorage->isEndGame()) { - pieceNum = 1; - } else { - size_t blocks = DIV_FLOOR(btContext->getPieceLength(), Piece::BLOCK_LENGTH); - pieceNum = DIV_FLOOR(MAX_PENDING_REQUEST, blocks); - } - fillPiece(pieceNum); + fillPiece(MAX_PENDING_REQUEST); size_t reqNumToCreate = MAX_PENDING_REQUEST <= dispatcher->countOutstandingRequest() ? |
