Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/dns/flags.py: 83%

41 statements  

« prev     ^ index     » next       coverage.py v7.4.1, created at 2024-02-02 06:07 +0000

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 

20import enum 

21from typing import Any 

22 

23# Standard DNS flags 

24 

25 

26class Flag(enum.IntFlag): 

27 #: Query Response 

28 QR = 0x8000 

29 #: Authoritative Answer 

30 AA = 0x0400 

31 #: Truncated Response 

32 TC = 0x0200 

33 #: Recursion Desired 

34 RD = 0x0100 

35 #: Recursion Available 

36 RA = 0x0080 

37 #: Authentic Data 

38 AD = 0x0020 

39 #: Checking Disabled 

40 CD = 0x0010 

41 

42 

43# EDNS flags 

44 

45 

46class EDNSFlag(enum.IntFlag): 

47 #: DNSSEC answer OK 

48 DO = 0x8000 

49 

50 

51def _from_text(text: str, enum_class: Any) -> int: 

52 flags = 0 

53 tokens = text.split() 

54 for t in tokens: 

55 flags |= enum_class[t.upper()] 

56 return flags 

57 

58 

59def _to_text(flags: int, enum_class: Any) -> str: 

60 text_flags = [] 

61 for k, v in enum_class.__members__.items(): 

62 if flags & v != 0: 

63 text_flags.append(k) 

64 return " ".join(text_flags) 

65 

66 

67def from_text(text: str) -> int: 

68 """Convert a space-separated list of flag text values into a flags 

69 value. 

70 

71 Returns an ``int`` 

72 """ 

73 

74 return _from_text(text, Flag) 

75 

76 

77def to_text(flags: int) -> str: 

78 """Convert a flags value into a space-separated list of flag text 

79 values. 

80 

81 Returns a ``str``. 

82 """ 

83 

84 return _to_text(flags, Flag) 

85 

86 

87def edns_from_text(text: str) -> int: 

88 """Convert a space-separated list of EDNS flag text values into a EDNS 

89 flags value. 

90 

91 Returns an ``int`` 

92 """ 

93 

94 return _from_text(text, EDNSFlag) 

95 

96 

97def edns_to_text(flags: int) -> str: 

98 """Convert an EDNS flags value into a space-separated list of EDNS flag 

99 text values. 

100 

101 Returns a ``str``. 

102 """ 

103 

104 return _to_text(flags, EDNSFlag) 

105 

106 

107### BEGIN generated Flag constants 

108 

109QR = Flag.QR 

110AA = Flag.AA 

111TC = Flag.TC 

112RD = Flag.RD 

113RA = Flag.RA 

114AD = Flag.AD 

115CD = Flag.CD 

116 

117### END generated Flag constants 

118 

119### BEGIN generated EDNSFlag constants 

120 

121DO = EDNSFlag.DO 

122 

123### END generated EDNSFlag constants