1 /**
2 *
3 */
4 package javax.jmdns.impl.constants;
5
6 /**
7 * DNS result code.
8 *
9 * @author Arthur van Hoff, Jeff Sonstein, Werner Randelshofer, Pierre Frisch, Rick Blair
10 */
11 public enum DNSResultCode {
12 /**
13 * Token
14 */
15 Unknown("Unknown", 65535),
16 /**
17 * No Error [RFC1035]
18 */
19 NoError("No Error", 0),
20 /**
21 * Format Error [RFC1035]
22 */
23 FormErr("Format Error", 1),
24 /**
25 * Server Failure [RFC1035]
26 */
27 ServFail("Server Failure", 2),
28 /**
29 * Non-Existent Domain [RFC1035]
30 */
31 NXDomain("Non-Existent Domain", 3),
32 /**
33 * Not Implemented [RFC1035]
34 */
35 NotImp("Not Implemented", 4),
36 /**
37 * Query Refused [RFC1035]
38 */
39 Refused("Query Refused", 5),
40 /**
41 * Name Exists when it should not [RFC2136]
42 */
43 YXDomain("Name Exists when it should not", 6),
44 /**
45 * RR Set Exists when it should not [RFC2136]
46 */
47 YXRRSet("RR Set Exists when it should not", 7),
48 /**
49 * RR Set that should exist does not [RFC2136]
50 */
51 NXRRSet("RR Set that should exist does not", 8),
52 /**
53 * Server Not Authoritative for zone [RFC2136]]
54 */
55 NotAuth("Server Not Authoritative for zone", 9),
56 /**
57 * Name not contained in zone [RFC2136]
58 */
59 NotZone("NotZone Name not contained in zone", 10),
60
61 ;
62
63 // 0 NoError No Error [RFC1035]
64 // 1 FormErr Format Error [RFC1035]
65 // 2 ServFail Server Failure [RFC1035]
66 // 3 NXDomain Non-Existent Domain [RFC1035]
67 // 4 NotImp Not Implemented [RFC1035]
68 // 5 Refused Query Refused [RFC1035]
69 // 6 YXDomain Name Exists when it should not [RFC2136]
70 // 7 YXRRSet RR Set Exists when it should not [RFC2136]
71 // 8 NXRRSet RR Set that should exist does not [RFC2136]
72 // 9 NotAuth Server Not Authoritative for zone [RFC2136]
73 // 10 NotZone Name not contained in zone [RFC2136]
74 // 11-15 Unassigned
75 // 16 BADVERS Bad OPT Version [RFC2671]
76 // 16 BADSIG TSIG Signature Failure [RFC2845]
77 // 17 BADKEY Key not recognized [RFC2845]
78 // 18 BADTIME Signature out of time window [RFC2845]
79 // 19 BADMODE Bad TKEY Mode [RFC2930]
80 // 20 BADNAME Duplicate key name [RFC2930]
81 // 21 BADALG Algorithm not supported [RFC2930]
82 // 22 BADTRUNC Bad Truncation [RFC4635]
83 // 23-3840 Unassigned
84 // 3841-4095 Reserved for Private Use [RFC5395]
85 // 4096-65534 Unassigned
86 // 65535 Reserved, can be allocated by Standards Action [RFC5395]
87
88 /**
89 * DNS Result Code types are encoded on the last 4 bits
90 */
91 final static int RCode_MASK = 0x0F;
92 /**
93 * DNS Extended Result Code types are encoded on the first 8 bits
94 */
95 final static int ExtendedRCode_MASK = 0xFF;
96
97 private final String _externalName;
98
99 private final int _index;
100
101 DNSResultCode(String name, int index) {
102 _externalName = name;
103 _index = index;
104 }
105
106 /**
107 * Return the string representation of this type
108 *
109 * @return String
110 */
111 public String externalName() {
112 return _externalName;
113 }
114
115 /**
116 * Return the numeric value of this type
117 *
118 * @return String
119 */
120 public int indexValue() {
121 return _index;
122 }
123
124 /**
125 * @param flags
126 * @return label
127 */
128 public static DNSResultCode resultCodeForFlags(int flags) {
129 int maskedIndex = flags & RCode_MASK;
130 for (DNSResultCode aCode : DNSResultCode.values()) {
131 if (aCode._index == maskedIndex) return aCode;
132 }
133 return Unknown;
134 }
135
136 public static DNSResultCode resultCodeForFlags(int flags, int extendedRCode) {
137 int maskedIndex = ((extendedRCode >> 28) & ExtendedRCode_MASK) | (flags & RCode_MASK);
138 for (DNSResultCode aCode : DNSResultCode.values()) {
139 if (aCode._index == maskedIndex) return aCode;
140 }
141 return Unknown;
142 }
143
144 @Override
145 public String toString() {
146 return this.name() + " index " + this.indexValue();
147 }
148
149 }