diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-03-28 15:08:22 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-03-28 15:08:22 +0000 |
| commit | 24d199632b1ceb4d1d359d054359c7b71110a80a (patch) | |
| tree | 843509a47a5526bc89aaa245034db621fa2de5f4 /src/AbstractCommand.cc | |
| parent | 843e641483429073d817067d316a3b732541891b (diff) | |
2007-03-28 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
To cache resolved hostname:
* src/AbstractCommand.h, src/AbstractCommand.cc
(resolveHostname): Put outside #ifdef ENABLE_ASYNC_DNS clause.
Added dns cache.
* src/FtpInitiateConnectionCommand.cc
(executeInternal): Removed #ifdef ENABLE_ASYNC_DNS.
* src/NameResolver.h, src/NameResolver.cc: Added synchronized
NameResolver working without ares.
* src/TorrentRequestInfo.cc
(execute): Don't cache dns in torrent download.
* src/HttpInitiateConnectionCommand.cc
(executeInternal): Removed #ifdef ENABLE_ASYNC_DNS
* src/DNSCache.h: New class.
* src/UrlRequestInfo.cc
(execute): Use dns cache
Diffstat (limited to 'src/AbstractCommand.cc')
| -rw-r--r-- | src/AbstractCommand.cc | 63 |
1 files changed, 41 insertions, 22 deletions
diff --git a/src/AbstractCommand.cc b/src/AbstractCommand.cc index d2014542..cfbdee81 100644 --- a/src/AbstractCommand.cc +++ b/src/AbstractCommand.cc @@ -40,6 +40,7 @@ #include "message.h" #include "SleepCommand.h" #include "prefs.h" +#include "DNSCache.h" AbstractCommand::AbstractCommand(int cuid, const RequestHandle& req, @@ -207,6 +208,46 @@ void AbstractCommand::setWriteCheckSocket(const SocketHandle& socket) { } } +bool AbstractCommand::resolveHostname(const string& hostname, + const NameResolverHandle& resolver) { + string ipaddr = DNSCacheSingletonHolder::instance()->find(hostname); + if(ipaddr.empty()) { +#ifdef ENABLE_ASYNC_DNS + 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()); + DNSCacheSingletonHolder::instance()->put(hostname, resolver->getAddrString()); + return true; + break; + case NameResolver::STATUS_ERROR: + throw new DlAbortEx("CUID#%d - Name resolution for %s failed:%s", cuid, + hostname.c_str(), + resolver->getError().c_str()); + default: + return false; + } +#else + logger->info("CUID#%d - Resolving hostname %s", cuid, hostname.c_str()); + resolver->resolve(hostname); + logger->info("CUID#%d - Name resolution complete: %s -> %s", cuid, + hostname.c_str(), resolver->getAddrString().c_str()); + DNSCacheSingletonHolder::instance()->put(hostname, resolver->getAddrString()); + return true; +#endif // ENABLE_ASYNC_DNS + } else { + logger->info("CUID#%d - DNS cache hit: %s -> %s", cuid, + hostname.c_str(), ipaddr.c_str()); + resolver->setAddr(ipaddr); + return true; + } +} + #ifdef ENABLE_ASYNC_DNS void AbstractCommand::setNameResolverCheck(const NameResolverHandle& resolver) { nameResolverCheck = true; @@ -218,28 +259,6 @@ void AbstractCommand::disableNameResolverCheck(const NameResolverHandle& resolve e->deleteNameResolverCheck(resolver, this); } -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 DlAbortEx("CUID#%d - Name resolution for %s failed:%s", cuid, - hostname.c_str(), - resolver->getError().c_str()); - default: - return false; - } -} - bool AbstractCommand::nameResolveFinished() const { return false; } |
