/** * */ package javax.jmdns.impl.constants; /** * DNS result code. * * @author Arthur van Hoff, Jeff Sonstein, Werner Randelshofer, Pierre Frisch, Rick Blair */ public enum DNSResultCode { /** * Token */ Unknown("Unknown", 65535), /** * No Error [RFC1035] */ NoError("No Error", 0), /** * Format Error [RFC1035] */ FormErr("Format Error", 1), /** * Server Failure [RFC1035] */ ServFail("Server Failure", 2), /** * Non-Existent Domain [RFC1035] */ NXDomain("Non-Existent Domain", 3), /** * Not Implemented [RFC1035] */ NotImp("Not Implemented", 4), /** * Query Refused [RFC1035] */ Refused("Query Refused", 5), /** * Name Exists when it should not [RFC2136] */ YXDomain("Name Exists when it should not", 6), /** * RR Set Exists when it should not [RFC2136] */ YXRRSet("RR Set Exists when it should not", 7), /** * RR Set that should exist does not [RFC2136] */ NXRRSet("RR Set that should exist does not", 8), /** * Server Not Authoritative for zone [RFC2136]] */ NotAuth("Server Not Authoritative for zone", 9), /** * Name not contained in zone [RFC2136] */ NotZone("NotZone Name not contained in zone", 10), ; // 0 NoError No Error [RFC1035] // 1 FormErr Format Error [RFC1035] // 2 ServFail Server Failure [RFC1035] // 3 NXDomain Non-Existent Domain [RFC1035] // 4 NotImp Not Implemented [RFC1035] // 5 Refused Query Refused [RFC1035] // 6 YXDomain Name Exists when it should not [RFC2136] // 7 YXRRSet RR Set Exists when it should not [RFC2136] // 8 NXRRSet RR Set that should exist does not [RFC2136] // 9 NotAuth Server Not Authoritative for zone [RFC2136] // 10 NotZone Name not contained in zone [RFC2136] // 11-15 Unassigned // 16 BADVERS Bad OPT Version [RFC2671] // 16 BADSIG TSIG Signature Failure [RFC2845] // 17 BADKEY Key not recognized [RFC2845] // 18 BADTIME Signature out of time window [RFC2845] // 19 BADMODE Bad TKEY Mode [RFC2930] // 20 BADNAME Duplicate key name [RFC2930] // 21 BADALG Algorithm not supported [RFC2930] // 22 BADTRUNC Bad Truncation [RFC4635] // 23-3840 Unassigned // 3841-4095 Reserved for Private Use [RFC5395] // 4096-65534 Unassigned // 65535 Reserved, can be allocated by Standards Action [RFC5395] /** * DNS Result Code types are encoded on the last 4 bits */ final static int RCode_MASK = 0x0F; /** * DNS Extended Result Code types are encoded on the first 8 bits */ final static int ExtendedRCode_MASK = 0xFF; private final String _externalName; private final int _index; DNSResultCode(String name, int index) { _externalName = name; _index = index; } /** * Return the string representation of this type * * @return String */ public String externalName() { return _externalName; } /** * Return the numeric value of this type * * @return String */ public int indexValue() { return _index; } /** * @param flags * @return label */ public static DNSResultCode resultCodeForFlags(int flags) { int maskedIndex = flags & RCode_MASK; for (DNSResultCode aCode : DNSResultCode.values()) { if (aCode._index == maskedIndex) return aCode; } return Unknown; } public static DNSResultCode resultCodeForFlags(int flags, int extendedRCode) { int maskedIndex = ((extendedRCode >> 28) & ExtendedRCode_MASK) | (flags & RCode_MASK); for (DNSResultCode aCode : DNSResultCode.values()) { if (aCode._index == maskedIndex) return aCode; } return Unknown; } @Override public String toString() { return this.name() + " index " + this.indexValue(); } }