summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-01-06 13:02:10 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-01-06 13:02:10 +0000
commite237a6ebdaf507aec25116819a63bee32f985e60 (patch)
treee2b8c64eb8b4cd85c41931e25f56318c71a54cb3 /src
parentf6a3ca0b1e9b4dc02d109fd5c7cc8269d372e2bc (diff)
2010-01-06 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Pool connection if _contentEncodingDecoder is used and server supports persistent connection. * src/HttpDownloadCommand.cc
Diffstat (limited to 'src')
-rw-r--r--src/HttpDownloadCommand.cc19
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