1 /**
2  *
3  */
4 package javax.jmdns.impl.constants;
5 
6 /**
7  * DNS label.
8  *
9  * @author Arthur van Hoff, Jeff Sonstein, Werner Randelshofer, Pierre Frisch, Rick Blair
10  */
11 public enum DNSLabel {
12     /**
13      * This is unallocated.
14      */
15     Unknown("", 0x80),
16     /**
17      * Standard label [RFC 1035]
18      */
19     Standard("standard label", 0x00),
20     /**
21      * Compressed label [RFC 1035]
22      */
23     Compressed("compressed label", 0xC0),
24     /**
25      * Extended label [RFC 2671]
26      */
27     Extended("extended label", 0x40);
28 
29     /**
30      * DNS label types are encoded on the first 2 bits
31      */
32     static final int     LABEL_MASK     = 0xC0;
33     static final int     LABEL_NOT_MASK = 0x3F;
34 
35     private final String _externalName;
36 
37     private final int    _index;
38 
DNSLabel(String name, int index)39     DNSLabel(String name, int index) {
40         _externalName = name;
41         _index = index;
42     }
43 
44     /**
45      * Return the string representation of this type
46      *
47      * @return String
48      */
externalName()49     public String externalName() {
50         return _externalName;
51     }
52 
53     /**
54      * Return the numeric value of this type
55      *
56      * @return String
57      */
indexValue()58     public int indexValue() {
59         return _index;
60     }
61 
62     /**
63      * @param index
64      * @return label
65      */
labelForByte(int index)66     public static DNSLabel labelForByte(int index) {
67         int maskedIndex = index & LABEL_MASK;
68         for (DNSLabel aLabel : DNSLabel.values()) {
69             if (aLabel._index == maskedIndex) return aLabel;
70         }
71         return Unknown;
72     }
73 
74     /**
75      * @param index
76      * @return masked value
77      */
labelValue(int index)78     public static int labelValue(int index) {
79         return index & LABEL_NOT_MASK;
80     }
81 
82     @Override
toString()83     public String toString() {
84         return this.name() + " index " + this.indexValue();
85     }
86 
87 }
88