diff options
Diffstat (limited to 'src/HttpDownloadCommand.cc')
| -rw-r--r-- | src/HttpDownloadCommand.cc | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/HttpDownloadCommand.cc b/src/HttpDownloadCommand.cc index 7826e2dd..fe29e9d2 100644 --- a/src/HttpDownloadCommand.cc +++ b/src/HttpDownloadCommand.cc @@ -47,6 +47,7 @@ #include "HttpHeader.h" #include "Range.h" #include "DownloadContext.h" +#include "Decoder.h" namespace aria2 { @@ -82,9 +83,21 @@ bool HttpDownloadCommand::prepareForNextSegment() { } else { if(req->isPipeliningEnabled() || (req->isKeepAliveEnabled() && - ((!_transferEncodingDecoder.isNull() && - _requestGroup->downloadFinished()) || - _fileEntry->getLastOffset() == _segments.front()->getPositionToWrite()))) { + ( + ((!_transferEncodingDecoder.isNull() && + _transferEncodingDecoder->finished()) || + (!_contentEncodingDecoder.isNull() && + _contentEncodingDecoder->finished())) || + _fileEntry->getLastOffset() == + _segments.front()->getPositionToWrite() + ) + ) + ) { + // TODO What if server sends EOF when _contentEncodingDecoder is + // used and server didn't send Connection: close? We end up to + // pool terminated socket. In HTTP/1.1, keep-alive is default, + // so closing connection without Connection: close header means + // that server is broken or not configured properly. e->poolSocket(req, isProxyDefined(), socket); } // The request was sent assuming that server supported pipelining, but |
