Merge branch 'vendor/NCURSES'
[dragonfly.git] / contrib / bind / lib / dns / include / dns / rdataslab.h
1 /*
2  * Copyright (C) 2004-2007  Internet Systems Consortium, Inc. ("ISC")
3  * Copyright (C) 1999-2002  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: rdataslab.h,v 1.31 2007/06/19 23:47:17 tbox Exp $ */
19
20 #ifndef DNS_RDATASLAB_H
21 #define DNS_RDATASLAB_H 1
22
23 /*! \file dns/rdataslab.h
24  * \brief
25  * Implements storage of rdatasets into slabs of memory.
26  *
27  * MP:
28  *\li   Clients of this module must impose any required synchronization.
29  *
30  * Reliability:
31  *\li   This module deals with low-level byte streams.  Errors in any of
32  *      the functions are likely to crash the server or corrupt memory.
33  *
34  *\li   If the caller passes invalid memory references, these functions are
35  *      likely to crash the server or corrupt memory.
36  *
37  * Resources:
38  *\li   None.
39  *
40  * Security:
41  *\li   None.
42  *
43  * Standards:
44  *\li   None.
45  */
46
47 /***
48  *** Imports
49  ***/
50
51 #include <isc/lang.h>
52
53 #include <dns/types.h>
54
55 ISC_LANG_BEGINDECLS
56
57 #define DNS_RDATASLAB_FORCE 0x1
58 #define DNS_RDATASLAB_EXACT 0x2
59
60 /***
61  *** Functions
62  ***/
63
64 isc_result_t
65 dns_rdataslab_fromrdataset(dns_rdataset_t *rdataset, isc_mem_t *mctx,
66                            isc_region_t *region, unsigned int reservelen);
67 /*%<
68  * Slabify a rdataset.  The slab area will be allocated and returned
69  * in 'region'.
70  *
71  * Requires:
72  *\li   'rdataset' is valid.
73  *
74  * Ensures:
75  *\li   'region' will have base pointing to the start of allocated memory,
76  *      with the slabified region beginning at region->base + reservelen.
77  *      region->length contains the total length allocated.
78  *
79  * Returns:
80  *\li   ISC_R_SUCCESS           - successful completion
81  *\li   ISC_R_NOMEMORY          - no memory.
82  *\li   XXX others
83  */
84
85 void
86 dns_rdataslab_tordataset(unsigned char *slab, unsigned int reservelen,
87                          dns_rdataclass_t rdclass, dns_rdatatype_t rdtype,
88                          dns_rdatatype_t covers, dns_ttl_t ttl,
89                          dns_rdataset_t *rdataset);
90 /*%<
91  * Construct an rdataset from a slab.
92  *
93  * Requires:
94  *\li   'slab' points to a slab.
95  *\li   'rdataset' is disassociated.
96  *
97  * Ensures:
98  *\li   'rdataset' is associated and points to a valid rdataest.
99  */
100 unsigned int
101 dns_rdataslab_size(unsigned char *slab, unsigned int reservelen);
102 /*%<
103  * Return the total size of an rdataslab.
104  *
105  * Requires:
106  *\li   'slab' points to a slab.
107  *
108  * Returns:
109  *\li   The number of bytes in the slab, including the reservelen.
110  */
111
112 isc_result_t
113 dns_rdataslab_merge(unsigned char *oslab, unsigned char *nslab,
114                     unsigned int reservelen, isc_mem_t *mctx,
115                     dns_rdataclass_t rdclass, dns_rdatatype_t type,
116                     unsigned int flags, unsigned char **tslabp);
117 /*%<
118  * Merge 'oslab' and 'nslab'.
119  */
120
121 isc_result_t
122 dns_rdataslab_subtract(unsigned char *mslab, unsigned char *sslab,
123                        unsigned int reservelen, isc_mem_t *mctx,
124                        dns_rdataclass_t rdclass, dns_rdatatype_t type,
125                        unsigned int flags, unsigned char **tslabp);
126 /*%<
127  * Subtract 'sslab' from 'mslab'.  If 'exact' is true then all elements
128  * of 'sslab' must exist in 'mslab'.
129  *
130  * XXX
131  * valid flags are DNS_RDATASLAB_EXACT
132  */
133
134 isc_boolean_t
135 dns_rdataslab_equal(unsigned char *slab1, unsigned char *slab2,
136                     unsigned int reservelen);
137 /*%<
138  * Compare two rdataslabs for equality.  This does _not_ do a full
139  * DNSSEC comparison.
140  *
141  * Requires:
142  *\li   'slab1' and 'slab2' point to slabs.
143  *
144  * Returns:
145  *\li   ISC_TRUE if the slabs are equal, ISC_FALSE otherwise.
146  */
147 isc_boolean_t
148 dns_rdataslab_equalx(unsigned char *slab1, unsigned char *slab2,
149                      unsigned int reservelen, dns_rdataclass_t rdclass, 
150                      dns_rdatatype_t type);
151 /*%<
152  * Compare two rdataslabs for DNSSEC equality. 
153  *
154  * Requires:
155  *\li   'slab1' and 'slab2' point to slabs.
156  *
157  * Returns:
158  *\li   ISC_TRUE if the slabs are equal, #ISC_FALSE otherwise.
159  */
160
161 ISC_LANG_ENDDECLS
162
163 #endif /* DNS_RDATASLAB_H */