/* */ #include "FtpInitiateConnectionCommand.h" #include "FtpNegotiationCommand.h" #include "HttpRequestCommand.h" #include "FtpTunnelRequestCommand.h" #include "DlAbortEx.h" #include "message.h" #include "prefs.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->segmentMan->diskWriter->openExistingFile(e->segmentMan->getFilePath()); e->segmentMan->downloadStarted = true; } else { e->segmentMan->diskWriter->initAndOpenFile(e->segmentMan->getFilePath()); } } socket = new Socket(); Command* command; if(useHttpProxy()) { logger->info(MSG_CONNECTING_TO_SERVER, cuid, e->option->get(PREF_HTTP_PROXY_HOST).c_str(), e->option->getAsInt(PREF_HTTP_PROXY_PORT)); socket->establishConnection(e->option->get(PREF_HTTP_PROXY_HOST), e->option->getAsInt(PREF_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 { 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->get(PREF_HTTP_PROXY_ENABLED) == V_TRUE; } bool FtpInitiateConnectionCommand::useHttpProxyGet() const { return useHttpProxy() && e->option->get(PREF_FTP_VIA_HTTP_PROXY) == V_GET; } bool FtpInitiateConnectionCommand::useHttpProxyConnect() const { return useHttpProxy() && e->option->get(PREF_FTP_VIA_HTTP_PROXY) == V_TUNNEL; }