summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-02-18 01:04:11 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-02-18 01:04:11 +0900
commitd3d1293974485ea3ff8ee69737ee0b0996f93149 (patch)
treefee40fe0bd920bc65d737b7af360ba45724c57c9
parent838601329688156a6b29fd201e57f885bf53a5e1 (diff)
Check the availability of ares_set_servers and ares_addr_node.
-rw-r--r--m4/libcares.m47
-rw-r--r--src/AbstractCommand.cc7
-rw-r--r--src/AsyncNameResolver.cc13
-rw-r--r--src/AsyncNameResolver.h7
-rw-r--r--src/DHTEntryPointNameResolveCommand.cc6
-rw-r--r--src/DownloadEngine.cc8
-rw-r--r--src/DownloadEngine.h6
-rw-r--r--src/MultiUrlRequestInfo.cc3
-rw-r--r--src/OptionHandlerFactory.cc2
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