bind - Upgraded vendor branch to 9.5.2-P1
[dragonfly.git] / contrib / bind-9.5.2 / lib / dns / include / dns / peer.h
1 /*
2  * Copyright (C) 2004-2009  Internet Systems Consortium, Inc. ("ISC")
3  * Copyright (C) 2000, 2001, 2003  Internet Software Consortium.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
10  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
12  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
14  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15  * PERFORMANCE OF THIS SOFTWARE.
16  */
17
18 /* $Id: peer.h,v 1.31.128.4 2009/01/19 23:47:03 tbox Exp $ */
19
20 #ifndef DNS_PEER_H
21 #define DNS_PEER_H 1
22
23 /*****
24  ***** Module Info
25  *****/
26
27 /*! \file dns/peer.h
28  * \brief
29  * Data structures for peers (e.g. a 'server' config file statement)
30  */
31
32 /***
33  *** Imports
34  ***/
35
36 #include <isc/lang.h>
37 #include <isc/magic.h>
38 #include <isc/netaddr.h>
39
40 #include <dns/types.h>
41
42 #define DNS_PEERLIST_MAGIC      ISC_MAGIC('s','e','R','L')
43 #define DNS_PEER_MAGIC          ISC_MAGIC('S','E','r','v')
44
45 #define DNS_PEERLIST_VALID(ptr) ISC_MAGIC_VALID(ptr, DNS_PEERLIST_MAGIC)
46 #define DNS_PEER_VALID(ptr)     ISC_MAGIC_VALID(ptr, DNS_PEER_MAGIC)
47
48 /***
49  *** Types
50  ***/
51
52 struct dns_peerlist {
53         unsigned int            magic;
54         isc_uint32_t            refs;
55
56         isc_mem_t              *mem;
57
58         ISC_LIST(dns_peer_t) elements;
59 };
60
61 struct dns_peer {
62         unsigned int            magic;
63         isc_uint32_t            refs;
64
65         isc_mem_t              *mem;
66
67         isc_netaddr_t           address;
68         unsigned int            prefixlen;
69         isc_boolean_t           bogus;
70         dns_transfer_format_t   transfer_format;
71         isc_uint32_t            transfers;
72         isc_boolean_t           support_ixfr;
73         isc_boolean_t           provide_ixfr;
74         isc_boolean_t           request_ixfr;
75         isc_boolean_t           support_edns;
76         isc_boolean_t           request_nsid;
77         dns_name_t             *key;
78         isc_sockaddr_t         *transfer_source;
79         isc_sockaddr_t         *notify_source;
80         isc_sockaddr_t         *query_source;
81         isc_uint16_t            udpsize;                /* receive size */
82         isc_uint16_t            maxudp;                 /* transmit size */
83
84         isc_uint32_t            bitflags;
85
86         ISC_LINK(dns_peer_t)    next;
87 };
88
89 /***
90  *** Functions
91  ***/
92
93 ISC_LANG_BEGINDECLS
94
95 isc_result_t
96 dns_peerlist_new(isc_mem_t *mem, dns_peerlist_t **list);
97
98 void
99 dns_peerlist_attach(dns_peerlist_t *source, dns_peerlist_t **target);
100
101 void
102 dns_peerlist_detach(dns_peerlist_t **list);
103
104 /*
105  * After return caller still holds a reference to peer.
106  */
107 void
108 dns_peerlist_addpeer(dns_peerlist_t *peers, dns_peer_t *peer);
109
110 /*
111  * Ditto. */
112 isc_result_t
113 dns_peerlist_peerbyaddr(dns_peerlist_t *peers, isc_netaddr_t *addr,
114                         dns_peer_t **retval);
115
116 /*
117  * What he said.
118  */
119 isc_result_t
120 dns_peerlist_currpeer(dns_peerlist_t *peers, dns_peer_t **retval);
121
122 isc_result_t
123 dns_peer_new(isc_mem_t *mem, isc_netaddr_t *ipaddr, dns_peer_t **peer);
124
125 isc_result_t
126 dns_peer_newprefix(isc_mem_t *mem, isc_netaddr_t *ipaddr,
127                    unsigned int prefixlen, dns_peer_t **peer);
128
129 void
130 dns_peer_attach(dns_peer_t *source, dns_peer_t **target);
131
132 void
133 dns_peer_detach(dns_peer_t **list);
134
135 isc_result_t
136 dns_peer_setbogus(dns_peer_t *peer, isc_boolean_t newval);
137
138 isc_result_t
139 dns_peer_getbogus(dns_peer_t *peer, isc_boolean_t *retval);
140
141 isc_result_t
142 dns_peer_setrequestixfr(dns_peer_t *peer, isc_boolean_t newval);
143
144 isc_result_t
145 dns_peer_getrequestixfr(dns_peer_t *peer, isc_boolean_t *retval);
146
147 isc_result_t
148 dns_peer_setprovideixfr(dns_peer_t *peer, isc_boolean_t newval);
149
150 isc_result_t
151 dns_peer_getprovideixfr(dns_peer_t *peer, isc_boolean_t *retval);
152
153 isc_result_t
154 dns_peer_setrequestnsid(dns_peer_t *peer, isc_boolean_t newval);
155
156 isc_result_t
157 dns_peer_getrequestnsid(dns_peer_t *peer, isc_boolean_t *retval);
158
159 isc_result_t
160 dns_peer_setsupportedns(dns_peer_t *peer, isc_boolean_t newval);
161
162 isc_result_t
163 dns_peer_getsupportedns(dns_peer_t *peer, isc_boolean_t *retval);
164
165 isc_result_t
166 dns_peer_settransfers(dns_peer_t *peer, isc_uint32_t newval);
167
168 isc_result_t
169 dns_peer_gettransfers(dns_peer_t *peer, isc_uint32_t *retval);
170
171 isc_result_t
172 dns_peer_settransferformat(dns_peer_t *peer, dns_transfer_format_t newval);
173
174 isc_result_t
175 dns_peer_gettransferformat(dns_peer_t *peer, dns_transfer_format_t *retval);
176
177 isc_result_t
178 dns_peer_setkeybycharp(dns_peer_t *peer, const char *keyval);
179
180 isc_result_t
181 dns_peer_getkey(dns_peer_t *peer, dns_name_t **retval);
182
183 isc_result_t
184 dns_peer_setkey(dns_peer_t *peer, dns_name_t **keyval);
185
186 isc_result_t
187 dns_peer_settransfersource(dns_peer_t *peer,
188                            const isc_sockaddr_t *transfer_source);
189
190 isc_result_t
191 dns_peer_gettransfersource(dns_peer_t *peer, isc_sockaddr_t *transfer_source);
192
193 isc_result_t
194 dns_peer_setudpsize(dns_peer_t *peer, isc_uint16_t udpsize);
195
196 isc_result_t
197 dns_peer_getudpsize(dns_peer_t *peer, isc_uint16_t *udpsize);
198
199 isc_result_t
200 dns_peer_setmaxudp(dns_peer_t *peer, isc_uint16_t maxudp);
201
202 isc_result_t
203 dns_peer_getmaxudp(dns_peer_t *peer, isc_uint16_t *maxudp);
204
205 isc_result_t
206 dns_peer_setnotifysource(dns_peer_t *peer, const isc_sockaddr_t *notify_source);
207
208 isc_result_t
209 dns_peer_getnotifysource(dns_peer_t *peer, isc_sockaddr_t *notify_source);
210
211 isc_result_t
212 dns_peer_setquerysource(dns_peer_t *peer, const isc_sockaddr_t *query_source);
213
214 isc_result_t
215 dns_peer_getquerysource(dns_peer_t *peer, isc_sockaddr_t *query_source);
216
217 ISC_LANG_ENDDECLS
218
219 #endif /* DNS_PEER_H */