codekingpro/portable-devtools
114k
1# Copyright (C) Dnspython Contributors, see LICENSE for text of ISC license2 3# Copyright (C) 2001-2017 Nominum, Inc.4#5# Permission to use, copy, modify, and distribute this software and its6# documentation for any purpose with or without fee is hereby granted,7# provided that the above copyright notice and this permission notice8# appear in all copies.9#10# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES11# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF12# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR13# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES14# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN15# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT16# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.17 18"""DNS Message Flags."""19 20import enum21from typing import Any22 23# Standard DNS flags24 25 26class Flag(enum.IntFlag):27 #: Query Response28 QR = 0x800029 #: Authoritative Answer30 AA = 0x040031 #: Truncated Response32 TC = 0x020033 #: Recursion Desired34 RD = 0x010035 #: Recursion Available36 RA = 0x008037 #: Authentic Data38 AD = 0x002039 #: Checking Disabled40 CD = 0x001041 42 43# EDNS flags44 45 46class EDNSFlag(enum.IntFlag):47 #: DNSSEC answer OK48 DO = 0x800049 50 51def _from_text(text: str, enum_class: Any) -> int:52 flags = 053 tokens = text.split()54 for t in tokens:55 flags |= enum_class[t.upper()]56 return flags57 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 flags69 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 text79 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 EDNS89 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 flag99 text values.100 101 Returns a ``str``.102 """103 104 return _to_text(flags, EDNSFlag)105 106 107### BEGIN generated Flag constants108 109QR = Flag.QR110AA = Flag.AA111TC = Flag.TC112RD = Flag.RD113RA = Flag.RA114AD = Flag.AD115CD = Flag.CD116 117### END generated Flag constants118 119### BEGIN generated EDNSFlag constants120 121DO = EDNSFlag.DO122 123### END generated EDNSFlag constants124 