/* */ #include "HttpDownloadCommand.h" #include "RequestGroup.h" #include "DownloadEngine.h" #include "Request.h" #include "HttpRequestCommand.h" #include "HttpConnection.h" #include "HttpRequest.h" #include "Segment.h" #include "Socket.h" #include "prefs.h" #include "Option.h" namespace aria2 { HttpDownloadCommand::HttpDownloadCommand(int cuid, const RequestHandle& req, RequestGroup* requestGroup, const HttpConnectionHandle& httpConnection, DownloadEngine* e, const SocketHandle& socket) :DownloadCommand(cuid, req, requestGroup, e, socket), _httpConnection(httpConnection) {} HttpDownloadCommand::~HttpDownloadCommand() {} bool HttpDownloadCommand::prepareForNextSegment() { if(req->isPipeliningEnabled() && !_requestGroup->downloadFinished()) { Command* command = new HttpRequestCommand(cuid, req, _requestGroup, _httpConnection, e, socket); e->commands.push_back(command); return true; } else { if(!e->option->getAsBool(PREF_HTTP_PROXY_ENABLED)) { if(req->isPipeliningEnabled() || (req->isKeepAliveEnabled() && ((!_transferEncodingDecoder.isNull() && _requestGroup->downloadFinished()) || (uint64_t)_segments.front()->getPositionToWrite() == _requestGroup->getTotalLength()))) { std::pair peerInfo; socket->getPeerInfo(peerInfo); e->poolSocket(peerInfo.first, peerInfo.second, socket); } } return DownloadCommand::prepareForNextSegment(); } } } // namespace aria2