Fixes to improve portability (especially to OS X, Solaris, OpenBSD).
[ircu2.10.12-pk.git] / include / res.h
index c9f52af1f63671446a384203c9939bcbd14d7393..6ca91ce48d204682b290cc6b3c75dc073803414a 100644 (file)
 /*
- * 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
+#include "listener.h"
+#include "ircd_addrinfo.h"
+
+#ifndef INADDR_NONE
+#define INADDR_NONE ((uint32_t)-1)
 #endif
 
-struct Client;
-struct hostent;
+struct StatDesc;
 
-struct DNSReply {
-  struct hostent* hp;        /* hostent struct  */
-  int             ref_count; /* reference count */
-};
+/* 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 DNSReply* reply); /* 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 struct DNSReply* gethost_byname(const char* name, 
-                                       const struct DNSQuery* req);
-extern struct DNSReply* 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);
-/*
- * 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);
+struct DNSQuery
+{
+  void *vptr; /* pointer used by callback to identify request */
+  void (*callback)(void* vptr, struct DNSReply *reply); /* callback to call */
+};
 
-/*
- * add_local_domain - append local domain suffix to hostnames that 
- * don't contain a dot '.'
- * name - string to append to
- * len  - total length of the buffer
- * name is modified only if there is enough space in the buffer to hold
- * the suffix
- */
-extern void add_local_domain(char* name, size_t len);
+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