Fixes to improve portability (especially to OS X, Solaris, OpenBSD).
[ircu2.10.12-pk.git] / include / res.h
1 /*
2  * include/ircd_res.h for referencing functions in ircd/ircd_res.c
3  *
4  * $Id$
5  */
6
7 #ifndef INCLUDED_res_h
8 #define INCLUDED_res_h
9
10 #include "listener.h"
11 #include "ircd_addrinfo.h"
12
13 #ifndef INADDR_NONE
14 #define INADDR_NONE ((uint32_t)-1)
15 #endif
16
17 struct StatDesc;
18
19 /* Here we define some values lifted from nameser.h */
20 #define NS_NOTIFY_OP 4
21 #define NS_INT16SZ 2
22 #define NS_IN6ADDRSZ    16
23 #define NS_INADDRSZ      4
24 #define NS_INT32SZ 4
25 #define NS_CMPRSFLGS    0xc0
26 #define NS_MAXCDNAME 255
27 #define QUERY 0
28 #define IQUERY 1
29 #define NO_ERRORS 0
30 #define SERVFAIL 2
31 #define T_A 1
32 #define T_AAAA 28
33 #define T_PTR 12
34 #define T_CNAME 5
35 #define T_NULL 10
36 #define C_IN 1
37 #define QFIXEDSZ 4
38 #define RRFIXEDSZ 10
39 #define HFIXEDSZ 12
40
41 struct irc_ssaddr
42 {
43   struct sockaddr_storage ss;
44   size_t ss_len;
45 };
46
47 struct DNSReply
48 {
49   char *h_name;
50   int h_addrtype;
51   struct irc_ssaddr addr;
52 };
53
54 struct DNSQuery
55 {
56   void *vptr; /* pointer used by callback to identify request */
57   void (*callback)(void* vptr, struct DNSReply *reply); /* callback to call */
58 };
59
60 typedef struct
61 {
62         unsigned        id :16;         /* query identification number */
63 #ifdef WORDS_BIGENDIAN
64                         /* fields in third byte */
65         unsigned        qr: 1;          /* response flag */
66         unsigned        opcode: 4;      /* purpose of message */
67         unsigned        aa: 1;          /* authoritive answer */
68         unsigned        tc: 1;          /* truncated message */
69         unsigned        rd: 1;          /* recursion desired */
70                         /* fields in fourth byte */
71         unsigned        ra: 1;          /* recursion available */
72         unsigned        unused :1;      /* unused bits (MBZ as of 4.9.3a3) */
73         unsigned        ad: 1;          /* authentic data from named */
74         unsigned        cd: 1;          /* checking disabled by resolver */
75         unsigned        rcode :4;       /* response code */
76 #else
77                         /* fields in third byte */
78         unsigned        rd :1;          /* recursion desired */
79         unsigned        tc :1;          /* truncated message */
80         unsigned        aa :1;          /* authoritive answer */
81         unsigned        opcode :4;      /* purpose of message */
82         unsigned        qr :1;          /* response flag */
83                         /* fields in fourth byte */
84         unsigned        rcode :4;       /* response code */
85         unsigned        cd: 1;          /* checking disabled by resolver */
86         unsigned        ad: 1;          /* authentic data from named */
87         unsigned        unused :1;      /* unused bits (MBZ as of 4.9.3a3) */
88         unsigned        ra :1;          /* recursion available */
89 #endif
90                         /* remaining bytes */
91         unsigned        qdcount :16;    /* number of question entries */
92         unsigned        ancount :16;    /* number of answer entries */
93         unsigned        nscount :16;    /* number of authority entries */
94         unsigned        arcount :16;    /* number of resource entries */
95 } HEADER;
96
97 extern int init_resolver(void);
98 extern void restart_resolver(void);
99 extern void add_local_domain(char *hname, size_t size);
100 extern size_t cres_mem(struct Client* cptr);
101 extern void delete_resolver_queries(const void *vptr);
102 extern void report_dns_servers(struct Client *source_p, struct StatDesc *sd, int stat, char *param);
103 extern void gethost_byname_type(const char *name, const struct DNSQuery *query, int type);
104 extern void gethost_byname(const char *name, const struct DNSQuery *query);
105 extern void gethost_byaddr(const struct irc_ssaddr *addr, const struct DNSQuery *query);
106 extern void gethost_byinaddr(const struct in_addr *addr, const struct DNSQuery *query);
107
108 #endif