From db725ebe2b5d913949246b02573df01bd29f5412 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 13 Oct 1999 01:24:49 +0000 Subject: [PATCH] Add initial class HS support. --- lib/dns/rdata/hs_4/a_1.c | 204 +++++++++++++++++++++++++++++++++++++++ lib/dns/rdata/hs_4/a_1.h | 23 +++++ 2 files changed, 227 insertions(+) create mode 100644 lib/dns/rdata/hs_4/a_1.c create mode 100644 lib/dns/rdata/hs_4/a_1.h diff --git a/lib/dns/rdata/hs_4/a_1.c b/lib/dns/rdata/hs_4/a_1.c new file mode 100644 index 0000000000..c52d9ea0c5 --- /dev/null +++ b/lib/dns/rdata/hs_4/a_1.c @@ -0,0 +1,204 @@ +/* + * Copyright (C) 1999 Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + + /* $Id: a_1.c,v 1.1 1999/10/13 01:24:46 marka Exp $ */ + +#ifndef RDATA_HS_4_A_1_C +#define RDATA_HS_4_A_1_C + +#include + +#include + +static inline dns_result_t +fromtext_hs_a(dns_rdataclass_t rdclass, dns_rdatatype_t type, + isc_lex_t *lexer, dns_name_t *origin, + isc_boolean_t downcase, isc_buffer_t *target) +{ + isc_token_t token; + struct in_addr addr; + isc_region_t region; + + REQUIRE(type == 1); + REQUIRE(rdclass == 4); + + origin = origin; /*unused*/ + downcase = downcase; /*unused*/ + + RETERR(gettoken(lexer, &token, isc_tokentype_string, ISC_FALSE)); + + if (inet_aton(token.value.as_pointer, &addr) != 1) + return (DNS_R_BADDOTTEDQUAD); + isc_buffer_available(target, ®ion); + if (region.length < 4) + return (DNS_R_NOSPACE); + memcpy(region.base, &addr, 4); + isc_buffer_add(target, 4); + return (DNS_R_SUCCESS); +} + +static inline dns_result_t +totext_hs_a(dns_rdata_t *rdata, dns_rdata_textctx_t *tctx, + isc_buffer_t *target) +{ + isc_region_t region; + + REQUIRE(rdata->type == 1); + REQUIRE(rdata->rdclass == 4); + REQUIRE(rdata->length == 4); + + tctx = tctx; /* unused */ + + isc_buffer_available(target, ®ion); + if (inet_ntop(AF_INET, rdata->data, + (char *)region.base, region.length) == NULL) + return (DNS_R_NOSPACE); + + isc_buffer_add(target, strlen((char *)region.base)); + return (DNS_R_SUCCESS); +} + +static inline dns_result_t +fromwire_hs_a(dns_rdataclass_t rdclass, dns_rdatatype_t type, + isc_buffer_t *source, dns_decompress_t *dctx, + isc_boolean_t downcase, isc_buffer_t *target) +{ + isc_region_t sregion; + isc_region_t tregion; + + REQUIRE(type == 1); + REQUIRE(rdclass == 4); + + dctx = dctx; /* unused */ + downcase = downcase; /* unused */ + + + isc_buffer_active(source, &sregion); + isc_buffer_available(target, &tregion); + if (sregion.length < 4) + return (DNS_R_UNEXPECTEDEND); + if (tregion.length < 4) + return (DNS_R_NOSPACE); + + memcpy(tregion.base, sregion.base, 4); + isc_buffer_forward(source, 4); + isc_buffer_add(target, 4); + return (DNS_R_SUCCESS); +} + +static inline dns_result_t +towire_hs_a(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) { + isc_region_t region; + + REQUIRE(rdata->type == 1); + REQUIRE(rdata->rdclass == 4); + + cctx = cctx; /*unused*/ + + isc_buffer_available(target, ®ion); + if (region.length < rdata->length) + return (DNS_R_NOSPACE); + memcpy(region.base, rdata->data, rdata->length); + isc_buffer_add(target, 4); + return (DNS_R_SUCCESS); +} + +static inline int +compare_hs_a(dns_rdata_t *rdata1, dns_rdata_t *rdata2) { + int result; + + REQUIRE(rdata1->type == rdata2->type); + REQUIRE(rdata1->rdclass == rdata2->type); + REQUIRE(rdata1->type == 1); + REQUIRE(rdata1->rdclass == 4); + + result = memcmp(rdata1->data, rdata2->data, 4); + if (result != 0) + result = (result < 0) ? -1 : 1; + + return (result); +} + +static inline dns_result_t +fromstruct_hs_a(dns_rdataclass_t rdclass, dns_rdatatype_t type, void *source, + isc_buffer_t *target) +{ + + REQUIRE(type == 1); + REQUIRE(rdclass == 4); + + source = source; + target = target; + + return (DNS_R_NOTIMPLEMENTED); +} + +static inline dns_result_t +tostruct_hs_a(dns_rdata_t *rdata, void *target, isc_mem_t *mctx) { + dns_rdata_hs_a_t *a = target; + isc_uint32_t n; + isc_region_t region; + + REQUIRE(rdata->type == 1); + REQUIRE(rdata->rdclass == 4); + + mctx = mctx; /* unused */ + + a->common.rdclass = rdata->rdclass; + a->common.rdtype = rdata->type; + ISC_LINK_INIT(&a->common, link); + + dns_rdata_toregion(rdata, ®ion); + n = uint32_fromregion(®ion); + a->in_addr.s_addr = htonl(n); + + return (DNS_R_SUCCESS); +} + +static inline void +freestruct_hs_a(void *source) { + REQUIRE(source != NULL); + REQUIRE(ISC_FALSE); /*XXX*/ + +} + +static inline dns_result_t +additionaldata_hs_a(dns_rdata_t *rdata, dns_additionaldatafunc_t add, + void *arg) +{ + REQUIRE(rdata->type == 1); + REQUIRE(rdata->rdclass == 4); + + (void)add; + (void)arg; + + return (DNS_R_SUCCESS); +} + +static inline dns_result_t +digest_hs_a(dns_rdata_t *rdata, dns_digestfunc_t digest, void *arg) { + isc_region_t r; + + REQUIRE(rdata->type == 1); + REQUIRE(rdata->rdclass == 4); + + dns_rdata_toregion(rdata, &r); + + return ((digest)(arg, &r)); +} + +#endif /* RDATA_HS_4_A_1_C */ diff --git a/lib/dns/rdata/hs_4/a_1.h b/lib/dns/rdata/hs_4/a_1.h new file mode 100644 index 0000000000..386e32b23a --- /dev/null +++ b/lib/dns/rdata/hs_4/a_1.h @@ -0,0 +1,23 @@ +/* + * Copyright (C) 1999 Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + */ + + /* $Id: a_1.h,v 1.1 1999/10/13 01:24:49 marka Exp $ */ + +typedef struct dns_rdata_hs_a { + dns_rdatacommon_t common; + struct in_addr in_addr; +} dns_rdata_hs_a_t;