diff options
Diffstat (limited to 'src/org/xbill/DNS/Type.java')
-rw-r--r-- | src/org/xbill/DNS/Type.java | 361 |
1 files changed, 361 insertions, 0 deletions
diff --git a/src/org/xbill/DNS/Type.java b/src/org/xbill/DNS/Type.java new file mode 100644 index 0000000..df84e83 --- /dev/null +++ b/src/org/xbill/DNS/Type.java @@ -0,0 +1,361 @@ +// 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; + } +} + +} |