diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-07-12 11:55:23 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-07-12 11:55:23 +0000 |
| commit | 8274432f14606d22b8c11aa55efa18c50ba20767 (patch) | |
| tree | 034942f0c4ec2bd9c122ca1a2bebfb0259fa3d05 /src/HttpRequestCommand.cc | |
| parent | bd73c20c4dfbe5746ef68b12633592c1a681fdf3 (diff) | |
2010-07-12 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Set end byte in Range header if start byte > 0 to get more chance
to pool socket.
* src/DefaultPieceStorage.cc
* src/DefaultPieceStorage.h
* src/DownloadCommand.cc
* src/HttpDownloadCommand.cc
* src/HttpRequest.cc
* src/HttpRequest.h
* src/HttpRequestCommand.cc
* src/PieceStorage.h
* src/UnknownLengthPieceStorage.h
* test/DefaultPieceStorageTest.cc
* test/HttpRequestTest.cc
* test/MockPieceStorage.h
Diffstat (limited to 'src/HttpRequestCommand.cc')
| -rw-r--r-- | src/HttpRequestCommand.cc | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/HttpRequestCommand.cc b/src/HttpRequestCommand.cc index 9432b6a8..e0e39a07 100644 --- a/src/HttpRequestCommand.cc +++ b/src/HttpRequestCommand.cc @@ -57,6 +57,7 @@ #include "FileAllocationEntry.h" #include "CheckIntegrityEntry.h" #include "ServerStatMan.h" +#include "PieceStorage.h" namespace aria2 { @@ -87,7 +88,8 @@ createHttpRequest(const SharedHandle<Request>& req, const RequestGroup* rg, const SharedHandle<CookieStorage>& cookieStorage, const SharedHandle<AuthConfigFactory>& authConfigFactory, - const SharedHandle<Request>& proxyRequest) + const SharedHandle<Request>& proxyRequest, + off_t endOffset = 0) { SharedHandle<HttpRequest> httpRequest(new HttpRequest()); httpRequest->setUserAgent(option->get(PREF_USER_AGENT)); @@ -110,6 +112,7 @@ createHttpRequest(const SharedHandle<Request>& req, } else { httpRequest->disableNoCache(); } + httpRequest->setEndOffsetOverride(endOffset); return httpRequest; } @@ -148,6 +151,15 @@ bool HttpRequestCommand::executeInternal() { itr != eoi; ++itr) { const SharedHandle<Segment>& segment = *itr; if(!httpConnection_->isIssued(segment)) { + off_t endOffset = 0; + if(getRequestGroup()->getTotalLength() > 0 && + !getPieceStorage().isNull()) { + size_t nextIndex = + getPieceStorage()->getNextUsedIndex(segment->getIndex()); + endOffset = std::min + (static_cast<off_t>(getFileEntry()->getLength()), + getFileEntry()->gtoloff(segment->getSegmentLength()*nextIndex)); + } SharedHandle<HttpRequest> httpRequest (createHttpRequest(getRequest(), getFileEntry(), @@ -157,7 +169,8 @@ bool HttpRequestCommand::executeInternal() { getRequestGroup(), getDownloadEngine()->getCookieStorage(), getDownloadEngine()->getAuthConfigFactory(), - proxyRequest_)); + proxyRequest_, + endOffset)); httpConnection_->sendRequest(httpRequest); } } |
