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