/**
*
*/
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);
/**
* 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 static Logger logger = Logger.getLogger(DNSRecordClass.class.getName());
private final String _externalName;
private final int _index;
DNSRecordClass(String name, int index)
{
_externalName = name;
_index = index;
}
/**
* @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;
}
/**
* 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);
}
@Override
public String toString()
{
return this.name() + " index " + this.indexValue();
}
}