]> CyberLeo.Net >> Repos - FreeBSD/releng/7.2.git/blob - contrib/bind9/lib/dns/include/dns/peer.h
Create releng/7.2 from stable/7 in preparation for 7.2-RELEASE.
[FreeBSD/releng/7.2.git] / contrib / bind9 / lib / dns / include / dns / peer.h
1 /*
2  * Copyright (C) 2004-2006  Internet Systems Consortium, Inc. ("ISC")
3  * Copyright (C) 2000, 2001, 2003  Internet Software Consortium.
4  *
5  * Permission to use, copy, modify, and 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.20.18.8 2006/02/28 03:10:48 marka Exp $ */
19
20 #ifndef DNS_PEER_H
21 #define DNS_PEER_H 1
22
23 /*****
24  ***** Module Info
25  *****/
26
27 /*! \file
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         dns_name_t             *key;
77         isc_sockaddr_t         *transfer_source;
78         isc_sockaddr_t         *notify_source;  
79         isc_sockaddr_t         *query_source;  
80         isc_uint16_t            udpsize;                /* recieve size */
81         isc_uint16_t            maxudp;                 /* transmit size */
82
83         isc_uint32_t            bitflags;
84
85         ISC_LINK(dns_peer_t)    next;
86 };
87
88 /***
89  *** Functions
90  ***/
91
92 ISC_LANG_BEGINDECLS
93
94 isc_result_t
95 dns_peerlist_new(isc_mem_t *mem, dns_peerlist_t **list);
96
97 void
98 dns_peerlist_attach(dns_peerlist_t *source, dns_peerlist_t **target);
99
100 void
101 dns_peerlist_detach(dns_peerlist_t **list);
102
103 /*
104  * After return caller still holds a reference to peer.
105  */
106 void
107 dns_peerlist_addpeer(dns_peerlist_t *peers, dns_peer_t *peer);
108
109 /*
110  * Ditto. */
111 isc_result_t
112 dns_peerlist_peerbyaddr(dns_peerlist_t *peers, isc_netaddr_t *addr,
113                         dns_peer_t **retval);
114
115 /*
116  * What he said.
117  */
118 isc_result_t
119 dns_peerlist_currpeer(dns_peerlist_t *peers, dns_peer_t **retval);
120
121 isc_result_t
122 dns_peer_new(isc_mem_t *mem, isc_netaddr_t *ipaddr, dns_peer_t **peer);
123
124 isc_result_t
125 dns_peer_newprefix(isc_mem_t *mem, isc_netaddr_t *ipaddr,
126                    unsigned int prefixlen, dns_peer_t **peer);
127
128 void
129 dns_peer_attach(dns_peer_t *source, dns_peer_t **target);
130
131 void
132 dns_peer_detach(dns_peer_t **list);
133
134 isc_result_t
135 dns_peer_setbogus(dns_peer_t *peer, isc_boolean_t newval);
136
137 isc_result_t
138 dns_peer_getbogus(dns_peer_t *peer, isc_boolean_t *retval);
139
140 isc_result_t
141 dns_peer_setrequestixfr(dns_peer_t *peer, isc_boolean_t newval);
142
143 isc_result_t
144 dns_peer_getrequestixfr(dns_peer_t *peer, isc_boolean_t *retval);
145
146 isc_result_t
147 dns_peer_setprovideixfr(dns_peer_t *peer, isc_boolean_t newval);
148
149 isc_result_t
150 dns_peer_getprovideixfr(dns_peer_t *peer, isc_boolean_t *retval);
151
152 isc_result_t
153 dns_peer_setsupportedns(dns_peer_t *peer, isc_boolean_t newval);
154
155 isc_result_t
156 dns_peer_getsupportedns(dns_peer_t *peer, isc_boolean_t *retval);
157
158 isc_result_t
159 dns_peer_settransfers(dns_peer_t *peer, isc_uint32_t newval);
160
161 isc_result_t
162 dns_peer_gettransfers(dns_peer_t *peer, isc_uint32_t *retval);
163
164 isc_result_t
165 dns_peer_settransferformat(dns_peer_t *peer, dns_transfer_format_t newval);
166
167 isc_result_t
168 dns_peer_gettransferformat(dns_peer_t *peer, dns_transfer_format_t *retval);
169
170 isc_result_t
171 dns_peer_setkeybycharp(dns_peer_t *peer, const char *keyval);
172
173 isc_result_t
174 dns_peer_getkey(dns_peer_t *peer, dns_name_t **retval);
175
176 isc_result_t
177 dns_peer_setkey(dns_peer_t *peer, dns_name_t **keyval);
178
179 isc_result_t
180 dns_peer_settransfersource(dns_peer_t *peer,
181                            const isc_sockaddr_t *transfer_source);
182
183 isc_result_t
184 dns_peer_gettransfersource(dns_peer_t *peer, isc_sockaddr_t *transfer_source);
185
186 isc_result_t
187 dns_peer_setudpsize(dns_peer_t *peer, isc_uint16_t udpsize);
188
189 isc_result_t
190 dns_peer_getudpsize(dns_peer_t *peer, isc_uint16_t *udpsize);
191
192 isc_result_t
193 dns_peer_setmaxudp(dns_peer_t *peer, isc_uint16_t maxudp);
194
195 isc_result_t
196 dns_peer_getmaxudp(dns_peer_t *peer, isc_uint16_t *maxudp);
197
198 isc_result_t
199 dns_peer_setnotifysource(dns_peer_t *peer, const isc_sockaddr_t *notify_source);
200
201 isc_result_t
202 dns_peer_getnotifysource(dns_peer_t *peer, isc_sockaddr_t *notify_source);
203
204 isc_result_t
205 dns_peer_setquerysource(dns_peer_t *peer, const isc_sockaddr_t *query_source);
206
207 isc_result_t
208 dns_peer_getquerysource(dns_peer_t *peer, isc_sockaddr_t *query_source);
209
210 ISC_LANG_ENDDECLS
211
212 #endif /* DNS_PEER_H */