Merge branch 'vendor/TCPDUMP'
[dragonfly.git] / contrib / bind-9.3 / 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.16.2.1.10.5 2006/03/02 00:37:20 marka Exp $ */
19
20 #ifndef DNS_PEER_H
21 #define DNS_PEER_H 1
22
23 /*****
24  ***** Module Info
25  *****/
26
27 /*
28  * Data structures for peers (e.g. a 'server' config file statement)
29  */
30
31 /***
32  *** Imports
33  ***/
34
35 #include <isc/lang.h>
36 #include <isc/magic.h>
37 #include <isc/netaddr.h>
38
39 #include <dns/types.h>
40
41 #define DNS_PEERLIST_MAGIC      ISC_MAGIC('s','e','R','L')
42 #define DNS_PEER_MAGIC          ISC_MAGIC('S','E','r','v')
43
44 #define DNS_PEERLIST_VALID(ptr) ISC_MAGIC_VALID(ptr, DNS_PEERLIST_MAGIC)
45 #define DNS_PEER_VALID(ptr)     ISC_MAGIC_VALID(ptr, DNS_PEER_MAGIC)
46
47 /***
48  *** Types
49  ***/
50
51 struct dns_peerlist {
52         unsigned int            magic;
53         isc_uint32_t            refs;
54
55         isc_mem_t              *mem;
56
57         ISC_LIST(dns_peer_t) elements;
58 };
59
60 struct dns_peer {
61         unsigned int            magic;
62         isc_uint32_t            refs;
63
64         isc_mem_t              *mem;
65
66         isc_netaddr_t           address;
67         isc_boolean_t           bogus;
68         dns_transfer_format_t   transfer_format;
69         isc_uint32_t            transfers;
70         isc_boolean_t           support_ixfr;
71         isc_boolean_t           provide_ixfr;
72         isc_boolean_t           request_ixfr;
73         isc_boolean_t           support_edns;
74         dns_name_t             *key;
75         isc_sockaddr_t         *transfer_source;
76
77         isc_uint32_t            bitflags;
78
79         ISC_LINK(dns_peer_t)    next;
80 };
81
82 /***
83  *** Functions
84  ***/
85
86 ISC_LANG_BEGINDECLS
87
88 isc_result_t
89 dns_peerlist_new(isc_mem_t *mem, dns_peerlist_t **list);
90
91 void
92 dns_peerlist_attach(dns_peerlist_t *source, dns_peerlist_t **target);
93
94 void
95 dns_peerlist_detach(dns_peerlist_t **list);
96
97 /*
98  * After return caller still holds a reference to peer.
99  */
100 void
101 dns_peerlist_addpeer(dns_peerlist_t *peers, dns_peer_t *peer);
102
103 /*
104  * Ditto. */
105 isc_result_t
106 dns_peerlist_peerbyaddr(dns_peerlist_t *peers, isc_netaddr_t *addr,
107                         dns_peer_t **retval);
108
109 /*
110  * What he said.
111  */
112 isc_result_t
113 dns_peerlist_currpeer(dns_peerlist_t *peers, dns_peer_t **retval);
114
115 isc_result_t
116 dns_peer_new(isc_mem_t *mem, isc_netaddr_t *ipaddr, dns_peer_t **peer);
117
118 void
119 dns_peer_attach(dns_peer_t *source, dns_peer_t **target);
120
121 void
122 dns_peer_detach(dns_peer_t **list);
123
124 isc_result_t
125 dns_peer_setbogus(dns_peer_t *peer, isc_boolean_t newval);
126
127 isc_result_t
128 dns_peer_getbogus(dns_peer_t *peer, isc_boolean_t *retval);
129
130 isc_result_t
131 dns_peer_setrequestixfr(dns_peer_t *peer, isc_boolean_t newval);
132
133 isc_result_t
134 dns_peer_getrequestixfr(dns_peer_t *peer, isc_boolean_t *retval);
135
136 isc_result_t
137 dns_peer_setprovideixfr(dns_peer_t *peer, isc_boolean_t newval);
138
139 isc_result_t
140 dns_peer_getprovideixfr(dns_peer_t *peer, isc_boolean_t *retval);
141
142 isc_result_t
143 dns_peer_setsupportedns(dns_peer_t *peer, isc_boolean_t newval);
144
145 isc_result_t
146 dns_peer_getsupportedns(dns_peer_t *peer, isc_boolean_t *retval);
147
148 isc_result_t
149 dns_peer_settransfers(dns_peer_t *peer, isc_uint32_t newval);
150
151 isc_result_t
152 dns_peer_gettransfers(dns_peer_t *peer, isc_uint32_t *retval);
153
154 isc_result_t
155 dns_peer_settransferformat(dns_peer_t *peer, dns_transfer_format_t newval);
156
157 isc_result_t
158 dns_peer_gettransferformat(dns_peer_t *peer, dns_transfer_format_t *retval);
159
160 isc_result_t
161 dns_peer_setkeybycharp(dns_peer_t *peer, const char *keyval);
162
163 isc_result_t
164 dns_peer_getkey(dns_peer_t *peer, dns_name_t **retval);
165
166 isc_result_t
167 dns_peer_setkey(dns_peer_t *peer, dns_name_t **keyval);
168
169 isc_result_t
170 dns_peer_settransfersource(dns_peer_t *peer,
171                            const isc_sockaddr_t *transfer_source);
172
173 isc_result_t
174 dns_peer_gettransfersource(dns_peer_t *peer, isc_sockaddr_t *transfer_source);
175
176 ISC_LANG_ENDDECLS
177
178 #endif /* DNS_PEER_H */