/*
- * irc2.7.2/ircd/res.h (C)opyright 1992 Darren Reed.
+ * include/ircd_res.h for referencing functions in ircd/ircd_res.c
*
* $Id$
*/
+
#ifndef INCLUDED_res_h
#define INCLUDED_res_h
-#ifndef INCLUDED_sys_types_h
-#include <sys/types.h> /* time_t */
-#define INCLUDED_sys_types_h
-#endif
+#include "listener.h"
+
+struct StatDesc;
-struct Client;
-struct hostent;
+/* Here we define some values lifted from nameser.h */
+#define NS_NOTIFY_OP 4
+#define NS_INT16SZ 2
+#define NS_IN6ADDRSZ 16
+#define NS_INADDRSZ 4
+#define NS_INT32SZ 4
+#define NS_CMPRSFLGS 0xc0
+#define NS_MAXCDNAME 255
+#define QUERY 0
+#define IQUERY 1
+#define NO_ERRORS 0
+#define SERVFAIL 2
+#define T_A 1
+#define T_AAAA 28
+#define T_PTR 12
+#define T_CNAME 5
+#define T_NULL 10
+#define C_IN 1
+#define QFIXEDSZ 4
+#define RRFIXEDSZ 10
+#define HFIXEDSZ 12
-struct DNSQuery {
- void* vptr; /* pointer used by callback to identify request */
- void (*callback)(void* vptr, struct hostent* he); /* callback to call */
+struct irc_ssaddr {
+ struct sockaddr_storage ss;
+ size_t ss_len;
};
-extern int ResolverFileDescriptor; /* GLOBAL - file descriptor (s_bsd.c) */
+struct DNSReply
+{
+ char *h_name;
+ int h_addrtype;
+ struct irc_ssaddr addr;
+};
-extern void get_res(void);
-extern void gethost_byname(const char* name, const struct DNSQuery* req);
-extern void gethost_byaddr(const char* name, const struct DNSQuery* req);
-extern int init_resolver(void);
-extern void restart_resolver(void);
-extern time_t timeout_resolver(time_t now);
+struct DNSQuery
+{
+ void *vptr; /* pointer used by callback to identify request */
+ void (*callback)(void* vptr, struct DNSReply *reply); /* callback to call */
+};
-/*
- * delete_resolver_queries - delete all outstanding queries for the
- * pointer arg, DO NOT call this from a resolver callback function the
- * resolver will delete the query itself for the affected client.
- */
-extern void delete_resolver_queries(const void* vptr);
-extern size_t cres_mem(struct Client* cptr);
-extern int m_dns(struct Client* cptr, struct Client* sptr,
- int parc, char* parv[]);
-extern int resolver_read(void);
-extern void resolver_read_multiple(int count);
-extern void flush_resolver_cache(void);
+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;
-#endif /* INCLUDED_res_h */
+extern int init_resolver(void);
+extern void restart_resolver(void);
+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, struct StatDesc *sd, int stat, char *param);
+extern void gethost_byname_type(const char *name, const struct DNSQuery *query, int type);
+extern void gethost_byname(const char *name, const struct DNSQuery *query);
+extern void gethost_byaddr(const struct irc_ssaddr *addr, const struct DNSQuery *query);
+extern void gethost_byinaddr(const struct in_addr *addr, const struct DNSQuery *query);
+#endif