2010-08-01 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Added --enable-async-dns6 option. This option enables IPv6 name
	resolution in asynchronous DNS resolver. This option will be
	ignored when --async-dns=false.
	* doc/aria2c.1.txt
	* src/AbstractCommand.cc
	* src/AsyncNameResolver.cc
	* src/AsyncNameResolver.h
	* src/DHTEntryPointNameResolveCommand.cc
	* src/OptionHandlerFactory.cc
	* src/download_helper.cc
	* src/prefs.cc
	* src/prefs.h
	* src/usage_text.h
pull/1/head
Tatsuhiro Tsujikawa 2010-08-01 05:59:35 +00:00
parent 3a0f45ec8d
commit 939a372727
13 changed files with 112 additions and 14 deletions

View File

@ -1,3 +1,19 @@
2010-08-01 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added --enable-async-dns6 option. This option enables IPv6 name
resolution in asynchronous DNS resolver. This option will be
ignored when --async-dns=false.
* doc/aria2c.1.txt
* src/AbstractCommand.cc
* src/AsyncNameResolver.cc
* src/AsyncNameResolver.h
* src/DHTEntryPointNameResolveCommand.cc
* src/OptionHandlerFactory.cc
* src/download_helper.cc
* src/prefs.cc
* src/prefs.h
* src/usage_text.h
2010-07-31 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Use hostname of original URI when counting hostname in

View File

@ -2,12 +2,12 @@
.\" Title: aria2c
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
.\" Date: 07/19/2010
.\" Date: 08/01/2010
.\" Manual: Aria2 Manual
.\" Source: Aria2 1.10.0
.\" Language: English
.\"
.TH "ARIA2C" "1" "07/19/2010" "Aria2 1\&.10\&.0" "Aria2 Manual"
.TH "ARIA2C" "1" "08/01/2010" "Aria2 1\&.10\&.0" "Aria2 Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@ -1127,6 +1127,13 @@ Disable IPv6\&. This is useful if you have to use broken DNS and want to avoid t
\fIfalse\fR
.RE
.PP
\fB\-\-enable\-async\-dns6\fR[=\fItrue\fR|\fIfalse\fR]
.RS 4
Enable IPv6 name resolution in asynchronous DNS resolver\&. This option will be ignored when
\fB\-\-async\-dns\fR=\fIfalse\fR\&. Default:
\fIfalse\fR
.RE
.PP
\fB\-\-enable\-direct\-io\fR[=\fItrue\fR|\fIfalse\fR]
.RS 4
Enable directI/O, which lowers cpu usage while allocating/checking files\&. Turn off if you encounter any error\&. Default:
@ -2612,6 +2619,17 @@ min\-split\-size
conditional\-get
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
enable\-async\-dns6
.RE
.sp
These options have exactly same meaning of the ones in the command\-line options, but it just applies to the URIs it belongs to\&.
.sp
For example, the content of uri\&.txt is

View File

@ -1955,6 +1955,16 @@ writes the piece to the appropriate files.</td>
</p>
</dd>
<dt class="hdlist1">
<strong>--enable-async-dns6</strong>[=<em>true</em>|<em>false</em>]
</dt>
<dd>
<p>
Enable IPv6 name resolution in asynchronous DNS resolver. This
option will be ignored when <strong>--async-dns</strong>=<em>false</em>.
Default: <em>false</em>
</p>
</dd>
<dt class="hdlist1">
<strong>--enable-direct-io</strong>[=<em>true</em>|<em>false</em>]
</dt>
<dd>
@ -3003,6 +3013,11 @@ min-split-size
conditional-get
</p>
</li>
<li>
<p>
enable-async-dns6
</p>
</li>
</ul></div>
<div class="paragraph"><p>These options have exactly same meaning of the ones in the
command-line options, but it just applies to the URIs it belongs to.</p></div>
@ -4258,7 +4273,7 @@ files in the program, then also delete it here.</p></div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2010-07-19 13:48:41 JST
Last updated 2010-08-01 14:56:58 JST
</div>
</div>
</body>

View File

@ -774,6 +774,12 @@ Advanced Options
Disable IPv6. This is useful if you have to use broken DNS and want
to avoid terribly slow AAAA record lookup. Default: 'false'
*--enable-async-dns6*[='true'|'false']::
Enable IPv6 name resolution in asynchronous DNS resolver. This
option will be ignored when *--async-dns*='false'.
Default: 'false'
*--enable-direct-io*[='true'|'false']::
Enable directI/O, which lowers cpu usage while allocating/checking files.
Turn off if you encounter any error.
@ -1265,6 +1271,7 @@ of URIs. These optional lines must start with white space(s).
* max-connection-per-server
* min-split-size
* conditional-get
* enable-async-dns6
These options have exactly same meaning of the ones in the
command-line options, but it just applies to the URIs it belongs to.

View File

