+/** DNS query and response header. */
+typedef struct
+{
+ unsigned id :16; /**< query identification number */
+#ifdef WORDS_BIGENDIAN
+ /* fields in third byte */
+ unsigned qr: 1; /**< response flag */
+ unsigned opcode: 4; /**< purpose of message */
+ unsigned aa: 1; /**< authoritive answer */
+ unsigned tc: 1; /**< truncated message */
+ unsigned rd: 1; /**< recursion desired */
+ /* fields in fourth byte */
+ unsigned ra: 1; /**< recursion available */
+ unsigned unused :1; /**< unused bits (MBZ as of 4.9.3a3) */
+ unsigned ad: 1; /**< authentic data from named */
+ unsigned cd: 1; /**< checking disabled by resolver */
+ unsigned rcode :4; /**< response code */
+#else
+ /* fields in third byte */
+ unsigned rd :1; /**< recursion desired */
+ unsigned tc :1; /**< truncated message */
+ unsigned aa :1; /**< authoritive answer */
+ unsigned opcode :4; /**< purpose of message */
+ unsigned qr :1; /**< response flag */
+ /* fields in fourth byte */
+ unsigned rcode :4; /**< response code */
+ unsigned cd: 1; /**< checking disabled by resolver */
+ unsigned ad: 1; /**< authentic data from named */
+ unsigned unused :1; /**< unused bits (MBZ as of 4.9.3a3) */
+ unsigned ra :1; /**< recursion available */
+#endif
+ /* remaining bytes */
+ unsigned qdcount :16; /**< number of question entries */
+ unsigned ancount :16; /**< number of answer entries */
+ unsigned nscount :16; /**< number of authority entries */
+ unsigned arcount :16; /**< number of resource entries */
+} HEADER;
+
+extern void restart_resolver(void);
+extern void clear_nameservers(void);
+extern void add_nameserver(const char *ipaddr);
+extern void add_local_domain(char *hname, size_t size);
+extern size_t cres_mem(struct Client* cptr);
+extern void delete_resolver_queries(const void *vptr);
+extern void report_dns_servers(struct Client *source_p, const struct StatDesc *sd, char *param);
+extern void gethost_byname(const char *name, dns_callback_f callback, void *ctx);
+extern void gethost_byaddr(const struct irc_in_addr *addr, dns_callback_f callback, void *ctx);