/* */ #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" namespace aria2 { AbstractProxyRequestCommand::AbstractProxyRequestCommand (int cuid, const RequestHandle& 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(socket); } AbstractProxyRequestCommand::~AbstractProxyRequestCommand() {} bool AbstractProxyRequestCommand::executeInternal() { //socket->setBlockingMode(); if(httpConnection->sendBufferIsEmpty()) { if(!checkIfConnectionEstablished (socket, _connectedHostname, _connectedAddr, _connectedPort)) { return true; } HttpRequestHandle httpRequest(new HttpRequest()); httpRequest->setUserAgent(getOption()->get(PREF_USER_AGENT)); httpRequest->setRequest(req); httpRequest->setProxyRequest(_proxyRequest); httpConnection->sendProxyRequest(httpRequest); } else { httpConnection->sendPendingData(); } if(httpConnection->sendBufferIsEmpty()) { e->commands.push_back(getNextCommand()); return true; } else { setWriteCheckSocket(socket); e->commands.push_back(this); return false; } } } // namespace aria2