summaryrefslogtreecommitdiff
path: root/src/DownloadCommand.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2007-11-04 12:26:12 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2007-11-04 12:26:12 +0000
commitd8ae699182af5c59d566c379a38bc69818286887 (patch)
tree066c060b984eb687bdfc66591b54c07903c132a1 /src/DownloadCommand.cc
parent166f7aa8c2efaab9b2e56a0e1d1b88a1d6118656 (diff)
2007-11-04 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Fixed: the listen port sent to the tracker is wrong. If aria2 fails to open listen port, then remove the port number from the tracker request. * src/DefaultBtAnnounce.cc * test/DefaultBtAnnounceTest.cc * test/MockPieceStorage.h Inject randomizer to DefaultBtAnnounce and DefaultBtContext to make them more testable. * src/DefaultBtAnnounce.{h, cc} * src/DefaultBtContext.{h, cc} * src/Util.{h, cc} * test/DefaultBtAnnounceTest.cc * test/DefaultBtContextTest.cc * test/UtilTest.cc Added 'B' to upload bytes readout. * src/ConsoleStatCalc.cc Now the listen port for BitTorrent download is opened when it is needed. * src/DownloadEngineFactory.cc * src/BtSetup.{h, cc} * src/PeerListenCommand.{h, cc} Now an exception thrown while parsing tracker response is now logged. If DlAbortEx is catched, then btAnnounce->resetAnnounce() immediately called, which means no retry is made in this case, assuming a tracker has a problem. * src/TrackerWatcherCommand.cc Fixed: downloading a file whose length is unkown fails. * src/DownloadCommand.cc Simplified prepareForNextSegment() * src/DownloadCommand.cc Updated * po/POTFILES.in
Diffstat (limited to 'src/DownloadCommand.cc')
-rw-r--r--src/DownloadCommand.cc33
1 files changed, 9 insertions, 24 deletions
diff --git a/src/DownloadCommand.cc b/src/DownloadCommand.cc
index b9ea50e2..9e4cb943 100644
--- a/src/DownloadCommand.cc
+++ b/src/DownloadCommand.cc
@@ -88,7 +88,7 @@ bool DownloadCommand::executeInternal() {
int32_t BUFSIZE = 16*1024;
char buf[BUFSIZE];
int32_t bufSize;
- if(segment->getLength()-segment->getWrittenLength() < BUFSIZE) {
+ if(segment->getLength() > 0 && segment->getLength()-segment->getWrittenLength() < BUFSIZE) {
bufSize = segment->getLength()-segment->getWrittenLength();
} else {
bufSize = BUFSIZE;
@@ -157,31 +157,16 @@ bool DownloadCommand::prepareForNextSegment() {
*/
return true;
} else {
- // Merge segment with next segment, if segment.index+1 == nextSegment.index
-
SegmentHandle tempSegment = _segments.front();
- while(1) {
- SegmentHandle nextSegment =
- _requestGroup->getSegmentMan()->getSegment(cuid,
- tempSegment->getIndex()+1);
- if(nextSegment.isNull()) {
- break;
- } else {
- if(nextSegment->getWrittenLength() > 0) {
- return prepareForRetry(0);
- }
- nextSegment->updateWrittenLength(tempSegment->getOverflowLength());
- if(nextSegment->complete()) {
- validatePieceHash(nextSegment);
- tempSegment = nextSegment;
- } else {
- e->commands.push_back(this);
- return false;
- }
- }
+ SegmentHandle nextSegment =
+ _requestGroup->getSegmentMan()->getSegment(cuid,
+ tempSegment->getIndex()+1);
+ if(!nextSegment.isNull() && nextSegment->getWrittenLength() == 0) {
+ e->commands.push_back(this);
+ return false;
+ } else {
+ return prepareForRetry(0);
}
-
- return prepareForRetry(0);
}
}