1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org)
2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpackage org.xbill.DNS;
4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Constants and functions relating to DNS rcodes (error values)
7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Brian Wellington
9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic final class Rcode {
12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate static Mnemonic rcodes = new Mnemonic("DNS Rcode",
14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen					      Mnemonic.CASE_UPPER);
15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate static Mnemonic tsigrcodes = new Mnemonic("TSIG rcode",
17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen						  Mnemonic.CASE_UPPER);
18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** No error */
20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int NOERROR		= 0;
21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Format error */
23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int FORMERR		= 1;
24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Server failure */
26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int SERVFAIL	= 2;
27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** The name does not exist */
29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int NXDOMAIN	= 3;
30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** The operation requested is not implemented */
32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int NOTIMP		= 4;
33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Deprecated synonym for NOTIMP. */
35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int NOTIMPL		= 4;
36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** The operation was refused by the server */
38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int REFUSED		= 5;
39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** The name exists */
41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int YXDOMAIN	= 6;
42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** The RRset (name, type) exists */
44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int YXRRSET		= 7;
45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** The RRset (name, type) does not exist */
47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int NXRRSET		= 8;
48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** The requestor is not authorized to perform this operation */
50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int NOTAUTH		= 9;
51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** The zone specified is not a zone */
53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int NOTZONE		= 10;
54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/* EDNS extended rcodes */
56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Unsupported EDNS level */
57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int BADVERS		= 16;
58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/* TSIG/TKEY only rcodes */
60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** The signature is invalid (TSIG/TKEY extended error) */
61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int BADSIG		= 16;
62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** The key is invalid (TSIG/TKEY extended error) */
64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int BADKEY		= 17;
65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** The time is out of range (TSIG/TKEY extended error) */
67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int BADTIME		= 18;
68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** The mode is invalid (TKEY extended error) */
70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static final int BADMODE		= 19;
71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenstatic {
73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	rcodes.setMaximum(0xFFF);
74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	rcodes.setPrefix("RESERVED");
75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	rcodes.setNumericAllowed(true);
76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	rcodes.add(NOERROR, "NOERROR");
78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	rcodes.add(FORMERR, "FORMERR");
79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	rcodes.add(SERVFAIL, "SERVFAIL");
80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	rcodes.add(NXDOMAIN, "NXDOMAIN");
81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	rcodes.add(NOTIMP, "NOTIMP");
82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	rcodes.addAlias(NOTIMP, "NOTIMPL");
83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	rcodes.add(REFUSED, "REFUSED");
84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	rcodes.add(YXDOMAIN, "YXDOMAIN");
85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	rcodes.add(YXRRSET, "YXRRSET");
86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	rcodes.add(NXRRSET, "NXRRSET");
87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	rcodes.add(NOTAUTH, "NOTAUTH");
88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	rcodes.add(NOTZONE, "NOTZONE");
89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	rcodes.add(BADVERS, "BADVERS");
90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	tsigrcodes.setMaximum(0xFFFF);
92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	tsigrcodes.setPrefix("RESERVED");
93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	tsigrcodes.setNumericAllowed(true);
94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	tsigrcodes.addAll(rcodes);
95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	tsigrcodes.add(BADSIG, "BADSIG");
97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	tsigrcodes.add(BADKEY, "BADKEY");
98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	tsigrcodes.add(BADTIME, "BADTIME");
99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	tsigrcodes.add(BADMODE, "BADMODE");
100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate
103d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenRcode() {}
104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Converts a numeric Rcode into a String */
106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static String
107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenstring(int i) {
108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	return rcodes.getText(i);
109d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
110d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
111d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Converts a numeric TSIG extended Rcode into a String */
112d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static String
113d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenTSIGstring(int i) {
114d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	return tsigrcodes.getText(i);
115d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
116d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
117d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** Converts a String representation of an Rcode into its numeric value */
118d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic static int
119d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenvalue(String s) {
120d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	return rcodes.getValue(s);
121d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
122d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
123d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
124