summaryrefslogtreecommitdiff
path: root/src/HttpDownloadCommand.cc
diff options
context:
space:
mode:
authorNils Maier <maierman@web.de>2013-09-15 21:52:02 +0200
committerNils Maier <maierman@web.de>2013-09-20 23:06:49 +0200
commite2700f50a5d8da1596cefccc01d70aa4696e3f4a (patch)
tree86821bba593efefe83fe31da28b7c6a944f5d171 /src/HttpDownloadCommand.cc
parent29d569eef98cdcabe52c365e75ca4da2174d8bf0 (diff)
Code cleanup in Http*
Diffstat (limited to 'src/HttpDownloadCommand.cc')
-rw-r--r--src/HttpDownloadCommand.cc107
1 files changed, 54 insertions, 53 deletions
diff --git a/src/HttpDownloadCommand.cc b/src/HttpDownloadCommand.cc
index fb60add5..db57aa12 100644
--- a/src/HttpDownloadCommand.cc
+++ b/src/HttpDownloadCommand.cc
@@ -56,15 +56,14 @@
namespace aria2 {
-HttpDownloadCommand::HttpDownloadCommand
-(cuid_t cuid,
- const std::shared_ptr<Request>& req,
- const std::shared_ptr<FileEntry>& fileEntry,
- RequestGroup* requestGroup,
- std::unique_ptr<HttpResponse> httpResponse,
- const std::shared_ptr<HttpConnection>& httpConnection,
- DownloadEngine* e,
- const std::shared_ptr<SocketCore>& socket)
+HttpDownloadCommand::HttpDownloadCommand(cuid_t cuid,
+ const std::shared_ptr<Request>& req,
+ const std::shared_ptr<FileEntry>& fileEntry,
+ RequestGroup* requestGroup,
+ std::unique_ptr<HttpResponse> httpResponse,
+ const std::shared_ptr<HttpConnection>& httpConnection,
+ DownloadEngine* e,
+ const std::shared_ptr<SocketCore>& socket)
: DownloadCommand(cuid, req, fileEntry, requestGroup, e, socket,
httpConnection->getSocketRecvBuffer()),
httpResponse_(std::move(httpResponse)),
@@ -73,71 +72,73 @@ HttpDownloadCommand::HttpDownloadCommand
HttpDownloadCommand::~HttpDownloadCommand() {}
-bool HttpDownloadCommand::prepareForNextSegment() {
+bool HttpDownloadCommand::prepareForNextSegment()
+{
bool downloadFinished = getRequestGroup()->downloadFinished();
- if(getRequest()->isPipeliningEnabled() && !downloadFinished) {
+ if (getRequest()->isPipeliningEnabled() && !downloadFinished) {
auto command = make_unique<HttpRequestCommand>
(getCuid(), getRequest(), getFileEntry(),
getRequestGroup(), httpConnection_,
getDownloadEngine(), getSocket());
// Set proxy request here. aria2 sends the HTTP request specialized for
// proxy.
- if(resolveProxyMethod(getRequest()->getProtocol()) == V_GET) {
+ if (resolveProxyMethod(getRequest()->getProtocol()) == V_GET) {
command->setProxyRequest(createProxyRequest());
}
getDownloadEngine()->addCommand(std::move(command));
return true;
- } else {
- const std::string& streamFilterName = getStreamFilter()->getName();
- if(getRequest()->isPipeliningEnabled() ||
- (getRequest()->isKeepAliveEnabled() &&
- (
- // Make sure that all filters are finished to pool socket
- (!util::endsWith(streamFilterName, SinkStreamFilter::NAME) &&
- getStreamFilter()->finished()) ||
- getRequestEndOffset() ==
- getFileEntry()->gtoloff(getSegments().front()->getPositionToWrite())
- )
+ }
+
+ const std::string& streamFilterName = getStreamFilter()->getName();
+ if (getRequest()->isPipeliningEnabled() ||
+ (getRequest()->isKeepAliveEnabled() &&
+ (
+ // Make sure that all filters are finished to pool socket
+ (!util::endsWith(streamFilterName, SinkStreamFilter::NAME) &&
+ getStreamFilter()->finished()) ||
+ getRequestEndOffset() ==
+ getFileEntry()->gtoloff(getSegments().front()->getPositionToWrite())
)
- ) {
- // TODO What if server sends EOF when non-SinkStreamFilter 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.
- getDownloadEngine()->poolSocket
- (getRequest(), createProxyRequest(), getSocket());
- }
- // The request was sent assuming that server supported pipelining, but
- // it turned out that server didn't support it.
- // We detect this situation by comparing the end byte in range header
- // of the response with the end byte of segment.
- // If it is the same, HTTP negotiation is necessary for the next request.
- if(!getRequest()->isPipeliningEnabled() &&
- getRequest()->isPipeliningHint() &&
- !downloadFinished) {
- const std::shared_ptr<Segment>& segment = getSegments().front();
+ )
+ ) {
+ // TODO What if server sends EOF when non-SinkStreamFilter 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.
+ getDownloadEngine()->poolSocket(getRequest(), createProxyRequest(),
+ getSocket());
+ }
+
+ // The request was sent assuming that server supported pipelining, but
+ // it turned out that server didn't support it.
+ // We detect this situation by comparing the end byte in range header
+ // of the response with the end byte of segment.
+ // If it is the same, HTTP negotiation is necessary for the next request.
+ if (!getRequest()->isPipeliningEnabled() &&
+ getRequest()->isPipeliningHint() &&
+ !downloadFinished) {
+ const std::shared_ptr<Segment>& segment = getSegments().front();
- int64_t lastOffset =getFileEntry()->gtoloff
- (std::min(segment->getPosition()+segment->getLength(),
- getFileEntry()->getLastOffset()));
- Range range = httpResponse_->getHttpHeader()->getRange();
- if(lastOffset == range.endByte + 1) {
- return prepareForRetry(0);
- }
+ int64_t lastOffset =getFileEntry()->gtoloff(
+ std::min(segment->getPosition()+segment->getLength(),
+ getFileEntry()->getLastOffset()));
+ auto range = httpResponse_->getHttpHeader()->getRange();
+ if (lastOffset == range.endByte + 1) {
+ return prepareForRetry(0);
}
- return DownloadCommand::prepareForNextSegment();
}
+
+ return DownloadCommand::prepareForNextSegment();
}
int64_t HttpDownloadCommand::getRequestEndOffset() const
{
- int64_t endByte = httpResponse_->getHttpHeader()->getRange().endByte;
- if(endByte > 0) {
+ auto endByte = httpResponse_->getHttpHeader()->getRange().endByte;
+ if (endByte > 0) {
return endByte+1;
- } else {
- return endByte;
}
+ return endByte;
}
} // namespace aria2