summaryrefslogtreecommitdiff
path: root/src/FtpInitiateConnectionCommand.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-07-02 15:18:13 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-07-02 15:18:13 +0000
commit01fdb2aaeb4dcb351931c14ca63d9347f0adc529 (patch)
tree94f6e4a327c77b358316d5790224d9cccee8e3c1 /src/FtpInitiateConnectionCommand.cc
parent8796993c71c8a326c2f261c01db5066cfc3b2848 (diff)
2009-07-03 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Try all available addresses returned by DNS until it gets connected in HTTP(S)/FTP download * src/AbstractCommand.cc * src/AbstractCommand.h * src/AbstractProxyRequestCommand.cc * src/AbstractProxyRequestCommand.h * src/DNSCache.h * src/DownloadEngine.cc * src/DownloadEngine.h * src/FtpInitiateConnectionCommand.cc * src/FtpInitiateConnectionCommand.h * src/FtpNegotiationCommand.cc * src/FtpNegotiationCommand.h * src/HttpInitiateConnectionCommand.cc * src/HttpInitiateConnectionCommand.h * src/HttpRequestCommand.cc * src/HttpRequestCommand.h * src/InitiateConnectionCommand.cc * src/InitiateConnectionCommand.h * test/DNSCacheTest.cc * test/Makefile.am * test/SimpleDNSCacheTest.cc
Diffstat (limited to 'src/FtpInitiateConnectionCommand.cc')
-rw-r--r--src/FtpInitiateConnectionCommand.cc31
1 files changed, 18 insertions, 13 deletions
diff --git a/src/FtpInitiateConnectionCommand.cc b/src/FtpInitiateConnectionCommand.cc
index 8fc880ca..c2293204 100644
--- a/src/FtpInitiateConnectionCommand.cc
+++ b/src/FtpInitiateConnectionCommand.cc
@@ -65,7 +65,8 @@ FtpInitiateConnectionCommand::FtpInitiateConnectionCommand
FtpInitiateConnectionCommand::~FtpInitiateConnectionCommand() {}
Command* FtpInitiateConnectionCommand::createNextCommand
-(const std::deque<std::string>& resolvedAddresses,
+(const std::string& hostname, const std::string& addr, uint16_t port,
+ const std::deque<std::string>& resolvedAddresses,
const SharedHandle<Request>& proxyRequest)
{
Command* command;
@@ -75,11 +76,9 @@ Command* FtpInitiateConnectionCommand::createNextCommand
e->popPooledSocket(options, req->getHost(), req->getPort());
std::string proxyMethod = resolveProxyMethod(req->getProtocol());
if(pooledSocket.isNull()) {
- logger->info(MSG_CONNECTING_TO_SERVER, cuid,
- proxyRequest->getHost().c_str(), proxyRequest->getPort());
+ logger->info(MSG_CONNECTING_TO_SERVER, cuid, addr.c_str(), port);
socket.reset(new SocketCore());
- socket->establishConnection(resolvedAddresses.front(),
- proxyRequest->getPort());
+ socket->establishConnection(addr, port);
if(proxyMethod == V_GET) {
// Use GET for FTP via HTTP proxy.
@@ -90,12 +89,16 @@ Command* FtpInitiateConnectionCommand::createNextCommand
HttpRequestCommand* c =
new HttpRequestCommand(cuid, req, _fileEntry,
_requestGroup, hc, e, socket);
+ c->setConnectedAddr(hostname, addr, port);
c->setProxyRequest(proxyRequest);
command = c;
} else if(proxyMethod == V_TUNNEL) {
- command = new FtpTunnelRequestCommand(cuid, req, _fileEntry,
- _requestGroup, e,
- proxyRequest, socket);
+ FtpTunnelRequestCommand* c =
+ new FtpTunnelRequestCommand(cuid, req, _fileEntry,
+ _requestGroup, e,
+ proxyRequest, socket);
+ c->setConnectedAddr(hostname, addr, port);
+ command = c;
} else {
// TODO
throw DL_ABORT_EX("ERROR");
@@ -128,12 +131,14 @@ Command* FtpInitiateConnectionCommand::createNextCommand
SharedHandle<SocketCore> pooledSocket =
e->popPooledSocket(options, resolvedAddresses, req->getPort());
if(pooledSocket.isNull()) {
- logger->info(MSG_CONNECTING_TO_SERVER, cuid, req->getHost().c_str(),
- req->getPort());
+ logger->info(MSG_CONNECTING_TO_SERVER, cuid, addr.c_str(), port);
socket.reset(new SocketCore());
- socket->establishConnection(resolvedAddresses.front(), req->getPort());
- command = new FtpNegotiationCommand(cuid, req, _fileEntry,
- _requestGroup, e, socket);
+ socket->establishConnection(addr, port);
+ FtpNegotiationCommand* c =
+ new FtpNegotiationCommand(cuid, req, _fileEntry,
+ _requestGroup, e, socket);
+ c->setConnectedAddr(hostname, addr, port);
+ command = c;
} else {
command =
new FtpNegotiationCommand(cuid, req, _fileEntry,