diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-11-26 15:22:54 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-11-26 15:22:54 +0000 |
| commit | b1edad42ffd144f449d9d4d81d414d6fb65cb46b (patch) | |
| tree | dd22d491b29cda9dc34d61bc10fa19829b9a2529 /src/FtpNegotiationCommand.cc | |
| parent | b1eee48ee392feab38578283884b5ceb2a6cdd20 (diff) | |
2008-11-27 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Fixed the bug that prevents aria2 from downloading 0-length
files via HTTP/FTP.
* src/DefaultBtContext.cc
* src/DefaultBtContext.h
* src/DownloadContext.h
* src/FtpNegotiationCommand.cc
* src/HttpResponseCommand.cc
* src/HttpResponseCommand.h
* src/RequestGroup.cc
* src/SingleFileDownloadContext.cc
* src/SingleFileDownloadContext.h
* test/BtPostDownloadHandlerTest.cc
* test/MetalinkPostDownloadHandlerTest.cc
* test/MockBtContext.h
Diffstat (limited to 'src/FtpNegotiationCommand.cc')
| -rw-r--r-- | src/FtpNegotiationCommand.cc | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/src/FtpNegotiationCommand.cc b/src/FtpNegotiationCommand.cc index 63df6e2f..71ebc50c 100644 --- a/src/FtpNegotiationCommand.cc +++ b/src/FtpNegotiationCommand.cc @@ -333,10 +333,29 @@ bool FtpNegotiationCommand::onFileSizeDetermined(uint64_t totalLength) } if(totalLength == 0) { + if(e->option->getAsBool(PREF_FTP_PASV)) { + sequence = SEQ_SEND_PASV; + } else { + sequence = SEQ_PREPARE_SERVER_SOCKET; + } _requestGroup->initPieceStorage(); + if(dctx->knowsTotalLength() && + _requestGroup->downloadFinishedByFileLength()) { + sequence = SEQ_DOWNLOAD_ALREADY_COMPLETED; + + poolConnection(); + + return false; + } _requestGroup->shouldCancelDownloadForSafety(); _requestGroup->getPieceStorage()->getDiskAdaptor()->initAndOpenFile(); + if(dctx->knowsTotalLength()) { + sequence = SEQ_DOWNLOAD_ALREADY_COMPLETED; + poolConnection(); + return false; + } + return true; } else { _requestGroup->initPieceStorage(); @@ -387,12 +406,10 @@ bool FtpNegotiationCommand::recvSize() { // command, resuming and segmented downloading are disabled when the first // contacted FTP server doesn't support it. if(_requestGroup->getPieceStorage().isNull()) { - - if(e->option->getAsBool(PREF_FTP_PASV)) { - sequence = SEQ_SEND_PASV; - } else { - sequence = SEQ_PREPARE_SERVER_SOCKET; - } + SingleFileDownloadContextHandle dctx = + dynamic_pointer_cast<SingleFileDownloadContext> + (_requestGroup->getDownloadContext()); + dctx->markTotalLengthIsUnknown(); return onFileSizeDetermined(0); } |
