diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-05-21 12:22:04 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-05-21 12:22:04 +0000 |
| commit | 47adbe618c85b437220588fa1f7d602e113f7875 (patch) | |
| tree | eab4b692e42875ddd2904570d87cce6d54de5b50 /src/FtpInitiateConnectionCommand.cc | |
| parent | 8f3cdfb2de7b63533fe95e5a5c24374105842784 (diff) | |
2010-05-21 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Fixed the bug that FTP download may fail when control connection
is reused. This happens because FTP server can offer different
root directory for different account. If pooled connections has
different root directory, then download will fail.
* src/DownloadEngine.cc
* src/DownloadEngine.h
* src/FtpConnection.cc
* src/FtpConnection.h
* src/FtpFinishDownloadCommand.cc
* src/FtpInitiateConnectionCommand.cc
* src/FtpNegotiationCommand.cc
Diffstat (limited to 'src/FtpInitiateConnectionCommand.cc')
| -rw-r--r-- | src/FtpInitiateConnectionCommand.cc | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/FtpInitiateConnectionCommand.cc b/src/FtpInitiateConnectionCommand.cc index d9547610..7eced52a 100644 --- a/src/FtpInitiateConnectionCommand.cc +++ b/src/FtpInitiateConnectionCommand.cc @@ -52,6 +52,8 @@ #include "Socket.h" #include "DownloadContext.h" #include "util.h" +#include "AuthConfigFactory.h" +#include "AuthConfig.h" namespace aria2 { @@ -73,9 +75,16 @@ Command* FtpInitiateConnectionCommand::createNextCommand Command* command; if(!proxyRequest.isNull()) { std::map<std::string, std::string> options; - SharedHandle<SocketCore> pooledSocket = - e->popPooledSocket(options, req->getHost(), req->getPort()); + SharedHandle<SocketCore> pooledSocket; std::string proxyMethod = resolveProxyMethod(req->getProtocol()); + if(proxyMethod == V_GET) { + pooledSocket = e->popPooledSocket(req->getHost(), req->getPort()); + } else { + pooledSocket = e->popPooledSocket + (options, req->getHost(), req->getPort(), + e->getAuthConfigFactory()->createAuthConfig + (req, getOption().get())->getUser()); + } if(pooledSocket.isNull()) { if(logger->info()) { logger->info(MSG_CONNECTING_TO_SERVER, @@ -133,7 +142,9 @@ Command* FtpInitiateConnectionCommand::createNextCommand } else { std::map<std::string, std::string> options; SharedHandle<SocketCore> pooledSocket = - e->popPooledSocket(options, resolvedAddresses, req->getPort()); + e->popPooledSocket(options, resolvedAddresses, req->getPort(), + e->getAuthConfigFactory()->createAuthConfig + (req, getOption().get())->getUser()); if(pooledSocket.isNull()) { if(logger->info()) { logger->info(MSG_CONNECTING_TO_SERVER, |
