summaryrefslogtreecommitdiff
path: root/src/HttpInitiateConnectionCommand.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/HttpInitiateConnectionCommand.cc')
-rw-r--r--src/HttpInitiateConnectionCommand.cc35
1 files changed, 30 insertions, 5 deletions
diff --git a/src/HttpInitiateConnectionCommand.cc b/src/HttpInitiateConnectionCommand.cc
index 73657192..cc0bc862 100644
--- a/src/HttpInitiateConnectionCommand.cc
+++ b/src/HttpInitiateConnectionCommand.cc
@@ -24,23 +24,48 @@
#include "HttpProxyRequestCommand.h"
#include "Util.h"
#include "DlAbortEx.h"
+#include "DlRetryEx.h"
#include "message.h"
#include "prefs.h"
HttpInitiateConnectionCommand::HttpInitiateConnectionCommand(int cuid,
Request* req,
- DownloadEngine* e):AbstractCommand(cuid, req, e) {}
+ DownloadEngine* e):
+ AbstractCommand(cuid, req, e)
+{
+ disableReadCheckSocket();
+ disableWriteCheckSocket();
+}
-HttpInitiateConnectionCommand::~HttpInitiateConnectionCommand() {}
+HttpInitiateConnectionCommand::~HttpInitiateConnectionCommand() {
+#ifdef HAVE_LIBARES
+ disableNameResolverCheck(nameResolver);
+#endif // HAVE_LIBARES
+}
bool HttpInitiateConnectionCommand::executeInternal(Segment segment) {
- // socket->establishConnection(...);
+ string hostname;
+ if(useProxy()) {
+ hostname = e->option->get(PREF_HTTP_PROXY_HOST);
+ } else {
+ hostname = req->getHost();
+ }
+#ifdef HAVE_LIBARES
+ if(!Util::isNumbersAndDotsNotation(hostname)) {
+ if(resolveHostname(hostname, nameResolver)) {
+ hostname = nameResolver->getAddrString();
+ } else {
+ e->commands.push_back(this);
+ return false;
+ }
+ }
+#endif // HAVE_LIBARES
Command* command;
if(useProxy()) {
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(e->option->get(PREF_HTTP_PROXY_HOST),
+ socket->establishConnection(hostname,
e->option->getAsInt(PREF_HTTP_PROXY_PORT));
if(useProxyTunnel()) {
command = new HttpProxyRequestCommand(cuid, req, e, socket);
@@ -53,7 +78,7 @@ bool HttpInitiateConnectionCommand::executeInternal(Segment segment) {
} else {
logger->info(MSG_CONNECTING_TO_SERVER, cuid, req->getHost().c_str(),
req->getPort());
- socket->establishConnection(req->getHost(), req->getPort());
+ socket->establishConnection(hostname, req->getPort());
command = new HttpRequestCommand(cuid, req, e, socket);
}
e->commands.push_back(command);