1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 import struct
17
18 import dns.exception
19 import dns.name
20 import dns.rdata
21
23 l = len(s)
24 assert l < 256
25 byte = chr(l)
26 file.write(byte)
27 file.write(s)
28
29 -class NAPTR(dns.rdata.Rdata):
30 """NAPTR record
31
32 @ivar order: order
33 @type order: int
34 @ivar preference: preference
35 @type preference: int
36 @ivar flags: flags
37 @type flags: string
38 @ivar service: service
39 @type service: string
40 @ivar regexp: regular expression
41 @type regexp: string
42 @ivar replacement: replacement name
43 @type replacement: dns.name.Name object
44 @see: RFC 3403"""
45
46 __slots__ = ['order', 'preference', 'flags', 'service', 'regexp',
47 'replacement']
48
49 - def __init__(self, rdclass, rdtype, order, preference, flags, service,
50 regexp, replacement):
58
59 - def to_text(self, origin=None, relativize=True, **kw):
60 replacement = self.replacement.choose_relativity(origin, relativize)
61 return '%d %d "%s" "%s" "%s" %s' % \
62 (self.order, self.preference,
63 dns.rdata._escapify(self.flags),
64 dns.rdata._escapify(self.service),
65 dns.rdata._escapify(self.regexp),
66 self.replacement)
67
68 - def from_text(cls, rdclass, rdtype, tok, origin = None, relativize = True):
79
80 from_text = classmethod(from_text)
81
82 - def to_wire(self, file, compress = None, origin = None):
89
90 - def from_wire(cls, rdclass, rdtype, wire, current, rdlen, origin = None):
91 (order, preference) = struct.unpack('!HH', wire[current : current + 4])
92 current += 4
93 rdlen -= 4
94 strings = []
95 for i in xrange(3):
96 l = ord(wire[current])
97 current += 1
98 rdlen -= 1
99 if l > rdlen or rdlen < 0:
100 raise dns.exception.FormError
101 s = wire[current : current + l].unwrap()
102 current += l
103 rdlen -= l
104 strings.append(s)
105 (replacement, cused) = dns.name.from_wire(wire[: current + rdlen],
106 current)
107 if cused != rdlen:
108 raise dns.exception.FormError
109 if not origin is None:
110 replacement = replacement.relativize(origin)
111 return cls(rdclass, rdtype, order, preference, strings[0], strings[1],
112 strings[2], replacement)
113
114 from_wire = classmethod(from_wire)
115
119
120 - def _cmp(self, other):
133