/* */ #include "FtpInitiateConnectionCommand.h" #include "FtpNegotiationCommand.h" #include "HttpRequestCommand.h" #include "FtpTunnelRequestCommand.h" #include "DlAbortEx.h" #include "message.h" FtpInitiateConnectionCommand::FtpInitiateConnectionCommand(int cuid, Request* req, DownloadEngine* e):AbstractCommand(cuid, req, e) {} FtpInitiateConnectionCommand::~FtpInitiateConnectionCommand() {} bool FtpInitiateConnectionCommand::executeInternal(Segment segment) { if(!e->segmentMan->downloadStarted) { e->segmentMan->filename = req->getFile(); bool segFileExists = e->segmentMan->segmentFileExists(); if(segFileExists) { e->segmentMan->load(); e->diskWriter->openExistingFile(e->segmentMan->getFilePath()); e->segmentMan->downloadStarted = true; } else { e->diskWriter->initAndOpenFile(e->segmentMan->getFilePath()); } } socket = new Socket(); Command* command; if(useHttpProxy()) { e->logger->info(MSG_CONNECTING_TO_SERVER, cuid, e->option->get("http_proxy_host").c_str(), e->option->getAsInt("http_proxy_port")); socket->establishConnection(e->option->get("http_proxy_host"), e->option->getAsInt("http_proxy_port")); if(useHttpProxyGet()) { command = new HttpRequestCommand(cuid, req, e, socket); } else if(useHttpProxyConnect()) { command = new FtpTunnelRequestCommand(cuid, req, e, socket); } else { // TODO throw new DlAbortEx("ERROR"); } } else { e->logger->info(MSG_CONNECTING_TO_SERVER, cuid, req->getHost().c_str(), req->getPort()); socket->establishConnection(req->getHost(), req->getPort()); command = new FtpNegotiationCommand(cuid, req, e, socket); } e->commands.push(command); return true; } bool FtpInitiateConnectionCommand::useHttpProxy() const { return e->option->defined("http_proxy_enabled") && e->option->get("http_proxy_enabled") == "true"; } bool FtpInitiateConnectionCommand::useHttpProxyGet() const { return useHttpProxy() && e->option->get("ftp_via_http_proxy") == "get"; } bool FtpInitiateConnectionCommand::useHttpProxyConnect() const { return useHttpProxy() && e->option->get("ftp_via_http_proxy") == "tunnel"; }