diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-04-06 16:09:24 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-04-06 16:09:24 +0000 |
| commit | dd7590f927f73a887f579aba6f309e1539943e6d (patch) | |
| tree | e01734e1403ea7ec0322930b9c422f4be8ef9897 /src/InitiateConnectionCommand.cc | |
| parent | 538c463fc0f9b7c2be2fb641bce106e015c401dd (diff) | |
2010-04-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Fixed the bug that FTP data connection is not established via
proxy when --ftp-proxy is defined and --ftp-pasv=true and
--proxy-method=tunnel.
* src/AbstractCommand.cc
* src/AbstractCommand.h
* src/FtpNegotiationCommand.cc
* src/FtpNegotiationCommand.h
* src/InitiateConnectionCommand.cc
Diffstat (limited to 'src/InitiateConnectionCommand.cc')
| -rw-r--r-- | src/InitiateConnectionCommand.cc | 46 |
1 files changed, 4 insertions, 42 deletions
diff --git a/src/InitiateConnectionCommand.cc b/src/InitiateConnectionCommand.cc index 68a4356d..8b049a87 100644 --- a/src/InitiateConnectionCommand.cc +++ b/src/InitiateConnectionCommand.cc @@ -40,7 +40,6 @@ #include "message.h" #include "prefs.h" #include "NameResolver.h" -#include "DNSCache.h" #include "SocketCore.h" #include "FileEntry.h" #include "RequestGroup.h" @@ -81,47 +80,10 @@ bool InitiateConnectionCommand::executeInternal() { port = proxyRequest->getPort(); } std::vector<std::string> addrs; - e->findAllCachedIPAddresses(std::back_inserter(addrs), hostname, port); - std::string ipaddr; - if(addrs.empty()) { -#ifdef ENABLE_ASYNC_DNS - if(getOption()->getAsBool(PREF_ASYNC_DNS)) { - if(!isAsyncNameResolverInitialized()) { - initAsyncNameResolver(hostname); - } - if(asyncResolveHostname()) { - addrs = getResolvedAddresses(); - } else { - e->commands.push_back(this); - return false; - } - } else -#endif // ENABLE_ASYNC_DNS - { - NameResolver res; - res.setSocktype(SOCK_STREAM); - if(e->option->getAsBool(PREF_DISABLE_IPV6)) { - res.setFamily(AF_INET); - } - res.resolve(addrs, hostname); - } - if(logger->info()) { - logger->info(MSG_NAME_RESOLUTION_COMPLETE, util::itos(cuid).c_str(), - hostname.c_str(), - strjoin(addrs.begin(), addrs.end(), ", ").c_str()); - } - for(std::vector<std::string>::const_iterator i = addrs.begin(), - eoi = addrs.end(); i != eoi; ++i) { - e->cacheIPAddress(hostname, *i, port); - } - ipaddr = e->findCachedIPAddress(hostname, port); - } else { - ipaddr = addrs.front(); - if(logger->info()) { - logger->info(MSG_DNS_CACHE_HIT, - util::itos(cuid).c_str(), hostname.c_str(), - strjoin(addrs.begin(), addrs.end(), ", ").c_str()); - } + std::string ipaddr = resolveHostname(addrs, hostname, port); + if(ipaddr.empty()) { + e->commands.push_back(this); + return false; } try { Command* command = createNextCommand(hostname, ipaddr, port, |
