summaryrefslogtreecommitdiff
path: root/src/FtpInitiateConnectionCommand.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-05-08 11:18:36 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-05-08 11:18:36 +0000
commitd52bce74d3a40d75dcfa3496e67abbed9f1fcba8 (patch)
tree09c82779bd07f661340800db790e68fe612ca56c /src/FtpInitiateConnectionCommand.cc
parentd8f911b5815f2f6857b1c0035182391e5d6ecaf5 (diff)
2008-05-08 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Rewritten name resolver. Now async DNS can be disabled by --async-dns option. The asynchronous DNS is not capable of IPv6 yet. By disabling asynchronous DNS, aria2 is IPv6 enabled application, at least for HTTP download. * src/AbstractCommand.cc * src/AbstractCommand.h * src/AsyncNameResolver.cc * src/AsyncNameResolver.h * src/DHTEntryPointNameResolveCommand.cc * src/DHTEntryPointNameResolveCommand.h * src/DownloadEngine.cc * src/DownloadEngine.h * src/FtpInitiateConnectionCommand.cc * src/FtpInitiateConnectionCommand.h * src/HelpItemFactory.cc * src/HttpInitiateConnectionCommand.cc * src/HttpInitiateConnectionCommand.h * src/InitiateConnectionCommand.cc * src/InitiateConnectionCommand.h * src/Makefile.am * src/Makefile.in * src/NameResolver.cc * src/NameResolver.h * src/OptionHandlerFactory.cc * src/SocketCore.cc * src/SocketCore.h * src/Util.cc * src/Util.h * src/option_processing.cc * src/prefs.h * src/usage_text.h
Diffstat (limited to 'src/FtpInitiateConnectionCommand.cc')
-rw-r--r--src/FtpInitiateConnectionCommand.cc77
1 files changed, 20 insertions, 57 deletions
diff --git a/src/FtpInitiateConnectionCommand.cc b/src/FtpInitiateConnectionCommand.cc
index 79bb3690..1908483f 100644
--- a/src/FtpInitiateConnectionCommand.cc
+++ b/src/FtpInitiateConnectionCommand.cc
@@ -33,9 +33,7 @@
*/
/* copyright --> */
#include "FtpInitiateConnectionCommand.h"
-#include "NameResolver.h"
#include "DownloadEngine.h"
-#include "RequestGroup.h"
#include "Option.h"
#include "Request.h"
#include "FtpNegotiationCommand.h"
@@ -47,58 +45,35 @@
#include "Logger.h"
#include "message.h"
#include "prefs.h"
-#include "Util.h"
#include "HttpConnection.h"
#include "Socket.h"
namespace aria2 {
-FtpInitiateConnectionCommand::FtpInitiateConnectionCommand(int cuid,
- const RequestHandle& req,
- RequestGroup* requestGroup,
- DownloadEngine* e)
- :AbstractCommand(cuid, req, requestGroup, e),
- nameResolver(new NameResolver())
-{
- setTimeout(e->option->getAsInt(PREF_DNS_TIMEOUT));
- setStatus(Command::STATUS_ONESHOT_REALTIME);
- disableReadCheckSocket();
- disableWriteCheckSocket();
-}
+FtpInitiateConnectionCommand::FtpInitiateConnectionCommand
+(int cuid,
+ const RequestHandle& req,
+ RequestGroup* requestGroup,
+ DownloadEngine* e)
+ :InitiateConnectionCommand(cuid, req, requestGroup, e) {}
-FtpInitiateConnectionCommand::~FtpInitiateConnectionCommand() {
-#ifdef ENABLE_ASYNC_DNS
- disableNameResolverCheck(nameResolver);
-#endif // ENABLE_ASYNC_DNS
-}
+FtpInitiateConnectionCommand::~FtpInitiateConnectionCommand() {}
-bool FtpInitiateConnectionCommand::executeInternal() {
- std::string hostname;
- if(useHttpProxy()) {
- hostname = e->option->get(PREF_HTTP_PROXY_HOST);
- } else {
- hostname = req->getHost();
- }
- if(!Util::isNumbersAndDotsNotation(hostname)) {
- if(resolveHostname(hostname, nameResolver)) {
- hostname = nameResolver->getAddrString();
- } else {
- e->commands.push_back(this);
- return false;
- }
- }
+Command* FtpInitiateConnectionCommand::createNextCommand
+(const std::deque<std::string>& resolvedAddresses)
+{
Command* command;
- if(useHttpProxy()) {
+ if(useHTTPProxy()) {
logger->info(MSG_CONNECTING_TO_SERVER, cuid,
e->option->get(PREF_HTTP_PROXY_HOST).c_str(),
e->option->getAsInt(PREF_HTTP_PROXY_PORT));
- socket->establishConnection(hostname,
+ socket->establishConnection(resolvedAddresses.front(),
e->option->getAsInt(PREF_HTTP_PROXY_PORT));
- if(useHttpProxyGet()) {
+ if(useHTTPProxyGet()) {
SharedHandle<HttpConnection> hc(new HttpConnection(cuid, socket, e->option));
command = new HttpRequestCommand(cuid, req, _requestGroup, hc, e, socket);
- } else if(useHttpProxyConnect()) {
+ } else if(useHTTPProxyConnect()) {
command = new FtpTunnelRequestCommand(cuid, req, _requestGroup, e, socket);
} else {
// TODO
@@ -107,30 +82,18 @@ bool FtpInitiateConnectionCommand::executeInternal() {
} else {
logger->info(MSG_CONNECTING_TO_SERVER, cuid, req->getHost().c_str(),
req->getPort());
- socket->establishConnection(hostname, req->getPort());
+ socket->establishConnection(resolvedAddresses.front(), req->getPort());
command = new FtpNegotiationCommand(cuid, req, _requestGroup, e, socket);
}
- e->commands.push_back(command);
- return true;
-}
-
-bool FtpInitiateConnectionCommand::useHttpProxy() const {
- return e->option->get(PREF_HTTP_PROXY_ENABLED) == V_TRUE;
-}
-
-bool FtpInitiateConnectionCommand::useHttpProxyGet() const {
- return useHttpProxy() && e->option->get(PREF_FTP_VIA_HTTP_PROXY) == V_GET;
+ return command;
}
-bool FtpInitiateConnectionCommand::useHttpProxyConnect() const {
- return useHttpProxy() && e->option->get(PREF_FTP_VIA_HTTP_PROXY) == V_TUNNEL;
+bool FtpInitiateConnectionCommand::useHTTPProxyGet() const {
+ return useHTTPProxy() && e->option->get(PREF_FTP_VIA_HTTP_PROXY) == V_GET;
}
-#ifdef ENABLE_ASYNC_DNS
-bool FtpInitiateConnectionCommand::nameResolveFinished() const {
- return nameResolver->getStatus() == NameResolver::STATUS_SUCCESS ||
- nameResolver->getStatus() == NameResolver::STATUS_ERROR;
+bool FtpInitiateConnectionCommand::useHTTPProxyConnect() const {
+ return useHTTPProxy() && e->option->get(PREF_FTP_VIA_HTTP_PROXY) == V_TUNNEL;
}
-#endif // ENABLE_ASYNC_DNS
} // namespace aria2