hinfo_13.c revision 1.1.1.2 1 /* $NetBSD: hinfo_13.c,v 1.1.1.2 2019/01/09 16:48:22 christos Exp $ */
2
3 /*
4 * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
5 *
6 * This Source Code Form is subject to the terms of the Mozilla Public
7 * License, v. 2.0. If a copy of the MPL was not distributed with this
8 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 *
10 * See the COPYRIGHT file distributed with this work for additional
11 * information regarding copyright ownership.
12 */
13
14 #ifndef RDATA_GENERIC_HINFO_13_C
15 #define RDATA_GENERIC_HINFO_13_C
16
17 #define RRTYPE_HINFO_ATTRIBUTES (0)
18
19 static inline isc_result_t
20 fromtext_hinfo(ARGS_FROMTEXT) {
21 isc_token_t token;
22 int i;
23
24 UNUSED(type);
25 UNUSED(rdclass);
26 UNUSED(origin);
27 UNUSED(options);
28 UNUSED(callbacks);
29
30 REQUIRE(type == dns_rdatatype_hinfo);
31
32 for (i = 0; i < 2; i++) {
33 RETERR(isc_lex_getmastertoken(lexer, &token,
34 isc_tokentype_qstring,
35 false));
36 RETTOK(txt_fromtext(&token.value.as_textregion, target));
37 }
38 return (ISC_R_SUCCESS);
39 }
40
41 static inline isc_result_t
42 totext_hinfo(ARGS_TOTEXT) {
43 isc_region_t region;
44
45 UNUSED(tctx);
46
47 REQUIRE(rdata->type == dns_rdatatype_hinfo);
48 REQUIRE(rdata->length != 0);
49
50 dns_rdata_toregion(rdata, ®ion);
51 RETERR(txt_totext(®ion, true, target));
52 RETERR(str_totext(" ", target));
53 return (txt_totext(®ion, true, target));
54 }
55
56 static inline isc_result_t
57 fromwire_hinfo(ARGS_FROMWIRE) {
58
59 REQUIRE(type == dns_rdatatype_hinfo);
60
61 UNUSED(type);
62 UNUSED(dctx);
63 UNUSED(rdclass);
64 UNUSED(options);
65
66 RETERR(txt_fromwire(source, target));
67 return (txt_fromwire(source, target));
68 }
69
70 static inline isc_result_t
71 towire_hinfo(ARGS_TOWIRE) {
72
73 UNUSED(cctx);
74
75 REQUIRE(rdata->type == dns_rdatatype_hinfo);
76 REQUIRE(rdata->length != 0);
77
78 return (mem_tobuffer(target, rdata->data, rdata->length));
79 }
80
81 static inline int
82 compare_hinfo(ARGS_COMPARE) {
83 isc_region_t r1;
84 isc_region_t r2;
85
86 REQUIRE(rdata1->type == rdata2->type);
87 REQUIRE(rdata1->rdclass == rdata2->rdclass);
88 REQUIRE(rdata1->type == dns_rdatatype_hinfo);
89 REQUIRE(rdata1->length != 0);
90 REQUIRE(rdata2->length != 0);
91
92 dns_rdata_toregion(rdata1, &r1);
93 dns_rdata_toregion(rdata2, &r2);
94 return (isc_region_compare(&r1, &r2));
95 }
96
97 static inline isc_result_t
98 fromstruct_hinfo(ARGS_FROMSTRUCT) {
99 dns_rdata_hinfo_t *hinfo = source;
100
101 REQUIRE(type == dns_rdatatype_hinfo);
102 REQUIRE(source != NULL);
103 REQUIRE(hinfo->common.rdtype == type);
104 REQUIRE(hinfo->common.rdclass == rdclass);
105
106 UNUSED(type);
107 UNUSED(rdclass);
108
109 RETERR(uint8_tobuffer(hinfo->cpu_len, target));
110 RETERR(mem_tobuffer(target, hinfo->cpu, hinfo->cpu_len));
111 RETERR(uint8_tobuffer(hinfo->os_len, target));
112 return (mem_tobuffer(target, hinfo->os, hinfo->os_len));
113 }
114
115 static inline isc_result_t
116 tostruct_hinfo(ARGS_TOSTRUCT) {
117 dns_rdata_hinfo_t *hinfo = target;
118 isc_region_t region;
119
120 REQUIRE(rdata->type == dns_rdatatype_hinfo);
121 REQUIRE(target != NULL);
122 REQUIRE(rdata->length != 0);
123
124 hinfo->common.rdclass = rdata->rdclass;
125 hinfo->common.rdtype = rdata->type;
126 ISC_LINK_INIT(&hinfo->common, link);
127
128 dns_rdata_toregion(rdata, ®ion);
129 hinfo->cpu_len = uint8_fromregion(®ion);
130 isc_region_consume(®ion, 1);
131 hinfo->cpu = mem_maybedup(mctx, region.base, hinfo->cpu_len);
132 if (hinfo->cpu == NULL)
133 return (ISC_R_NOMEMORY);
134 isc_region_consume(®ion, hinfo->cpu_len);
135
136 hinfo->os_len = uint8_fromregion(®ion);
137 isc_region_consume(®ion, 1);
138 hinfo->os = mem_maybedup(mctx, region.base, hinfo->os_len);
139 if (hinfo->os == NULL)
140 goto cleanup;
141
142 hinfo->mctx = mctx;
143 return (ISC_R_SUCCESS);
144
145 cleanup:
146 if (mctx != NULL && hinfo->cpu != NULL)
147 isc_mem_free(mctx, hinfo->cpu);
148 return (ISC_R_NOMEMORY);
149 }
150
151 static inline void
152 freestruct_hinfo(ARGS_FREESTRUCT) {
153 dns_rdata_hinfo_t *hinfo = source;
154
155 REQUIRE(source != NULL);
156
157 if (hinfo->mctx == NULL)
158 return;
159
160 if (hinfo->cpu != NULL)
161 isc_mem_free(hinfo->mctx, hinfo->cpu);
162 if (hinfo->os != NULL)
163 isc_mem_free(hinfo->mctx, hinfo->os);
164 hinfo->mctx = NULL;
165 }
166
167 static inline isc_result_t
168 additionaldata_hinfo(ARGS_ADDLDATA) {
169 REQUIRE(rdata->type == dns_rdatatype_hinfo);
170
171 UNUSED(add);
172 UNUSED(arg);
173 UNUSED(rdata);
174
175 return (ISC_R_SUCCESS);
176 }
177
178 static inline isc_result_t
179 digest_hinfo(ARGS_DIGEST) {
180 isc_region_t r;
181
182 REQUIRE(rdata->type == dns_rdatatype_hinfo);
183
184 dns_rdata_toregion(rdata, &r);
185
186 return ((digest)(arg, &r));
187 }
188
189 static inline bool
190 checkowner_hinfo(ARGS_CHECKOWNER) {
191
192 REQUIRE(type == dns_rdatatype_hinfo);
193
194 UNUSED(name);
195 UNUSED(type);
196 UNUSED(rdclass);
197 UNUSED(wildcard);
198
199 return (true);
200 }
201
202 static inline bool
203 checknames_hinfo(ARGS_CHECKNAMES) {
204
205 REQUIRE(rdata->type == dns_rdatatype_hinfo);
206
207 UNUSED(rdata);
208 UNUSED(owner);
209 UNUSED(bad);
210
211 return (true);
212 }
213
214 static inline int
215 casecompare_hinfo(ARGS_COMPARE) {
216 return (compare_hinfo(rdata1, rdata2));
217 }
218 #endif /* RDATA_GENERIC_HINFO_13_C */
219