diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2011-02-18 01:04:11 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2011-02-18 01:04:11 +0900 |
| commit | d3d1293974485ea3ff8ee69737ee0b0996f93149 (patch) | |
| tree | fee40fe0bd920bc65d737b7af360ba45724c57c9 | |
| parent | 838601329688156a6b29fd201e57f885bf53a5e1 (diff) | |
Check the availability of ares_set_servers and ares_addr_node.
| -rw-r--r-- | m4/libcares.m4 | 7 | ||||
| -rw-r--r-- | src/AbstractCommand.cc | 7 | ||||
| -rw-r--r-- | src/AsyncNameResolver.cc | 13 | ||||
| -rw-r--r-- | src/AsyncNameResolver.h | 7 | ||||
| -rw-r--r-- | src/DHTEntryPointNameResolveCommand.cc | 6 | ||||
| -rw-r--r-- | src/DownloadEngine.cc | 8 | ||||
| -rw-r--r-- | src/DownloadEngine.h | 6 | ||||
| -rw-r--r-- | src/MultiUrlRequestInfo.cc | 3 | ||||
| -rw-r--r-- | src/OptionHandlerFactory.cc | 2 |
9 files changed, 47 insertions, 12 deletions
diff --git a/m4/libcares.m4 b/m4/libcares.m4 index 4273917f..dd85dbc0 100644 --- a/m4/libcares.m4 +++ b/m4/libcares.m4 @@ -26,7 +26,10 @@ if test "x$have_libcares" != "xyes"; then fi if test "x$have_libcares" = "xyes"; then - + if test "x$need_librt" = "xyes"; then + LIBS="-lrt $LIBS" + fi + LIBS="-lcares $LIBS" AC_MSG_CHECKING([whether ares_host_callback accepts timeouts(c-ares >= 1.5)]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <ares.h> @@ -43,6 +46,8 @@ if test "x$have_libcares" = "xyes"; then if test "x$have_libcares1_5" = "xyes"; then AC_DEFINE([HAVE_LIBCARES1_5], [1], [Define 1 if ares_host_callback accepts timeouts(c-ares >= 1.5)]) fi + AC_CHECK_TYPES([ares_addr_node], [], [], [[#include <ares.h>]]) + AC_CHECK_FUNCS([ares_set_servers]) AC_DEFINE([HAVE_LIBCARES], [1], [Define to 1 if you have libcares.]) LIBCARES_LIBS="-L$libcares_prefix_lib -lcares" diff --git a/src/AbstractCommand.cc b/src/AbstractCommand.cc index 04c36077..f9c47358 100644 --- a/src/AbstractCommand.cc +++ b/src/AbstractCommand.cc @@ -651,7 +651,12 @@ void AbstractCommand::initAsyncNameResolver(const std::string& hostname) family = AF_INET; } asyncNameResolver_.reset - (new AsyncNameResolver(family, e_->getAsyncDNSServers())); + (new AsyncNameResolver(family +#ifdef HAVE_ARES_ADDR_NODE + , + e_->getAsyncDNSServers() +#endif // HAVE_ARES_ADDR_NODE + )); A2_LOG_INFO(fmt(MSG_RESOLVING_HOSTNAME, getCuid(), hostname.c_str())); diff --git a/src/AsyncNameResolver.cc b/src/AsyncNameResolver.cc index 832d8a45..b5ddddbc 100644 --- a/src/AsyncNameResolver.cc +++ b/src/AsyncNameResolver.cc @@ -78,18 +78,25 @@ void callback(void* arg, int status, int timeouts, struct hostent* host) } } -AsyncNameResolver::AsyncNameResolver(int family, ares_addr_node* servers): - status_(STATUS_READY), - family_(family) +AsyncNameResolver::AsyncNameResolver +(int family +#ifdef HAVE_ARES_ADDR_NODE + , ares_addr_node* servers +#endif // HAVE_ARES_ADDR_NODE + ) + : status_(STATUS_READY), + family_(family) { // TODO evaluate return value ares_init(&channel_); +#if defined HAVE_ARES_SET_SERVERS && HAVE_ARES_ADDR_NODE if(servers) { // ares_set_servers has been added since c-ares 1.7.1 if(ares_set_servers(channel_, servers) != ARES_SUCCESS) { A2_LOG_DEBUG("ares_set_servers failed"); } } +#endif // HAVE_ARES_SET_SERVERS && HAVE_ARES_ADDR_NODE } AsyncNameResolver::~AsyncNameResolver() diff --git a/src/AsyncNameResolver.h b/src/AsyncNameResolver.h index 76610813..12aca93c 100644 --- a/src/AsyncNameResolver.h +++ b/src/AsyncNameResolver.h @@ -70,7 +70,12 @@ private: std::string error_; std::string hostname_; public: - AsyncNameResolver(int family, ares_addr_node* servers); + AsyncNameResolver + (int family +#ifdef HAVE_ARES_ADDR_NODE + , ares_addr_node* servers +#endif // HAVE_ARES_ADDR_NODE + ); ~AsyncNameResolver(); diff --git a/src/DHTEntryPointNameResolveCommand.cc b/src/DHTEntryPointNameResolveCommand.cc index 2332673f..ed4b2d02 100644 --- a/src/DHTEntryPointNameResolveCommand.cc +++ b/src/DHTEntryPointNameResolveCommand.cc @@ -84,7 +84,11 @@ bool DHTEntryPointNameResolveCommand::execute() } else { family = AF_INET; } - resolver_.reset(new AsyncNameResolver(family, e_->getAsyncDNSServers())); + resolver_.reset(new AsyncNameResolver(family +#ifdef HAVE_ARES_ADDR_NODE + , e_->getAsyncDNSServers() +#endif // HAVE_ARES_ADDR_NODE + )); } #endif // ENABLE_ASYNC_DNS try { diff --git a/src/DownloadEngine.cc b/src/DownloadEngine.cc index ad024f82..95b510f0 100644 --- a/src/DownloadEngine.cc +++ b/src/DownloadEngine.cc @@ -95,9 +95,9 @@ DownloadEngine::DownloadEngine(const SharedHandle<EventPoll>& eventPoll) #ifdef ENABLE_BITTORRENT btRegistry_(new BtRegistry()), #endif // ENABLE_BITTORRENT -#ifdef ENABLE_ASYNC_DNS +#ifdef HAVE_ARES_ADDR_NODE asyncDNSServers_(0), -#endif // ENABLE_ASYNC_DNS +#endif // HAVE_ARES_ADDR_NODE dnsCache_(new DNSCache()) { unsigned char sessionId[20]; @@ -107,7 +107,9 @@ DownloadEngine::DownloadEngine(const SharedHandle<EventPoll>& eventPoll) DownloadEngine::~DownloadEngine() { cleanQueue(); +#ifdef HAVE_ARES_ADDR_NODE setAsyncDNSServers(0); +#endif // HAVE_ARES_ADDR_NODE } void DownloadEngine::cleanQueue() { @@ -564,6 +566,7 @@ void DownloadEngine::setCheckIntegrityMan checkIntegrityMan_ = ciman; } +#ifdef HAVE_ARES_ADDR_NODE void DownloadEngine::setAsyncDNSServers(ares_addr_node* asyncDNSServers) { ares_addr_node* node = asyncDNSServers_; @@ -574,5 +577,6 @@ void DownloadEngine::setAsyncDNSServers(ares_addr_node* asyncDNSServers) } asyncDNSServers_ = asyncDNSServers; } +#endif // HAVE_ARES_ADDR_NODE } // namespace aria2 diff --git a/src/DownloadEngine.h b/src/DownloadEngine.h index e86b7c69..c1071f97 100644 --- a/src/DownloadEngine.h +++ b/src/DownloadEngine.h @@ -135,9 +135,9 @@ private: CUIDCounter cuidCounter_; -#ifdef ENABLE_ASYNC_DNS +#ifdef HAVE_ARES_ADDR_NODE ares_addr_node* asyncDNSServers_; -#endif // ENABLE_ASYNC_DNS +#endif // HAVE_ARES_ADDR_NODE SharedHandle<DNSCache> dnsCache_; @@ -331,12 +331,14 @@ public: return sessionId_; } +#ifdef HAVE_ARES_ADDR_NODE void setAsyncDNSServers(ares_addr_node* asyncDNSServers); ares_addr_node* getAsyncDNSServers() const { return asyncDNSServers_; } +#endif // HAVE_ARES_ADDR_NODE }; typedef SharedHandle<DownloadEngine> DownloadEngineHandle; diff --git a/src/MultiUrlRequestInfo.cc b/src/MultiUrlRequestInfo.cc index 60e0c3fa..168d573c 100644 --- a/src/MultiUrlRequestInfo.cc +++ b/src/MultiUrlRequestInfo.cc @@ -215,10 +215,11 @@ error_code::Value MultiUrlRequestInfo::execute() } SocketCore::setTLSContext(tlsContext); #endif +#ifdef HAVE_ARES_ADDR_NODE ares_addr_node* asyncDNSServers = parseAsyncDNSServers(option_->get(PREF_ASYNC_DNS_SERVER)); e->setAsyncDNSServers(asyncDNSServers); - +#endif // HAVE_ARES_ADDR_NODE if(!Timer::monotonicClock()) { A2_LOG_WARN("Don't change system time while aria2c is running." " Doing this may make aria2c hang for long time."); diff --git a/src/OptionHandlerFactory.cc b/src/OptionHandlerFactory.cc index 138d00e8..65f92992 100644 --- a/src/OptionHandlerFactory.cc +++ b/src/OptionHandlerFactory.cc @@ -89,6 +89,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() op->addTag(TAG_ADVANCED); handlers.push_back(op); } +#if defined HAVE_ARES_SET_SERVERS && HAVE_ARES_ADDR_NODE { SharedHandle<OptionHandler> op(new DefaultOptionHandler (PREF_ASYNC_DNS_SERVER, @@ -97,6 +98,7 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers() op->addTag(TAG_ADVANCED); handlers.push_back(op); } +#endif // HAVE_ARES_SET_SERVERS && HAVE_ARES_ADDR_NODE #endif // ENABLE_ASYNC_DNS { SharedHandle<OptionHandler> op(new BooleanOptionHandler |
