13742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman/** 23742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 33742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 43742d9db8b6edb10627b0f89336cca5249f1d15aManuel Romanpackage javax.jmdns.impl.constants; 53742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 63742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman/** 73742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * DNS label. 83742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 93742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @author Arthur van Hoff, Jeff Sonstein, Werner Randelshofer, Pierre Frisch, Rick Blair 103742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 113742d9db8b6edb10627b0f89336cca5249f1d15aManuel Romanpublic enum DNSLabel { 123742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 133742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * This is unallocated. 143742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 153742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman Unknown("", 0x80), 163742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 173742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Standard label [RFC 1035] 183742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 193742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman Standard("standard label", 0x00), 203742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 213742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Compressed label [RFC 1035] 223742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 233742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman Compressed("compressed label", 0xC0), 243742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 253742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Extended label [RFC 2671] 263742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 273742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman Extended("extended label", 0x40); 283742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 293742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 303742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * DNS label types are encoded on the first 2 bits 313742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 323742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman static final int LABEL_MASK = 0xC0; 333742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman static final int LABEL_NOT_MASK = 0x3F; 343742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 353742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman private final String _externalName; 363742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 373742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman private final int _index; 383742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 393742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman DNSLabel(String name, int index) { 403742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman _externalName = name; 413742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman _index = index; 423742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 433742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 443742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 453742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Return the string representation of this type 463742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 473742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @return String 483742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 493742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public String externalName() { 503742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return _externalName; 513742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 523742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 533742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 543742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Return the numeric value of this type 553742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 563742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @return String 573742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 583742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public int indexValue() { 593742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return _index; 603742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 613742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 623742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 633742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @param index 643742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @return label 653742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 663742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public static DNSLabel labelForByte(int index) { 673742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman int maskedIndex = index & LABEL_MASK; 683742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman for (DNSLabel aLabel : DNSLabel.values()) { 693742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman if (aLabel._index == maskedIndex) return aLabel; 703742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 713742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return Unknown; 723742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 733742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 743742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 753742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @param index 763742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @return masked value 773742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 783742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public static int labelValue(int index) { 793742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return index & LABEL_NOT_MASK; 803742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 813742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 823742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman @Override 833742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public String toString() { 843742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return this.name() + " index " + this.indexValue(); 853742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 863742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 873742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman} 88