summaryrefslogtreecommitdiff
path: root/src/NameResolveCommand.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-03-26 17:12:52 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-03-26 17:20:27 +0900
commitd64089632e82a2548752c7a6baaa68365a795a74 (patch)
tree57fc7b85a8c1290975d58fa4761b04a7695bf7e3 /src/NameResolveCommand.cc
parentc81b1321122e8509b55c94c0cbca0d8d6d319f0c (diff)
parenta7cd943a06b1a5ff4515b57060b84037f8d01f9f (diff)
Merge branch 'master' into random-webseeding
Diffstat (limited to 'src/NameResolveCommand.cc')
-rw-r--r--src/NameResolveCommand.cc102
1 files changed, 54 insertions, 48 deletions
diff --git a/src/NameResolveCommand.cc b/src/NameResolveCommand.cc
index 53232969..ec0ce044 100644
--- a/src/NameResolveCommand.cc
+++ b/src/NameResolveCommand.cc
@@ -52,15 +52,15 @@
namespace aria2 {
-NameResolveCommand::NameResolveCommand
-(cuid_t cuid, DownloadEngine* e,
- const std::shared_ptr<UDPTrackerRequest>& req)
- : Command(cuid),
- e_(e),
+NameResolveCommand::NameResolveCommand(
+ cuid_t cuid, DownloadEngine* e,
+ const std::shared_ptr<UDPTrackerRequest>& req)
+ : Command(cuid),
+ e_(e),
#ifdef ENABLE_ASYNC_DNS
- asyncNameResolverMan_(make_unique<AsyncNameResolverMan>()),
+ asyncNameResolverMan_(make_unique<AsyncNameResolverMan>()),
#endif // ENABLE_ASYNC_DNS
- req_(req)
+ req_(req)
{
#ifdef ENABLE_ASYNC_DNS
configureAsyncNameResolverMan(asyncNameResolverMan_.get(), e_->getOption());
@@ -83,36 +83,43 @@ bool NameResolveCommand::execute()
// alive until force shutdown is
// commencing. RequestGroupMan::downloadFinished() is useless here
// at the moment.
- if(e_->isForceHaltRequested()) {
+ if (e_->isForceHaltRequested()) {
onShutdown();
return true;
}
const std::string& hostname = req_->remoteAddr;
std::vector<std::string> res;
- if(util::isNumericHost(hostname)) {
+ if (util::isNumericHost(hostname)) {
res.push_back(hostname);
- } else {
+ }
+ else {
#ifdef ENABLE_ASYNC_DNS
- if(e_->getOption()->getAsBool(PREF_ASYNC_DNS)) {
- if(resolveHostname(res, hostname) == 0) {
+ if (e_->getOption()->getAsBool(PREF_ASYNC_DNS)) {
+ if (resolveHostname(res, hostname) == 0) {
e_->addCommand(std::unique_ptr<Command>(this));
return false;
}
- } else
+ }
+ else
#endif // ENABLE_ASYNC_DNS
- {
- NameResolver resolver;
- resolver.setSocktype(SOCK_DGRAM);
- try {
- resolver.resolve(res, hostname);
- } catch(RecoverableException& e) {
- A2_LOG_ERROR_EX(EX_EXCEPTION_CAUGHT, e);
- }
+ {
+ NameResolver resolver;
+ resolver.setSocktype(SOCK_DGRAM);
+ if (e_->getOption()->getAsBool(PREF_DISABLE_IPV6)) {
+ resolver.setFamily(AF_INET);
+ }
+ try {
+ resolver.resolve(res, hostname);
}
+ catch (RecoverableException& e) {
+ A2_LOG_ERROR_EX(EX_EXCEPTION_CAUGHT, e);
+ }
+ }
}
- if(res.empty()) {
+ if (res.empty()) {
onFailure();
- } else {
+ }
+ else {
onSuccess(res, e_);
}
return true;
@@ -130,8 +137,8 @@ void NameResolveCommand::onFailure()
req_->error = UDPT_ERR_NETWORK;
}
-void NameResolveCommand::onSuccess
-(const std::vector<std::string>& addrs, DownloadEngine* e)
+void NameResolveCommand::onSuccess(const std::vector<std::string>& addrs,
+ DownloadEngine* e)
{
req_->remoteAddr = addrs[0];
e->getBtRegistry()->getUDPTrackerClient()->addRequest(req_);
@@ -139,35 +146,34 @@ void NameResolveCommand::onSuccess
#ifdef ENABLE_ASYNC_DNS
-int NameResolveCommand::resolveHostname
-(std::vector<std::string>& res, const std::string& hostname)
+int NameResolveCommand::resolveHostname(std::vector<std::string>& res,
+ const std::string& hostname)
{
- if(!asyncNameResolverMan_->started()) {
+ if (!asyncNameResolverMan_->started()) {
asyncNameResolverMan_->startAsync(hostname, e_, this);
+ }
+
+ switch (asyncNameResolverMan_->getStatus()) {
+ case -1:
+ A2_LOG_INFO(fmt(MSG_NAME_RESOLUTION_FAILED, getCuid(), hostname.c_str(),
+ asyncNameResolverMan_->getLastError().c_str()));
+ return -1;
+ case 0:
return 0;
- } else {
- switch(asyncNameResolverMan_->getStatus()) {
- case -1:
- A2_LOG_INFO
- (fmt(MSG_NAME_RESOLUTION_FAILED, getCuid(), hostname.c_str(),
- asyncNameResolverMan_->getLastError().c_str()));
+ case 1:
+ asyncNameResolverMan_->getResolvedAddress(res);
+ if (res.empty()) {
+ A2_LOG_INFO(fmt(MSG_NAME_RESOLUTION_FAILED, getCuid(), hostname.c_str(),
+ "No address returned"));
return -1;
- case 0:
- return 0;
- case 1:
- asyncNameResolverMan_->getResolvedAddress(res);
- if(res.empty()) {
- A2_LOG_INFO
- (fmt(MSG_NAME_RESOLUTION_FAILED, getCuid(), hostname.c_str(),
- "No address returned"));
- return -1;
- } else {
- A2_LOG_INFO(fmt(MSG_NAME_RESOLUTION_COMPLETE,
- getCuid(), hostname.c_str(), res.front().c_str()));
- return 1;
- }
+ }
+ else {
+ A2_LOG_INFO(fmt(MSG_NAME_RESOLUTION_COMPLETE, getCuid(), hostname.c_str(),
+ res.front().c_str()));
+ return 1;
}
}
+
// Unreachable
return 0;
}