1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org)
2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpackage org.xbill.DNS;
4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.util.HashMap;
6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Constants and functions relating to DNS Types
9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Brian Wellington
11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic final class Type {
14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Address */
16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int A		= 1;
17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Name server */
19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int NS		= 2;
20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Mail destination */
22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int MD		= 3;
23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Mail forwarder */
25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int MF		= 4;
26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Canonical name (alias) */
28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int CNAME		= 5;
29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Start of authority */
31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int SOA		= 6;
32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Mailbox domain name */
34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int MB		= 7;
35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Mail group member */
37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int MG		= 8;
38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Mail rename name */
40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int MR		= 9;
41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Null record */
43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int NULL		= 10;
44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Well known services */
46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int WKS		= 11;
47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Domain name pointer */
49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int PTR		= 12;
50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Host information */
52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int HINFO		= 13;
53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Mailbox information */
55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int MINFO		= 14;
56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Mail routing information */
58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int MX		= 15;
59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Text strings */
61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int TXT		= 16;
62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Responsible person */
64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int RP		= 17;
65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** AFS cell database */
67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int AFSDB		= 18;
68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** X.25 calling address */
70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int X25		= 19;
71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** ISDN calling address */
73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int ISDN		= 20;
74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Router */
76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int RT		= 21;
77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** NSAP address */
79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int NSAP		= 22;
80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Reverse NSAP address (deprecated) */
82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int NSAP_PTR	= 23;
83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Signature */
85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int SIG		= 24;
86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Key */
88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int KEY		= 25;
89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** X.400 mail mapping */
91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int PX		= 26;
92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Geographical position (withdrawn) */
94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int GPOS		= 27;
95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** IPv6 address */
97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int AAAA		= 28;
98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Location */
100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int LOC		= 29;
101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Next valid name in zone */
103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int NXT		= 30;
104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Endpoint identifier */
106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int EID		= 31;
107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Nimrod locator */
109d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int NIMLOC		= 32;
110d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
111d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Server selection */
112d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int SRV		= 33;
113d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
114d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** ATM address */
115d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int ATMA		= 34;
116d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
117d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Naming authority pointer */
118d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int NAPTR		= 35;
119d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
120d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Key exchange */
121d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int KX		= 36;
122d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
123d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Certificate */
124d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int CERT		= 37;
125d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
126d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** IPv6 address (experimental) */
127d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int A6		= 38;
128d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
129d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Non-terminal name redirection */
130d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int DNAME		= 39;
131d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
132d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Options - contains EDNS metadata */
133d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int OPT		= 41;
134d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
135d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Address Prefix List */
136d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int APL		= 42;
137d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
138d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Delegation Signer */
139d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int DS		= 43;
140d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
141d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** SSH Key Fingerprint */
142d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int SSHFP		= 44;
143d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
144d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** IPSEC key */
145d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int IPSECKEY	= 45;
146d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
147d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Resource Record Signature */
148d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int RRSIG		= 46;
149d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
150d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Next Secure Name */
151d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int NSEC		= 47;
152d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
153d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** DNSSEC Key */
154d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int DNSKEY		= 48;
155d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
156d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Dynamic Host Configuration Protocol (DHCP) ID */
157d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int DHCID		= 49;
158d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
159d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Next SECure, 3rd edition, RFC 5155 */
160d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int NSEC3		= 50;
161d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
162d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Next SECure PARAMeter, RFC 5155 */
163d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int NSEC3PARAM	= 51;
164d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
165d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Transport Layer Security Authentication, draft-ietf-dane-protocol-23 */
166d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int TLSA		= 52;
167d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
168d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Sender Policy Framework (experimental) */
169d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int SPF		= 99;
170d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
171d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Transaction key - used to compute a shared secret or exchange a key */
172d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int TKEY		= 249;
173d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
174d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Transaction signature */
175d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int TSIG		= 250;
176d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
177d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Incremental zone transfer */
178d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int IXFR		= 251;
179d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
180d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Zone transfer */
181d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int AXFR		= 252;
182d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
183d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Transfer mailbox records */
184d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int MAILB		= 253;
185d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
186d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Transfer mail agent records */
187d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int MAILA		= 254;
188d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
189d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Matches any type */
190d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int ANY		= 255;
191d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
192d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** DNSSEC Lookaside Validation, RFC 4431 . */
193d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int DLV		= 32769;
194d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
195d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
196d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate static class TypeMnemonic extends Mnemonic {
197d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	private HashMap objects;
198d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
199d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	public
200d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	TypeMnemonic() {
201d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		super("Type", CASE_UPPER);
202d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		setPrefix("TYPE");
203d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		objects = new HashMap();
204d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	}
205d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
206d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	public void
207d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	add(int val, String str, Record proto) {
208d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		super.add(val, str);
209d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		objects.put(Mnemonic.toInteger(val), proto);
210d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	}
211d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
212d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	public void
213d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	check(int val) {
214d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		Type.check(val);
215d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	}
216d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
217d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	public Record
218d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	getProto(int val) {
219d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		check(val);
220d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		return (Record) objects.get(toInteger(val));
221d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	}
222d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
223d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
224d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate static TypeMnemonic types = new TypeMnemonic();
225d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
226d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenstatic {
227d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(A, "A", new ARecord());
228d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(NS, "NS", new NSRecord());
229d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(MD, "MD", new MDRecord());
230d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(MF, "MF", new MFRecord());
231d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(CNAME, "CNAME", new CNAMERecord());
232d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(SOA, "SOA", new SOARecord());
233d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(MB, "MB", new MBRecord());
234d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(MG, "MG", new MGRecord());
235d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(MR, "MR", new MRRecord());
236d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(NULL, "NULL", new NULLRecord());
237d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(WKS, "WKS", new WKSRecord());
238d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(PTR, "PTR", new PTRRecord());
239d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(HINFO, "HINFO", new HINFORecord());
240d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(MINFO, "MINFO", new MINFORecord());
241d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(MX, "MX", new MXRecord());
242d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(TXT, "TXT", new TXTRecord());
243d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(RP, "RP", new RPRecord());
244d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(AFSDB, "AFSDB", new AFSDBRecord());
245d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(X25, "X25", new X25Record());
246d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(ISDN, "ISDN", new ISDNRecord());
247d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(RT, "RT", new RTRecord());
248d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(NSAP, "NSAP", new NSAPRecord());
249d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(NSAP_PTR, "NSAP-PTR", new NSAP_PTRRecord());
250d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(SIG, "SIG", new SIGRecord());
251d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(KEY, "KEY", new KEYRecord());
252d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(PX, "PX", new PXRecord());
253d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(GPOS, "GPOS", new GPOSRecord());
254d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(AAAA, "AAAA", new AAAARecord());
255d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(LOC, "LOC", new LOCRecord());
256d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(NXT, "NXT", new NXTRecord());
257d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(EID, "EID");
258d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(NIMLOC, "NIMLOC");
259d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(SRV, "SRV", new SRVRecord());
260d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(ATMA, "ATMA");
261d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(NAPTR, "NAPTR", new NAPTRRecord());
262d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(KX, "KX", new KXRecord());
263d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(CERT, "CERT", new CERTRecord());
264d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(A6, "A6", new A6Record());
265d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(DNAME, "DNAME", new DNAMERecord());
266d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(OPT, "OPT", new OPTRecord());
267d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(APL, "APL", new APLRecord());
268d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(DS, "DS", new DSRecord());
269d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(SSHFP, "SSHFP", new SSHFPRecord());
270d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(IPSECKEY, "IPSECKEY", new IPSECKEYRecord());
271d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(RRSIG, "RRSIG", new RRSIGRecord());
272d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(NSEC, "NSEC", new NSECRecord());
273d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(DNSKEY, "DNSKEY", new DNSKEYRecord());
274d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(DHCID, "DHCID", new DHCIDRecord());
275d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(NSEC3, "NSEC3", new NSEC3Record());
276d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(NSEC3PARAM, "NSEC3PARAM", new NSEC3PARAMRecord());
277d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(TLSA, "TLSA", new TLSARecord());
278d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(SPF, "SPF", new SPFRecord());
279d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(TKEY, "TKEY", new TKEYRecord());
280d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(TSIG, "TSIG", new TSIGRecord());
281d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(IXFR, "IXFR");
282d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(AXFR, "AXFR");
283d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(MAILB, "MAILB");
284d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(MAILA, "MAILA");
285d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(ANY, "ANY");
286d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	types.add(DLV, "DLV", new DLVRecord());
287d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
288d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
289d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate
290d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenType() {
291d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
292d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
293d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
294d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Checks that a numeric Type is valid.
295d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws InvalidTypeException The type is out of range.
296d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
297d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static void
298d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chencheck(int val) {
299d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	if (val < 0 || val > 0xFFFF)
300d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		throw new InvalidTypeException(val);
301d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
302d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
303d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
304d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Converts a numeric Type into a String
305d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param val The type value.
306d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return The canonical string representation of the type
307d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws InvalidTypeException The type is out of range.
308d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
309d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static String
310d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenstring(int val) {
311d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	return types.getText(val);
312d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
313d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
314d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
315d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Converts a String representation of an Type into its numeric value.
316d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param s The string representation of the type
317d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param numberok Whether a number will be accepted or not.
318d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return The type code, or -1 on error.
319d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
320d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static int
321d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenvalue(String s, boolean numberok) {
322d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	int val = types.getValue(s);
323d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	if (val == -1 && numberok) {
324d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		val = types.getValue("TYPE" + s);
325d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	}
326d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	return val;
327d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
328d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
329d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
330d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Converts a String representation of an Type into its numeric value
331d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return The type code, or -1 on error.
332d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
333d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static int
334d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenvalue(String s) {
335d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	return value(s, false);
336d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
337d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
338d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenstatic Record
339d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChengetProto(int val) {
340d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	return types.getProto(val);
341d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
342d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
343d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Is this type valid for a record (a non-meta type)? */
344d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static boolean
345d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenisRR(int type) {
346d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	switch (type) {
347d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		case OPT:
348d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		case TKEY:
349d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		case TSIG:
350d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		case IXFR:
351d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		case AXFR:
352d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		case MAILB:
353d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		case MAILA:
354d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		case ANY:
355d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen			return false;
356d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		default:
357d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen			return true;
358d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	}
359d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
360d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
361d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
362