| Home | Trees | Indices | Help |
|
|---|
|
|
1 # Copyright (C) Dnspython Contributors, see LICENSE for text of ISC license
2
3 # Copyright (C) 2001-2017 Nominum, Inc.
4 #
5 # Permission to use, copy, modify, and distribute this software and its
6 # documentation for any purpose with or without fee is hereby granted,
7 # provided that the above copyright notice and this permission notice
8 # appear in all copies.
9 #
10 # THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES
11 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR
13 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
16 # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
18 """DNS Message Flags."""
19
20 # Standard DNS flags
21
22 #: Query Response
23 QR = 0x8000
24 #: Authoritative Answer
25 AA = 0x0400
26 #: Truncated Response
27 TC = 0x0200
28 #: Recursion Desired
29 RD = 0x0100
30 #: Recursion Available
31 RA = 0x0080
32 #: Authentic Data
33 AD = 0x0020
34 #: Checking Disabled
35 CD = 0x0010
36
37 # EDNS flags
38
39 #: DNSSEC answer OK
40 DO = 0x8000
41
42 _by_text = {
43 'QR': QR,
44 'AA': AA,
45 'TC': TC,
46 'RD': RD,
47 'RA': RA,
48 'AD': AD,
49 'CD': CD
50 }
51
52 _edns_by_text = {
53 'DO': DO
54 }
55
56
57 # We construct the inverse mappings programmatically to ensure that we
58 # cannot make any mistakes (e.g. omissions, cut-and-paste errors) that
59 # would cause the mappings not to be true inverses.
60
61 _by_value = {y: x for x, y in _by_text.items()}
62
63 _edns_by_value = {y: x for x, y in _edns_by_text.items()}
64
65
71
72 _flags_order = _order_flags(_by_value)
73
74 _edns_flags_order = _order_flags(_edns_by_value)
75
76
78 flags = 0
79 tokens = text.split()
80 for t in tokens:
81 flags = flags | table[t.upper()]
82 return flags
83
84
86 text_flags = []
87 for k, v in order:
88 if flags & k != 0:
89 text_flags.append(v)
90 return ' '.join(text_flags)
91
92
94 """Convert a space-separated list of flag text values into a flags
95 value.
96
97 Returns an ``int``
98 """
99
100 return _from_text(text, _by_text)
101
102
104 """Convert a flags value into a space-separated list of flag text
105 values.
106
107 Returns a ``text``.
108 """
109
110 return _to_text(flags, _by_value, _flags_order)
111
112
114 """Convert a space-separated list of EDNS flag text values into a EDNS
115 flags value.
116
117 Returns an ``int``
118 """
119
120 return _from_text(text, _edns_by_text)
121
122
124 """Convert an EDNS flags value into a space-separated list of EDNS flag
125 text values.
126
127 Returns a ``text``.
128 """
129
130 return _to_text(flags, _edns_by_value, _edns_flags_order)
131
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1 on Sat Dec 8 10:59:57 2018 | http://epydoc.sourceforge.net |