summaryrefslogtreecommitdiff
path: root/src/InitiateConnectionCommand.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-04-06 16:09:24 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-04-06 16:09:24 +0000
commitdd7590f927f73a887f579aba6f309e1539943e6d (patch)
treee01734e1403ea7ec0322930b9c422f4be8ef9897 /src/InitiateConnectionCommand.cc
parent538c463fc0f9b7c2be2fb641bce106e015c401dd (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.cc46
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,