diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-05-08 11:18:36 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-05-08 11:18:36 +0000 |
| commit | d52bce74d3a40d75dcfa3496e67abbed9f1fcba8 (patch) | |
| tree | 09c82779bd07f661340800db790e68fe612ca56c /src/FtpInitiateConnectionCommand.cc | |
| parent | d8f911b5815f2f6857b1c0035182391e5d6ecaf5 (diff) | |
2008-05-08 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Rewritten name resolver. Now async DNS can be disabled by
--async-dns
option.
The asynchronous DNS is not capable of IPv6 yet.
By disabling asynchronous DNS, aria2 is IPv6 enabled
application, at
least for HTTP download.
* src/AbstractCommand.cc
* src/AbstractCommand.h
* src/AsyncNameResolver.cc
* src/AsyncNameResolver.h
* src/DHTEntryPointNameResolveCommand.cc
* src/DHTEntryPointNameResolveCommand.h
* src/DownloadEngine.cc
* src/DownloadEngine.h
* src/FtpInitiateConnectionCommand.cc
* src/FtpInitiateConnectionCommand.h
* src/HelpItemFactory.cc
* src/HttpInitiateConnectionCommand.cc
* src/HttpInitiateConnectionCommand.h
* src/InitiateConnectionCommand.cc
* src/InitiateConnectionCommand.h
* src/Makefile.am
* src/Makefile.in
* src/NameResolver.cc
* src/NameResolver.h
* src/OptionHandlerFactory.cc
* src/SocketCore.cc
* src/SocketCore.h
* src/Util.cc
* src/Util.h
* src/option_processing.cc
* src/prefs.h
* src/usage_text.h
Diffstat (limited to 'src/FtpInitiateConnectionCommand.cc')
| -rw-r--r-- | src/FtpInitiateConnectionCommand.cc | 77 |
1 files changed, 20 insertions, 57 deletions
diff --git a/src/FtpInitiateConnectionCommand.cc b/src/FtpInitiateConnectionCommand.cc index 79bb3690..1908483f 100644 --- a/src/FtpInitiateConnectionCommand.cc +++ b/src/FtpInitiateConnectionCommand.cc @@ -33,9 +33,7 @@ */ /* copyright --> */ #include "FtpInitiateConnectionCommand.h" -#include "NameResolver.h" #include "DownloadEngine.h" -#include "RequestGroup.h" #include "Option.h" #include "Request.h" #include "FtpNegotiationCommand.h" @@ -47,58 +45,35 @@ #include "Logger.h" #include "message.h" #include "prefs.h" -#include "Util.h" #include "HttpConnection.h" #include "Socket.h" namespace aria2 { -FtpInitiateConnectionCommand::FtpInitiateConnectionCommand(int cuid, - const RequestHandle& req, - RequestGroup* requestGroup, - DownloadEngine* e) - :AbstractCommand(cuid, req, requestGroup, e), - nameResolver(new NameResolver()) -{ - setTimeout(e->option->getAsInt(PREF_DNS_TIMEOUT)); - setStatus(Command::STATUS_ONESHOT_REALTIME); - disableReadCheckSocket(); - disableWriteCheckSocket(); -} +FtpInitiateConnectionCommand::FtpInitiateConnectionCommand +(int cuid, + const RequestHandle& req, + RequestGroup* requestGroup, + DownloadEngine* e) + :InitiateConnectionCommand(cuid, req, requestGroup, e) {} -FtpInitiateConnectionCommand::~FtpInitiateConnectionCommand() { -#ifdef ENABLE_ASYNC_DNS - disableNameResolverCheck(nameResolver); -#endif // ENABLE_ASYNC_DNS -} +FtpInitiateConnectionCommand::~FtpInitiateConnectionCommand() {} -bool FtpInitiateConnectionCommand::executeInternal() { - std::string hostname; - if(useHttpProxy()) { - hostname = e->option->get(PREF_HTTP_PROXY_HOST); - } else { - hostname = req->getHost(); - } - if(!Util::isNumbersAndDotsNotation(hostname)) { - if(resolveHostname(hostname, nameResolver)) { - hostname = nameResolver->getAddrString(); - } else { - e->commands.push_back(this); - return false; - } - } +Command* FtpInitiateConnectionCommand::createNextCommand +(const std::deque<std::string>& resolvedAddresses) +{ Command* command; - if(useHttpProxy()) { + 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(hostname, + socket->establishConnection(resolvedAddresses.front(), e->option->getAsInt(PREF_HTTP_PROXY_PORT)); - if(useHttpProxyGet()) { + if(useHTTPProxyGet()) { SharedHandle<HttpConnection> hc(new HttpConnection(cuid, socket, e->option)); command = new HttpRequestCommand(cuid, req, _requestGroup, hc, e, socket); - } else if(useHttpProxyConnect()) { + } else if(useHTTPProxyConnect()) { command = new FtpTunnelRequestCommand(cuid, req, _requestGroup, e, socket); } else { // TODO @@ -107,30 +82,18 @@ bool FtpInitiateConnectionCommand::executeInternal() { } else { logger->info(MSG_CONNECTING_TO_SERVER, cuid, req->getHost().c_str(), req->getPort()); - socket->establishConnection(hostname, req->getPort()); + socket->establishConnection(resolvedAddresses.front(), req->getPort()); command = new FtpNegotiationCommand(cuid, req, _requestGroup, e, socket); } - e->commands.push_back(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; + return command; } -bool FtpInitiateConnectionCommand::useHttpProxyConnect() const { - return useHttpProxy() && e->option->get(PREF_FTP_VIA_HTTP_PROXY) == V_TUNNEL; +bool FtpInitiateConnectionCommand::useHTTPProxyGet() const { + return useHTTPProxy() && e->option->get(PREF_FTP_VIA_HTTP_PROXY) == V_GET; } -#ifdef ENABLE_ASYNC_DNS -bool FtpInitiateConnectionCommand::nameResolveFinished() const { - return nameResolver->getStatus() == NameResolver::STATUS_SUCCESS || - nameResolver->getStatus() == NameResolver::STATUS_ERROR; +bool FtpInitiateConnectionCommand::useHTTPProxyConnect() const { + return useHTTPProxy() && e->option->get(PREF_FTP_VIA_HTTP_PROXY) == V_TUNNEL; } -#endif // ENABLE_ASYNC_DNS } // namespace aria2 |
