diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-11-04 12:26:12 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-11-04 12:26:12 +0000 |
| commit | d8ae699182af5c59d566c379a38bc69818286887 (patch) | |
| tree | 066c060b984eb687bdfc66591b54c07903c132a1 /src/DownloadCommand.cc | |
| parent | 166f7aa8c2efaab9b2e56a0e1d1b88a1d6118656 (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.cc | 33 |
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); } } |