@ -638,7 +638,13 @@ bool AbstractCommand::isAsyncNameResolverInitialized() const
void AbstractCommand::initAsyncNameResolver(const std::string& hostname)
{
asyncNameResolver_.reset(new AsyncNameResolver());
int family;
if(getOption()->getAsBool(PREF_ENABLE_ASYNC_DNS6)) {
family = AF_UNSPEC;
} else {
family = AF_INET;
}
asyncNameResolver_.reset(new AsyncNameResolver(family));
if(getLogger()->info()) {
getLogger()->info(MSG_RESOLVING_HOSTNAME,
util::itos(getCuid()).c_str(), hostname.c_str());

View File

@ -53,15 +53,24 @@ void callback(void* arg, int status, int timeouts, struct hostent* host)
return;
}
for(char** ap = host->h_addr_list; *ap; ++ap) {
struct in_addr addr;
memcpy(&addr, *ap, sizeof(in_addr));
resolverPtr->resolvedAddresses_.push_back(inet_ntoa(addr));
char addrstring[INET6_ADDRSTRLEN];
const char* dst =
inet_ntop(host->h_addrtype, *ap, addrstring, sizeof(addrstring));
if(dst) {
resolverPtr->resolvedAddresses_.push_back(dst);
}
}
if(resolverPtr->resolvedAddresses_.empty()) {
resolverPtr->error_ = "inet_ntop failed";
resolverPtr->status_ = AsyncNameResolver::STATUS_ERROR;
} else {
resolverPtr->status_ = AsyncNameResolver::STATUS_SUCCESS;
}
resolverPtr->status_ = AsyncNameResolver::STATUS_SUCCESS;
}
AsyncNameResolver::AsyncNameResolver():
status_(STATUS_READY)
AsyncNameResolver::AsyncNameResolver(int family):
status_(STATUS_READY),
family_(family)
{
// TODO evaluate return value
ares_init(&channel_);
@ -76,7 +85,7 @@ void AsyncNameResolver::resolve(const std::string& name)
{
hostname_ = name;
status_ = STATUS_QUERYING;
ares_gethostbyname(channel_, name.c_str(), AF_INET, callback, this);
ares_gethostbyname(channel_, name.c_str(), family_, callback, this);
}
int AsyncNameResolver::getFds(fd_set* rfdsPtr, fd_set* wfdsPtr) const

View File

@ -63,13 +63,14 @@ public:
};
private:
STATUS status_;
int family_;
ares_channel channel_;
std::vector<std::string> resolvedAddresses_;
std::string error_;
std::string hostname_;
public:
AsyncNameResolver();
AsyncNameResolver(int family);
~AsyncNameResolver();

View File

@ -81,7 +81,13 @@ bool DHTEntryPointNameResolveCommand::execute()
}
#ifdef ENABLE_ASYNC_DNS
if(resolver_.isNull()) {
resolver_.reset(new AsyncNameResolver());
int family;
if(e_->getOption()->getAsBool(PREF_ENABLE_ASYNC_DNS6)) {
family = AF_UNSPEC;
} else {
family = AF_INET;
}
resolver_.reset(new AsyncNameResolver(family));
}
#endif // ENABLE_ASYNC_DNS
try {

View File

@ -192,6 +192,17 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
op->hide();
handlers.push_back(op);
}
#ifdef ENABLE_ASYNC_DNS
{
SharedHandle<OptionHandler> op(new BooleanOptionHandler
(PREF_ENABLE_ASYNC_DNS6,
TEXT_ENABLE_ASYNC_DNS6,
V_FALSE,
OptionHandler::OPT_ARG));
op->addTag(TAG_ADVANCED);
handlers.push_back(op);
}
#endif // ENABLE_ASYNC_DNS
#ifdef ENABLE_DIRECT_IO
{
SharedHandle<OptionHandler> op(new BooleanOptionHandler

View File

@ -162,7 +162,8 @@ const std::set<std::string>& listRequestOptions()
PREF_HTTP_ACCEPT_GZIP,
PREF_MAX_CONNECTION_PER_SERVER,
PREF_MIN_SPLIT_SIZE,
PREF_CONDITIONAL_GET
PREF_CONDITIONAL_GET,
PREF_ENABLE_ASYNC_DNS6
};
static std::set<std::string> requestOptions
(vbegin(REQUEST_OPTIONS), vend(REQUEST_OPTIONS));

View File

@ -198,6 +198,8 @@ const std::string PREF_MIN_SPLIT_SIZE("min-split-size");
const std::string PREF_CONDITIONAL_GET("conditional-get");
// value: true | false
const std::string PREF_SELECT_LEAST_USED_HOST("select-least-used-host");
// value: true | false
const std::string PREF_ENABLE_ASYNC_DNS6("enable-async-dns6");
/**
* FTP related preferences

View File

@ -202,6 +202,8 @@ extern const std::string PREF_MIN_SPLIT_SIZE;
extern const std::string PREF_CONDITIONAL_GET;
// value: true | false
extern const std::string PREF_SELECT_LEAST_USED_HOST;
// value: true | false
extern const std::string PREF_ENABLE_ASYNC_DNS6;
/**
* FTP related preferences

View File

@ -710,3 +710,7 @@
" download completes but before seeding.\n" \
" See --on-download-start option for the\n" \
" requirement of COMMAND.")
#define TEXT_ENABLE_ASYNC_DNS6 \
_(" --enable-async-dns6[=true|false] Enable IPv6 name resolution in asynchronous\n" \
" DNS resolver. This option will be ignored when\n" \
" --async-dns=false.")