diff --git a/src/DownloadEngine.cc b/src/DownloadEngine.cc index e9bb3e43..4cf1f9ef 100644 --- a/src/DownloadEngine.cc +++ b/src/DownloadEngine.cc @@ -328,7 +328,7 @@ void DownloadEngine::poolSocket const std::string& proxyhost, uint16_t proxyport, const SharedHandle& sock, - const std::map& options, + const std::string& options, time_t timeout) { SocketPoolEntry e(sock, options, timeout); @@ -387,7 +387,7 @@ void DownloadEngine::poolSocket const std::string& username, const SharedHandle& proxyRequest, const SharedHandle& socket, - const std::map& options, + const std::string& options, time_t timeout) { if(!proxyRequest) { @@ -441,7 +441,7 @@ DownloadEngine::popPooledSocket SharedHandle DownloadEngine::popPooledSocket -(std::map& options, +(std::string& options, const std::string& ipaddr, uint16_t port, const std::string& username, const std::string& proxyhost, uint16_t proxyport) @@ -475,7 +475,7 @@ DownloadEngine::popPooledSocket SharedHandle DownloadEngine::popPooledSocket -(std::map& options, +(std::string& options, const std::vector& ipaddrs, uint16_t port, const std::string& username) { @@ -492,16 +492,18 @@ DownloadEngine::popPooledSocket DownloadEngine::SocketPoolEntry::SocketPoolEntry (const SharedHandle& socket, - const std::map& options, - time_t timeout): - socket_(socket), - options_(options), - timeout_(timeout) {} + const std::string& options, + time_t timeout) + : socket_(socket), + options_(options), + timeout_(timeout) +{} DownloadEngine::SocketPoolEntry::SocketPoolEntry -(const SharedHandle& socket, time_t timeout): - socket_(socket), - timeout_(timeout) {} +(const SharedHandle& socket, time_t timeout) + : socket_(socket), + timeout_(timeout) +{} DownloadEngine::SocketPoolEntry::~SocketPoolEntry() {} diff --git a/src/DownloadEngine.h b/src/DownloadEngine.h index 346f6ab4..91d827f8 100644 --- a/src/DownloadEngine.h +++ b/src/DownloadEngine.h @@ -84,15 +84,15 @@ private: class SocketPoolEntry { private: SharedHandle socket_; - - std::map options_; + // protocol specific option string + std::string options_; time_t timeout_; Timer registeredTime_; public: SocketPoolEntry(const SharedHandle& socket, - const std::map& option, + const std::string& option, time_t timeout); SocketPoolEntry(const SharedHandle& socket, @@ -107,7 +107,7 @@ private: return socket_; } - const std::map& getOptions() const + const std::string& getOptions() const { return options_; } @@ -242,16 +242,16 @@ public: const std::string& username, const std::string& proxyhost, uint16_t proxyport, const SharedHandle& sock, - const std::map& options, + const std::string& options, time_t timeout = 15); void poolSocket(const SharedHandle& request, const std::string& username, const SharedHandle& proxyRequest, const SharedHandle& socket, - const std::map& options, + const std::string& options, time_t timeout = 15); - + void poolSocket(const std::string& ipaddr, uint16_t port, const std::string& proxyhost, uint16_t proxyport, const SharedHandle& sock, @@ -268,7 +268,7 @@ public: const std::string& proxyhost, uint16_t proxyport); SharedHandle popPooledSocket - (std::map& options, + (std::string& options, const std::string& ipaddr, uint16_t port, const std::string& username, @@ -280,7 +280,7 @@ public: SharedHandle popPooledSocket - (std::map& options, + (std::string& options, const std::vector& ipaddrs, uint16_t port, const std::string& username); diff --git a/src/FtpFinishDownloadCommand.cc b/src/FtpFinishDownloadCommand.cc index ecfdd838..1af8fdce 100644 --- a/src/FtpFinishDownloadCommand.cc +++ b/src/FtpFinishDownloadCommand.cc @@ -85,11 +85,9 @@ bool FtpFinishDownloadCommand::execute() } if(status == 226) { if(getOption()->getAsBool(PREF_FTP_REUSE_CONNECTION)) { - std::map options; - options["baseWorkingDir"] = ftpConnection_->getBaseWorkingDir(); getDownloadEngine()->poolSocket (getRequest(), ftpConnection_->getUser(), createProxyRequest(), - getSocket(), options); + getSocket(), ftpConnection_->getBaseWorkingDir()); } } else { A2_LOG_INFO(fmt("CUID#%" PRId64 " - Bad status for transfer complete.", diff --git a/src/FtpInitiateConnectionCommand.cc b/src/FtpInitiateConnectionCommand.cc index 0a5951da..2700b85f 100644 --- a/src/FtpInitiateConnectionCommand.cc +++ b/src/FtpInitiateConnectionCommand.cc @@ -76,7 +76,7 @@ Command* FtpInitiateConnectionCommand::createNextCommand { Command* command; if(proxyRequest) { - std::map options; + std::string options; SharedHandle pooledSocket; std::string proxyMethod = resolveProxyMethod(getRequest()->getProtocol()); if(proxyMethod == V_GET) { @@ -124,12 +124,13 @@ Command* FtpInitiateConnectionCommand::createNextCommand } else { setConnectedAddrInfo(getRequest(), hostname, pooledSocket); if(proxyMethod == V_TUNNEL) { + // options contains "baseWorkingDir" command = new FtpNegotiationCommand(getCuid(), getRequest(), getFileEntry(), getRequestGroup(), getDownloadEngine(), pooledSocket, FtpNegotiationCommand::SEQ_SEND_CWD_PREP, - options["baseWorkingDir"]); + options); } else if(proxyMethod == V_GET) { // Use GET for FTP via HTTP proxy. getRequest()->setMethod(Request::METHOD_GET); @@ -150,7 +151,7 @@ Command* FtpInitiateConnectionCommand::createNextCommand } } } else { - std::map options; + std::string options; SharedHandle pooledSocket = getDownloadEngine()->popPooledSocket (options, resolvedAddresses, @@ -169,12 +170,13 @@ Command* FtpInitiateConnectionCommand::createNextCommand getRequest()->setConnectedAddrInfo(hostname, addr, port); command = c; } else { + // options contains "baseWorkingDir" command = new FtpNegotiationCommand(getCuid(), getRequest(), getFileEntry(), getRequestGroup(), getDownloadEngine(), pooledSocket, FtpNegotiationCommand::SEQ_SEND_CWD_PREP, - options["baseWorkingDir"]); + options); setConnectedAddrInfo(getRequest(), hostname, pooledSocket); } } diff --git a/src/FtpNegotiationCommand.cc b/src/FtpNegotiationCommand.cc index 662a4746..796910bc 100644 --- a/src/FtpNegotiationCommand.cc +++ b/src/FtpNegotiationCommand.cc @@ -959,10 +959,10 @@ bool FtpNegotiationCommand::processSequence void FtpNegotiationCommand::poolConnection() const { if(getOption()->getAsBool(PREF_FTP_REUSE_CONNECTION)) { - std::map options; - options["baseWorkingDir"] = ftp_->getBaseWorkingDir(); + // Store ftp_->getBaseWorkingDir() as options getDownloadEngine()->poolSocket(getRequest(), ftp_->getUser(), - createProxyRequest(), getSocket(), options); + createProxyRequest(), getSocket(), + ftp_->getBaseWorkingDir()); } }