blob: df84e83c65c4048a978bae8b301c80407c87fae8 [file] [log] [blame]
// Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org)
package org.xbill.DNS;
import java.util.HashMap;
/**
* Constants and functions relating to DNS Types
*
* @author Brian Wellington
*/
public final class Type {
/** Address */
public static final int A = 1;
/** Name server */
public static final int NS = 2;
/** Mail destination */
public static final int MD = 3;
/** Mail forwarder */
public static final int MF = 4;
/** Canonical name (alias) */
public static final int CNAME = 5;
/** Start of authority */
public static final int SOA = 6;
/** Mailbox domain name */
public static final int MB = 7;
/** Mail group member */
public static final int MG = 8;
/** Mail rename name */
public static final int MR = 9;
/** Null record */
public static final int NULL = 10;
/** Well known services */
public static final int WKS = 11;
/** Domain name pointer */
public static final int PTR = 12;
/** Host information */
public static final int HINFO = 13;
/** Mailbox information */
public static final int MINFO = 14;
/** Mail routing information */
public static final int MX = 15;
/** Text strings */
public static final int TXT = 16;
/** Responsible person */
public static final int RP = 17;
/** AFS cell database */
public static final int AFSDB = 18;
/** X.25 calling address */
public static final int X25 = 19;
/** ISDN calling address */
public static final int ISDN = 20;
/** Router */
public static final int RT = 21;
/** NSAP address */
public static final int NSAP = 22;
/** Reverse NSAP address (deprecated) */
public static final int NSAP_PTR = 23;
/** Signature */
public static final int SIG = 24;
/** Key */
public static final int KEY = 25;
/** X.400 mail mapping */
public static final int PX = 26;
/** Geographical position (withdrawn) */
public static final int GPOS = 27;
/** IPv6 address */
public static final int AAAA = 28;
/** Location */
public static final int LOC = 29;
/** Next valid name in zone */
public static final int NXT = 30;
/** Endpoint identifier */
public static final int EID = 31;
/** Nimrod locator */
public static final int NIMLOC = 32;
/** Server selection */
public static final int SRV = 33;
/** ATM address */
public static final int ATMA = 34;
/** Naming authority pointer */
public static final int NAPTR = 35;
/** Key exchange */
public static final int KX = 36;
/** Certificate */
public static final int CERT = 37;
/** IPv6 address (experimental) */
public static final int A6 = 38;
/** Non-terminal name redirection */
public static final int DNAME = 39;
/** Options - contains EDNS metadata */
public static final int OPT = 41;
/** Address Prefix List */
public static final int APL = 42;
/** Delegation Signer */
public static final int DS = 43;
/** SSH Key Fingerprint */
public static final int SSHFP = 44;
/** IPSEC key */
public static final int IPSECKEY = 45;
/** Resource Record Signature */
public static final int RRSIG = 46;
/** Next Secure Name */
public static final int NSEC = 47;
/** DNSSEC Key */
public static final int DNSKEY = 48;
/** Dynamic Host Configuration Protocol (DHCP) ID */
public static final int DHCID = 49;
/** Next SECure, 3rd edition, RFC 5155 */
public static final int NSEC3 = 50;
/** Next SECure PARAMeter, RFC 5155 */
public static final int NSEC3PARAM = 51;
/** Transport Layer Security Authentication, draft-ietf-dane-protocol-23 */
public static final int TLSA = 52;
/** Sender Policy Framework (experimental) */
public static final int SPF = 99;
/** Transaction key - used to compute a shared secret or exchange a key */
public static final int TKEY = 249;
/** Transaction signature */
public static final int TSIG = 250;
/** Incremental zone transfer */
public static final int IXFR = 251;
/** Zone transfer */
public static final int AXFR = 252;
/** Transfer mailbox records */
public static final int MAILB = 253;
/** Transfer mail agent records */
public static final int MAILA = 254;
/** Matches any type */
public static final int ANY = 255;
/** DNSSEC Lookaside Validation, RFC 4431 . */
public static final int DLV = 32769;
private static class TypeMnemonic extends Mnemonic {
private HashMap objects;
public
TypeMnemonic() {
super("Type", CASE_UPPER);
setPrefix("TYPE");
objects = new HashMap();
}
public void
add(int val, String str, Record proto) {
super.add(val, str);
objects.put(Mnemonic.toInteger(val), proto);
}
public void
check(int val) {
Type.check(val);
}
public Record
getProto(int val) {
check(val);
return (Record) objects.get(toInteger(val));
}
}
private static TypeMnemonic types = new TypeMnemonic();
static {
types.add(A, "A", new ARecord());
types.add(NS, "NS", new NSRecord());
types.add(MD, "MD", new MDRecord());
types.add(MF, "MF", new MFRecord());
types.add(CNAME, "CNAME", new CNAMERecord());
types.add(SOA, "SOA", new SOARecord());
types.add(MB, "MB", new MBRecord());
types.add(MG, "MG", new MGRecord());
types.add(MR, "MR", new MRRecord());
types.add(NULL, "NULL", new NULLRecord());
types.add(WKS, "WKS", new WKSRecord());
types.add(PTR, "PTR", new PTRRecord());
types.add(HINFO, "HINFO", new HINFORecord());
types.add(MINFO, "MINFO", new MINFORecord());
types.add(MX, "MX", new MXRecord());
types.add(TXT, "TXT", new TXTRecord());
types.add(RP, "RP", new RPRecord());
types.add(AFSDB, "AFSDB", new AFSDBRecord());
types.add(X25, "X25", new X25Record());
types.add(ISDN, "ISDN", new ISDNRecord());
types.add(RT, "RT", new RTRecord());
types.add(NSAP, "NSAP", new NSAPRecord());
types.add(NSAP_PTR, "NSAP-PTR", new NSAP_PTRRecord());
types.add(SIG, "SIG", new SIGRecord());
types.add(KEY, "KEY", new KEYRecord());
types.add(PX, "PX", new PXRecord());
types.add(GPOS, "GPOS", new GPOSRecord());
types.add(AAAA, "AAAA", new AAAARecord());
types.add(LOC, "LOC", new LOCRecord());
types.add(NXT, "NXT", new NXTRecord());
types.add(EID, "EID");
types.add(NIMLOC, "NIMLOC");
types.add(SRV, "SRV", new SRVRecord());
types.add(ATMA, "ATMA");
types.add(NAPTR, "NAPTR", new NAPTRRecord());
types.add(KX, "KX", new KXRecord());
types.add(CERT, "CERT", new CERTRecord());
types.add(A6, "A6", new A6Record());
types.add(DNAME, "DNAME", new DNAMERecord());
types.add(OPT, "OPT", new OPTRecord());
types.add(APL, "APL", new APLRecord());
types.add(DS, "DS", new DSRecord());
types.add(SSHFP, "SSHFP", new SSHFPRecord());
types.add(IPSECKEY, "IPSECKEY", new IPSECKEYRecord());
types.add(RRSIG, "RRSIG", new RRSIGRecord());
types.add(NSEC, "NSEC", new NSECRecord());
types.add(DNSKEY, "DNSKEY", new DNSKEYRecord());
types.add(DHCID, "DHCID", new DHCIDRecord());
types.add(NSEC3, "NSEC3", new NSEC3Record());
types.add(NSEC3PARAM, "NSEC3PARAM", new NSEC3PARAMRecord());
types.add(TLSA, "TLSA", new TLSARecord());
types.add(SPF, "SPF", new SPFRecord());
types.add(TKEY, "TKEY", new TKEYRecord());
types.add(TSIG, "TSIG", new TSIGRecord());
types.add(IXFR, "IXFR");
types.add(AXFR, "AXFR");
types.add(MAILB, "MAILB");
types.add(MAILA, "MAILA");
types.add(ANY, "ANY");
types.add(DLV, "DLV", new DLVRecord());
}
private
Type() {
}
/**
* Checks that a numeric Type is valid.
* @throws InvalidTypeException The type is out of range.
*/
public static void
check(int val) {
if (val < 0 || val > 0xFFFF)
throw new InvalidTypeException(val);
}
/**
* Converts a numeric Type into a String
* @param val The type value.
* @return The canonical string representation of the type
* @throws InvalidTypeException The type is out of range.
*/
public static String
string(int val) {
return types.getText(val);
}
/**
* Converts a String representation of an Type into its numeric value.
* @param s The string representation of the type
* @param numberok Whether a number will be accepted or not.
* @return The type code, or -1 on error.
*/
public static int
value(String s, boolean numberok) {
int val = types.getValue(s);
if (val == -1 && numberok) {
val = types.getValue("TYPE" + s);
}
return val;
}
/**
* Converts a String representation of an Type into its numeric value
* @return The type code, or -1 on error.
*/
public static int
value(String s) {
return value(s, false);
}
static Record
getProto(int val) {
return types.getProto(val);
}
/** Is this type valid for a record (a non-meta type)? */
public static boolean
isRR(int type) {
switch (type) {
case OPT:
case TKEY:
case TSIG:
case IXFR:
case AXFR:
case MAILB:
case MAILA:
case ANY:
return false;
default:
return true;
}
}
}