{-# OPTIONS_HADDOCK hide #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE CPP #-}
module Network.DNS.Types.Internal where
import Control.Exception (Exception, IOException)
import qualified Data.ByteString as B
import qualified Data.ByteString.Base16 as B16
import qualified Data.ByteString.Base64 as B64
import qualified Data.ByteString.Char8 as BS
import Data.Char (intToDigit)
import qualified Data.Hourglass as H
import Data.IP (IP(..), IPv4, IPv6)
import qualified Data.Semigroup as Sem
import qualified Network.DNS.Base32Hex as B32
import Network.DNS.Imports
type Domain = ByteString
type Mailbox = ByteString
#if __GLASGOW_HASKELL__ >= 800
newtype TYPE = TYPE {
TYPE -> Word16
fromTYPE :: Word16
} deriving (TYPE -> TYPE -> Bool
(TYPE -> TYPE -> Bool) -> (TYPE -> TYPE -> Bool) -> Eq TYPE
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TYPE -> TYPE -> Bool
$c/= :: TYPE -> TYPE -> Bool
== :: TYPE -> TYPE -> Bool
$c== :: TYPE -> TYPE -> Bool
Eq, Eq TYPE
Eq TYPE =>
(TYPE -> TYPE -> Ordering)
-> (TYPE -> TYPE -> Bool)
-> (TYPE -> TYPE -> Bool)
-> (TYPE -> TYPE -> Bool)
-> (TYPE -> TYPE -> Bool)
-> (TYPE -> TYPE -> TYPE)
-> (TYPE -> TYPE -> TYPE)
-> Ord TYPE
TYPE -> TYPE -> Bool
TYPE -> TYPE -> Ordering
TYPE -> TYPE -> TYPE
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: TYPE -> TYPE -> TYPE
$cmin :: TYPE -> TYPE -> TYPE
max :: TYPE -> TYPE -> TYPE
$cmax :: TYPE -> TYPE -> TYPE
>= :: TYPE -> TYPE -> Bool
$c>= :: TYPE -> TYPE -> Bool
> :: TYPE -> TYPE -> Bool
$c> :: TYPE -> TYPE -> Bool
<= :: TYPE -> TYPE -> Bool
$c<= :: TYPE -> TYPE -> Bool
< :: TYPE -> TYPE -> Bool
$c< :: TYPE -> TYPE -> Bool
compare :: TYPE -> TYPE -> Ordering
$ccompare :: TYPE -> TYPE -> Ordering
$cp1Ord :: Eq TYPE
Ord)
pattern A :: TYPE
pattern $bA :: TYPE
$mA :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
A = TYPE 1
pattern NS :: TYPE
pattern $bNS :: TYPE
$mNS :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
NS = TYPE 2
pattern CNAME :: TYPE
pattern $bCNAME :: TYPE
$mCNAME :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
CNAME = TYPE 5
pattern SOA :: TYPE
pattern $bSOA :: TYPE
$mSOA :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
SOA = TYPE 6
pattern NULL :: TYPE
pattern $bNULL :: TYPE
$mNULL :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
NULL = TYPE 10
pattern PTR :: TYPE
pattern $bPTR :: TYPE
$mPTR :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
PTR = TYPE 12
pattern MX :: TYPE
pattern $bMX :: TYPE
$mMX :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
MX = TYPE 15
pattern TXT :: TYPE
pattern $bTXT :: TYPE
$mTXT :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
TXT = TYPE 16
pattern AAAA :: TYPE
pattern $bAAAA :: TYPE
$mAAAA :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
AAAA = TYPE 28
pattern SRV :: TYPE
pattern $bSRV :: TYPE
$mSRV :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
SRV = TYPE 33
pattern DNAME :: TYPE
pattern $bDNAME :: TYPE
$mDNAME :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
DNAME = TYPE 39
pattern OPT :: TYPE
pattern $bOPT :: TYPE
$mOPT :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
OPT = TYPE 41
pattern DS :: TYPE
pattern $bDS :: TYPE
$mDS :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
DS = TYPE 43
pattern RRSIG :: TYPE
pattern $bRRSIG :: TYPE
$mRRSIG :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
RRSIG = TYPE 46
pattern NSEC :: TYPE
pattern $bNSEC :: TYPE
$mNSEC :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
NSEC = TYPE 47
pattern DNSKEY :: TYPE
pattern $bDNSKEY :: TYPE
$mDNSKEY :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
DNSKEY = TYPE 48
pattern NSEC3 :: TYPE
pattern $bNSEC3 :: TYPE
$mNSEC3 :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
NSEC3 = TYPE 50
pattern NSEC3PARAM :: TYPE
pattern $bNSEC3PARAM :: TYPE
$mNSEC3PARAM :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
NSEC3PARAM = TYPE 51
pattern TLSA :: TYPE
pattern $bTLSA :: TYPE
$mTLSA :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
TLSA = TYPE 52
pattern CDS :: TYPE
pattern $bCDS :: TYPE
$mCDS :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
CDS = TYPE 59
pattern CDNSKEY :: TYPE
pattern $bCDNSKEY :: TYPE
$mCDNSKEY :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
CDNSKEY = TYPE 60
pattern CSYNC :: TYPE
pattern $bCSYNC :: TYPE
$mCSYNC :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
CSYNC = TYPE 62
pattern AXFR :: TYPE
pattern $bAXFR :: TYPE
$mAXFR :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
AXFR = TYPE 252
pattern ANY :: TYPE
pattern $bANY :: TYPE
$mANY :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
ANY = TYPE 255
pattern CAA :: TYPE
pattern $bCAA :: TYPE
$mCAA :: forall r. TYPE -> (Void# -> r) -> (Void# -> r) -> r
CAA = TYPE 257
toTYPE :: Word16 -> TYPE
toTYPE :: Word16 -> TYPE
toTYPE = Word16 -> TYPE
TYPE
#else
data TYPE = A
| NS
| CNAME
| SOA
| NULL
| PTR
| MX
| TXT
| AAAA
| SRV
| DNAME
| OPT
| DS
| RRSIG
| NSEC
| DNSKEY
| NSEC3
| NSEC3PARAM
| TLSA
| CDS
| CDNSKEY
| CSYNC
| AXFR
| ANY
| CAA
| UnknownTYPE Word16
deriving (Eq, Ord, Read)
fromTYPE :: TYPE -> Word16
fromTYPE A = 1
fromTYPE NS = 2
fromTYPE CNAME = 5
fromTYPE SOA = 6
fromTYPE NULL = 10
fromTYPE PTR = 12
fromTYPE MX = 15
fromTYPE TXT = 16
fromTYPE AAAA = 28
fromTYPE SRV = 33
fromTYPE DNAME = 39
fromTYPE OPT = 41
fromTYPE DS = 43
fromTYPE RRSIG = 46
fromTYPE NSEC = 47
fromTYPE DNSKEY = 48
fromTYPE NSEC3 = 50
fromTYPE NSEC3PARAM = 51
fromTYPE TLSA = 52
fromTYPE CDS = 59
fromTYPE CDNSKEY = 60
fromTYPE CSYNC = 62
fromTYPE AXFR = 252
fromTYPE ANY = 255
fromTYPE CAA = 257
fromTYPE (UnknownTYPE x) = x
toTYPE :: Word16 -> TYPE
toTYPE 1 = A
toTYPE 2 = NS
toTYPE 5 = CNAME
toTYPE 6 = SOA
toTYPE 10 = NULL
toTYPE 12 = PTR
toTYPE 15 = MX
toTYPE 16 = TXT
toTYPE 28 = AAAA
toTYPE 33 = SRV
toTYPE 39 = DNAME
toTYPE 41 = OPT
toTYPE 43 = DS
toTYPE 46 = RRSIG
toTYPE 47 = NSEC
toTYPE 48 = DNSKEY
toTYPE 50 = NSEC3
toTYPE 51 = NSEC3PARAM
toTYPE 52 = TLSA
toTYPE 59 = CDS
toTYPE 60 = CDNSKEY
toTYPE 62 = CSYNC
toTYPE 252 = AXFR
toTYPE 255 = ANY
toTYPE 257 = CAA
toTYPE x = UnknownTYPE x
#endif
instance Show TYPE where
show :: TYPE -> String
show A = "A"
show NS = "NS"
show CNAME = "CNAME"
show SOA = "SOA"
show NULL = "NULL"
show PTR = "PTR"
show MX = "MX"
show TXT = "TXT"
show AAAA = "AAAA"
show SRV = "SRV"
show DNAME = "DNAME"
show OPT = "OPT"
show DS = "DS"
show RRSIG = "RRSIG"
show NSEC = "NSEC"
show DNSKEY = "DNSKEY"
show NSEC3 = "NSEC3"
show NSEC3PARAM = "NSEC3PARAM"
show TLSA = "TLSA"
show CDS = "CDS"
show CDNSKEY = "CDNSKEY"
show CSYNC = "CSYNC"
show AXFR = "AXFR"
show ANY = "ANY"
show CAA = "CAA"
show x :: TYPE
x = "TYPE" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Word16 -> String
forall a. Show a => a -> String
show (TYPE -> Word16
fromTYPE TYPE
x)
data DNSError =
SequenceNumberMismatch
| QuestionMismatch
| InvalidAXFRLookup
| RetryLimitExceeded
| TimeoutExpired
| UnexpectedRDATA
| IllegalDomain
| FormatError
| ServerFailure
| NameError
| NotImplemented
| OperationRefused
| BadOptRecord
| BadConfiguration
| NetworkFailure IOException
| DecodeError String
| UnknownDNSError
deriving (DNSError -> DNSError -> Bool
(DNSError -> DNSError -> Bool)
-> (DNSError -> DNSError -> Bool) -> Eq DNSError
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DNSError -> DNSError -> Bool
$c/= :: DNSError -> DNSError -> Bool
== :: DNSError -> DNSError -> Bool
$c== :: DNSError -> DNSError -> Bool
Eq, Int -> DNSError -> ShowS
[DNSError] -> ShowS
DNSError -> String
(Int -> DNSError -> ShowS)
-> (DNSError -> String) -> ([DNSError] -> ShowS) -> Show DNSError
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DNSError] -> ShowS
$cshowList :: [DNSError] -> ShowS
show :: DNSError -> String
$cshow :: DNSError -> String
showsPrec :: Int -> DNSError -> ShowS
$cshowsPrec :: Int -> DNSError -> ShowS
Show, Typeable)
instance Exception DNSError
data = EDNS
| NoEDNS
| InvalidEDNS
deriving (EDNSheader -> EDNSheader -> Bool
(EDNSheader -> EDNSheader -> Bool)
-> (EDNSheader -> EDNSheader -> Bool) -> Eq EDNSheader
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EDNSheader -> EDNSheader -> Bool
$c/= :: EDNSheader -> EDNSheader -> Bool
== :: EDNSheader -> EDNSheader -> Bool
$c== :: EDNSheader -> EDNSheader -> Bool
Eq, Int -> EDNSheader -> ShowS
[EDNSheader] -> ShowS
EDNSheader -> String
(Int -> EDNSheader -> ShowS)
-> (EDNSheader -> String)
-> ([EDNSheader] -> ShowS)
-> Show EDNSheader
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EDNSheader] -> ShowS
$cshowList :: [EDNSheader] -> ShowS
show :: EDNSheader -> String
$cshow :: EDNSheader -> String
showsPrec :: Int -> EDNSheader -> ShowS
$cshowsPrec :: Int -> EDNSheader -> ShowS
Show)
ifEDNS :: EDNSheader
-> a
-> a
-> a
ifEDNS :: EDNSheader -> a -> a -> a
ifEDNS (EDNSheader _) a :: a
a _ = a
a
ifEDNS _ _ b :: a
b = a
b
{-# INLINE ifEDNS #-}
mapEDNS :: EDNSheader
-> (EDNS -> a)
-> a
-> a
mapEDNS :: EDNSheader -> (EDNS -> a) -> a -> a
mapEDNS (EDNSheader eh :: EDNS
eh) f :: EDNS -> a
f _ = EDNS -> a
f EDNS
eh
mapEDNS _ _ a :: a
a = a
a
{-# INLINE mapEDNS #-}
data DNSMessage = DNSMessage {
:: !DNSHeader
, :: EDNSheader
, DNSMessage -> [Question]
question :: [Question]
, DNSMessage -> Answers
answer :: Answers
, DNSMessage -> Answers
authority :: AuthorityRecords
, DNSMessage -> Answers
additional :: AdditionalRecords
} deriving (DNSMessage -> DNSMessage -> Bool
(DNSMessage -> DNSMessage -> Bool)
-> (DNSMessage -> DNSMessage -> Bool) -> Eq DNSMessage
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DNSMessage -> DNSMessage -> Bool
$c/= :: DNSMessage -> DNSMessage -> Bool
== :: DNSMessage -> DNSMessage -> Bool
$c== :: DNSMessage -> DNSMessage -> Bool
Eq, Int -> DNSMessage -> ShowS
[DNSMessage] -> ShowS
DNSMessage -> String
(Int -> DNSMessage -> ShowS)
-> (DNSMessage -> String)
-> ([DNSMessage] -> ShowS)
-> Show DNSMessage
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DNSMessage] -> ShowS
$cshowList :: [DNSMessage] -> ShowS
show :: DNSMessage -> String
$cshow :: DNSMessage -> String
showsPrec :: Int -> DNSMessage -> ShowS
$cshowsPrec :: Int -> DNSMessage -> ShowS
Show)
type Identifier = Word16
data = {
DNSHeader -> Word16
identifier :: !Identifier
, DNSHeader -> DNSFlags
flags :: !DNSFlags
} deriving (DNSHeader -> DNSHeader -> Bool
(DNSHeader -> DNSHeader -> Bool)
-> (DNSHeader -> DNSHeader -> Bool) -> Eq DNSHeader
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DNSHeader -> DNSHeader -> Bool
$c/= :: DNSHeader -> DNSHeader -> Bool
== :: DNSHeader -> DNSHeader -> Bool
$c== :: DNSHeader -> DNSHeader -> Bool
Eq, Int -> DNSHeader -> ShowS
[DNSHeader] -> ShowS
DNSHeader -> String
(Int -> DNSHeader -> ShowS)
-> (DNSHeader -> String)
-> ([DNSHeader] -> ShowS)
-> Show DNSHeader
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DNSHeader] -> ShowS
$cshowList :: [DNSHeader] -> ShowS
show :: DNSHeader -> String
$cshow :: DNSHeader -> String
showsPrec :: Int -> DNSHeader -> ShowS
$cshowsPrec :: Int -> DNSHeader -> ShowS
Show)
data DNSFlags = DNSFlags {
DNSFlags -> QorR
qOrR :: !QorR
, DNSFlags -> OPCODE
opcode :: !OPCODE
, DNSFlags -> Bool
authAnswer :: !Bool
, DNSFlags -> Bool
trunCation :: !Bool
, DNSFlags -> Bool
recDesired :: !Bool
, DNSFlags -> Bool
recAvailable :: !Bool
, DNSFlags -> RCODE
rcode :: !RCODE
, DNSFlags -> Bool
authenData :: !Bool
, DNSFlags -> Bool
chkDisable :: !Bool
} deriving (DNSFlags -> DNSFlags -> Bool
(DNSFlags -> DNSFlags -> Bool)
-> (DNSFlags -> DNSFlags -> Bool) -> Eq DNSFlags
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DNSFlags -> DNSFlags -> Bool
$c/= :: DNSFlags -> DNSFlags -> Bool
== :: DNSFlags -> DNSFlags -> Bool
$c== :: DNSFlags -> DNSFlags -> Bool
Eq, Int -> DNSFlags -> ShowS
[DNSFlags] -> ShowS
DNSFlags -> String
(Int -> DNSFlags -> ShowS)
-> (DNSFlags -> String) -> ([DNSFlags] -> ShowS) -> Show DNSFlags
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DNSFlags] -> ShowS
$cshowList :: [DNSFlags] -> ShowS
show :: DNSFlags -> String
$cshow :: DNSFlags -> String
showsPrec :: Int -> DNSFlags -> ShowS
$cshowsPrec :: Int -> DNSFlags -> ShowS
Show)
defaultDNSFlags :: DNSFlags
defaultDNSFlags :: DNSFlags
defaultDNSFlags = $WDNSFlags :: QorR
-> OPCODE
-> Bool
-> Bool
-> Bool
-> Bool
-> RCODE
-> Bool
-> Bool
-> DNSFlags
DNSFlags
{ qOrR :: QorR
qOrR = QorR
QR_Query
, opcode :: OPCODE
opcode = OPCODE
OP_STD
, authAnswer :: Bool
authAnswer = Bool
False
, trunCation :: Bool
trunCation = Bool
False
, recDesired :: Bool
recDesired = Bool
True
, recAvailable :: Bool
recAvailable = Bool
False
, authenData :: Bool
authenData = Bool
False
, chkDisable :: Bool
chkDisable = Bool
False
, rcode :: RCODE
rcode = RCODE
NoErr
}
data FlagOp = FlagSet
| FlagClear
| FlagReset
| FlagKeep
deriving (FlagOp -> FlagOp -> Bool
(FlagOp -> FlagOp -> Bool)
-> (FlagOp -> FlagOp -> Bool) -> Eq FlagOp
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: FlagOp -> FlagOp -> Bool
$c/= :: FlagOp -> FlagOp -> Bool
== :: FlagOp -> FlagOp -> Bool
$c== :: FlagOp -> FlagOp -> Bool
Eq, Int -> FlagOp -> ShowS
[FlagOp] -> ShowS
FlagOp -> String
(Int -> FlagOp -> ShowS)
-> (FlagOp -> String) -> ([FlagOp] -> ShowS) -> Show FlagOp
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [FlagOp] -> ShowS
$cshowList :: [FlagOp] -> ShowS
show :: FlagOp -> String
$cshow :: FlagOp -> String
showsPrec :: Int -> FlagOp -> ShowS
$cshowsPrec :: Int -> FlagOp -> ShowS
Show)
instance Sem.Semigroup FlagOp where
FlagKeep <> :: FlagOp -> FlagOp -> FlagOp
<> op :: FlagOp
op = FlagOp
op
op :: FlagOp
op <> _ = FlagOp
op
instance Monoid FlagOp where
mempty :: FlagOp
mempty = FlagOp
FlagKeep
#if !(MIN_VERSION_base(4,11,0))
mappend = (Sem.<>)
#endif
_skipDefault :: String
_skipDefault :: String
_skipDefault = ""
_showFlag :: String -> FlagOp -> String
_showFlag :: String -> FlagOp -> String
_showFlag nm :: String
nm FlagSet = String
nm String -> ShowS
forall a. [a] -> [a] -> [a]
++ ":1"
_showFlag nm :: String
nm FlagClear = String
nm String -> ShowS
forall a. [a] -> [a] -> [a]
++ ":0"
_showFlag _ FlagReset = String
_skipDefault
_showFlag _ FlagKeep = String
_skipDefault
_showOpts :: [String] -> String
_showOpts :: [String] -> String
_showOpts os :: [String]
os = String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate "," ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter (String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
_skipDefault) [String]
os
data =
{ HeaderControls -> FlagOp
rdBit :: !FlagOp
, HeaderControls -> FlagOp
adBit :: !FlagOp
, HeaderControls -> FlagOp
cdBit :: !FlagOp
}
deriving (HeaderControls -> HeaderControls -> Bool
(HeaderControls -> HeaderControls -> Bool)
-> (HeaderControls -> HeaderControls -> Bool) -> Eq HeaderControls
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: HeaderControls -> HeaderControls -> Bool
$c/= :: HeaderControls -> HeaderControls -> Bool
== :: HeaderControls -> HeaderControls -> Bool
$c== :: HeaderControls -> HeaderControls -> Bool
Eq)
instance Sem.Semigroup HeaderControls where
(HeaderControls rd1 :: FlagOp
rd1 ad1 :: FlagOp
ad1 cd1 :: FlagOp
cd1) <> :: HeaderControls -> HeaderControls -> HeaderControls
<> (HeaderControls rd2 :: FlagOp
rd2 ad2 :: FlagOp
ad2 cd2 :: FlagOp
cd2) =
FlagOp -> FlagOp -> FlagOp -> HeaderControls
HeaderControls (FlagOp
rd1 FlagOp -> FlagOp -> FlagOp
forall a. Semigroup a => a -> a -> a
<> FlagOp
rd2) (FlagOp
ad1 FlagOp -> FlagOp -> FlagOp
forall a. Semigroup a => a -> a -> a
<> FlagOp
ad2) (FlagOp
cd1 FlagOp -> FlagOp -> FlagOp
forall a. Semigroup a => a -> a -> a
<> FlagOp
cd2)
instance Monoid HeaderControls where
mempty :: HeaderControls
mempty = FlagOp -> FlagOp -> FlagOp -> HeaderControls
HeaderControls FlagOp
FlagKeep FlagOp
FlagKeep FlagOp
FlagKeep
#if !(MIN_VERSION_base(4,11,0))
mappend = (Sem.<>)
#endif
instance Show HeaderControls where
show :: HeaderControls -> String
show (HeaderControls rd :: FlagOp
rd ad :: FlagOp
ad cd :: FlagOp
cd) =
[String] -> String
_showOpts
[ String -> FlagOp -> String
_showFlag "rd" FlagOp
rd
, String -> FlagOp -> String
_showFlag "ad" FlagOp
ad
, String -> FlagOp -> String
_showFlag "cd" FlagOp
cd ]
data ODataOp = ODataAdd [OData]
| ODataSet [OData]
deriving (ODataOp -> ODataOp -> Bool
(ODataOp -> ODataOp -> Bool)
-> (ODataOp -> ODataOp -> Bool) -> Eq ODataOp
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ODataOp -> ODataOp -> Bool
$c/= :: ODataOp -> ODataOp -> Bool
== :: ODataOp -> ODataOp -> Bool
$c== :: ODataOp -> ODataOp -> Bool
Eq)
_odataDedup :: ODataOp -> [OData]
_odataDedup :: ODataOp -> [OData]
_odataDedup op :: ODataOp
op =
(OData -> OData -> Bool) -> [OData] -> [OData]
forall a. (a -> a -> Bool) -> [a] -> [a]
nubBy (OptCode -> OptCode -> Bool
forall a. Eq a => a -> a -> Bool
(==) (OptCode -> OptCode -> Bool)
-> (OData -> OptCode) -> OData -> OData -> Bool
forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
`on` OData -> OptCode
_odataToOptCode) ([OData] -> [OData]) -> [OData] -> [OData]
forall a b. (a -> b) -> a -> b
$
case ODataOp
op of
ODataAdd os :: [OData]
os -> [OData]
os
ODataSet os :: [OData]
os -> [OData]
os
instance Sem.Semigroup ODataOp where
ODataAdd as :: [OData]
as <> :: ODataOp -> ODataOp -> ODataOp
<> ODataAdd bs :: [OData]
bs = [OData] -> ODataOp
ODataAdd ([OData] -> ODataOp) -> [OData] -> ODataOp
forall a b. (a -> b) -> a -> b
$ [OData]
as [OData] -> [OData] -> [OData]
forall a. [a] -> [a] -> [a]
++ [OData]
bs
ODataAdd as :: [OData]
as <> ODataSet bs :: [OData]
bs = [OData] -> ODataOp
ODataSet ([OData] -> ODataOp) -> [OData] -> ODataOp
forall a b. (a -> b) -> a -> b
$ [OData]
as [OData] -> [OData] -> [OData]
forall a. [a] -> [a] -> [a]
++ [OData]
bs
ODataSet as :: [OData]
as <> _ = [OData] -> ODataOp
ODataSet [OData]
as
instance Monoid ODataOp where
mempty :: ODataOp
mempty = [OData] -> ODataOp
ODataAdd []
#if !(MIN_VERSION_base(4,11,0))
mappend = (Sem.<>)
#endif
data EdnsControls = EdnsControls
{ EdnsControls -> FlagOp
extEn :: !FlagOp
, EdnsControls -> Maybe Word8
extVn :: !(Maybe Word8)
, EdnsControls -> Maybe Word16
extSz :: !(Maybe Word16)
, EdnsControls -> FlagOp
extDO :: !FlagOp
, EdnsControls -> ODataOp
extOd :: !ODataOp
}
deriving (EdnsControls -> EdnsControls -> Bool
(EdnsControls -> EdnsControls -> Bool)
-> (EdnsControls -> EdnsControls -> Bool) -> Eq EdnsControls
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EdnsControls -> EdnsControls -> Bool
$c/= :: EdnsControls -> EdnsControls -> Bool
== :: EdnsControls -> EdnsControls -> Bool
$c== :: EdnsControls -> EdnsControls -> Bool
Eq)
instance Sem.Semigroup EdnsControls where
(EdnsControls en1 :: FlagOp
en1 vn1 :: Maybe Word8
vn1 sz1 :: Maybe Word16
sz1 do1 :: FlagOp
do1 od1 :: ODataOp
od1) <> :: EdnsControls -> EdnsControls -> EdnsControls
<> (EdnsControls en2 :: FlagOp
en2 vn2 :: Maybe Word8
vn2 sz2 :: Maybe Word16
sz2 do2 :: FlagOp
do2 od2 :: ODataOp
od2) =
FlagOp
-> Maybe Word8 -> Maybe Word16 -> FlagOp -> ODataOp -> EdnsControls
EdnsControls (FlagOp
en1 FlagOp -> FlagOp -> FlagOp
forall a. Semigroup a => a -> a -> a
<> FlagOp
en2) (Maybe Word8
vn1 Maybe Word8 -> Maybe Word8 -> Maybe Word8
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Maybe Word8
vn2) (Maybe Word16
sz1 Maybe Word16 -> Maybe Word16 -> Maybe Word16
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Maybe Word16
sz2)
(FlagOp
do1 FlagOp -> FlagOp -> FlagOp
forall a. Semigroup a => a -> a -> a
<> FlagOp
do2) (ODataOp
od1 ODataOp -> ODataOp -> ODataOp
forall a. Semigroup a => a -> a -> a
<> ODataOp
od2)
instance Monoid EdnsControls where
mempty :: EdnsControls
mempty = FlagOp
-> Maybe Word8 -> Maybe Word16 -> FlagOp -> ODataOp -> EdnsControls
EdnsControls FlagOp
FlagKeep Maybe Word8
forall a. Maybe a
Nothing Maybe Word16
forall a. Maybe a
Nothing FlagOp
FlagKeep ODataOp
forall a. Monoid a => a
mempty
#if !(MIN_VERSION_base(4,11,0))
mappend = (Sem.<>)
#endif
instance Show EdnsControls where
show :: EdnsControls -> String
show (EdnsControls en :: FlagOp
en vn :: Maybe Word8
vn sz :: Maybe Word16
sz d0 :: FlagOp
d0 od :: ODataOp
od) =
[String] -> String
_showOpts
[ String -> FlagOp -> String
_showFlag "edns.enabled" FlagOp
en
, String -> Maybe Word8 -> String
forall a. Show a => String -> Maybe a -> String
_showWord "edns.version" Maybe Word8
vn
, String -> Maybe Word16 -> String
forall a. Show a => String -> Maybe a -> String
_showWord "edns.udpsize" Maybe Word16
sz
, String -> FlagOp -> String
_showFlag "edns.dobit" FlagOp
d0
, String -> [String] -> String
_showOdOp "edns.options" ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ (OData -> String) -> [OData] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (OptCode -> String
forall a. Show a => a -> String
show(OptCode -> String) -> (OData -> OptCode) -> OData -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. OData -> OptCode
_odataToOptCode)
([OData] -> [String]) -> [OData] -> [String]
forall a b. (a -> b) -> a -> b
$ ODataOp -> [OData]
_odataDedup ODataOp
od ]
where
_showWord :: Show a => String -> Maybe a -> String
_showWord :: String -> Maybe a -> String
_showWord nm :: String
nm w :: Maybe a
w = String -> (a -> String) -> Maybe a -> String
forall b a. b -> (a -> b) -> Maybe a -> b
maybe String
_skipDefault (\s :: a
s -> String
nm String -> ShowS
forall a. [a] -> [a] -> [a]
++ ":" String -> ShowS
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
show a
s) Maybe a
w
_showOdOp :: String -> [String] -> String
_showOdOp :: String -> [String] -> String
_showOdOp nm :: String
nm os :: [String]
os = case [String]
os of
[] -> ""
_ -> String
nm String -> ShowS
forall a. [a] -> [a] -> [a]
++ ":[" String -> ShowS
forall a. [a] -> [a] -> [a]
++ String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate "," [String]
os String -> ShowS
forall a. [a] -> [a] -> [a]
++ "]"
data QueryControls = QueryControls
{ :: !HeaderControls
, QueryControls -> EdnsControls
qctlEdns :: !EdnsControls
}
deriving (QueryControls -> QueryControls -> Bool
(QueryControls -> QueryControls -> Bool)
-> (QueryControls -> QueryControls -> Bool) -> Eq QueryControls
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: QueryControls -> QueryControls -> Bool
$c/= :: QueryControls -> QueryControls -> Bool
== :: QueryControls -> QueryControls -> Bool
$c== :: QueryControls -> QueryControls -> Bool
Eq)
instance Sem.Semigroup QueryControls where
(QueryControls fl1 :: HeaderControls
fl1 ex1 :: EdnsControls
ex1) <> :: QueryControls -> QueryControls -> QueryControls
<> (QueryControls fl2 :: HeaderControls
fl2 ex2 :: EdnsControls
ex2) =
HeaderControls -> EdnsControls -> QueryControls
QueryControls (HeaderControls
fl1 HeaderControls -> HeaderControls -> HeaderControls
forall a. Semigroup a => a -> a -> a
<> HeaderControls
fl2) (EdnsControls
ex1 EdnsControls -> EdnsControls -> EdnsControls
forall a. Semigroup a => a -> a -> a
<> EdnsControls
ex2)
instance Monoid QueryControls where
mempty :: QueryControls
mempty = HeaderControls -> EdnsControls -> QueryControls
QueryControls HeaderControls
forall a. Monoid a => a
mempty EdnsControls
forall a. Monoid a => a
mempty
#if !(MIN_VERSION_base(4,11,0))
mappend = (Sem.<>)
#endif
instance Show QueryControls where
show :: QueryControls -> String
show (QueryControls fl :: HeaderControls
fl ex :: EdnsControls
ex) = [String] -> String
_showOpts [ HeaderControls -> String
forall a. Show a => a -> String
show HeaderControls
fl, EdnsControls -> String
forall a. Show a => a -> String
show EdnsControls
ex ]
rdFlag :: FlagOp -> QueryControls
rdFlag :: FlagOp -> QueryControls
rdFlag rd :: FlagOp
rd = QueryControls
forall a. Monoid a => a
mempty { qctlHeader :: HeaderControls
qctlHeader = HeaderControls
forall a. Monoid a => a
mempty { rdBit :: FlagOp
rdBit = FlagOp
rd } }
adFlag :: FlagOp -> QueryControls
adFlag :: FlagOp -> QueryControls
adFlag ad :: FlagOp
ad = QueryControls
forall a. Monoid a => a
mempty { qctlHeader :: HeaderControls
qctlHeader = HeaderControls
forall a. Monoid a => a
mempty { adBit :: FlagOp
adBit = FlagOp
ad } }
cdFlag :: FlagOp -> QueryControls
cdFlag :: FlagOp -> QueryControls
cdFlag cd :: FlagOp
cd = QueryControls
forall a. Monoid a => a
mempty { qctlHeader :: HeaderControls
qctlHeader = HeaderControls
forall a. Monoid a => a
mempty { cdBit :: FlagOp
cdBit = FlagOp
cd } }
ednsEnabled :: FlagOp -> QueryControls
ednsEnabled :: FlagOp -> QueryControls
ednsEnabled en :: FlagOp
en = QueryControls
forall a. Monoid a => a
mempty { qctlEdns :: EdnsControls
qctlEdns = EdnsControls
forall a. Monoid a => a
mempty { extEn :: FlagOp
extEn = FlagOp
en } }
ednsSetVersion :: Maybe Word8 -> QueryControls
ednsSetVersion :: Maybe Word8 -> QueryControls
ednsSetVersion vn :: Maybe Word8
vn = QueryControls
forall a. Monoid a => a
mempty { qctlEdns :: EdnsControls
qctlEdns = EdnsControls
forall a. Monoid a => a
mempty { extVn :: Maybe Word8
extVn = Maybe Word8
vn } }
ednsSetUdpSize :: Maybe Word16 -> QueryControls
ednsSetUdpSize :: Maybe Word16 -> QueryControls
ednsSetUdpSize sz :: Maybe Word16
sz = QueryControls
forall a. Monoid a => a
mempty { qctlEdns :: EdnsControls
qctlEdns = EdnsControls
forall a. Monoid a => a
mempty { extSz :: Maybe Word16
extSz = Maybe Word16
sz } }
doFlag :: FlagOp -> QueryControls
doFlag :: FlagOp -> QueryControls
doFlag d0 :: FlagOp
d0 = QueryControls
forall a. Monoid a => a
mempty { qctlEdns :: EdnsControls
qctlEdns = EdnsControls
forall a. Monoid a => a
mempty { extDO :: FlagOp
extDO = FlagOp
d0 } }
ednsSetOptions :: ODataOp -> QueryControls
ednsSetOptions :: ODataOp -> QueryControls
ednsSetOptions od :: ODataOp
od = QueryControls
forall a. Monoid a => a
mempty { qctlEdns :: EdnsControls
qctlEdns = EdnsControls
forall a. Monoid a => a
mempty { extOd :: ODataOp
extOd = ODataOp
od } }
data QorR = QR_Query
| QR_Response
deriving (QorR -> QorR -> Bool
(QorR -> QorR -> Bool) -> (QorR -> QorR -> Bool) -> Eq QorR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: QorR -> QorR -> Bool
$c/= :: QorR -> QorR -> Bool
== :: QorR -> QorR -> Bool
$c== :: QorR -> QorR -> Bool
Eq, Int -> QorR -> ShowS
[QorR] -> ShowS
QorR -> String
(Int -> QorR -> ShowS)
-> (QorR -> String) -> ([QorR] -> ShowS) -> Show QorR
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [QorR] -> ShowS
$cshowList :: [QorR] -> ShowS
show :: QorR -> String
$cshow :: QorR -> String
showsPrec :: Int -> QorR -> ShowS
$cshowsPrec :: Int -> QorR -> ShowS
Show, Int -> QorR
QorR -> Int
QorR -> [QorR]
QorR -> QorR
QorR -> QorR -> [QorR]
QorR -> QorR -> QorR -> [QorR]
(QorR -> QorR)
-> (QorR -> QorR)
-> (Int -> QorR)
-> (QorR -> Int)
-> (QorR -> [QorR])
-> (QorR -> QorR -> [QorR])
-> (QorR -> QorR -> [QorR])
-> (QorR -> QorR -> QorR -> [QorR])
-> Enum QorR
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: QorR -> QorR -> QorR -> [QorR]
$cenumFromThenTo :: QorR -> QorR -> QorR -> [QorR]
enumFromTo :: QorR -> QorR -> [QorR]
$cenumFromTo :: QorR -> QorR -> [QorR]
enumFromThen :: QorR -> QorR -> [QorR]
$cenumFromThen :: QorR -> QorR -> [QorR]
enumFrom :: QorR -> [QorR]
$cenumFrom :: QorR -> [QorR]
fromEnum :: QorR -> Int
$cfromEnum :: QorR -> Int
toEnum :: Int -> QorR
$ctoEnum :: Int -> QorR
pred :: QorR -> QorR
$cpred :: QorR -> QorR
succ :: QorR -> QorR
$csucc :: QorR -> QorR
Enum, QorR
QorR -> QorR -> Bounded QorR
forall a. a -> a -> Bounded a
maxBound :: QorR
$cmaxBound :: QorR
minBound :: QorR
$cminBound :: QorR
Bounded)
data OPCODE
= OP_STD
| OP_INV
| OP_SSR
| OP_NOTIFY
| OP_UPDATE
deriving (OPCODE -> OPCODE -> Bool
(OPCODE -> OPCODE -> Bool)
-> (OPCODE -> OPCODE -> Bool) -> Eq OPCODE
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: OPCODE -> OPCODE -> Bool
$c/= :: OPCODE -> OPCODE -> Bool
== :: OPCODE -> OPCODE -> Bool
$c== :: OPCODE -> OPCODE -> Bool
Eq, Int -> OPCODE -> ShowS
[OPCODE] -> ShowS
OPCODE -> String
(Int -> OPCODE -> ShowS)
-> (OPCODE -> String) -> ([OPCODE] -> ShowS) -> Show OPCODE
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [OPCODE] -> ShowS
$cshowList :: [OPCODE] -> ShowS
show :: OPCODE -> String
$cshow :: OPCODE -> String
showsPrec :: Int -> OPCODE -> ShowS
$cshowsPrec :: Int -> OPCODE -> ShowS
Show, Int -> OPCODE
OPCODE -> Int
OPCODE -> [OPCODE]
OPCODE -> OPCODE
OPCODE -> OPCODE -> [OPCODE]
OPCODE -> OPCODE -> OPCODE -> [OPCODE]
(OPCODE -> OPCODE)
-> (OPCODE -> OPCODE)
-> (Int -> OPCODE)
-> (OPCODE -> Int)
-> (OPCODE -> [OPCODE])
-> (OPCODE -> OPCODE -> [OPCODE])
-> (OPCODE -> OPCODE -> [OPCODE])
-> (OPCODE -> OPCODE -> OPCODE -> [OPCODE])
-> Enum OPCODE
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: OPCODE -> OPCODE -> OPCODE -> [OPCODE]
$cenumFromThenTo :: OPCODE -> OPCODE -> OPCODE -> [OPCODE]
enumFromTo :: OPCODE -> OPCODE -> [OPCODE]
$cenumFromTo :: OPCODE -> OPCODE -> [OPCODE]
enumFromThen :: OPCODE -> OPCODE -> [OPCODE]
$cenumFromThen :: OPCODE -> OPCODE -> [OPCODE]
enumFrom :: OPCODE -> [OPCODE]
$cenumFrom :: OPCODE -> [OPCODE]
fromEnum :: OPCODE -> Int
$cfromEnum :: OPCODE -> Int
toEnum :: Int -> OPCODE
$ctoEnum :: Int -> OPCODE
pred :: OPCODE -> OPCODE
$cpred :: OPCODE -> OPCODE
succ :: OPCODE -> OPCODE
$csucc :: OPCODE -> OPCODE
Enum, OPCODE
OPCODE -> OPCODE -> Bounded OPCODE
forall a. a -> a -> Bounded a
maxBound :: OPCODE
$cmaxBound :: OPCODE
minBound :: OPCODE
$cminBound :: OPCODE
Bounded)
toOPCODE :: Word16 -> Maybe OPCODE
toOPCODE :: Word16 -> Maybe OPCODE
toOPCODE i :: Word16
i = case Word16
i of
0 -> OPCODE -> Maybe OPCODE
forall a. a -> Maybe a
Just OPCODE
OP_STD
1 -> OPCODE -> Maybe OPCODE
forall a. a -> Maybe a
Just OPCODE
OP_INV
2 -> OPCODE -> Maybe OPCODE
forall a. a -> Maybe a
Just OPCODE
OP_SSR
4 -> OPCODE -> Maybe OPCODE
forall a. a -> Maybe a
Just OPCODE
OP_NOTIFY
5 -> OPCODE -> Maybe OPCODE
forall a. a -> Maybe a
Just OPCODE
OP_UPDATE
_ -> Maybe OPCODE
forall a. Maybe a
Nothing
fromOPCODE :: OPCODE -> Word16
fromOPCODE :: OPCODE -> Word16
fromOPCODE OP_STD = 0
fromOPCODE OP_INV = 1
fromOPCODE OP_SSR = 2
fromOPCODE OP_NOTIFY = 4
fromOPCODE OP_UPDATE = 5
#if __GLASGOW_HASKELL__ >= 800
newtype RCODE = RCODE {
RCODE -> Word16
fromRCODE :: Word16
} deriving (RCODE -> RCODE -> Bool
(RCODE -> RCODE -> Bool) -> (RCODE -> RCODE -> Bool) -> Eq RCODE
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RCODE -> RCODE -> Bool
$c/= :: RCODE -> RCODE -> Bool
== :: RCODE -> RCODE -> Bool
$c== :: RCODE -> RCODE -> Bool
Eq)
instance Enum RCODE where
fromEnum :: RCODE -> Int
fromEnum = Word16 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word16 -> Int) -> (RCODE -> Word16) -> RCODE -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RCODE -> Word16
fromRCODE
toEnum :: Int -> RCODE
toEnum = Word16 -> RCODE
RCODE (Word16 -> RCODE) -> (Int -> Word16) -> Int -> RCODE
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Word16
forall a b. (Integral a, Num b) => a -> b
fromIntegral
pattern NoErr :: RCODE
pattern $bNoErr :: RCODE
$mNoErr :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
NoErr = RCODE 0
pattern FormatErr :: RCODE
pattern $bFormatErr :: RCODE
$mFormatErr :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
FormatErr = RCODE 1
pattern ServFail :: RCODE
pattern $bServFail :: RCODE
$mServFail :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
ServFail = RCODE 2
pattern NameErr :: RCODE
pattern $bNameErr :: RCODE
$mNameErr :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
NameErr = RCODE 3
pattern NotImpl :: RCODE
pattern $bNotImpl :: RCODE
$mNotImpl :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
NotImpl = RCODE 4
pattern Refused :: RCODE
pattern $bRefused :: RCODE
$mRefused :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
Refused = RCODE 5
pattern YXDomain :: RCODE
pattern $bYXDomain :: RCODE
$mYXDomain :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
YXDomain = RCODE 6
pattern YXRRSet :: RCODE
pattern $bYXRRSet :: RCODE
$mYXRRSet :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
YXRRSet = RCODE 7
pattern NXRRSet :: RCODE
pattern $bNXRRSet :: RCODE
$mNXRRSet :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
NXRRSet = RCODE 8
pattern NotAuth :: RCODE
pattern $bNotAuth :: RCODE
$mNotAuth :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
NotAuth = RCODE 9
pattern NotZone :: RCODE
pattern $bNotZone :: RCODE
$mNotZone :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
NotZone = RCODE 10
pattern BadVers :: RCODE
pattern $bBadVers :: RCODE
$mBadVers :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
BadVers = RCODE 16
pattern BadKey :: RCODE
pattern $bBadKey :: RCODE
$mBadKey :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
BadKey = RCODE 17
pattern BadTime :: RCODE
pattern $bBadTime :: RCODE
$mBadTime :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
BadTime = RCODE 18
pattern BadMode :: RCODE
pattern $bBadMode :: RCODE
$mBadMode :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
BadMode = RCODE 19
pattern BadName :: RCODE
pattern $bBadName :: RCODE
$mBadName :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
BadName = RCODE 20
pattern BadAlg :: RCODE
pattern $bBadAlg :: RCODE
$mBadAlg :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
BadAlg = RCODE 21
pattern BadTrunc :: RCODE
pattern $bBadTrunc :: RCODE
$mBadTrunc :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
BadTrunc = RCODE 22
pattern BadCookie :: RCODE
pattern $bBadCookie :: RCODE
$mBadCookie :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
BadCookie = RCODE 23
pattern BadRCODE :: RCODE
pattern $bBadRCODE :: RCODE
$mBadRCODE :: forall r. RCODE -> (Void# -> r) -> (Void# -> r) -> r
BadRCODE = RCODE 0x1001
instance Show RCODE where
show :: RCODE -> String
show NoErr = "NoError"
show FormatErr = "FormErr"
show ServFail = "ServFail"
show NameErr = "NXDomain"
show NotImpl = "NotImp"
show Refused = "Refused"
show YXDomain = "YXDomain"
show YXRRSet = "YXRRSet"
show NotAuth = "NotAuth"
show NotZone = "NotZone"
show BadVers = "BadVers"
show BadKey = "BadKey"
show BadTime = "BadTime"
show BadMode = "BadMode"
show BadName = "BadName"
show BadAlg = "BadAlg"
show BadTrunc = "BadTrunc"
show BadCookie = "BadCookie"
show x :: RCODE
x = "RCODE " String -> ShowS
forall a. [a] -> [a] -> [a]
++ (Word16 -> String
forall a. Show a => a -> String
show (Word16 -> String) -> Word16 -> String
forall a b. (a -> b) -> a -> b
$ RCODE -> Word16
fromRCODE RCODE
x)
toRCODE :: Word16 -> RCODE
toRCODE :: Word16 -> RCODE
toRCODE = Word16 -> RCODE
RCODE
#else
data RCODE
= NoErr
| FormatErr
| ServFail
| NameErr
| NotImpl
| Refused
| YXDomain
| YXRRSet
| NXRRSet
| NotAuth
| NotZone
| BadVers
| BadKey
| BadTime
| BadMode
| BadName
| BadAlg
| BadTrunc
| BadCookie
| BadRCODE
| UnknownRCODE Word16
deriving (Eq, Ord, Show)
fromRCODE :: RCODE -> Word16
fromRCODE NoErr = 0
fromRCODE FormatErr = 1
fromRCODE ServFail = 2
fromRCODE NameErr = 3
fromRCODE NotImpl = 4
fromRCODE Refused = 5
fromRCODE YXDomain = 6
fromRCODE YXRRSet = 7
fromRCODE NXRRSet = 8
fromRCODE NotAuth = 9
fromRCODE NotZone = 10
fromRCODE BadVers = 16
fromRCODE BadKey = 17
fromRCODE BadTime = 18
fromRCODE BadMode = 19
fromRCODE BadName = 20
fromRCODE BadAlg = 21
fromRCODE BadTrunc = 22
fromRCODE BadCookie = 23
fromRCODE BadRCODE = 0x1001
fromRCODE (UnknownRCODE x) = x
toRCODE :: Word16 -> RCODE
toRCODE 0 = NoErr
toRCODE 1 = FormatErr
toRCODE 2 = ServFail
toRCODE 3 = NameErr
toRCODE 4 = NotImpl
toRCODE 5 = Refused
toRCODE 6 = YXDomain
toRCODE 7 = YXRRSet
toRCODE 8 = NXRRSet
toRCODE 9 = NotAuth
toRCODE 10 = NotZone
toRCODE 16 = BadVers
toRCODE 17 = BadKey
toRCODE 18 = BadTime
toRCODE 19 = BadMode
toRCODE 20 = BadName
toRCODE 21 = BadAlg
toRCODE 22 = BadTrunc
toRCODE 23 = BadCookie
toRCODE 0x1001 = BadRCODE
toRCODE x = UnknownRCODE x
#endif
data Question = Question {
Question -> Domain
qname :: Domain
, Question -> TYPE
qtype :: TYPE
} deriving (Question -> Question -> Bool
(Question -> Question -> Bool)
-> (Question -> Question -> Bool) -> Eq Question
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Question -> Question -> Bool
$c/= :: Question -> Question -> Bool
== :: Question -> Question -> Bool
$c== :: Question -> Question -> Bool
Eq, Int -> Question -> ShowS
[Question] -> ShowS
Question -> String
(Int -> Question -> ShowS)
-> (Question -> String) -> ([Question] -> ShowS) -> Show Question
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Question] -> ShowS
$cshowList :: [Question] -> ShowS
show :: Question -> String
$cshow :: Question -> String
showsPrec :: Int -> Question -> ShowS
$cshowsPrec :: Int -> Question -> ShowS
Show)
type CLASS = Word16
classIN :: CLASS
classIN :: Word16
classIN = 1
type TTL = Word32
data ResourceRecord = ResourceRecord {
ResourceRecord -> Domain
rrname :: !Domain
, ResourceRecord -> TYPE
rrtype :: !TYPE
, ResourceRecord -> Word16
rrclass :: !CLASS
, ResourceRecord -> TTL
rrttl :: !TTL
, ResourceRecord -> RData
rdata :: !RData
} deriving (ResourceRecord -> ResourceRecord -> Bool
(ResourceRecord -> ResourceRecord -> Bool)
-> (ResourceRecord -> ResourceRecord -> Bool) -> Eq ResourceRecord
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ResourceRecord -> ResourceRecord -> Bool
$c/= :: ResourceRecord -> ResourceRecord -> Bool
== :: ResourceRecord -> ResourceRecord -> Bool
$c== :: ResourceRecord -> ResourceRecord -> Bool
Eq,Int -> ResourceRecord -> ShowS
Answers -> ShowS
ResourceRecord -> String
(Int -> ResourceRecord -> ShowS)
-> (ResourceRecord -> String)
-> (Answers -> ShowS)
-> Show ResourceRecord
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: Answers -> ShowS
$cshowList :: Answers -> ShowS
show :: ResourceRecord -> String
$cshow :: ResourceRecord -> String
showsPrec :: Int -> ResourceRecord -> ShowS
$cshowsPrec :: Int -> ResourceRecord -> ShowS
Show)
dnsTime :: Word32
-> Int64
-> Int64
dnsTime :: TTL -> Int64 -> Int64
dnsTime tdns :: TTL
tdns tnow :: Int64
tnow =
let delta :: TTL
delta = TTL
tdns TTL -> TTL -> TTL
forall a. Num a => a -> a -> a
- Int64 -> TTL
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int64
tnow
in if TTL
delta TTL -> TTL -> Bool
forall a. Ord a => a -> a -> Bool
> 0x7FFFFFFF
then Int64
tnow Int64 -> Int64 -> Int64
forall a. Num a => a -> a -> a
- (0x100000000 Int64 -> Int64 -> Int64
forall a. Num a => a -> a -> a
- TTL -> Int64
forall a b. (Integral a, Num b) => a -> b
fromIntegral TTL
delta)
else Int64
tnow Int64 -> Int64 -> Int64
forall a. Num a => a -> a -> a
+ TTL -> Int64
forall a b. (Integral a, Num b) => a -> b
fromIntegral TTL
delta
data RD_RRSIG = RDREP_RRSIG
{ RD_RRSIG -> TYPE
rrsigType :: !TYPE
, RD_RRSIG -> Word8
rrsigKeyAlg :: !Word8
, RD_RRSIG -> Word8
rrsigNumLabels :: !Word8
, RD_RRSIG -> TTL
rrsigTTL :: !Word32
, RD_RRSIG -> Int64
rrsigExpiration :: !Int64
, RD_RRSIG -> Int64
rrsigInception :: !Int64
, RD_RRSIG -> Word16
rrsigKeyTag :: !Word16
, RD_RRSIG -> Domain
rrsigZone :: !Domain
, RD_RRSIG -> Domain
rrsigValue :: !ByteString
}
deriving (RD_RRSIG -> RD_RRSIG -> Bool
(RD_RRSIG -> RD_RRSIG -> Bool)
-> (RD_RRSIG -> RD_RRSIG -> Bool) -> Eq RD_RRSIG
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RD_RRSIG -> RD_RRSIG -> Bool
$c/= :: RD_RRSIG -> RD_RRSIG -> Bool
== :: RD_RRSIG -> RD_RRSIG -> Bool
$c== :: RD_RRSIG -> RD_RRSIG -> Bool
Eq, Eq RD_RRSIG
Eq RD_RRSIG =>
(RD_RRSIG -> RD_RRSIG -> Ordering)
-> (RD_RRSIG -> RD_RRSIG -> Bool)
-> (RD_RRSIG -> RD_RRSIG -> Bool)
-> (RD_RRSIG -> RD_RRSIG -> Bool)
-> (RD_RRSIG -> RD_RRSIG -> Bool)
-> (RD_RRSIG -> RD_RRSIG -> RD_RRSIG)
-> (RD_RRSIG -> RD_RRSIG -> RD_RRSIG)
-> Ord RD_RRSIG
RD_RRSIG -> RD_RRSIG -> Bool
RD_RRSIG -> RD_RRSIG -> Ordering
RD_RRSIG -> RD_RRSIG -> RD_RRSIG
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: RD_RRSIG -> RD_RRSIG -> RD_RRSIG
$cmin :: RD_RRSIG -> RD_RRSIG -> RD_RRSIG
max :: RD_RRSIG -> RD_RRSIG -> RD_RRSIG
$cmax :: RD_RRSIG -> RD_RRSIG -> RD_RRSIG
>= :: RD_RRSIG -> RD_RRSIG -> Bool
$c>= :: RD_RRSIG -> RD_RRSIG -> Bool
> :: RD_RRSIG -> RD_RRSIG -> Bool
$c> :: RD_RRSIG -> RD_RRSIG -> Bool
<= :: RD_RRSIG -> RD_RRSIG -> Bool
$c<= :: RD_RRSIG -> RD_RRSIG -> Bool
< :: RD_RRSIG -> RD_RRSIG -> Bool
$c< :: RD_RRSIG -> RD_RRSIG -> Bool
compare :: RD_RRSIG -> RD_RRSIG -> Ordering
$ccompare :: RD_RRSIG -> RD_RRSIG -> Ordering
$cp1Ord :: Eq RD_RRSIG
Ord)
instance Show RD_RRSIG where
show :: RD_RRSIG -> String
show RDREP_RRSIG{..} = [String] -> String
unwords
[ TYPE -> String
forall a. Show a => a -> String
show TYPE
rrsigType
, Word8 -> String
forall a. Show a => a -> String
show Word8
rrsigKeyAlg
, Word8 -> String
forall a. Show a => a -> String
show Word8
rrsigNumLabels
, TTL -> String
forall a. Show a => a -> String
show TTL
rrsigTTL
, Int64 -> String
showTime Int64
rrsigExpiration
, Int64 -> String
showTime Int64
rrsigInception
, Word16 -> String
forall a. Show a => a -> String
show Word16
rrsigKeyTag
, Domain -> String
BS.unpack Domain
rrsigZone
, Domain -> String
_b64encode Domain
rrsigValue
]
where
showTime :: Int64 -> String
showTime :: Int64 -> String
showTime t :: Int64
t = [TimeFormatElem] -> Elapsed -> String
forall format t.
(TimeFormat format, Timeable t) =>
format -> t -> String
H.timePrint [TimeFormatElem]
fmt (Elapsed -> String) -> Elapsed -> String
forall a b. (a -> b) -> a -> b
$ Seconds -> Elapsed
H.Elapsed (Seconds -> Elapsed) -> Seconds -> Elapsed
forall a b. (a -> b) -> a -> b
$ Int64 -> Seconds
H.Seconds Int64
t
where
fmt :: [TimeFormatElem]
fmt = [ TimeFormatElem
H.Format_Year4, TimeFormatElem
H.Format_Month2, TimeFormatElem
H.Format_Day2
, TimeFormatElem
H.Format_Hour, TimeFormatElem
H.Format_Minute, TimeFormatElem
H.Format_Second ]
data RData = RD_A IPv4
| RD_NS Domain
| RD_CNAME Domain
| RD_SOA Domain Mailbox Word32 Word32 Word32 Word32 Word32
| RD_NULL ByteString
| RD_PTR Domain
| RD_MX Word16 Domain
| RD_TXT ByteString
| RD_AAAA IPv6
| RD_SRV Word16 Word16 Word16 Domain
| RD_DNAME Domain
| RD_OPT [OData]
| RD_DS Word16 Word8 Word8 ByteString
| RD_RRSIG RD_RRSIG
| RD_NSEC Domain [TYPE]
| RD_DNSKEY Word16 Word8 Word8 ByteString
| RD_NSEC3 Word8 Word8 Word16 ByteString ByteString [TYPE]
| RD_NSEC3PARAM Word8 Word8 Word16 ByteString
| RD_TLSA Word8 Word8 Word8 ByteString
| RD_CDS Word16 Word8 Word8 ByteString
| RD_CDNSKEY Word16 Word8 Word8 ByteString
| UnknownRData ByteString
deriving (RData -> RData -> Bool
(RData -> RData -> Bool) -> (RData -> RData -> Bool) -> Eq RData
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RData -> RData -> Bool
$c/= :: RData -> RData -> Bool
== :: RData -> RData -> Bool
$c== :: RData -> RData -> Bool
Eq, Eq RData
Eq RData =>
(RData -> RData -> Ordering)
-> (RData -> RData -> Bool)
-> (RData -> RData -> Bool)
-> (RData -> RData -> Bool)
-> (RData -> RData -> Bool)
-> (RData -> RData -> RData)
-> (RData -> RData -> RData)
-> Ord RData
RData -> RData -> Bool
RData -> RData -> Ordering
RData -> RData -> RData
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: RData -> RData -> RData
$cmin :: RData -> RData -> RData
max :: RData -> RData -> RData
$cmax :: RData -> RData -> RData
>= :: RData -> RData -> Bool
$c>= :: RData -> RData -> Bool
> :: RData -> RData -> Bool
$c> :: RData -> RData -> Bool
<= :: RData -> RData -> Bool
$c<= :: RData -> RData -> Bool
< :: RData -> RData -> Bool
$c< :: RData -> RData -> Bool
compare :: RData -> RData -> Ordering
$ccompare :: RData -> RData -> Ordering
$cp1Ord :: Eq RData
Ord)
instance Show RData where
show :: RData -> String
show rd :: RData
rd = case RData
rd of
RD_A address :: IPv4
address -> IPv4 -> String
forall a. Show a => a -> String
show IPv4
address
RD_NS nsdname :: Domain
nsdname -> Domain -> String
showDomain Domain
nsdname
RD_CNAME cname :: Domain
cname -> Domain -> String
showDomain Domain
cname
RD_SOA a :: Domain
a b :: Domain
b c :: TTL
c d :: TTL
d e :: TTL
e f :: TTL
f g :: TTL
g -> Domain -> Domain -> TTL -> TTL -> TTL -> TTL -> TTL -> String
forall a a a a a.
(Show a, Show a, Show a, Show a, Show a) =>
Domain -> Domain -> a -> a -> a -> a -> a -> String
showSOA Domain
a Domain
b TTL
c TTL
d TTL
e TTL
f TTL
g
RD_NULL bytes :: Domain
bytes -> Domain -> String
showOpaque Domain
bytes
RD_PTR ptrdname :: Domain
ptrdname -> Domain -> String
showDomain Domain
ptrdname
RD_MX pref :: Word16
pref exch :: Domain
exch -> Word16 -> Domain -> String
forall a. Show a => a -> Domain -> String
showMX Word16
pref Domain
exch
RD_TXT textstring :: Domain
textstring -> Domain -> String
showTXT Domain
textstring
RD_AAAA address :: IPv6
address -> IPv6 -> String
forall a. Show a => a -> String
show IPv6
address
RD_SRV pri :: Word16
pri wei :: Word16
wei prt :: Word16
prt tgt :: Domain
tgt -> Word16 -> Word16 -> Word16 -> Domain -> String
forall a a a.
(Show a, Show a, Show a) =>
a -> a -> a -> Domain -> String
showSRV Word16
pri Word16
wei Word16
prt Domain
tgt
RD_DNAME target :: Domain
target -> Domain -> String
showDomain Domain
target
RD_OPT options :: [OData]
options -> [OData] -> String
forall a. Show a => a -> String
show [OData]
options
RD_DS tag :: Word16
tag alg :: Word8
alg dalg :: Word8
dalg d :: Domain
d -> Word16 -> Word8 -> Word8 -> Domain -> String
forall a a a.
(Show a, Show a, Show a) =>
a -> a -> a -> Domain -> String
showDS Word16
tag Word8
alg Word8
dalg Domain
d
RD_RRSIG rrsig :: RD_RRSIG
rrsig -> RD_RRSIG -> String
forall a. Show a => a -> String
show RD_RRSIG
rrsig
RD_NSEC next :: Domain
next types :: [TYPE]
types -> Domain -> [TYPE] -> String
forall a. Show a => Domain -> [a] -> String
showNSEC Domain
next [TYPE]
types
RD_DNSKEY f :: Word16
f p :: Word8
p a :: Word8
a k :: Domain
k -> Word16 -> Word8 -> Word8 -> Domain -> String
forall a a a.
(Show a, Show a, Show a) =>
a -> a -> a -> Domain -> String
showDNSKEY Word16
f Word8
p Word8
a Domain
k
RD_NSEC3 a :: Word8
a f :: Word8
f i :: Word16
i s :: Domain
s h :: Domain
h types :: [TYPE]
types -> Word8 -> Word8 -> Word16 -> Domain -> Domain -> [TYPE] -> String
forall a a a a.
(Show a, Show a, Show a, Show a) =>
a -> a -> a -> Domain -> Domain -> [a] -> String
showNSEC3 Word8
a Word8
f Word16
i Domain
s Domain
h [TYPE]
types
RD_NSEC3PARAM a :: Word8
a f :: Word8
f i :: Word16
i s :: Domain
s -> Word8 -> Word8 -> Word16 -> Domain -> String
forall a a a.
(Show a, Show a, Show a) =>
a -> a -> a -> Domain -> String
showNSEC3PARAM Word8
a Word8
f Word16
i Domain
s
RD_TLSA u :: Word8
u s :: Word8
s m :: Word8
m d :: Domain
d -> Word8 -> Word8 -> Word8 -> Domain -> String
forall a a a.
(Show a, Show a, Show a) =>
a -> a -> a -> Domain -> String
showTLSA Word8
u Word8
s Word8
m Domain
d
RD_CDS tag :: Word16
tag alg :: Word8
alg dalg :: Word8
dalg d :: Domain
d -> Word16 -> Word8 -> Word8 -> Domain -> String
forall a a a.
(Show a, Show a, Show a) =>
a -> a -> a -> Domain -> String
showDS Word16
tag Word8
alg Word8
dalg Domain
d
RD_CDNSKEY f :: Word16
f p :: Word8
p a :: Word8
a k :: Domain
k -> Word16 -> Word8 -> Word8 -> Domain -> String
forall a a a.
(Show a, Show a, Show a) =>
a -> a -> a -> Domain -> String
showDNSKEY Word16
f Word8
p Word8
a Domain
k
UnknownRData bytes :: Domain
bytes -> Domain -> String
showOpaque Domain
bytes
where
showSalt :: Domain -> String
showSalt "" = "-"
showSalt salt :: Domain
salt = Domain -> String
_b16encode Domain
salt
showDomain :: Domain -> String
showDomain = Domain -> String
BS.unpack
showSOA :: Domain -> Domain -> a -> a -> a -> a -> a -> String
showSOA mname :: Domain
mname mrname :: Domain
mrname serial :: a
serial refresh :: a
refresh retry :: a
retry expire :: a
expire minttl :: a
minttl =
Domain -> String
showDomain Domain
mname String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Domain -> String
showDomain Domain
mrname String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++
a -> String
forall a. Show a => a -> String
show a
serial String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
show a
refresh String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++
a -> String
forall a. Show a => a -> String
show a
retry String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
show a
expire String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
show a
minttl
showMX :: a -> Domain -> String
showMX preference :: a
preference exchange :: Domain
exchange =
a -> String
forall a. Show a => a -> String
show a
preference String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Domain -> String
showDomain Domain
exchange
showTXT :: Domain -> String
showTXT bs :: Domain
bs = '"' Char -> ShowS
forall a. a -> [a] -> [a]
: (Word8 -> ShowS) -> String -> Domain -> String
forall a. (Word8 -> a -> a) -> a -> Domain -> a
B.foldr Word8 -> ShowS
dnsesc ['"'] Domain
bs
where
c2w :: Char -> Word8
c2w = Int -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> Word8) -> (Char -> Int) -> Char -> Word8
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> Int
forall a. Enum a => a -> Int
fromEnum
w2c :: Word8 -> Char
w2c = Int -> Char
forall a. Enum a => Int -> a
toEnum (Int -> Char) -> (Word8 -> Int) -> Word8 -> Char
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word8 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral
doubleQuote :: Word8
doubleQuote = Char -> Word8
c2w Char
'"'
backSlash :: Word8
backSlash = Char -> Word8
c2w Char
'\\'
dnsesc :: Word8 -> ShowS
dnsesc c :: Word8
c s :: String
s
| Word8
c Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
doubleQuote = '\\' Char -> ShowS
forall a. a -> [a] -> [a]
: Word8 -> Char
w2c Word8
c Char -> ShowS
forall a. a -> [a] -> [a]
: String
s
| Word8
c Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
backSlash = '\\' Char -> ShowS
forall a. a -> [a] -> [a]
: Word8 -> Char
w2c Word8
c Char -> ShowS
forall a. a -> [a] -> [a]
: String
s
| Word8
c Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
>= 32 Bool -> Bool -> Bool
&& Word8
c Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
< 127 = Word8 -> Char
w2c Word8
c Char -> ShowS
forall a. a -> [a] -> [a]
: String
s
| Bool
otherwise = '\\' Char -> ShowS
forall a. a -> [a] -> [a]
: Word8 -> ShowS
forall a. Integral a => a -> ShowS
ddd Word8
c String
s
ddd :: a -> ShowS
ddd c :: a
c s :: String
s =
let (q100 :: Int
q100, r100 :: Int
r100) = Int -> Int -> (Int, Int)
forall a. Integral a => a -> a -> (a, a)
divMod (a -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
c) 100
(q10 :: Int
q10, r10 :: Int
r10) = Int -> Int -> (Int, Int)
forall a. Integral a => a -> a -> (a, a)
divMod Int
r100 10
in Int -> Char
intToDigit Int
q100 Char -> ShowS
forall a. a -> [a] -> [a]
: Int -> Char
intToDigit Int
q10 Char -> ShowS
forall a. a -> [a] -> [a]
: Int -> Char
intToDigit Int
r10 Char -> ShowS
forall a. a -> [a] -> [a]
: String
s
showSRV :: a -> a -> a -> Domain -> String
showSRV priority :: a
priority weight :: a
weight port :: a
port target :: Domain
target =
a -> String
forall a. Show a => a -> String
show a
priority String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
show a
weight String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++
a -> String
forall a. Show a => a -> String
show a
port String -> ShowS
forall a. [a] -> [a] -> [a]
++ Domain -> String
BS.unpack Domain
target
showDS :: a -> a -> a -> Domain -> String
showDS keytag :: a
keytag alg :: a
alg digestType :: a
digestType digest :: Domain
digest =
a -> String
forall a. Show a => a -> String
show a
keytag String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
show a
alg String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++
a -> String
forall a. Show a => a -> String
show a
digestType String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Domain -> String
_b16encode Domain
digest
showNSEC :: Domain -> [a] -> String
showNSEC next :: Domain
next types :: [a]
types =
[String] -> String
unwords ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ Domain -> String
showDomain Domain
next String -> [String] -> [String]
forall a. a -> [a] -> [a]
: (a -> String) -> [a] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map a -> String
forall a. Show a => a -> String
show [a]
types
showDNSKEY :: a -> a -> a -> Domain -> String
showDNSKEY flags :: a
flags protocol :: a
protocol alg :: a
alg key :: Domain
key =
a -> String
forall a. Show a => a -> String
show a
flags String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
show a
protocol String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++
a -> String
forall a. Show a => a -> String
show a
alg String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Domain -> String
_b64encode Domain
key
showNSEC3 :: a -> a -> a -> Domain -> Domain -> [a] -> String
showNSEC3 hashalg :: a
hashalg flags :: a
flags iterations :: a
iterations salt :: Domain
salt nexthash :: Domain
nexthash types :: [a]
types =
[String] -> String
unwords ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ a -> String
forall a. Show a => a -> String
show a
hashalg String -> [String] -> [String]
forall a. a -> [a] -> [a]
: a -> String
forall a. Show a => a -> String
show a
flags String -> [String] -> [String]
forall a. a -> [a] -> [a]
: a -> String
forall a. Show a => a -> String
show a
iterations String -> [String] -> [String]
forall a. a -> [a] -> [a]
:
Domain -> String
showSalt Domain
salt String -> [String] -> [String]
forall a. a -> [a] -> [a]
: Domain -> String
_b32encode Domain
nexthash String -> [String] -> [String]
forall a. a -> [a] -> [a]
: (a -> String) -> [a] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map a -> String
forall a. Show a => a -> String
show [a]
types
showNSEC3PARAM :: a -> a -> a -> Domain -> String
showNSEC3PARAM hashAlg :: a
hashAlg flags :: a
flags iterations :: a
iterations salt :: Domain
salt =
a -> String
forall a. Show a => a -> String
show a
hashAlg String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
show a
flags String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++
a -> String
forall a. Show a => a -> String
show a
iterations String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Domain -> String
showSalt Domain
salt
showTLSA :: a -> a -> a -> Domain -> String
showTLSA usage :: a
usage selector :: a
selector mtype :: a
mtype digest :: Domain
digest =
a -> String
forall a. Show a => a -> String
show a
usage String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
show a
selector String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++
a -> String
forall a. Show a => a -> String
show a
mtype String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Domain -> String
_b16encode Domain
digest
showOpaque :: Domain -> String
showOpaque bs :: Domain
bs = [String] -> String
unwords ["\\#", Int -> String
forall a. Show a => a -> String
show (Domain -> Int
BS.length Domain
bs), Domain -> String
_b16encode Domain
bs]
_b16encode, _b32encode, _b64encode :: ByteString -> String
_b16encode :: Domain -> String
_b16encode = Domain -> String
BS.unpack(Domain -> String) -> (Domain -> Domain) -> Domain -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Domain -> Domain
B16.encode
_b32encode :: Domain -> String
_b32encode = Domain -> String
BS.unpack(Domain -> String) -> (Domain -> Domain) -> Domain -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Domain -> Domain
B32.encode
_b64encode :: Domain -> String
_b64encode = Domain -> String
BS.unpack(Domain -> String) -> (Domain -> Domain) -> Domain -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Domain -> Domain
B64.encode
type Answers = [ResourceRecord]
type AuthorityRecords = [ResourceRecord]
type AdditionalRecords = [ResourceRecord]
defaultQuery :: DNSMessage
defaultQuery :: DNSMessage
defaultQuery = $WDNSMessage :: DNSHeader
-> EDNSheader
-> [Question]
-> Answers
-> Answers
-> Answers
-> DNSMessage
DNSMessage {
header :: DNSHeader
header = $WDNSHeader :: Word16 -> DNSFlags -> DNSHeader
DNSHeader {
identifier :: Word16
identifier = 0
, flags :: DNSFlags
flags = DNSFlags
defaultDNSFlags
}
, ednsHeader :: EDNSheader
ednsHeader = EDNS -> EDNSheader
EDNSheader EDNS
defaultEDNS
, question :: [Question]
question = []
, answer :: Answers
answer = []
, authority :: Answers
authority = []
, additional :: Answers
additional = []
}
defaultResponse :: DNSMessage
defaultResponse :: DNSMessage
defaultResponse = $WDNSMessage :: DNSHeader
-> EDNSheader
-> [Question]
-> Answers
-> Answers
-> Answers
-> DNSMessage
DNSMessage {
header :: DNSHeader
header = $WDNSHeader :: Word16 -> DNSFlags -> DNSHeader
DNSHeader {
identifier :: Word16
identifier = 0
, flags :: DNSFlags
flags = DNSFlags
defaultDNSFlags {
qOrR :: QorR
qOrR = QorR
QR_Response
, authAnswer :: Bool
authAnswer = Bool
True
, recAvailable :: Bool
recAvailable = Bool
True
, authenData :: Bool
authenData = Bool
False
}
}
, ednsHeader :: EDNSheader
ednsHeader = EDNSheader
NoEDNS
, question :: [Question]
question = []
, answer :: Answers
answer = []
, authority :: Answers
authority = []
, additional :: Answers
additional = []
}
makeEmptyQuery :: QueryControls
-> DNSMessage
makeEmptyQuery :: QueryControls -> DNSMessage
makeEmptyQuery ctls :: QueryControls
ctls = DNSMessage
defaultQuery {
header :: DNSHeader
header = DNSHeader
header'
, ednsHeader :: EDNSheader
ednsHeader = EdnsControls -> EDNSheader
queryEdns EdnsControls
ehctls
}
where
hctls :: HeaderControls
hctls = QueryControls -> HeaderControls
qctlHeader QueryControls
ctls
ehctls :: EdnsControls
ehctls = QueryControls -> EdnsControls
qctlEdns QueryControls
ctls
header' :: DNSHeader
header' = (DNSMessage -> DNSHeader
header DNSMessage
defaultQuery) { flags :: DNSFlags
flags = HeaderControls -> DNSFlags
queryDNSFlags HeaderControls
hctls }
applyFlag :: FlagOp -> Bool -> Bool
applyFlag :: FlagOp -> Bool -> Bool
applyFlag FlagSet _ = Bool
True
applyFlag FlagClear _ = Bool
False
applyFlag _ v :: Bool
v = Bool
v
queryEdns :: EdnsControls -> EDNSheader
queryEdns :: EdnsControls -> EDNSheader
queryEdns (EdnsControls en :: FlagOp
en vn :: Maybe Word8
vn sz :: Maybe Word16
sz d0 :: FlagOp
d0 od :: ODataOp
od) =
let d :: EDNS
d = EDNS
defaultEDNS
in if FlagOp
en FlagOp -> FlagOp -> Bool
forall a. Eq a => a -> a -> Bool
== FlagOp
FlagClear
then EDNSheader
NoEDNS
else EDNS -> EDNSheader
EDNSheader (EDNS -> EDNSheader) -> EDNS -> EDNSheader
forall a b. (a -> b) -> a -> b
$ EDNS
d { ednsVersion :: Word8
ednsVersion = Word8 -> Maybe Word8 -> Word8
forall a. a -> Maybe a -> a
fromMaybe (EDNS -> Word8
ednsVersion EDNS
d) Maybe Word8
vn
, ednsUdpSize :: Word16
ednsUdpSize = Word16 -> Maybe Word16 -> Word16
forall a. a -> Maybe a -> a
fromMaybe (EDNS -> Word16
ednsUdpSize EDNS
d) Maybe Word16
sz
, ednsDnssecOk :: Bool
ednsDnssecOk = FlagOp -> Bool -> Bool
applyFlag FlagOp
d0 (EDNS -> Bool
ednsDnssecOk EDNS
d)
, ednsOptions :: [OData]
ednsOptions = ODataOp -> [OData]
_odataDedup ODataOp
od
}
queryDNSFlags :: HeaderControls -> DNSFlags
queryDNSFlags :: HeaderControls -> DNSFlags
queryDNSFlags (HeaderControls rd :: FlagOp
rd ad :: FlagOp
ad cd :: FlagOp
cd) = DNSFlags
d {
recDesired :: Bool
recDesired = FlagOp -> Bool -> Bool
applyFlag FlagOp
rd (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ DNSFlags -> Bool
recDesired DNSFlags
d
, authenData :: Bool
authenData = FlagOp -> Bool -> Bool
applyFlag FlagOp
ad (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ DNSFlags -> Bool
authenData DNSFlags
d
, chkDisable :: Bool
chkDisable = FlagOp -> Bool -> Bool
applyFlag FlagOp
cd (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ DNSFlags -> Bool
chkDisable DNSFlags
d
}
where
d :: DNSFlags
d = DNSFlags
defaultDNSFlags
makeQuery :: Identifier
-> Question
-> QueryControls
-> DNSMessage
makeQuery :: Word16 -> Question -> QueryControls -> DNSMessage
makeQuery idt :: Word16
idt q :: Question
q ctls :: QueryControls
ctls = DNSMessage
empqry {
header :: DNSHeader
header = (DNSMessage -> DNSHeader
header DNSMessage
empqry) { identifier :: Word16
identifier = Word16
idt }
, question :: [Question]
question = [Question
q]
}
where
empqry :: DNSMessage
empqry = QueryControls -> DNSMessage
makeEmptyQuery QueryControls
ctls
makeResponse :: Identifier
-> Question
-> Answers
-> DNSMessage
makeResponse :: Word16 -> Question -> Answers -> DNSMessage
makeResponse idt :: Word16
idt q :: Question
q as :: Answers
as = DNSMessage
defaultResponse {
header :: DNSHeader
header = DNSHeader
header' { identifier :: Word16
identifier = Word16
idt }
, question :: [Question]
question = [Question
q]
, answer :: Answers
answer = Answers
as
}
where
header' :: DNSHeader
header' = DNSMessage -> DNSHeader
header DNSMessage
defaultResponse
data EDNS = EDNS {
EDNS -> Word8
ednsVersion :: !Word8
, EDNS -> Word16
ednsUdpSize :: !Word16
, EDNS -> Bool
ednsDnssecOk :: !Bool
, EDNS -> [OData]
ednsOptions :: ![OData]
} deriving (EDNS -> EDNS -> Bool
(EDNS -> EDNS -> Bool) -> (EDNS -> EDNS -> Bool) -> Eq EDNS
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EDNS -> EDNS -> Bool
$c/= :: EDNS -> EDNS -> Bool
== :: EDNS -> EDNS -> Bool
$c== :: EDNS -> EDNS -> Bool
Eq, Int -> EDNS -> ShowS
[EDNS] -> ShowS
EDNS -> String
(Int -> EDNS -> ShowS)
-> (EDNS -> String) -> ([EDNS] -> ShowS) -> Show EDNS
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EDNS] -> ShowS
$cshowList :: [EDNS] -> ShowS
show :: EDNS -> String
$cshow :: EDNS -> String
showsPrec :: Int -> EDNS -> ShowS
$cshowsPrec :: Int -> EDNS -> ShowS
Show)
defaultEDNS :: EDNS
defaultEDNS :: EDNS
defaultEDNS = $WEDNS :: Word8 -> Word16 -> Bool -> [OData] -> EDNS
EDNS
{ ednsVersion :: Word8
ednsVersion = 0
, ednsUdpSize :: Word16
ednsUdpSize = 1232
, ednsDnssecOk :: Bool
ednsDnssecOk = Bool
False
, ednsOptions :: [OData]
ednsOptions = []
}
maxUdpSize :: Word16
maxUdpSize :: Word16
maxUdpSize = 16384
minUdpSize :: Word16
minUdpSize :: Word16
minUdpSize = 512
#if __GLASGOW_HASKELL__ >= 800
newtype OptCode = OptCode {
OptCode -> Word16
fromOptCode :: Word16
} deriving (OptCode -> OptCode -> Bool
(OptCode -> OptCode -> Bool)
-> (OptCode -> OptCode -> Bool) -> Eq OptCode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: OptCode -> OptCode -> Bool
$c/= :: OptCode -> OptCode -> Bool
== :: OptCode -> OptCode -> Bool
$c== :: OptCode -> OptCode -> Bool
Eq,Eq OptCode
Eq OptCode =>
(OptCode -> OptCode -> Ordering)
-> (OptCode -> OptCode -> Bool)
-> (OptCode -> OptCode -> Bool)
-> (OptCode -> OptCode -> Bool)
-> (OptCode -> OptCode -> Bool)
-> (OptCode -> OptCode -> OptCode)
-> (OptCode -> OptCode -> OptCode)
-> Ord OptCode
OptCode -> OptCode -> Bool
OptCode -> OptCode -> Ordering
OptCode -> OptCode -> OptCode
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: OptCode -> OptCode -> OptCode
$cmin :: OptCode -> OptCode -> OptCode
max :: OptCode -> OptCode -> OptCode
$cmax :: OptCode -> OptCode -> OptCode
>= :: OptCode -> OptCode -> Bool
$c>= :: OptCode -> OptCode -> Bool
> :: OptCode -> OptCode -> Bool
$c> :: OptCode -> OptCode -> Bool
<= :: OptCode -> OptCode -> Bool
$c<= :: OptCode -> OptCode -> Bool
< :: OptCode -> OptCode -> Bool
$c< :: OptCode -> OptCode -> Bool
compare :: OptCode -> OptCode -> Ordering
$ccompare :: OptCode -> OptCode -> Ordering
$cp1Ord :: Eq OptCode
Ord)
pattern NSID :: OptCode
pattern $bNSID :: OptCode
$mNSID :: forall r. OptCode -> (Void# -> r) -> (Void# -> r) -> r
NSID = OptCode 3
pattern DAU :: OptCode
pattern $bDAU :: OptCode
$mDAU :: forall r. OptCode -> (Void# -> r) -> (Void# -> r) -> r
DAU = OptCode 5
pattern DHU :: OptCode
pattern $bDHU :: OptCode
$mDHU :: forall r. OptCode -> (Void# -> r) -> (Void# -> r) -> r
DHU = OptCode 6
pattern N3U :: OptCode
pattern $bN3U :: OptCode
$mN3U :: forall r. OptCode -> (Void# -> r) -> (Void# -> r) -> r
N3U = OptCode 7
pattern ClientSubnet :: OptCode
pattern $bClientSubnet :: OptCode
$mClientSubnet :: forall r. OptCode -> (Void# -> r) -> (Void# -> r) -> r
ClientSubnet = OptCode 8
instance Show OptCode where
show :: OptCode -> String
show NSID = "NSID"
show DAU = "DAU"
show DHU = "DHU"
show N3U = "N3U"
show ClientSubnet = "ClientSubnet"
show x :: OptCode
x = "OptCode" String -> ShowS
forall a. [a] -> [a] -> [a]
++ (Word16 -> String
forall a. Show a => a -> String
show (Word16 -> String) -> Word16 -> String
forall a b. (a -> b) -> a -> b
$ OptCode -> Word16
fromOptCode OptCode
x)
toOptCode :: Word16 -> OptCode
toOptCode :: Word16 -> OptCode
toOptCode = Word16 -> OptCode
OptCode
#else
data OptCode = NSID
| DAU
| DHU
| N3U
| ClientSubnet
| UnknownOptCode Word16
deriving (Eq, Ord, Show)
fromOptCode :: OptCode -> Word16
fromOptCode NSID = 3
fromOptCode DAU = 5
fromOptCode DHU = 6
fromOptCode N3U = 7
fromOptCode ClientSubnet = 8
fromOptCode (UnknownOptCode x) = x
toOptCode :: Word16 -> OptCode
toOptCode 3 = NSID
toOptCode 5 = DAU
toOptCode 6 = DHU
toOptCode 7 = N3U
toOptCode 8 = ClientSubnet
toOptCode x = UnknownOptCode x
#endif
data OData =
OD_NSID ByteString
| OD_DAU [Word8]
| OD_DHU [Word8]
| OD_N3U [Word8]
| OD_ClientSubnet Word8 Word8 IP
| OD_ECSgeneric Word16 Word8 Word8 ByteString
| UnknownOData Word16 ByteString
deriving (OData -> OData -> Bool
(OData -> OData -> Bool) -> (OData -> OData -> Bool) -> Eq OData
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: OData -> OData -> Bool
$c/= :: OData -> OData -> Bool
== :: OData -> OData -> Bool
$c== :: OData -> OData -> Bool
Eq,Eq OData
Eq OData =>
(OData -> OData -> Ordering)
-> (OData -> OData -> Bool)
-> (OData -> OData -> Bool)
-> (OData -> OData -> Bool)
-> (OData -> OData -> Bool)
-> (OData -> OData -> OData)
-> (OData -> OData -> OData)
-> Ord OData
OData -> OData -> Bool
OData -> OData -> Ordering
OData -> OData -> OData
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: OData -> OData -> OData
$cmin :: OData -> OData -> OData
max :: OData -> OData -> OData
$cmax :: OData -> OData -> OData
>= :: OData -> OData -> Bool
$c>= :: OData -> OData -> Bool
> :: OData -> OData -> Bool
$c> :: OData -> OData -> Bool
<= :: OData -> OData -> Bool
$c<= :: OData -> OData -> Bool
< :: OData -> OData -> Bool
$c< :: OData -> OData -> Bool
compare :: OData -> OData -> Ordering
$ccompare :: OData -> OData -> Ordering
$cp1Ord :: Eq OData
Ord)
_odataToOptCode :: OData -> OptCode
_odataToOptCode :: OData -> OptCode
_odataToOptCode OD_NSID {} = OptCode
NSID
_odataToOptCode OD_DAU {} = OptCode
DAU
_odataToOptCode OD_DHU {} = OptCode
DHU
_odataToOptCode OD_N3U {} = OptCode
N3U
_odataToOptCode OD_ClientSubnet {} = OptCode
ClientSubnet
_odataToOptCode OD_ECSgeneric {} = OptCode
ClientSubnet
_odataToOptCode (UnknownOData code :: Word16
code _) = Word16 -> OptCode
toOptCode Word16
code
instance Show OData where
show :: OData -> String
show (OD_NSID nsid :: Domain
nsid) = Domain -> String
_showNSID Domain
nsid
show (OD_DAU as :: [Word8]
as) = String -> [Word8] -> String
_showAlgList "DAU" [Word8]
as
show (OD_DHU hs :: [Word8]
hs) = String -> [Word8] -> String
_showAlgList "DHU" [Word8]
hs
show (OD_N3U hs :: [Word8]
hs) = String -> [Word8] -> String
_showAlgList "N3U" [Word8]
hs
show (OD_ClientSubnet b1 :: Word8
b1 b2 :: Word8
b2 ip :: IP
ip@(IPv4 _)) = Word16 -> Word8 -> Word8 -> ShowS
_showECS 1 Word8
b1 Word8
b2 ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ IP -> String
forall a. Show a => a -> String
show IP
ip
show (OD_ClientSubnet b1 :: Word8
b1 b2 :: Word8
b2 ip :: IP
ip@(IPv6 _)) = Word16 -> Word8 -> Word8 -> ShowS
_showECS 2 Word8
b1 Word8
b2 ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ IP -> String
forall a. Show a => a -> String
show IP
ip
show (OD_ECSgeneric fam :: Word16
fam b1 :: Word8
b1 b2 :: Word8
b2 a :: Domain
a) = Word16 -> Word8 -> Word8 -> ShowS
_showECS Word16
fam Word8
b1 Word8
b2 ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ Domain -> String
_b16encode Domain
a
show (UnknownOData code :: Word16
code bs :: Domain
bs) =
"UnknownOData " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Word16 -> String
forall a. Show a => a -> String
show Word16
code String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Domain -> String
_b16encode Domain
bs
_showAlgList :: String -> [Word8] -> String
_showAlgList :: String -> [Word8] -> String
_showAlgList nm :: String
nm ws :: [Word8]
ws = String
nm String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate "," ((Word8 -> String) -> [Word8] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map Word8 -> String
forall a. Show a => a -> String
show [Word8]
ws)
_showNSID :: ByteString -> String
_showNSID :: Domain -> String
_showNSID nsid :: Domain
nsid = "NSID" String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Domain -> String
_b16encode Domain
nsid String -> ShowS
forall a. [a] -> [a] -> [a]
++ ";" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Domain -> String
printable Domain
nsid
where
printable :: Domain -> String
printable = Domain -> String
BS.unpack(Domain -> String) -> (Domain -> Domain) -> Domain -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Char) -> Domain -> Domain
BS.map (\c :: Char
c -> if Char
c Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
< ' ' Bool -> Bool -> Bool
|| Char
c Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
> '~' then '?' else Char
c)
_showECS :: Word16 -> Word8 -> Word8 -> String -> String
_showECS :: Word16 -> Word8 -> Word8 -> ShowS
_showECS family :: Word16
family srcBits :: Word8
srcBits scpBits :: Word8
scpBits address :: String
address =
Word16 -> String
forall a. Show a => a -> String
show Word16
family String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Word8 -> String
forall a. Show a => a -> String
show Word8
srcBits
String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Word8 -> String
forall a. Show a => a -> String
show Word8
scpBits String -> ShowS
forall a. [a] -> [a] -> [a]
++ " " String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
address