13742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman/** 23742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 33742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 43742d9db8b6edb10627b0f89336cca5249f1d15aManuel Romanpackage javax.jmdns.impl.constants; 53742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 63742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman/** 73742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * DNS result code. 83742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 93742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @author Arthur van Hoff, Jeff Sonstein, Werner Randelshofer, Pierre Frisch, Rick Blair 103742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 113742d9db8b6edb10627b0f89336cca5249f1d15aManuel Romanpublic enum DNSResultCode { 123742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 133742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Token 143742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 153742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman Unknown("Unknown", 65535), 163742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 173742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * No Error [RFC1035] 183742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 193742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman NoError("No Error", 0), 203742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 213742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Format Error [RFC1035] 223742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 233742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman FormErr("Format Error", 1), 243742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 253742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Server Failure [RFC1035] 263742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 273742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman ServFail("Server Failure", 2), 283742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 293742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Non-Existent Domain [RFC1035] 303742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 313742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman NXDomain("Non-Existent Domain", 3), 323742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 333742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Not Implemented [RFC1035] 343742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 353742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman NotImp("Not Implemented", 4), 363742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 373742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Query Refused [RFC1035] 383742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 393742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman Refused("Query Refused", 5), 403742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 413742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Name Exists when it should not [RFC2136] 423742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 433742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman YXDomain("Name Exists when it should not", 6), 443742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 453742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * RR Set Exists when it should not [RFC2136] 463742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 473742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman YXRRSet("RR Set Exists when it should not", 7), 483742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 493742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * RR Set that should exist does not [RFC2136] 503742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 513742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman NXRRSet("RR Set that should exist does not", 8), 523742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 533742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Server Not Authoritative for zone [RFC2136]] 543742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 553742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman NotAuth("Server Not Authoritative for zone", 9), 563742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 573742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Name not contained in zone [RFC2136] 583742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 593742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman NotZone("NotZone Name not contained in zone", 10), 603742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 613742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman ; 623742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 633742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 0 NoError No Error [RFC1035] 643742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 1 FormErr Format Error [RFC1035] 653742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 2 ServFail Server Failure [RFC1035] 663742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 3 NXDomain Non-Existent Domain [RFC1035] 673742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 4 NotImp Not Implemented [RFC1035] 683742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 5 Refused Query Refused [RFC1035] 693742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 6 YXDomain Name Exists when it should not [RFC2136] 703742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 7 YXRRSet RR Set Exists when it should not [RFC2136] 713742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 8 NXRRSet RR Set that should exist does not [RFC2136] 723742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 9 NotAuth Server Not Authoritative for zone [RFC2136] 733742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 10 NotZone Name not contained in zone [RFC2136] 743742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 11-15 Unassigned 753742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 16 BADVERS Bad OPT Version [RFC2671] 763742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 16 BADSIG TSIG Signature Failure [RFC2845] 773742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 17 BADKEY Key not recognized [RFC2845] 783742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 18 BADTIME Signature out of time window [RFC2845] 793742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 19 BADMODE Bad TKEY Mode [RFC2930] 803742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 20 BADNAME Duplicate key name [RFC2930] 813742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 21 BADALG Algorithm not supported [RFC2930] 823742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 22 BADTRUNC Bad Truncation [RFC4635] 833742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 23-3840 Unassigned 843742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 3841-4095 Reserved for Private Use [RFC5395] 853742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 4096-65534 Unassigned 863742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // 65535 Reserved, can be allocated by Standards Action [RFC5395] 873742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 883742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 893742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * DNS Result Code types are encoded on the last 4 bits 903742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 913742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman final static int RCode_MASK = 0x0F; 923742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 933742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * DNS Extended Result Code types are encoded on the first 8 bits 943742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 953742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman final static int ExtendedRCode_MASK = 0xFF; 963742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 973742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman private final String _externalName; 983742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 993742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman private final int _index; 1003742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1013742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman DNSResultCode(String name, int index) { 1023742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman _externalName = name; 1033742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman _index = index; 1043742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1053742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1063742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 1073742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Return the string representation of this type 1083742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 1093742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @return String 1103742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 1113742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public String externalName() { 1123742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return _externalName; 1133742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1143742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1153742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 1163742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Return the numeric value of this type 1173742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 1183742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @return String 1193742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 1203742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public int indexValue() { 1213742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return _index; 1223742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1233742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1243742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 1253742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @param flags 1263742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @return label 1273742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 1283742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public static DNSResultCode resultCodeForFlags(int flags) { 1293742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman int maskedIndex = flags & RCode_MASK; 1303742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman for (DNSResultCode aCode : DNSResultCode.values()) { 1313742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman if (aCode._index == maskedIndex) return aCode; 1323742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1333742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return Unknown; 1343742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1353742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1363742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public static DNSResultCode resultCodeForFlags(int flags, int extendedRCode) { 1373742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman int maskedIndex = ((extendedRCode >> 28) & ExtendedRCode_MASK) | (flags & RCode_MASK); 1383742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman for (DNSResultCode aCode : DNSResultCode.values()) { 1393742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman if (aCode._index == maskedIndex) return aCode; 1403742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1413742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return Unknown; 1423742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1433742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1443742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman @Override 1453742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public String toString() { 1463742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return this.name() + " index " + this.indexValue(); 1473742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1483742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1493742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman} 150