summaryrefslogtreecommitdiff
path: root/include/dns.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/dns.h')
-rw-r--r--include/dns.h61
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