summaryrefslogtreecommitdiff
path: root/src/HttpRequestCommand.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-07-12 11:55:23 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-07-12 11:55:23 +0000
commit8274432f14606d22b8c11aa55efa18c50ba20767 (patch)
tree034942f0c4ec2bd9c122ca1a2bebfb0259fa3d05 /src/HttpRequestCommand.cc
parentbd73c20c4dfbe5746ef68b12633592c1a681fdf3 (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.cc17
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);
}
}