1/**
2 *
3 */
4package javax.jmdns.impl.constants;
5
6/**
7 * DNS operation code.
8 *
9 * @author Arthur van Hoff, Jeff Sonstein, Werner Randelshofer, Pierre Frisch, Rick Blair
10 */
11public enum DNSOperationCode {
12    /**
13     * Query [RFC1035]
14     */
15    Query("Query", 0),
16    /**
17     * IQuery (Inverse Query, Obsolete) [RFC3425]
18     */
19    IQuery("Inverse Query", 1),
20    /**
21     * Status [RFC1035]
22     */
23    Status("Status", 2),
24    /**
25     * Unassigned
26     */
27    Unassigned("Unassigned", 3),
28    /**
29     * Notify [RFC1996]
30     */
31    Notify("Notify", 4),
32    /**
33     * Update [RFC2136]
34     */
35    Update("Update", 5);
36
37    /**
38     * DNS RCode types are encoded on the last 4 bits
39     */
40    static final int     OpCode_MASK = 0x7800;
41
42    private final String _externalName;
43
44    private final int    _index;
45
46    DNSOperationCode(String name, int index) {
47        _externalName = name;
48        _index = index;
49    }
50
51    /**
52     * Return the string representation of this type
53     *
54     * @return String
55     */
56    public String externalName() {
57        return _externalName;
58    }
59
60    /**
61     * Return the numeric value of this type
62     *
63     * @return String
64     */
65    public int indexValue() {
66        return _index;
67    }
68
69    /**
70     * @param flags
71     * @return label
72     */
73    public static DNSOperationCode operationCodeForFlags(int flags) {
74        int maskedIndex = (flags & OpCode_MASK) >> 11;
75        for (DNSOperationCode aCode : DNSOperationCode.values()) {
76            if (aCode._index == maskedIndex) return aCode;
77        }
78        return Unassigned;
79    }
80
81    @Override
82    public String toString() {
83        return this.name() + " index " + this.indexValue();
84    }
85
86}
87