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