]>
git.ipfire.org Git - thirdparty/pdns.git/blob - regression-tests.dnsdist/cookiesoption.py
9 class CookiesOption(dns
.edns
.Option
):
10 """Implementation of draft-ietf-dnsop-cookies-09.
13 def __init__(self
, client
, server
):
14 super(CookiesOption
, self
).__init
__(10)
17 raise Exception('invalid client cookie length')
19 if server
is not None and len(server
) != 0 and (len(server
) < 8 or len(server
) > 32):
20 raise Exception('invalid server cookie length')
25 def to_wire(self
, file=None):
26 """Create EDNS packet as defined in draft-ietf-dnsop-cookies-09."""
28 if self
.server
and len(self
.server
) > 0:
29 data
= self
.client
+ self
.server
38 def from_wire(cls
, otype
, wire
, current
, olen
):
39 """Read EDNS packet as defined in draft-ietf-dnsop-cookies-09.
42 An instance of CookiesOption based on the EDNS packet
45 data
= wire
[current
:current
+ olen
]
46 if len(data
) != 8 and (len(data
) < 16 or len(data
) > 40):
47 raise Exception('Invalid EDNS Cookies option')
55 return cls(client
, server
)
57 from_wire
= classmethod(from_wire
)
61 def from_wire_parser(cls
, otype
, parser
):
62 data
= parser
.get_remaining()
64 if len(data
) != 8 and (len(data
) < 16 or len(data
) > 40):
65 raise Exception('Invalid EDNS Cookies option')
73 return cls(client
, server
)
76 return '%s(%s, %s)' % (
77 self
.__class
__.__name
__,
83 return self
.__repr
__()
85 def __eq__(self
, other
):
86 if not isinstance(other
, CookiesOption
):
88 if self
.client
!= other
.client
:
90 if self
.server
!= other
.server
:
94 def __ne__(self
, other
):
95 return not self
.__eq
__(other
)
98 dns
.edns
._type
_to
_class
[0x000A] = CookiesOption
100 dns
.rcode
.BADCOOKIE
= 23