diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2006-08-11 12:29:55 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2006-08-11 12:29:55 +0000 |
| commit | f2d4faad083ffb1bdf622090f63283150bd95aeb (patch) | |
| tree | dbcff240417b7879e93958a2fbbf493b83a943bc /src/AbstractCommand.cc | |
| parent | 7ca1b43eddd1aba1c71a38dfb46b5ac5685b43d0 (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.cc | 31 |
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 |
