diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-04-22 07:15:35 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-04-22 07:15:35 +0000 |
| commit | 1c7c6f989800b10d3820614123dcfc7d90677c85 (patch) | |
| tree | da975ff7108b488e8ebde512db6a10179d88ea2e /src/HttpRequestCommand.cc | |
| parent | f1816a1d4b4b1fda84533500c7c15de05799a058 (diff) | |
2008-04-22 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Rewritten HTTP keep-alive and pipelining routine.
* src/AbstractCommand.cc
* src/HttpConnection.cc
* src/HttpDownloadCommand.cc
* src/HttpRequest.cc
* src/HttpRequestCommand.cc
* src/HttpResponseCommand.cc
* src/Request.cc
* src/Request.h
* src/RequestGroup.cc
* test/HttpRequestTest.cc
* test/HttpResponseTest.cc
* test/RequestTest.cc
Diffstat (limited to 'src/HttpRequestCommand.cc')
| -rw-r--r-- | src/HttpRequestCommand.cc | 64 |
1 files changed, 31 insertions, 33 deletions
diff --git a/src/HttpRequestCommand.cc b/src/HttpRequestCommand.cc index 4f5bc131..cc76a9be 100644 --- a/src/HttpRequestCommand.cc +++ b/src/HttpRequestCommand.cc @@ -47,12 +47,13 @@ namespace aria2 { -HttpRequestCommand::HttpRequestCommand(int cuid, - const RequestHandle& req, - RequestGroup* requestGroup, - const HttpConnectionHandle& httpConnection, - DownloadEngine* e, - const SocketHandle& s) +HttpRequestCommand::HttpRequestCommand +(int cuid, + const RequestHandle& req, + RequestGroup* requestGroup, + const HttpConnectionHandle& httpConnection, + DownloadEngine* e, + const SocketHandle& s) :AbstractCommand(cuid, req, requestGroup, e, s), _httpConnection(httpConnection) { @@ -62,44 +63,41 @@ HttpRequestCommand::HttpRequestCommand(int cuid, HttpRequestCommand::~HttpRequestCommand() {} +static SharedHandle<HttpRequest> +createHttpRequest(const SharedHandle<Request>& req, + const SharedHandle<Segment>& segment, + uint64_t totalLength, + const Option* option) +{ + HttpRequestHandle httpRequest(new HttpRequest()); + httpRequest->setUserAgent(option->get(PREF_USER_AGENT)); + httpRequest->setRequest(req); + httpRequest->setSegment(segment); + httpRequest->setEntityLength(totalLength); + httpRequest->setUserHeaders(option->get(PREF_HEADER)); + httpRequest->configure(option); + + return httpRequest; +} + bool HttpRequestCommand::executeInternal() { socket->setBlockingMode(); if(req->getProtocol() == "https") { socket->initiateSecureConnection(); } - if(e->option->get(PREF_ENABLE_HTTP_PIPELINING) == V_TRUE) { - req->setKeepAlive(true); - } else if(e->option->get(PREF_ENABLE_HTTP_KEEP_ALIVE) == V_TRUE && - !_requestGroup->getSegmentMan().isNull() && - _requestGroup->getSegmentMan()->countFreePieceFrom(_segments.front()->getIndex()+1) <= 4) { - // TODO Do we need to consider the case where content-length is unknown? - // TODO parameterize the value which enables keep-alive, '4' - req->setKeepAlive(true); - } else { - req->setKeepAlive(false); - } if(_segments.empty()) { - HttpRequestHandle httpRequest(new HttpRequest()); - httpRequest->setUserAgent(e->option->get(PREF_USER_AGENT)); - httpRequest->setRequest(req); - httpRequest->setEntityLength(_requestGroup->getTotalLength()); - httpRequest->setUserHeaders(e->option->get(PREF_HEADER)); - httpRequest->configure(e->option); - + HttpRequestHandle httpRequest + (createHttpRequest(req, SharedHandle<Segment>(), + _requestGroup->getTotalLength(), e->option)); _httpConnection->sendRequest(httpRequest); } else { for(Segments::iterator itr = _segments.begin(); itr != _segments.end(); ++itr) { - SegmentHandle segment = *itr; + const SegmentHandle& segment = *itr; if(!_httpConnection->isIssued(segment)) { - HttpRequestHandle httpRequest(new HttpRequest()); - httpRequest->setUserAgent(e->option->get(PREF_USER_AGENT)); - httpRequest->setRequest(req); - httpRequest->setSegment(segment); - httpRequest->setEntityLength(_requestGroup->getTotalLength()); - httpRequest->setUserHeaders(e->option->get(PREF_HEADER)); - httpRequest->configure(e->option); - + HttpRequestHandle httpRequest + (createHttpRequest(req, segment, + _requestGroup->getTotalLength(), e->option)); _httpConnection->sendRequest(httpRequest); } } |
