2 * Copyright (C) 2006, 2007, 2009 Internet Systems Consortium, Inc. ("ISC")
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
8 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
9 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
10 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
11 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
12 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
13 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14 * PERFORMANCE OF THIS SOFTWARE.
17 /* $Id: dhcid_49.c,v 1.7 2009-12-04 22:06:37 tbox Exp $ */
21 #ifndef RDATA_IN_1_DHCID_49_C
22 #define RDATA_IN_1_DHCID_49_C 1
24 #define RRTYPE_DHCID_ATTRIBUTES 0
26 static inline isc_result_t
27 fromtext_in_dhcid(ARGS_FROMTEXT) {
30 REQUIRE(rdclass == 1);
38 return (isc_base64_tobuffer(lexer, target, -1));
41 static inline isc_result_t
42 totext_in_dhcid(ARGS_TOTEXT) {
44 char buf[sizeof(" ; 64000 255 64000")];
47 REQUIRE(rdata->type == 49);
48 REQUIRE(rdata->rdclass == 1);
49 REQUIRE(rdata->length != 0);
51 dns_rdata_toregion(rdata, &sr);
53 if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
54 RETERR(str_totext("( " /*)*/, target));
55 RETERR(isc_base64_totext(&sr, tctx->width - 2, tctx->linebreak,
57 if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) {
58 RETERR(str_totext(/* ( */ " )", target));
59 if (rdata->length > 2) {
60 n = snprintf(buf, sizeof(buf), " ; %u %u %u",
61 sr.base[0] * 256 + sr.base[1],
62 sr.base[2], rdata->length - 3);
63 INSIST(n < sizeof(buf));
64 RETERR(str_totext(buf, target));
67 return (ISC_R_SUCCESS);
70 static inline isc_result_t
71 fromwire_in_dhcid(ARGS_FROMWIRE) {
75 REQUIRE(rdclass == 1);
82 isc_buffer_activeregion(source, &sr);
84 return (ISC_R_UNEXPECTEDEND);
86 isc_buffer_forward(source, sr.length);
87 return (mem_tobuffer(target, sr.base, sr.length));
90 static inline isc_result_t
91 towire_in_dhcid(ARGS_TOWIRE) {
94 REQUIRE(rdata->type == 49);
95 REQUIRE(rdata->rdclass == 1);
96 REQUIRE(rdata->length != 0);
100 dns_rdata_toregion(rdata, &sr);
101 return (mem_tobuffer(target, sr.base, sr.length));
105 compare_in_dhcid(ARGS_COMPARE) {
109 REQUIRE(rdata1->type == rdata2->type);
110 REQUIRE(rdata1->rdclass == rdata2->rdclass);
111 REQUIRE(rdata1->type == 49);
112 REQUIRE(rdata1->rdclass == 1);
113 REQUIRE(rdata1->length != 0);
114 REQUIRE(rdata2->length != 0);
116 dns_rdata_toregion(rdata1, &r1);
117 dns_rdata_toregion(rdata2, &r2);
118 return (isc_region_compare(&r1, &r2));
121 static inline isc_result_t
122 fromstruct_in_dhcid(ARGS_FROMSTRUCT) {
123 dns_rdata_in_dhcid_t *dhcid = source;
126 REQUIRE(rdclass == 1);
127 REQUIRE(source != NULL);
128 REQUIRE(dhcid->common.rdtype == type);
129 REQUIRE(dhcid->common.rdclass == rdclass);
130 REQUIRE(dhcid->length != 0);
135 return (mem_tobuffer(target, dhcid->dhcid, dhcid->length));
138 static inline isc_result_t
139 tostruct_in_dhcid(ARGS_TOSTRUCT) {
140 dns_rdata_in_dhcid_t *dhcid = target;
143 REQUIRE(rdata->type == 49);
144 REQUIRE(rdata->rdclass == 1);
145 REQUIRE(target != NULL);
146 REQUIRE(rdata->length != 0);
148 dhcid->common.rdclass = rdata->rdclass;
149 dhcid->common.rdtype = rdata->type;
150 ISC_LINK_INIT(&dhcid->common, link);
152 dns_rdata_toregion(rdata, ®ion);
154 dhcid->dhcid = mem_maybedup(mctx, region.base, region.length);
155 if (dhcid->dhcid == NULL)
156 return (ISC_R_NOMEMORY);
159 return (ISC_R_SUCCESS);
163 freestruct_in_dhcid(ARGS_FREESTRUCT) {
164 dns_rdata_in_dhcid_t *dhcid = source;
166 REQUIRE(dhcid != NULL);
167 REQUIRE(dhcid->common.rdtype == 49);
168 REQUIRE(dhcid->common.rdclass == 1);
170 if (dhcid->mctx == NULL)
173 if (dhcid->dhcid != NULL)
174 isc_mem_free(dhcid->mctx, dhcid->dhcid);
178 static inline isc_result_t
179 additionaldata_in_dhcid(ARGS_ADDLDATA) {
180 REQUIRE(rdata->type == 49);
181 REQUIRE(rdata->rdclass == 1);
187 return (ISC_R_SUCCESS);
190 static inline isc_result_t
191 digest_in_dhcid(ARGS_DIGEST) {
194 REQUIRE(rdata->type == 49);
195 REQUIRE(rdata->rdclass == 1);
197 dns_rdata_toregion(rdata, &r);
199 return ((digest)(arg, &r));
202 static inline isc_boolean_t
203 checkowner_in_dhcid(ARGS_CHECKOWNER) {
206 REQUIRE(rdclass == 1);
216 static inline isc_boolean_t
217 checknames_in_dhcid(ARGS_CHECKNAMES) {
219 REQUIRE(rdata->type == 49);
220 REQUIRE(rdata->rdclass == 1);
230 casecompare_in_dhcid(ARGS_COMPARE) {
231 return (compare_in_dhcid(rdata1, rdata2));
234 #endif /* RDATA_IN_1_DHCID_49_C */