summaryrefslogtreecommitdiff
path: root/src/zcompile/parser-descriptor.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/zcompile/parser-descriptor.c')
-rw-r--r--src/zcompile/parser-descriptor.c545
1 files changed, 0 insertions, 545 deletions
diff --git a/src/zcompile/parser-descriptor.c b/src/zcompile/parser-descriptor.c
deleted file mode 100644
index 466beb4..0000000
--- a/src/zcompile/parser-descriptor.c
+++ /dev/null
@@ -1,545 +0,0 @@
-/*!
- * \file parser-descriptor.c
- *
- * \author Modifications by Jan Kadlec <jan.kadlec@nic.cz>,
- * most of the work by NLnet Labs.
- * Copyright (c) 2001-2011, NLnet Labs. All rights reserved.
- *
- * \brief Contains resource record descriptor and its API
- *
- * \addtogroup zoneparser
- * @{
- */
-
-/*
- * Copyright (c) 2001-2011, NLnet Labs. All rights reserved.
- *
- * This software is open source.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * Neither the name of the NLNET LABS nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <assert.h>
-#include <string.h>
-#include <sys/types.h>
-
-//#include "common.h"
-#include "zcompile/parser-descriptor.h"
-/* TODO this has to be removed - move tokens to separate file
- but can it be done?) */
-#include "zcompile/zcompile.h"
-/* FIXME: Generate .y and .l to zoneparser/ */
-#include "zparser.h"
-
-enum desclen { PARSER_RRTYPE_DESCRIPTORS_LENGTH = 65536 }; // used to be 101
-
-/* Taken from RFC 1035, section 3.2.4. */
-static knot_lookup_table_t dns_rrclasses[] = {
- { PARSER_CLASS_IN, "IN" }, /* the Internet */
- { PARSER_CLASS_CS, "CS" }, /* the CSNET class (Obsolete) */
- { PARSER_CLASS_CH, "CH" }, /* the CHAOS class */
- { PARSER_CLASS_HS, "HS" }, /* Hesiod */
- { 0, NULL }
-};
-static parser_rrtype_descriptor_t
- knot_rrtype_descriptors[PARSER_RRTYPE_DESCRIPTORS_LENGTH] = {
- /* 0 */
- { 0, 0, NULL, 1, { PARSER_RDATA_WF_BINARY }, true },
- /* 1 */
- { PARSER_RRTYPE_A, T_A, "A", 1, { PARSER_RDATA_WF_A }, true },
- /* 2 */
- { PARSER_RRTYPE_NS, T_NS, "NS", 1,
- { PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
- /* 3 */
- { PARSER_RRTYPE_MD, T_MD, "MD", 1,
- { PARSER_RDATA_WF_UNCOMPRESSED_DNAME }, true },
- /* 4 */
- { PARSER_RRTYPE_MF, T_MF, "MF", 1,
- { PARSER_RDATA_WF_UNCOMPRESSED_DNAME }, true },
- /* 5 */
- { PARSER_RRTYPE_CNAME, T_CNAME, "CNAME", 1,
- { PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
- /* 6 */
- { PARSER_RRTYPE_SOA, T_SOA, "SOA", 7,
- { PARSER_RDATA_WF_COMPRESSED_DNAME, PARSER_RDATA_WF_COMPRESSED_DNAME,
- PARSER_RDATA_WF_LONG, PARSER_RDATA_WF_LONG, PARSER_RDATA_WF_LONG,
- PARSER_RDATA_WF_LONG, PARSER_RDATA_WF_LONG }, true },
- /* 7 */
- { PARSER_RRTYPE_MB, T_MB, "MB", 1,
- { PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
- /* 8 */
- { PARSER_RRTYPE_MG, T_MG, "MG", 1,
- { PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
- /* 9 */
- { PARSER_RRTYPE_MR, T_MR, "MR", 1,
- { PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
- /* 10 */
- { PARSER_RRTYPE_NULL, T_NULL, NULL, 1,
- { PARSER_RDATA_WF_BINARY }, true },
- /* 11 */
- { PARSER_RRTYPE_WKS, T_WKS, "WKS", 2,
- { PARSER_RDATA_WF_A, PARSER_RDATA_WF_BINARY }, true },
- /* 12 */
- { PARSER_RRTYPE_PTR, T_PTR, "PTR", 1,
- { PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
- /* 13 */
- { PARSER_RRTYPE_HINFO, T_HINFO, "HINFO", 2,
- { PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT }, true },
- /* 14 */
- { PARSER_RRTYPE_MINFO, T_MINFO, "MINFO", 2,
- { PARSER_RDATA_WF_COMPRESSED_DNAME,
- PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
- /* 15 */
- { PARSER_RRTYPE_MX, T_MX, "MX", 2,
- { PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
- /* 16 */ /* This is obscure, but I guess there's no other way */
- { PARSER_RRTYPE_TXT, T_TXT, "TXT", PARSER_MAX_RDATA_ITEMS,
- { PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT }, false },
- /* 17 */
- { PARSER_RRTYPE_RP, T_RP, "RP", 2,
- { PARSER_RDATA_WF_COMPRESSED_DNAME,
- PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
- /* 18 */
- { PARSER_RRTYPE_AFSDB, T_AFSDB, "AFSDB", 2,
- { PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
- /* 19 */
- { PARSER_RRTYPE_X25, T_X25, "X25", 1,
- { PARSER_RDATA_WF_TEXT }, true },
- /* 20 */
- { PARSER_RRTYPE_ISDN, T_ISDN, "ISDN", 2,
- { PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT }, false },
- /* 21 */
- { PARSER_RRTYPE_RT, T_RT, "RT", 2,
- { PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_COMPRESSED_DNAME }, true },
- /* 22 */
- { PARSER_RRTYPE_NSAP, T_NSAP, "NSAP", 1,
- { PARSER_RDATA_WF_BINARY }, true },
- /* 23 */
- { 23, 0, NULL, 1, { PARSER_RDATA_WF_BINARY }, true },
- /* 24 */
- { PARSER_RRTYPE_SIG, T_SIG, "SIG", 9,
- { PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_BYTE,
- PARSER_RDATA_WF_LONG, PARSER_RDATA_WF_LONG, PARSER_RDATA_WF_LONG,
- PARSER_RDATA_WF_SHORT,PARSER_RDATA_WF_UNCOMPRESSED_DNAME,
- PARSER_RDATA_WF_BINARY }, true },
- /* 25 */
- { PARSER_RRTYPE_KEY, T_KEY, "KEY", 4,
- { PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_BYTE,
- PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_BINARY }, true },
- /* 26 */
- { PARSER_RRTYPE_PX, T_PX, "PX", 3,
- { PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_UNCOMPRESSED_DNAME,
- PARSER_RDATA_WF_UNCOMPRESSED_DNAME }, true },
- /* 27 */
- { 27, 0, NULL, 1, { PARSER_RDATA_WF_BINARY }, true },
- /* 28 */
- { PARSER_RRTYPE_AAAA, T_AAAA, "AAAA", 1,
- { PARSER_RDATA_WF_AAAA }, true },
- /* 29 */
- { PARSER_RRTYPE_LOC, T_LOC, "LOC", 1,
- { PARSER_RDATA_WF_BINARY }, true },
- /* 30 */
- { PARSER_RRTYPE_NXT, T_NXT, "NXT", 2,
- { PARSER_RDATA_WF_UNCOMPRESSED_DNAME,
- PARSER_RDATA_WF_BINARY }, true },
- /* 31 */
- { 31, 0, NULL, 1, { PARSER_RDATA_WF_BINARY }, true },
- /* 32 */
- { 32, 0, NULL, 1, { PARSER_RDATA_WF_BINARY }, true },
- /* 33 */
- { PARSER_RRTYPE_SRV, T_SRV, "SRV", 4,
- { PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_SHORT,
- PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_UNCOMPRESSED_DNAME },
- true },
- /* 34 */
- { 34, 0, NULL, 1, { PARSER_RDATA_WF_BINARY }, true },
- /* 35 */
- { PARSER_RRTYPE_NAPTR, T_NAPTR, "NAPTR", 6,
- { PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_UNCOMPRESSED_DNAME }, true },
- /* 36 */
- { PARSER_RRTYPE_KX, T_KX, "KX", 2,
- { PARSER_RDATA_WF_SHORT,
- PARSER_RDATA_WF_UNCOMPRESSED_DNAME }, true },
- /* 37 */
- { PARSER_RRTYPE_CERT, T_CERT, "CERT", 4,
- { PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_SHORT,
- PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_BINARY }, true },
- /* 38 */
- { PARSER_RRTYPE_A6, T_A6, NULL, 1, { PARSER_RDATA_WF_BINARY }, true },
- /* 39 */
- { PARSER_RRTYPE_DNAME, T_DNAME, "DNAME", 1,
- { PARSER_RDATA_WF_UNCOMPRESSED_DNAME }, true },
- /* 40 */
- { 40, 0, NULL, 1, { PARSER_RDATA_WF_BINARY }, true },
- /* 41 */
- /* OPT has its parser token, but should never be in zone file... */
- { PARSER_RRTYPE_OPT, T_OPT, "OPT", 1,
- { PARSER_RDATA_WF_BINARY }, true },
- /* 42 */
- { PARSER_RRTYPE_APL, T_APL, "APL", PARSER_MAX_RDATA_ITEMS,
- { PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL,
- PARSER_RDATA_WF_APL, PARSER_RDATA_WF_APL }, false },
- /* 43 */
- { PARSER_RRTYPE_DS, T_DS, "DS", 4,
- { PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_BYTE,
- PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_BINARY }, true },
- /* 44 */
- { PARSER_RRTYPE_SSHFP, T_SSHFP, "SSHFP", 3,
- { PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_BYTE,
- PARSER_RDATA_WF_BINARY }, true },
- /* 45 */
- { PARSER_RRTYPE_IPSECKEY, T_IPSECKEY, "IPSECKEY", 5,
- { PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_BYTE,
- PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_IPSECGATEWAY,
- PARSER_RDATA_WF_BINARY }, false },
- /* 46 */
- { PARSER_RRTYPE_RRSIG, T_RRSIG, "RRSIG", 9,
- { PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_BYTE,
- PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_LONG,
- PARSER_RDATA_WF_LONG, PARSER_RDATA_WF_LONG,
- PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_BINARY,
- PARSER_RDATA_WF_BINARY }, true },
- /* 47 */
- { PARSER_RRTYPE_NSEC, T_NSEC, "NSEC", 2,
- { PARSER_RDATA_WF_BINARY, PARSER_RDATA_WF_BINARY }, true },
- /* 48 */
- { PARSER_RRTYPE_DNSKEY, T_DNSKEY, "DNSKEY", 4,
- { PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_BYTE,
- PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_BINARY }, true },
- /* 49 */
- { PARSER_RRTYPE_DHCID, T_DHCID, "DHCID", 1, { PARSER_RDATA_WF_BINARY }, true },
- /* 50 */
- { PARSER_RRTYPE_NSEC3, T_NSEC3, "NSEC3", 6,
- { PARSER_RDATA_WF_BYTE, /* hash type */
- PARSER_RDATA_WF_BYTE, /* flags */
- PARSER_RDATA_WF_SHORT, /* iterations */
- PARSER_RDATA_WF_BINARYWITHLENGTH, /* salt */
- PARSER_RDATA_WF_BINARYWITHLENGTH, /* next hashed name */
- PARSER_RDATA_WF_BINARY /* type bitmap */ }, true },
- /* 51 */
- { PARSER_RRTYPE_NSEC3PARAM, T_NSEC3PARAM, "NSEC3PARAM", 4,
- { PARSER_RDATA_WF_BYTE, /* hash type */
- PARSER_RDATA_WF_BYTE, /* flags */
- PARSER_RDATA_WF_SHORT, /* iterations */
- PARSER_RDATA_WF_BINARYWITHLENGTH /* salt */ }, true },
- /* 52 TLSA */
- { PARSER_RRTYPE_TLSA, T_TLSA, "TLSA", 3,
- { PARSER_RDATA_WF_BYTE,
- PARSER_RDATA_WF_BYTE,
- PARSER_RDATA_WF_BYTE,
- PARSER_RDATA_WF_BINARY}, true },
-
-
- /* In NSD they have indices between 52 and 99 filled with
- unknown types. TODO add here if it's really needed? */
- /* it is indeed needed, in rrtype_from_string */
-
- /* There's a GNU extension that works like this: [first ... last] = value */
-
- [53 ... 98] = { PARSER_RRTYPE_TYPEXXX, T_UTYPE, NULL, 1, { PARSER_RDATA_WF_BINARY }},
-
- /* 99 */
- [99] = { PARSER_RRTYPE_SPF, T_SPF, "SPF", PARSER_MAX_RDATA_ITEMS,
- { PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT,
- PARSER_RDATA_WF_TEXT, PARSER_RDATA_WF_TEXT }, false },
- [100 ... 32768] = { PARSER_RRTYPE_TYPEXXX, T_UTYPE, NULL, 1, { PARSER_RDATA_WF_BINARY }},
- /* 32769 */
- [32769] = { PARSER_RRTYPE_DLV, T_DLV, "DLV", 4,
- { PARSER_RDATA_WF_SHORT, PARSER_RDATA_WF_BYTE,
- PARSER_RDATA_WF_BYTE, PARSER_RDATA_WF_BINARY }},
- [32770 ... 65535] = { PARSER_RRTYPE_TYPEXXX, T_UTYPE, NULL, 1, { PARSER_RDATA_WF_BINARY }}
-};
-
-parser_rrtype_descriptor_t *parser_rrtype_descriptor_by_type(uint16_t type)
-{
- if (type <= 65535) {
- return &knot_rrtype_descriptors[type];
- }
- return &knot_rrtype_descriptors[0];
-}
-
-/* I see a lot of potential here to speed up zone parsing - this is O(n) *
- * could be better */
-parser_rrtype_descriptor_t *parser_rrtype_descriptor_by_name(const char *name)
-{
- if (!name) {
- return NULL;
- }
-
- if (strcasecmp(name, "IN") == 0) {
- return NULL;
- }
-
- if (isdigit((int)name[0])) {
- return NULL;
- }
-
-// /* The most common - A and NS. */
-// if (strcasecmp(name, "NS") == 0) {
-// return &knot_rrtype_descriptors[2];
-// }
-
-// if (strcasecmp(name, "A") == 0) {
-// return &knot_rrtype_descriptors[1];
-// }
-
-// /* Then RRSIG */
-// if (strcasecmp(name, "RRSIG") == 0) {
-// return &knot_rrtype_descriptors[46];
-// }
-
-// /* Then DS */
-// if (strcasecmp(name, "DS") == 0) {
-// return &knot_rrtype_descriptors[43];
-// }
-// /* Then NSEC3 */
-// if (strcasecmp(name, "NSEC3") == 0) {
-// return &knot_rrtype_descriptors[50];
-// }
-// /* Then NSEC */
-// if (strcasecmp(name, "NSEC") == 0) {
-// return &knot_rrtype_descriptors[47];
-// }
-
- int i;
-
- for (i = 0; i < PARSER_RRTYPE_LAST + 1; ++i) {
- if (knot_rrtype_descriptors[i].name &&
- strcasecmp(knot_rrtype_descriptors[i].name, name) == 0) {
- return &knot_rrtype_descriptors[i];
- }
- }
-
- if (knot_rrtype_descriptors[PARSER_RRTYPE_DLV].name &&
- strcasecmp(knot_rrtype_descriptors[PARSER_RRTYPE_DLV].name,
- name) == 0) {
- return &knot_rrtype_descriptors[PARSER_RRTYPE_DLV];
- }
-
- return NULL;
-}
-
-const char *parser_rrtype_to_string(uint16_t rrtype)
-{
- static char buf[20];
- parser_rrtype_descriptor_t *descriptor =
- parser_rrtype_descriptor_by_type(rrtype);
- if (descriptor->name) {
- return descriptor->name;
- } else {
- snprintf(buf, sizeof(buf), "TYPE%d", (int) rrtype);
- return buf;
- }
-}
-
-uint16_t parser_rrtype_from_string(const char *name)
-{
- char *end;
- long rrtype;
- parser_rrtype_descriptor_t *entry;
- if (!name) {
- return 0;
- }
-
- entry = parser_rrtype_descriptor_by_name(name);
- if (entry) {
- return entry->type;
- }
-
- if (strlen(name) < 5) {
- return 0;
- }
-
- if (strncasecmp(name, "TYPE", 4) != 0) {
- return 0;
- }
-
- if (!isdigit((int)name[4])) {
- return 0;
- }
-
- /* The rest from the string must be a number. */
- rrtype = strtol(name + 4, &end, 10);
- if (*end != '\0') {
- return 0;
- }
- if (rrtype < 0 || rrtype > 65535L) {
- return 0;
- }
-
- return (uint16_t) rrtype;
-}
-
-const char *parser_rrclass_to_string(uint16_t rrclass)
-{
- static char buf[20];
- knot_lookup_table_t *entry = knot_lookup_by_id(dns_rrclasses,
- rrclass);
- if (entry) {
- assert(strlen(entry->name) < sizeof(buf));
- knot_strlcpy(buf, entry->name, sizeof(buf));
- } else {
- snprintf(buf, sizeof(buf), "CLASS%d", (int) rrclass);
- }
- return buf;
-}
-
-uint16_t parser_rrclass_from_string(const char *name)
-{
- char *end;
- long rrclass;
- knot_lookup_table_t *entry;
-
- entry = knot_lookup_by_name(dns_rrclasses, name);
- if (entry) {
- return (uint16_t) entry->id;
- }
-
- if (strlen(name) < 6) {
- return 0;
- }
-
- if (strncasecmp(name, "CLASS", 5) != 0) {
- return 0;
- }
-
- if (!isdigit((int)name[5])) {
- return 0;
- }
-
- // The rest from the string must be a number.
- rrclass = strtol(name + 5, &end, 10);
- if (*end != '\0') {
- return 0;
- }
- if (rrclass < 0 || rrclass > 65535L) {
- return 0;
- }
-
- return (uint16_t) rrclass;
-}
-
-/*! @} */