Home | History | Annotate | Download | only in constants
      1 /**
      2  *
      3  */
      4 package javax.jmdns.impl.constants;
      5 
      6 import java.util.logging.Logger;
      7 
      8 /**
      9  * DNS Record Type
     10  *
     11  * @author Arthur van Hoff, Jeff Sonstein, Werner Randelshofer, Pierre Frisch, Rick Blair
     12  */
     13 public enum DNSRecordType {
     14     /**
     15      * Address
     16      */
     17     TYPE_IGNORE("ignore", 0),
     18     /**
     19      * Address
     20      */
     21     TYPE_A("a", 1),
     22     /**
     23      * Name Server
     24      */
     25     TYPE_NS("ns", 2),
     26     /**
     27      * Mail Destination
     28      */
     29     TYPE_MD("md", 3),
     30     /**
     31      * Mail Forwarder
     32      */
     33     TYPE_MF("mf", 4),
     34     /**
     35      * Canonical Name
     36      */
     37     TYPE_CNAME("cname", 5),
     38     /**
     39      * Start of Authority
     40      */
     41     TYPE_SOA("soa", 6),
     42     /**
     43      * Mailbox
     44      */
     45     TYPE_MB("mb", 7),
     46     /**
     47      * Mail Group
     48      */
     49     TYPE_MG("mg", 8),
     50     /**
     51      * Mail Rename
     52      */
     53     TYPE_MR("mr", 9),
     54     /**
     55      * NULL RR
     56      */
     57     TYPE_NULL("null", 10),
     58     /**
     59      * Well-known-service
     60      */
     61     TYPE_WKS("wks", 11),
     62     /**
     63      * Domain Name pointer
     64      */
     65     TYPE_PTR("ptr", 12),
     66     /**
     67      * Host information
     68      */
     69     TYPE_HINFO("hinfo", 13),
     70     /**
     71      * Mailbox information
     72      */
     73     TYPE_MINFO("minfo", 14),
     74     /**
     75      * Mail exchanger
     76      */
     77     TYPE_MX("mx", 15),
     78     /**
     79      * Arbitrary text string
     80      */
     81     TYPE_TXT("txt", 16),
     82     /**
     83      * for Responsible Person [RFC1183]
     84      */
     85     TYPE_RP("rp", 17),
     86     /**
     87      * for AFS Data Base location [RFC1183]
     88      */
     89     TYPE_AFSDB("afsdb", 18),
     90     /**
     91      * for X.25 PSDN address [RFC1183]
     92      */
     93     TYPE_X25("x25", 19),
     94     /**
     95      * for ISDN address [RFC1183]
     96      */
     97     TYPE_ISDN("isdn", 20),
     98     /**
     99      * for Route Through [RFC1183]
    100      */
    101     TYPE_RT("rt", 21),
    102     /**
    103      * for NSAP address, NSAP style A record [RFC1706]
    104      */
    105     TYPE_NSAP("nsap", 22),
    106     /**
    107      *
    108      */
    109     TYPE_NSAP_PTR("nsap-otr", 23),
    110     /**
    111      * for security signature [RFC2931]
    112      */
    113     TYPE_SIG("sig", 24),
    114     /**
    115      * for security key [RFC2535]
    116      */
    117     TYPE_KEY("key", 25),
    118     /**
    119      * X.400 mail mapping information [RFC2163]
    120      */
    121     TYPE_PX("px", 26),
    122     /**
    123      * Geographical Position [RFC1712]
    124      */
    125     TYPE_GPOS("gpos", 27),
    126     /**
    127      * IP6 Address [Thomson]
    128      */
    129     TYPE_AAAA("aaaa", 28),
    130     /**
    131      * Location Information [Vixie]
    132      */
    133     TYPE_LOC("loc", 29),
    134     /**
    135      * Next Domain - OBSOLETE [RFC2535, RFC3755]
    136      */
    137     TYPE_NXT("nxt", 30),
    138     /**
    139      * Endpoint Identifier [Patton]
    140      */
    141     TYPE_EID("eid", 31),
    142     /**
    143      * Nimrod Locator [Patton]
    144      */
    145     TYPE_NIMLOC("nimloc", 32),
    146     /**
    147      * Server Selection [RFC2782]
    148      */
    149     TYPE_SRV("srv", 33),
    150     /**
    151      * ATM Address [Dobrowski]
    152      */
    153     TYPE_ATMA("atma", 34),
    154     /**
    155      * Naming Authority Pointer [RFC2168, RFC2915]
    156      */
    157     TYPE_NAPTR("naptr", 35),
    158     /**
    159      * Key Exchanger [RFC2230]
    160      */
    161     TYPE_KX("kx", 36),
    162     /**
    163      * CERT [RFC2538]
    164      */
    165     TYPE_CERT("cert", 37),
    166     /**
    167      * A6 [RFC2874]
    168      */
    169     TYPE_A6("a6", 38),
    170     /**
    171      * DNAME [RFC2672]
    172      */
    173     TYPE_DNAME("dname", 39),
    174     /**
    175      * SINK [Eastlake]
    176      */
    177     TYPE_SINK("sink", 40),
    178     /**
    179      * OPT [RFC2671]
    180      */
    181     TYPE_OPT("opt", 41),
    182     /**
    183      * APL [RFC3123]
    184      */
    185     TYPE_APL("apl", 42),
    186     /**
    187      * Delegation Signer [RFC3658]
    188      */
    189     TYPE_DS("ds", 43),
    190     /**
    191      * SSH Key Fingerprint [RFC-ietf-secsh-dns-05.txt]
    192      */
    193     TYPE_SSHFP("sshfp", 44),
    194     /**
    195      * RRSIG [RFC3755]
    196      */
    197     TYPE_RRSIG("rrsig", 46),
    198     /**
    199      * NSEC [RFC3755]
    200      */
    201     TYPE_NSEC("nsec", 47),
    202     /**
    203      * DNSKEY [RFC3755]
    204      */
    205     TYPE_DNSKEY("dnskey", 48),
    206     /**
    207      * [IANA-Reserved]
    208      */
    209     TYPE_UINFO("uinfo", 100),
    210     /**
    211      * [IANA-Reserved]
    212      */
    213     TYPE_UID("uid", 101),
    214     /**
    215      * [IANA-Reserved]
    216      */
    217     TYPE_GID("gid", 102),
    218     /**
    219      * [IANA-Reserved]
    220      */
    221     TYPE_UNSPEC("unspec", 103),
    222     /**
    223      * Transaction Key [RFC2930]
    224      */
    225     TYPE_TKEY("tkey", 249),
    226     /**
    227      * Transaction Signature [RFC2845]
    228      */
    229     TYPE_TSIG("tsig", 250),
    230     /**
    231      * Incremental transfer [RFC1995]
    232      */
    233     TYPE_IXFR("ixfr", 251),
    234     /**
    235      * Transfer of an entire zone [RFC1035]
    236      */
    237     TYPE_AXFR("axfr", 252),
    238     /**
    239      * Mailbox-related records (MB, MG or MR) [RFC1035]
    240      */
    241     TYPE_MAILA("mails", 253),
    242     /**
    243      * Mail agent RRs (Obsolete - see MX) [RFC1035]
    244      */
    245     TYPE_MAILB("mailb", 254),
    246     /**
    247      * Request for all records [RFC1035]
    248      */
    249     TYPE_ANY("any", 255);
    250 
    251     private static Logger logger = Logger.getLogger(DNSRecordType.class.getName());
    252 
    253     private final String  _externalName;
    254 
    255     private final int     _index;
    256 
    257     DNSRecordType(String name, int index) {
    258         _externalName = name;
    259         _index = index;
    260     }
    261 
    262     /**
    263      * Return the string representation of this type
    264      *
    265      * @return String
    266      */
    267     public String externalName() {
    268         return _externalName;
    269     }
    270 
    271     /**
    272      * Return the numeric value of this type
    273      *
    274      * @return String
    275      */
    276     public int indexValue() {
    277         return _index;
    278     }
    279 
    280     /**
    281      * @param name
    282      * @return type for name
    283      */
    284     public static DNSRecordType typeForName(String name) {
    285         if (name != null) {
    286             String aName = name.toLowerCase();
    287             for (DNSRecordType aType : DNSRecordType.values()) {
    288                 if (aType._externalName.equals(aName)) return aType;
    289             }
    290         }
    291         logger.severe("Could not find record type for name: " + name);
    292         return TYPE_IGNORE;
    293     }
    294 
    295     /**
    296      * @param index
    297      * @return type for name
    298      */
    299     public static DNSRecordType typeForIndex(int index) {
    300         for (DNSRecordType aType : DNSRecordType.values()) {
    301             if (aType._index == index) return aType;
    302         }
    303         logger.severe("Could not find record type for index: " + index);
    304         return TYPE_IGNORE;
    305     }
    306 
    307     @Override
    308     public String toString() {
    309         return this.name() + " index " + this.indexValue();
    310     }
    311 
    312 }
    313