+/**
+ * A DNS Resource Record (rr)
+ */
+class ResourceRecord;
+
+/**
+ * A set of requests keyed by request id
+ */
+typedef std::map<int,DNSRequest*> requestlist;
+
+/**
+ * An iterator into a set of requests
+ */
+typedef requestlist::iterator requestlist_iter;
+
+/**
+ * Query and resource record types
+ */
+enum QueryType
+{
+ DNS_QUERY_A = 1, /* 'A' record: an ipv4 address */
+ DNS_QUERY_CNAME = 5, /* 'CNAME' record: An alias */
+ DNS_QUERY_PTR = 12, /* 'PTR' record: a hostname */
+ DNS_QUERY_AAAA = 28, /* 'AAAA' record: an ipv6 address */
+
+ DNS_QUERY_PTR4 = 0xFFFD, /* Force 'PTR' to use IPV4 scemantics */
+ DNS_QUERY_PTR6 = 0xFFFE, /* Force 'PTR' to use IPV6 scemantics */
+};
+
+#ifdef IPV6
+const QueryType DNS_QUERY_FORWARD = DNS_QUERY_AAAA;
+const QueryType DNS_QUERY_REVERSE = DNS_QUERY_PTR;
+#else
+const QueryType DNS_QUERY_FORWARD = DNS_QUERY_A;
+const QueryType DNS_QUERY_REVERSE = DNS_QUERY_PTR;
+#endif
+
+/**
+ * Used internally to force PTR lookups to use a certain protocol scemantics,
+ * e.g. x.x.x.x.in-addr.arpa for v4, and *.ip6.arpa for v6.
+ */
+enum ForceProtocol
+{
+ PROTOCOL_IPV4 = 0, /* Forced to use ipv4 */
+ PROTOCOL_IPV6 = 1 /* Forced to use ipv6 */
+};
+