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