diff options
Diffstat (limited to 'src/javax/jmdns/impl/constants/DNSRecordClass.java')
-rw-r--r-- | src/javax/jmdns/impl/constants/DNSRecordClass.java | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/src/javax/jmdns/impl/constants/DNSRecordClass.java b/src/javax/jmdns/impl/constants/DNSRecordClass.java new file mode 100644 index 0000000..9fa3745 --- /dev/null +++ b/src/javax/jmdns/impl/constants/DNSRecordClass.java @@ -0,0 +1,138 @@ +/** + * + */ +package javax.jmdns.impl.constants; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * DNS Record Class + * + * @author Arthur van Hoff, Jeff Sonstein, Werner Randelshofer, Pierre Frisch, Rick Blair + */ +public enum DNSRecordClass { + /** + * + */ + CLASS_UNKNOWN("?", 0), + /** + * static final Internet + */ + CLASS_IN("in", 1), + /** + * CSNET + */ + CLASS_CS("cs", 2), + /** + * CHAOS + */ + CLASS_CH("ch", 3), + /** + * Hesiod + */ + CLASS_HS("hs", 4), + /** + * Used in DNS UPDATE [RFC 2136] + */ + CLASS_NONE("none", 254), + /** + * Not a DNS class, but a DNS query class, meaning "all classes" + */ + CLASS_ANY("any", 255); + + private static Logger logger = Logger.getLogger(DNSRecordClass.class.getName()); + + /** + * Multicast DNS uses the bottom 15 bits to identify the record class...<br/> + * Except for pseudo records like OPT. + */ + public static final int CLASS_MASK = 0x7FFF; + + /** + * For answers the top bit indicates that all other cached records are now invalid.<br/> + * For questions it indicates that we should send a unicast response. + */ + public static final int CLASS_UNIQUE = 0x8000; + + /** + * + */ + public static final boolean UNIQUE = true; + + /** + * + */ + public static final boolean NOT_UNIQUE = false; + + private final String _externalName; + + private final int _index; + + DNSRecordClass(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; + } + + /** + * Checks if the class is unique + * + * @param index + * @return <code>true</code> is the class is unique, <code>false</code> otherwise. + */ + public boolean isUnique(int index) { + return (this != CLASS_UNKNOWN) && ((index & CLASS_UNIQUE) != 0); + } + + /** + * @param name + * @return class for name + */ + public static DNSRecordClass classForName(String name) { + if (name != null) { + String aName = name.toLowerCase(); + for (DNSRecordClass aClass : DNSRecordClass.values()) { + if (aClass._externalName.equals(aName)) return aClass; + } + } + logger.log(Level.WARNING, "Could not find record class for name: " + name); + return CLASS_UNKNOWN; + } + + /** + * @param index + * @return class for name + */ + public static DNSRecordClass classForIndex(int index) { + int maskedIndex = index & CLASS_MASK; + for (DNSRecordClass aClass : DNSRecordClass.values()) { + if (aClass._index == maskedIndex) return aClass; + } + logger.log(Level.WARNING, "Could not find record class for index: " + index); + return CLASS_UNKNOWN; + } + + @Override + public String toString() { + return this.name() + " index " + this.indexValue(); + } + +} |