| /** |
| * |
| */ |
| package javax.jmdns.impl.constants; |
| |
| /** |
| * DNS label. |
| * |
| * @author Arthur van Hoff, Jeff Sonstein, Werner Randelshofer, Pierre Frisch, Rick Blair |
| */ |
| public enum DNSLabel { |
| /** |
| * This is unallocated. |
| */ |
| Unknown("", 0x80), |
| /** |
| * Standard label [RFC 1035] |
| */ |
| Standard("standard label", 0x00), |
| /** |
| * Compressed label [RFC 1035] |
| */ |
| Compressed("compressed label", 0xC0), |
| /** |
| * Extended label [RFC 2671] |
| */ |
| Extended("extended label", 0x40); |
| |
| /** |
| * DNS label types are encoded on the first 2 bits |
| */ |
| static final int LABEL_MASK = 0xC0; |
| static final int LABEL_NOT_MASK = 0x3F; |
| |
| private final String _externalName; |
| |
| private final int _index; |
| |
| DNSLabel(String name, int index) { |
| _externalName = name; |
| _index = index; |
| } |
| |
| /** |
| * Return the string representation of this type |
| * |
| * @return String |
| */ |
| public String externalName() { |
| return _externalName; |
| } |
| |
| /** |
| * Return the numeric value of this type |
| * |
| * @return String |
| */ |
| public int indexValue() { |
| return _index; |
| } |
| |
| /** |
| * @param index |
| * @return label |
| */ |
| public static DNSLabel labelForByte(int index) { |
| int maskedIndex = index & LABEL_MASK; |
| for (DNSLabel aLabel : DNSLabel.values()) { |
| if (aLabel._index == maskedIndex) return aLabel; |
| } |
| return Unknown; |
| } |
| |
| /** |
| * @param index |
| * @return masked value |
| */ |
| public static int labelValue(int index) { |
| return index & LABEL_NOT_MASK; |
| } |
| |
| @Override |
| public String toString() { |
| return this.name() + " index " + this.indexValue(); |
| } |
| |
| } |