diff options
Diffstat (limited to 'include/dns.h')
-rw-r--r-- | include/dns.h | 61 |
1 files changed, 19 insertions, 42 deletions
diff --git a/include/dns.h b/include/dns.h index b9ba27e2e..522b58ee5 100644 --- a/include/dns.h +++ b/include/dns.h @@ -23,11 +23,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "socket.h" #include "base.h" -struct dns_ip4list -{ - insp_inaddr ip; - dns_ip4list *next; -}; +typedef std::pair<int,std::string> DNSResult; /** * Error types that class Resolver can emit to its error method. @@ -41,25 +37,20 @@ enum ResolverError }; -/** The DNS class allows fast nonblocking resolution of hostnames - * and ip addresses. It is based heavily upon firedns by Ian Gulliver. - * Modules SHOULD avoid using this class to resolve hostnames and IP - * addresses, as it is a low-level wrapper around the UDP socket routines - * and is probably not abstracted enough for real use. Please see the - * Resolver class if you wish to resolve hostnames. +/** DNS is a singleton class used by the core to dispatch dns + * requests to the dns server, and route incoming dns replies + * back to Resolver objects, based upon the request ID. You + * should never use this class yourself. */ class DNS : public Extensible { private: - insp_inaddr *binip; - unsigned char* result; - unsigned char localbuf[1024]; int t; int myid; public: int dns_getip4(const char* name); int dns_getname4(const insp_inaddr* ip); - int dns_getresult(); + DNSResult dns_getresult(); DNS(); ~DNS(); }; @@ -76,11 +67,7 @@ class DNS : public Extensible */ class Resolver : public Extensible { - private: - /** - * The lowlevel DNS object used by Resolver - */ - DNS Query; + protected: /** * The input data, either a host or an IP address */ @@ -95,13 +82,11 @@ class Resolver : public Extensible */ std::string server; /** - * The file descriptor used for the DNS lookup + * The ID allocated to your lookup. This is a pseud-random number + * between 0 and 65535, a value of -1 indicating a failure. + * The core uses this to route results to the correct objects. */ int myid; - /** - * The output data, e.g. a hostname or an IP. - */ - std::string result; public: /** * Initiate DNS lookup. Your class should not attempt to delete or free these @@ -114,14 +99,13 @@ class Resolver : public Extensible * @param forward Set to true to perform a forward lookup (hostname to ip) or false * to perform a reverse lookup (ip to hostname). Lookups on A records and PTR * records are supported. CNAME and MX are not supported by this resolver. - * @param dnsserver This optional parameter specifies an alterate nameserver to use. - * If it is not specified, or is an empty string, the value of ServerConfig::DNSServer - * is used instead. + * If InspIRCd is compiled with ipv6 support, lookups on AAAA records are preferred + * and supported over A records. * @throw ModuleException This class may throw an instance of ModuleException, in the - * event there are no more file descriptors, or a similar hard error occurs such as + * event a lookup could not be allocated, or a similar hard error occurs such as * the network being down. */ - Resolver(const std::string &source, bool forward, const std::string &dnsserver); + Resolver(const std::string &source, bool forward); /** * The default destructor does nothing. */ @@ -142,7 +126,7 @@ class Resolver : public Extensible * for reading, and will then dispatch a call to either OnLookupComplete or * OnError. You should never call this method yourself. */ - bool ProcessResult(); + bool ProcessResult(const std::string &result); /** * Returns the file descriptor of this class. This is primarily used by the core * to determine where in various tables to place a pointer to your class, but it @@ -152,11 +136,13 @@ class Resolver : public Extensible }; /** - * Clear the pointer table used for Resolver classes + * Clear the pointer table used for Resolver classes, + * translate ServerConfig::DNSServer into an insp_inaddr, + * establish binding on UDP socket for DNS requests. */ void init_dns(); /** - * Deal with a Resolver class which has become writeable + * Deal with a Resolver class which has become readable */ void dns_deal_with_classes(int fd); /** @@ -164,13 +150,4 @@ void dns_deal_with_classes(int fd); */ bool dns_add_class(Resolver* r); -#ifdef THREADED_DNS -/** This is the handler function for multi-threaded DNS. - * It cannot be a class member as pthread will not let us - * create a thread whos handler function is a member of - * a class (ugh). - */ -void* dns_task(void* arg); -#endif - #endif |