1/**
2 *
3 */
4package javax.jmdns.impl.constants;
5
6import java.util.logging.Logger;
7
8/**
9 * DNS Record Type
10 *
11 * @author Arthur van Hoff, Jeff Sonstein, Werner Randelshofer, Pierre Frisch, Rick Blair
12 */
13public enum DNSRecordType {
14    /**
15     * Address
16     */
17    TYPE_IGNORE("ignore", 0),
18    /**
19     * Address
20     */
21    TYPE_A("a", 1),
22    /**
23     * Name Server
24     */
25    TYPE_NS("ns", 2),
26    /**
27     * Mail Destination
28     */
29    TYPE_MD("md", 3),
30    /**
31     * Mail Forwarder
32     */
33    TYPE_MF("mf", 4),
34    /**
35     * Canonical Name
36     */
37    TYPE_CNAME("cname", 5),
38    /**
39     * Start of Authority
40     */
41    TYPE_SOA("soa", 6),
42    /**
43     * Mailbox
44     */
45    TYPE_MB("mb", 7),
46    /**
47     * Mail Group
48     */
49    TYPE_MG("mg", 8),
50    /**
51     * Mail Rename
52     */
53    TYPE_MR("mr", 9),
54    /**
55     * NULL RR
56     */
57    TYPE_NULL("null", 10),
58    /**
59     * Well-known-service
60     */
61    TYPE_WKS("wks", 11),
62    /**
63     * Domain Name pointer
64     */
65    TYPE_PTR("ptr", 12),
66    /**
67     * Host information
68     */
69    TYPE_HINFO("hinfo", 13),
70    /**
71     * Mailbox information
72     */
73    TYPE_MINFO("minfo", 14),
74    /**
75     * Mail exchanger
76     */
77    TYPE_MX("mx", 15),
78    /**
79     * Arbitrary text string
80     */
81    TYPE_TXT("txt", 16),
82    /**
83     * for Responsible Person [RFC1183]
84     */
85    TYPE_RP("rp", 17),
86    /**
87     * for AFS Data Base location [RFC1183]
88     */
89    TYPE_AFSDB("afsdb", 18),
90    /**
91     * for X.25 PSDN address [RFC1183]
92     */
93    TYPE_X25("x25", 19),
94    /**
95     * for ISDN address [RFC1183]
96     */
97    TYPE_ISDN("isdn", 20),
98    /**
99     * for Route Through [RFC1183]
100     */
101    TYPE_RT("rt", 21),
102    /**
103     * for NSAP address, NSAP style A record [RFC1706]
104     */
105    TYPE_NSAP("nsap", 22),
106    /**
107     *
108     */
109    TYPE_NSAP_PTR("nsap-otr", 23),
110    /**
111     * for security signature [RFC2931]
112     */
113    TYPE_SIG("sig", 24),
114    /**
115     * for security key [RFC2535]
116     */
117    TYPE_KEY("key", 25),
118    /**
119     * X.400 mail mapping information [RFC2163]
120     */
121    TYPE_PX("px", 26),
122    /**
123     * Geographical Position [RFC1712]
124     */
125    TYPE_GPOS("gpos", 27),
126    /**
127     * IP6 Address [Thomson]
128     */
129    TYPE_AAAA("aaaa", 28),
130    /**
131     * Location Information [Vixie]
132     */
133    TYPE_LOC("loc", 29),
134    /**
135     * Next Domain - OBSOLETE [RFC2535, RFC3755]
136     */
137    TYPE_NXT("nxt", 30),
138    /**
139     * Endpoint Identifier [Patton]
140     */
141    TYPE_EID("eid", 31),
142    /**
143     * Nimrod Locator [Patton]
144     */
145    TYPE_NIMLOC("nimloc", 32),
146    /**
147     * Server Selection [RFC2782]
148     */
149    TYPE_SRV("srv", 33),
150    /**
151     * ATM Address [Dobrowski]
152     */
153    TYPE_ATMA("atma", 34),
154    /**
155     * Naming Authority Pointer [RFC2168, RFC2915]
156     */
157    TYPE_NAPTR("naptr", 35),
158    /**
159     * Key Exchanger [RFC2230]
160     */
161    TYPE_KX("kx", 36),
162    /**
163     * CERT [RFC2538]
164     */
165    TYPE_CERT("cert", 37),
166    /**
167     * A6 [RFC2874]
168     */
169    TYPE_A6("a6", 38),
170    /**
171     * DNAME [RFC2672]
172     */
173    TYPE_DNAME("dname", 39),
174    /**
175     * SINK [Eastlake]
176     */
177    TYPE_SINK("sink", 40),
178    /**
179     * OPT [RFC2671]
180     */
181    TYPE_OPT("opt", 41),
182    /**
183     * APL [RFC3123]
184     */
185    TYPE_APL("apl", 42),
186    /**
187     * Delegation Signer [RFC3658]
188     */
189    TYPE_DS("ds", 43),
190    /**
191     * SSH Key Fingerprint [RFC-ietf-secsh-dns-05.txt]
192     */
193    TYPE_SSHFP("sshfp", 44),
194    /**
195     * RRSIG [RFC3755]
196     */
197    TYPE_RRSIG("rrsig", 46),
198    /**
199     * NSEC [RFC3755]
200     */
201    TYPE_NSEC("nsec", 47),
202    /**
203     * DNSKEY [RFC3755]
204     */
205    TYPE_DNSKEY("dnskey", 48),
206    /**
207     * [IANA-Reserved]
208     */
209    TYPE_UINFO("uinfo", 100),
210    /**
211     * [IANA-Reserved]
212     */
213    TYPE_UID("uid", 101),
214    /**
215     * [IANA-Reserved]
216     */
217    TYPE_GID("gid", 102),
218    /**
219     * [IANA-Reserved]
220     */
221    TYPE_UNSPEC("unspec", 103),
222    /**
223     * Transaction Key [RFC2930]
224     */
225    TYPE_TKEY("tkey", 249),
226    /**
227     * Transaction Signature [RFC2845]
228     */
229    TYPE_TSIG("tsig", 250),
230    /**
231     * Incremental transfer [RFC1995]
232     */
233    TYPE_IXFR("ixfr", 251),
234    /**
235     * Transfer of an entire zone [RFC1035]
236     */
237    TYPE_AXFR("axfr", 252),
238    /**
239     * Mailbox-related records (MB, MG or MR) [RFC1035]
240     */
241    TYPE_MAILA("mails", 253),
242    /**
243     * Mail agent RRs (Obsolete - see MX) [RFC1035]
244     */
245    TYPE_MAILB("mailb", 254),
246    /**
247     * Request for all records [RFC1035]
248     */
249    TYPE_ANY("any", 255);
250
251    private static Logger logger = Logger.getLogger(DNSRecordType.class.getName());
252
253    private final String  _externalName;
254
255    private final int     _index;
256
257    DNSRecordType(String name, int index) {
258        _externalName = name;
259        _index = index;
260    }
261
262    /**
263     * Return the string representation of this type
264     *
265     * @return String
266     */
267    public String externalName() {
268        return _externalName;
269    }
270
271    /**
272     * Return the numeric value of this type
273     *
274     * @return String
275     */
276    public int indexValue() {
277        return _index;
278    }
279
280    /**
281     * @param name
282     * @return type for name
283     */
284    public static DNSRecordType typeForName(String name) {
285        if (name != null) {
286            String aName = name.toLowerCase();
287            for (DNSRecordType aType : DNSRecordType.values()) {
288                if (aType._externalName.equals(aName)) return aType;
289            }
290        }
291        logger.severe("Could not find record type for name: " + name);
292        return TYPE_IGNORE;
293    }
294
295    /**
296     * @param index
297     * @return type for name
298     */
299    public static DNSRecordType typeForIndex(int index) {
300        for (DNSRecordType aType : DNSRecordType.values()) {
301            if (aType._index == index) return aType;
302        }
303        logger.severe("Could not find record type for index: " + index);
304        return TYPE_IGNORE;
305    }
306
307    @Override
308    public String toString() {
309        return this.name() + " index " + this.indexValue();
310    }
311
312}
313