import struct
+import dns.enum
+import dns.exception
import dns.immutable
import dns.rdata
import dns.rdatatype
import dns.rdtypes.util
-schemes = {1: "NOTIFY"}
-schemes_by_mnemonic = {v: k for k, v in schemes.items()}
+class UnknownScheme(dns.exception.DNSException):
+ """Unknown DSYNC scheme"""
-def _scheme_from_text(scheme):
- try:
- return int(scheme)
- except ValueError:
- return schemes_by_mnemonic[scheme]
+class Scheme(dns.enum.IntEnum):
+ """DSYNC SCHEME"""
+ NOTIFY = 1
-def _scheme_to_text(scheme):
- return schemes.get(scheme, str(scheme))
+ @classmethod
+ def _maximum(cls):
+ return 255
+
+ @classmethod
+ def _unknown_exception_class(cls):
+ return UnknownScheme
@dns.immutable.immutable
def __init__(self, rdclass, rdtype, rrtype, scheme, port, target):
super().__init__(rdclass, rdtype)
- self.rrtype = self._as_uint16(rrtype)
- self.scheme = self._as_uint8(scheme)
+ self.rrtype = self._as_rdatatype(rrtype)
+ self.scheme = Scheme.make(scheme)
self.port = self._as_uint16(port)
self.target = self._as_name(target)
target = self.target.choose_relativity(origin, relativize)
return "%s %s %d %s" % (
dns.rdatatype.to_text(self.rrtype),
- _scheme_to_text(self.scheme),
+ Scheme.to_text(self.scheme),
self.port,
target,
)
cls, rdclass, rdtype, tok, origin=None, relativize=True, relativize_to=None
):
rrtype = dns.rdatatype.from_text(tok.get_string())
- scheme = _scheme_from_text(tok.get_string())
+ scheme = Scheme.make(tok.get_string())
port = tok.get_uint16()
target = tok.get_name(origin, relativize, relativize_to)
return cls(rdclass, rdtype, rrtype, scheme, port, target)
dns.rdatatype.RdataType.make("NSAP-PTR"), dns.rdatatype.NSAP_PTR
)
+ def test_bad_DSYNC_text(self):
+ bad_dsync = [
+ "DSYNC CDS NOTIFY 5300 notify-endpoint.parent.net."
+ "DSYNC CDS 256 5300 notify-endpoint.parent.net."
+ ]
+ for text in bad_dsync:
+ with self.assertRaises(dns.exception.SyntaxError):
+ dns.rdata.from_text("in", "dsync", text)
+
Rdata = dns.rdata.Rdata