/* */ #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)) { setTimeout(getOption()->getAsInt(PREF_CONNECT_TIMEOUT)); disableReadCheckSocket(); setWriteCheckSocket(getSocket()); } AbstractProxyRequestCommand::~AbstractProxyRequestCommand() {} bool AbstractProxyRequestCommand::executeInternal() { //socket->setBlockingMode(); if(httpConnection_->sendBufferIsEmpty()) { if(!checkIfConnectionEstablished (getSocket(), getRequest()->getConnectedHostname(), getRequest()->getConnectedAddr(), getRequest()->getConnectedPort())) { 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