/** * */ 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(); } }