1/*	$NetBSD: dlv_32769.c,v 1.1 2024/02/18 20:57:41 christos Exp $	*/
2
3/*
4 * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
5 *
6 * SPDX-License-Identifier: MPL-2.0
7 *
8 * This Source Code Form is subject to the terms of the Mozilla Public
9 * License, v. 2.0. If a copy of the MPL was not distributed with this
10 * file, you can obtain one at https://mozilla.org/MPL/2.0/.
11 *
12 * See the COPYRIGHT file distributed with this work for additional
13 * information regarding copyright ownership.
14 */
15
16/* RFC3658 */
17
18#ifndef RDATA_GENERIC_DLV_32769_C
19#define RDATA_GENERIC_DLV_32769_C
20
21#define RRTYPE_DLV_ATTRIBUTES 0
22
23#include <dns/ds.h>
24
25static isc_result_t
26fromtext_dlv(ARGS_FROMTEXT) {
27	REQUIRE(type == dns_rdatatype_dlv);
28
29	return (generic_fromtext_ds(CALL_FROMTEXT));
30}
31
32static isc_result_t
33totext_dlv(ARGS_TOTEXT) {
34	REQUIRE(rdata != NULL);
35	REQUIRE(rdata->type == dns_rdatatype_dlv);
36
37	return (generic_totext_ds(CALL_TOTEXT));
38}
39
40static isc_result_t
41fromwire_dlv(ARGS_FROMWIRE) {
42	REQUIRE(type == dns_rdatatype_dlv);
43
44	return (generic_fromwire_ds(CALL_FROMWIRE));
45}
46
47static isc_result_t
48towire_dlv(ARGS_TOWIRE) {
49	isc_region_t sr;
50
51	REQUIRE(rdata->type == dns_rdatatype_dlv);
52	REQUIRE(rdata->length != 0);
53
54	UNUSED(cctx);
55
56	dns_rdata_toregion(rdata, &sr);
57	return (mem_tobuffer(target, sr.base, sr.length));
58}
59
60static int
61compare_dlv(ARGS_COMPARE) {
62	isc_region_t r1;
63	isc_region_t r2;
64
65	REQUIRE(rdata1->type == rdata2->type);
66	REQUIRE(rdata1->rdclass == rdata2->rdclass);
67	REQUIRE(rdata1->type == dns_rdatatype_dlv);
68	REQUIRE(rdata1->length != 0);
69	REQUIRE(rdata2->length != 0);
70
71	dns_rdata_toregion(rdata1, &r1);
72	dns_rdata_toregion(rdata2, &r2);
73	return (isc_region_compare(&r1, &r2));
74}
75
76static isc_result_t
77fromstruct_dlv(ARGS_FROMSTRUCT) {
78	REQUIRE(type == dns_rdatatype_dlv);
79
80	return (generic_fromstruct_ds(CALL_FROMSTRUCT));
81}
82
83static isc_result_t
84tostruct_dlv(ARGS_TOSTRUCT) {
85	dns_rdata_dlv_t *dlv = target;
86
87	REQUIRE(rdata->type == dns_rdatatype_dlv);
88	REQUIRE(dlv != NULL);
89
90	dlv->common.rdclass = rdata->rdclass;
91	dlv->common.rdtype = rdata->type;
92	ISC_LINK_INIT(&dlv->common, link);
93
94	return (generic_tostruct_ds(CALL_TOSTRUCT));
95}
96
97static void
98freestruct_dlv(ARGS_FREESTRUCT) {
99	dns_rdata_dlv_t *dlv = source;
100
101	REQUIRE(dlv != NULL);
102	REQUIRE(dlv->common.rdtype == dns_rdatatype_dlv);
103
104	if (dlv->mctx == NULL) {
105		return;
106	}
107
108	if (dlv->digest != NULL) {
109		isc_mem_free(dlv->mctx, dlv->digest);
110	}
111	dlv->mctx = NULL;
112}
113
114static isc_result_t
115additionaldata_dlv(ARGS_ADDLDATA) {
116	REQUIRE(rdata->type == dns_rdatatype_dlv);
117
118	UNUSED(rdata);
119	UNUSED(add);
120	UNUSED(arg);
121
122	return (ISC_R_SUCCESS);
123}
124
125static isc_result_t
126digest_dlv(ARGS_DIGEST) {
127	isc_region_t r;
128
129	REQUIRE(rdata->type == dns_rdatatype_dlv);
130
131	dns_rdata_toregion(rdata, &r);
132
133	return ((digest)(arg, &r));
134}
135
136static bool
137checkowner_dlv(ARGS_CHECKOWNER) {
138	REQUIRE(type == dns_rdatatype_dlv);
139
140	UNUSED(name);
141	UNUSED(type);
142	UNUSED(rdclass);
143	UNUSED(wildcard);
144
145	return (true);
146}
147
148static bool
149checknames_dlv(ARGS_CHECKNAMES) {
150	REQUIRE(rdata->type == dns_rdatatype_dlv);
151
152	UNUSED(rdata);
153	UNUSED(owner);
154	UNUSED(bad);
155
156	return (true);
157}
158
159static int
160casecompare_dlv(ARGS_COMPARE) {
161	return (compare_dlv(rdata1, rdata2));
162}
163
164#endif /* RDATA_GENERIC_DLV_32769_C */
165