5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews/*
a134177ed9f82189504191d90f3ed9e97c2b47cbTinderbox User * Copyright (C) 2015-2017 Internet Systems Consortium, Inc. ("ISC")
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews *
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * This Source Code Form is subject to the terms of the Mozilla Public
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * License, v. 2.0. If a copy of the MPL was not distributed with this
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews */
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews#ifndef RDATA_GENERIC_SINK_40_C
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews#define RDATA_GENERIC_SINK_40_C
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews#include <dst/dst.h>
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews#define RRTYPE_SINK_ATTRIBUTES (0)
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewsstatic inline isc_result_t
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewsfromtext_sink(ARGS_FROMTEXT) {
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews isc_token_t token;
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(type == dns_rdatatype_sink);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(type);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(rdclass);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(origin);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(options);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(callbacks);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews /* meaning */
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews ISC_FALSE));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews if (token.value.as_ulong > 0xffU)
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews RETTOK(ISC_R_RANGE);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews RETERR(uint8_tobuffer(token.value.as_ulong, target));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews /* coding */
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews ISC_FALSE));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews if (token.value.as_ulong > 0xffU)
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews RETTOK(ISC_R_RANGE);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews RETERR(uint8_tobuffer(token.value.as_ulong, target));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews /* subcoding */
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews ISC_FALSE));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews if (token.value.as_ulong > 0xffU)
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews RETTOK(ISC_R_RANGE);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews RETERR(uint8_tobuffer(token.value.as_ulong, target));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews return(isc_base64_tobuffer(lexer, target, -1));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews}
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewsstatic inline isc_result_t
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewstotext_sink(ARGS_TOTEXT) {
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews isc_region_t sr;
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews char buf[sizeof("255 255 255")];
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews isc_uint8_t meaning, coding, subcoding;
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(rdata->type == dns_rdatatype_sink);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(rdata->length >= 3);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews dns_rdata_toregion(rdata, &sr);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews /* Meaning, Coding and Subcoding */
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews meaning = uint8_fromregion(&sr);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews isc_region_consume(&sr, 1);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews coding = uint8_fromregion(&sr);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews isc_region_consume(&sr, 1);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews subcoding = uint8_fromregion(&sr);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews isc_region_consume(&sr, 1);
ad1317338af79edad878c9c3e4361798503310baMark Andrews snprintf(buf, sizeof(buf), "%u %u %u", meaning, coding, subcoding);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews RETERR(str_totext(buf, target));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews if (sr.length == 0U)
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews return (ISC_R_SUCCESS);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews /* data */
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews RETERR(str_totext(" (", target));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews RETERR(str_totext(tctx->linebreak, target));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews if (tctx->width == 0) /* No splitting */
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews RETERR(isc_base64_totext(&sr, 60, "", target));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews else
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews RETERR(isc_base64_totext(&sr, tctx->width - 2,
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews tctx->linebreak, target));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews RETERR(str_totext(" )", target));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews return (ISC_R_SUCCESS);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews}
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewsstatic inline isc_result_t
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewsfromwire_sink(ARGS_FROMWIRE) {
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews isc_region_t sr;
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(type == dns_rdatatype_sink);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(type);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(rdclass);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(dctx);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(options);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews isc_buffer_activeregion(source, &sr);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews if (sr.length < 3)
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews return (ISC_R_UNEXPECTEDEND);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews RETERR(mem_tobuffer(target, sr.base, sr.length));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews isc_buffer_forward(source, sr.length);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews return (ISC_R_SUCCESS);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews}
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewsstatic inline isc_result_t
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewstowire_sink(ARGS_TOWIRE) {
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(rdata->type == dns_rdatatype_sink);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(rdata->length >= 3);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(cctx);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews return (mem_tobuffer(target, rdata->data, rdata->length));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews}
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewsstatic inline int
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewscompare_sink(ARGS_COMPARE) {
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews isc_region_t r1;
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews isc_region_t r2;
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(rdata1->type == rdata2->type);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(rdata1->rdclass == rdata2->rdclass);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(rdata1->type == dns_rdatatype_sink);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(rdata1->length >= 3);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(rdata2->length >= 3);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews dns_rdata_toregion(rdata1, &r1);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews dns_rdata_toregion(rdata2, &r2);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews return (isc_region_compare(&r1, &r2));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews}
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewsstatic inline isc_result_t
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewsfromstruct_sink(ARGS_FROMSTRUCT) {
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews dns_rdata_sink_t *sink = source;
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(type == dns_rdatatype_sink);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(source != NULL);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(sink->common.rdtype == type);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(sink->common.rdclass == rdclass);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(type);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(rdclass);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews /* Meaning */
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews RETERR(uint8_tobuffer(sink->meaning, target));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews /* Coding */
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews RETERR(uint8_tobuffer(sink->coding, target));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews /* Subcoding */
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews RETERR(uint8_tobuffer(sink->subcoding, target));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews /* Data */
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews return (mem_tobuffer(target, sink->data, sink->datalen));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews}
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewsstatic inline isc_result_t
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewstostruct_sink(ARGS_TOSTRUCT) {
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews dns_rdata_sink_t *sink = target;
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews isc_region_t sr;
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(rdata->type == dns_rdatatype_sink);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(target != NULL);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(rdata->length >= 3);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews sink->common.rdclass = rdata->rdclass;
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews sink->common.rdtype = rdata->type;
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews ISC_LINK_INIT(&sink->common, link);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews dns_rdata_toregion(rdata, &sr);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews /* Meaning */
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews if (sr.length < 1)
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews return (ISC_R_UNEXPECTEDEND);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews sink->meaning = uint8_fromregion(&sr);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews isc_region_consume(&sr, 1);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews /* Coding */
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews if (sr.length < 1)
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews return (ISC_R_UNEXPECTEDEND);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews sink->coding = uint8_fromregion(&sr);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews isc_region_consume(&sr, 1);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews /* Subcoding */
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews if (sr.length < 1)
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews return (ISC_R_UNEXPECTEDEND);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews sink->subcoding = uint8_fromregion(&sr);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews isc_region_consume(&sr, 1);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews /* Data */
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews sink->datalen = sr.length;
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews sink->data = mem_maybedup(mctx, sr.base, sink->datalen);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews if (sink->data == NULL)
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews return (ISC_R_NOMEMORY);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews sink->mctx = mctx;
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews return (ISC_R_SUCCESS);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews}
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewsstatic inline void
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewsfreestruct_sink(ARGS_FREESTRUCT) {
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews dns_rdata_sink_t *sink = (dns_rdata_sink_t *) source;
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(source != NULL);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(sink->common.rdtype == dns_rdatatype_sink);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews if (sink->mctx == NULL)
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews return;
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews if (sink->data != NULL)
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews isc_mem_free(sink->mctx, sink->data);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews sink->mctx = NULL;
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews}
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewsstatic inline isc_result_t
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewsadditionaldata_sink(ARGS_ADDLDATA) {
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(rdata->type == dns_rdatatype_sink);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(rdata);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(add);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(arg);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews return (ISC_R_SUCCESS);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews}
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewsstatic inline isc_result_t
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewsdigest_sink(ARGS_DIGEST) {
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews isc_region_t r;
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(rdata->type == dns_rdatatype_sink);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews dns_rdata_toregion(rdata, &r);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews return ((digest)(arg, &r));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews}
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewsstatic inline isc_boolean_t
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewscheckowner_sink(ARGS_CHECKOWNER) {
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(type == dns_rdatatype_sink);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(name);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(type);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(rdclass);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(wildcard);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews return (ISC_TRUE);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews}
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewsstatic inline isc_boolean_t
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewschecknames_sink(ARGS_CHECKNAMES) {
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews REQUIRE(rdata->type == dns_rdatatype_sink);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(rdata);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(owner);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews UNUSED(bad);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews return (ISC_TRUE);
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews}
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewsstatic inline int
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrewscasecompare_sink(ARGS_COMPARE) {
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews return (compare_sink(rdata1, rdata2));
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews}
5a49f61ca968283d59c97e583fd6fb02ecaeb773Mark Andrews#endif /* RDATA_GENERIC_SINK_40_C */