summaryrefslogtreecommitdiff
path: root/src/AbstractCommand.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2006-08-11 12:29:55 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2006-08-11 12:29:55 +0000
commitf2d4faad083ffb1bdf622090f63283150bd95aeb (patch)
treedbcff240417b7879e93958a2fbbf493b83a943bc /src/AbstractCommand.cc
parent7ca1b43eddd1aba1c71a38dfb46b5ac5685b43d0 (diff)
2006-08-11 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
To add asynchronous DNS support(libares): * src/AbstractCommand.h (setNameResolverCheck): New function. (disableNameResolverCheck): New function (resolveHostname): New function. * src/AbstractCommand.cc (setNameResolverCheck): New function. (disableNameResolverCheck): New function (resolveHostname): New function. * src/FtpInitiateConnectionCommand.h (nameResolver): New function. * src/FtpInitiateConnectionCommand.cc (Util.h): Included. (FtpInitiateConnectionCommand): Call disableReadCheckSocket, disableWriteCheckSocket. (~FtpInitiateConnectionCommand): Call disableNameResolverCheck. (executeInternal): Added async DNS support. * src/HttpInitiateConnectionCommand.h (nameResolver): New function. * src/HttpInitiateConnectionCommand.cc (DlRetryEx.h): Included. (HttpInitiateConnectionCommand): Call disableReadCheckSocket, disableWriteCheckSocket. (~HttpInitiateConnectionCommand): Call disableNameResolverCheck. (executeInternal): Added async DNS support. * src/NameResolver.h: New class. Note: #include <ares.h> is surrounded by extern "C" declaration. * src/NameResolver.cc: New class. * src/Util.h: (isNumberAndDotsNotation): New function * src/Util.cc (isNumberAndDotsNotation): New function. * src/DownloadEngine.h (NameResolver.h): Included. (NameResolverEntry): New class. (NameResolverEntries): New type definition. (addNameResolverCheck): New function. (deleteNameResolverCheck): New function. * src/DownloadEngine.cc (run): Initialize cp with 0. (SetDescriptor::operator()): Added for NameResolverEntry. (AccumulateActiveUuid::operator()): Added for NameResolverEntry. (waitData): Check nameResolver entries. (updateFdSet): Update fds in nameResolver entries. (addNameResolverCheck): New function. (deleteNameResolverCheck): new function. * src/PeerInteractionCommand.cc (executeInternal): Fixed wrong socket handling. * src/main.cc (main): Fixed the initial value of PREF_LOWEST_SPEED_LIMIT option to 0. * src/Util.cc (fileChecksum): Removed the call to ctx.digestReset().
Diffstat (limited to 'src/AbstractCommand.cc')
-rw-r--r--src/AbstractCommand.cc31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/AbstractCommand.cc b/src/AbstractCommand.cc
index ffd72393..bc9f005f 100644
--- a/src/AbstractCommand.cc
+++ b/src/AbstractCommand.cc
@@ -169,3 +169,34 @@ void AbstractCommand::setWriteCheckSocket(const SocketHandle& socket) {
}
}
}
+
+#ifdef HAVE_LIBARES
+void AbstractCommand::setNameResolverCheck(const NameResolverHandle& resolver) {
+ e->addNameResolverCheck(resolver, getUuid());
+}
+
+void AbstractCommand::disableNameResolverCheck(const NameResolverHandle& resolver) {
+ e->deleteNameResolverCheck(resolver, getUuid());
+}
+
+bool AbstractCommand::resolveHostname(const string& hostname,
+ const NameResolverHandle& resolver) {
+ switch(resolver->getStatus()) {
+ case NameResolver::STATUS_READY:
+ logger->info("CUID#%d - Resolving hostname %s", cuid, hostname.c_str());
+ resolver->resolve(hostname);
+ setNameResolverCheck(resolver);
+ return false;
+ case NameResolver::STATUS_SUCCESS:
+ logger->info("CUID#%d - Name resolution complete: %s -> %s", cuid,
+ hostname.c_str(), resolver->getAddrString().c_str());
+ return true;
+ break;
+ case NameResolver::STATUS_ERROR:
+ throw new DlRetryEx("CUID#%d - Name resolution failed:%s", cuid,
+ resolver->getError().c_str());
+ default:
+ return false;
+ }
+}
+#endif // HAVE_LIBARES