1 /* 2 * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 * 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. 7 * 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. 15 */ 16 17 /* RFC 7477 */ 18 19 #ifndef RDATA_GENERIC_CSYNC_62_C 20 #define RDATA_GENERIC_CSYNC_62_C 21 22 static inline isc_result_t 23 totext_csync(ARGS_TOTEXT) { 24 unsigned long num; 25 char buf[sizeof("0123456789")]; /* Also TYPE65535 */ 26 isc_region_t sr; 27 28 REQUIRE(rdata->type == dns_rdatatype_csync); 29 REQUIRE(rdata->length >= 6); 30 31 UNUSED(tctx); 32 33 dns_rdata_toregion(rdata, &sr); 34 35 num = uint32_fromregion(&sr); 36 isc_region_consume(&sr, 4); 37 snprintf(buf, sizeof(buf), "%lu", num); 38 RETERR(isc_str_tobuffer(buf, target)); 39 40 RETERR(isc_str_tobuffer(" ", target)); 41 42 num = uint16_fromregion(&sr); 43 isc_region_consume(&sr, 2); 44 snprintf(buf, sizeof(buf), "%lu", num); 45 RETERR(isc_str_tobuffer(buf, target)); 46 47 /* 48 * Don't leave a trailing space when there's no typemap present. 49 */ 50 if (sr.length > 0) { 51 RETERR(isc_str_tobuffer(" ", target)); 52 } 53 return (typemap_totext(&sr, NULL, target)); 54 } 55 56 static /* inline */ isc_result_t 57 fromwire_csync(ARGS_FROMWIRE) { 58 isc_region_t sr; 59 60 REQUIRE(type == dns_rdatatype_csync); 61 62 UNUSED(type); 63 UNUSED(rdclass); 64 UNUSED(options); 65 UNUSED(dctx); 66 67 /* 68 * Serial + Flags 69 */ 70 isc_buffer_activeregion(source, &sr); 71 if (sr.length < 6) 72 return (ISC_R_UNEXPECTEDEND); 73 74 RETERR(isc_mem_tobuffer(target, sr.base, 6)); 75 isc_buffer_forward(source, 6); 76 isc_region_consume(&sr, 6); 77 78 RETERR(typemap_test(&sr, ISC_TRUE)); 79 80 RETERR(isc_mem_tobuffer(target, sr.base, sr.length)); 81 isc_buffer_forward(source, sr.length); 82 return (ISC_R_SUCCESS); 83 } 84 85 static inline isc_result_t 86 towire_csync(ARGS_TOWIRE) { 87 88 REQUIRE(rdata->type == dns_rdatatype_csync); 89 REQUIRE(rdata->length >= 6); 90 91 UNUSED(cctx); 92 93 return (isc_mem_tobuffer(target, rdata->data, rdata->length)); 94 } 95 96 #endif /* RDATA_GENERIC_CSYNC_62_C */ 97