summaryrefslogtreecommitdiff
path: root/src/DefaultBtInteractive.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-06-17 11:43:29 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-06-17 11:43:29 +0000
commitdfe2f993454bea38614bf1ad70d12a7bec947e69 (patch)
treed9ade0f4c9a3a25ba478d92d4a7f20c55fc3a268 /src/DefaultBtInteractive.cc
parent09502fc3db5462a2a0ae096dc0d3985ca9a190b5 (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.cc21
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() ?