/* */ #include "AbstractProxyRequestCommand.h" #include "DownloadEngine.h" #include "RequestGroup.h" #include "Request.h" #include "HttpConnection.h" #include "HttpRequest.h" #include "Segment.h" #include "Option.h" #include "prefs.h" #include "Socket.h" #include "CookieStorage.h" #include "AuthConfigFactory.h" #include "AuthConfig.h" #include "DownloadContext.h" #include "RequestGroupMan.h" #include "ServerStatMan.h" #include "FileAllocationEntry.h" #include "CheckIntegrityEntry.h" namespace aria2 { AbstractProxyRequestCommand::AbstractProxyRequestCommand (cuid_t cuid, const SharedHandle& req, const SharedHandle& fileEntry, RequestGroup* requestGroup, DownloadEngine* e, const SharedHandle& proxyRequest, const SocketHandle& s) : AbstractCommand(cuid, req, fileEntry, requestGroup, e, s), _proxyRequest(proxyRequest), _httpConnection(new HttpConnection(cuid, s, getOption().get())) { setTimeout(getOption()->getAsInt(PREF_CONNECT_TIMEOUT)); disableReadCheckSocket(); setWriteCheckSocket(getSocket()); } AbstractProxyRequestCommand::~AbstractProxyRequestCommand() {} bool AbstractProxyRequestCommand::executeInternal() { //socket->setBlockingMode(); if(_httpConnection->sendBufferIsEmpty()) { if(!checkIfConnectionEstablished (getSocket(), _connectedHostname, _connectedAddr, _connectedPort)) { return true; } SharedHandle httpRequest(new HttpRequest()); httpRequest->setUserAgent(getOption()->get(PREF_USER_AGENT)); httpRequest->setRequest(getRequest()); httpRequest->setProxyRequest(_proxyRequest); _httpConnection->sendProxyRequest(httpRequest); } else { _httpConnection->sendPendingData(); } if(_httpConnection->sendBufferIsEmpty()) { getDownloadEngine()->addCommand(getNextCommand()); return true; } else { setWriteCheckSocket(getSocket()); getDownloadEngine()->addCommand(this); return false; } } } // namespace aria2