diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-05-08 11:18:36 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-05-08 11:18:36 +0000 |
| commit | d52bce74d3a40d75dcfa3496e67abbed9f1fcba8 (patch) | |
| tree | 09c82779bd07f661340800db790e68fe612ca56c /src/NameResolver.h | |
| parent | d8f911b5815f2f6857b1c0035182391e5d6ecaf5 (diff) | |
2008-05-08 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Rewritten name resolver. Now async DNS can be disabled by
--async-dns
option.
The asynchronous DNS is not capable of IPv6 yet.
By disabling asynchronous DNS, aria2 is IPv6 enabled
application, at
least for HTTP download.
* src/AbstractCommand.cc
* src/AbstractCommand.h
* src/AsyncNameResolver.cc
* src/AsyncNameResolver.h
* src/DHTEntryPointNameResolveCommand.cc
* src/DHTEntryPointNameResolveCommand.h
* src/DownloadEngine.cc
* src/DownloadEngine.h
* src/FtpInitiateConnectionCommand.cc
* src/FtpInitiateConnectionCommand.h
* src/HelpItemFactory.cc
* src/HttpInitiateConnectionCommand.cc
* src/HttpInitiateConnectionCommand.h
* src/InitiateConnectionCommand.cc
* src/InitiateConnectionCommand.h
* src/Makefile.am
* src/Makefile.in
* src/NameResolver.cc
* src/NameResolver.h
* src/OptionHandlerFactory.cc
* src/SocketCore.cc
* src/SocketCore.h
* src/Util.cc
* src/Util.h
* src/option_processing.cc
* src/prefs.h
* src/usage_text.h
Diffstat (limited to 'src/NameResolver.h')
| -rw-r--r-- | src/NameResolver.h | 104 |
1 files changed, 6 insertions, 98 deletions
diff --git a/src/NameResolver.h b/src/NameResolver.h index 203496ba..814d8732 100644 --- a/src/NameResolver.h +++ b/src/NameResolver.h @@ -36,115 +36,23 @@ #define _D_NAME_RESOLVER_H_ #include "common.h" -#include "SharedHandle.h" -#include "a2netcompat.h" #include <string> - -#ifdef ENABLE_ASYNC_DNS - -#ifdef __cplusplus -extern "C" { -#endif -#include <ares.h> -#ifdef __cplusplus -} /* end of extern "C" */ -#endif - -#endif // ENABLE_ASYNC_DNS +#include <deque> namespace aria2 { -#ifdef ENABLE_ASYNC_DNS - -#ifdef HAVE_LIBCARES1_5 -void callback(void* arg, int status, int timeouts, struct hostent* host); -#else -void callback(void* arg, int status, struct hostent* host); -#endif // HAVE_LIBCARES1_5 - -class NameResolver { -#ifdef HAVE_LIBCARES1_5 - friend void callback(void* arg, int status, int timeouts, struct hostent* host); -#else - friend void callback(void* arg, int status, struct hostent* host); -#endif // HAVE_LIBCARES1_5 - -public: - enum STATUS { - STATUS_READY, - STATUS_QUERYING, - STATUS_SUCCESS, - STATUS_ERROR, - }; -private: - STATUS status; - ares_channel channel; - struct in_addr addr; - std::string error; -public: - NameResolver(): - status(STATUS_READY) - { - // TODO evaluate return value - ares_init(&channel); - } - - ~NameResolver() { - ares_destroy(channel); - } - - void resolve(const std::string& name); - - std::string getAddrString() const; - - const struct in_addr& getAddr() const { - return addr; - } - - const std::string& getError() const { - return error; - } - - STATUS getStatus() const { - return status; - } - - int getFds(fd_set* rfdsPtr, fd_set* wfdsPtr) const { - return ares_fds(channel, rfdsPtr, wfdsPtr); - } - - void process(fd_set* rfdsPtr, fd_set* wfdsPtr) { - ares_process(channel, rfdsPtr, wfdsPtr); - } - - bool operator==(const NameResolver& resolver) { - return this == &resolver; - } - - void setAddr(const std::string& addrString); - - void reset(); -}; - -#else // ENABLE_ASYNC_DNS - class NameResolver { private: - struct in_addr _addr; + int _socktype; public: - void resolve(const std::string& hostname); + NameResolver(); - std::string getAddrString() const; - - void setAddr(const std::string& addrString); + std::deque<std::string> resolve(const std::string& hostname); - void reset(); + // specify SOCK_STREAM or SOCK_DGRAM + void setSocktype(int socktype); }; -#endif // ENABLE_ASYNC_DNS - -typedef SharedHandle<NameResolver> NameResolverHandle; - } // namespace aria2 #endif // _D_NAME_RESOLVER_H_ |
