Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/dns/rdtypes/ANY/SOA.py: 46%

41 statements  

« prev     ^ index     » next       coverage.py v7.3.1, created at 2023-09-25 07:09 +0000

1# Copyright (C) Dnspython Contributors, see LICENSE for text of ISC license 

2 

3# Copyright (C) 2003-2007, 2009-2011 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 

18import struct 

19 

20import dns.exception 

21import dns.immutable 

22import dns.name 

23import dns.rdata 

24 

25 

26@dns.immutable.immutable 

27class SOA(dns.rdata.Rdata): 

28 

29 """SOA record""" 

30 

31 # see: RFC 1035 

32 

33 __slots__ = ["mname", "rname", "serial", "refresh", "retry", "expire", "minimum"] 

34 

35 def __init__( 

36 self, rdclass, rdtype, mname, rname, serial, refresh, retry, expire, minimum 

37 ): 

38 super().__init__(rdclass, rdtype) 

39 self.mname = self._as_name(mname) 

40 self.rname = self._as_name(rname) 

41 self.serial = self._as_uint32(serial) 

42 self.refresh = self._as_ttl(refresh) 

43 self.retry = self._as_ttl(retry) 

44 self.expire = self._as_ttl(expire) 

45 self.minimum = self._as_ttl(minimum) 

46 

47 def to_text(self, origin=None, relativize=True, **kw): 

48 mname = self.mname.choose_relativity(origin, relativize) 

49 rname = self.rname.choose_relativity(origin, relativize) 

50 return "%s %s %d %d %d %d %d" % ( 

51 mname, 

52 rname, 

53 self.serial, 

54 self.refresh, 

55 self.retry, 

56 self.expire, 

57 self.minimum, 

58 ) 

59 

60 @classmethod 

61 def from_text( 

62 cls, rdclass, rdtype, tok, origin=None, relativize=True, relativize_to=None 

63 ): 

64 mname = tok.get_name(origin, relativize, relativize_to) 

65 rname = tok.get_name(origin, relativize, relativize_to) 

66 serial = tok.get_uint32() 

67 refresh = tok.get_ttl() 

68 retry = tok.get_ttl() 

69 expire = tok.get_ttl() 

70 minimum = tok.get_ttl() 

71 return cls( 

72 rdclass, rdtype, mname, rname, serial, refresh, retry, expire, minimum 

73 ) 

74 

75 def _to_wire(self, file, compress=None, origin=None, canonicalize=False): 

76 self.mname.to_wire(file, compress, origin, canonicalize) 

77 self.rname.to_wire(file, compress, origin, canonicalize) 

78 five_ints = struct.pack( 

79 "!IIIII", self.serial, self.refresh, self.retry, self.expire, self.minimum 

80 ) 

81 file.write(five_ints) 

82 

83 @classmethod 

84 def from_wire_parser(cls, rdclass, rdtype, parser, origin=None): 

85 mname = parser.get_name(origin) 

86 rname = parser.get_name(origin) 

87 return cls(rdclass, rdtype, mname, rname, *parser.get_struct("!IIIII"))