summaryrefslogtreecommitdiff
path: root/project2/proj2_s4498062/dns/rcodes.py
blob: 4f4062169b73fa522e6033c8d156a563c4f6cb40 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/env python2

""" DNS RCODE values

This module contains an Enum of RCODE values. See section 4.1.4 of RFC 1035 for
more info.
"""


class RCode(object):
    """ Enum of RCODE values

    Usage:
        >>> NoError
        0
        >>> NXDomain
        3
    """

    NoError = 0
    FormErr = 1
    ServFail = 2
    NXDomain = 3
    NotImp = 4
    Refused = 5
    YXDomain = 6
    YXRRSet = 7
    NXRRSet = 8
    NotAuth = 9
    NotZone = 10
    BADVERS = 16
    BADSIG = 16
    BADKEY = 17
    BADTIME = 18
    BADMODE = 19
    BADNAME = 20
    BADALG = 21
    BADTRUNC = 22

    by_string = {
        "NoError": NoError,
        "FormErr": FormErr,
        "ServFail": ServFail,
        "NXDomain": NXDomain,
        "NotImp": NotImp,
        "Refused": Refused,
        "YXDomain": YXDomain,
        "YXRRSet": YXRRSet,
        "NXRRSet": NXRRSet,
        "NotAuth": NotAuth,
        "NotZone": NotZone,
        "BADVERS": BADVERS,
        "BADSIG": BADSIG,
        "BADKEY": BADKEY,
        "BADTIME": BADTIME,
        "BADMODE": BADMODE,
        "BADNAME": BADNAME,
        "BADALG": BADALG,
        "BADTRUNC": BADTRUNC
    }

    by_value = dict([(y, x) for x, y in by_string.items()])

    @staticmethod
    def to_string(rcode):
        """ Convert an RCode to a string

        Usage:
            >>> RCode.to_string(RCode.NoError)
            'NoError'
        """
        return RCode.by_value[rcode]

    @staticmethod
    def from_string(string):
        """ Convert a string to an RCode

        Usage:
            >>> RCode.from_string('NoError')
            0
        """
        return RCode.by_string[string]