module Network.QUIC.Types.CID (
CID(..)
, myCIDLength
, newCID
, fromCID
, toCID
, makeCID
, unpackCID
, StatelessResetToken(..)
, newStatelessResetToken
, PathData(..)
, newPathData
, CIDInfo(..)
) where
import qualified Data.ByteString.Short as Short
import Network.QUIC.Imports
myCIDLength :: Int
myCIDLength :: Int
myCIDLength = Int
8
newtype CID = CID Bytes deriving (CID -> CID -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CID -> CID -> Bool
$c/= :: CID -> CID -> Bool
== :: CID -> CID -> Bool
$c== :: CID -> CID -> Bool
Eq, Eq CID
CID -> CID -> Bool
CID -> CID -> Ordering
CID -> CID -> CID
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 :: CID -> CID -> CID
$cmin :: CID -> CID -> CID
max :: CID -> CID -> CID
$cmax :: CID -> CID -> CID
>= :: CID -> CID -> Bool
$c>= :: CID -> CID -> Bool
> :: CID -> CID -> Bool
$c> :: CID -> CID -> Bool
<= :: CID -> CID -> Bool
$c<= :: CID -> CID -> Bool
< :: CID -> CID -> Bool
$c< :: CID -> CID -> Bool
compare :: CID -> CID -> Ordering
$ccompare :: CID -> CID -> Ordering
Ord)
instance Show CID where
show :: CID -> String
show (CID Bytes
cid) = Bytes -> String
shortToString (Bytes -> Bytes
enc16s Bytes
cid)
newCID :: IO CID
newCID :: IO CID
newCID = Bytes -> CID
CID forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> IO Bytes
getRandomBytes Int
myCIDLength
toCID :: ByteString -> CID
toCID :: ByteString -> CID
toCID = Bytes -> CID
CID forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Bytes
Short.toShort
fromCID :: CID -> ByteString
fromCID :: CID -> ByteString
fromCID (CID Bytes
sbs) = Bytes -> ByteString
Short.fromShort Bytes
sbs
makeCID :: ShortByteString -> CID
makeCID :: Bytes -> CID
makeCID = Bytes -> CID
CID
unpackCID :: CID -> (ShortByteString, Word8)
unpackCID :: CID -> (Bytes, Word8)
unpackCID (CID Bytes
sbs) = (Bytes
sbs, Word8
len)
where
len :: Word8
len = forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$ Bytes -> Int
Short.length Bytes
sbs
newtype StatelessResetToken = StatelessResetToken Bytes deriving (StatelessResetToken -> StatelessResetToken -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: StatelessResetToken -> StatelessResetToken -> Bool
$c/= :: StatelessResetToken -> StatelessResetToken -> Bool
== :: StatelessResetToken -> StatelessResetToken -> Bool
$c== :: StatelessResetToken -> StatelessResetToken -> Bool
Eq,Eq StatelessResetToken
StatelessResetToken -> StatelessResetToken -> Bool
StatelessResetToken -> StatelessResetToken -> Ordering
StatelessResetToken -> StatelessResetToken -> StatelessResetToken
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 :: StatelessResetToken -> StatelessResetToken -> StatelessResetToken
$cmin :: StatelessResetToken -> StatelessResetToken -> StatelessResetToken
max :: StatelessResetToken -> StatelessResetToken -> StatelessResetToken
$cmax :: StatelessResetToken -> StatelessResetToken -> StatelessResetToken
>= :: StatelessResetToken -> StatelessResetToken -> Bool
$c>= :: StatelessResetToken -> StatelessResetToken -> Bool
> :: StatelessResetToken -> StatelessResetToken -> Bool
$c> :: StatelessResetToken -> StatelessResetToken -> Bool
<= :: StatelessResetToken -> StatelessResetToken -> Bool
$c<= :: StatelessResetToken -> StatelessResetToken -> Bool
< :: StatelessResetToken -> StatelessResetToken -> Bool
$c< :: StatelessResetToken -> StatelessResetToken -> Bool
compare :: StatelessResetToken -> StatelessResetToken -> Ordering
$ccompare :: StatelessResetToken -> StatelessResetToken -> Ordering
Ord,Int -> StatelessResetToken -> ShowS
[StatelessResetToken] -> ShowS
StatelessResetToken -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [StatelessResetToken] -> ShowS
$cshowList :: [StatelessResetToken] -> ShowS
show :: StatelessResetToken -> String
$cshow :: StatelessResetToken -> String
showsPrec :: Int -> StatelessResetToken -> ShowS
$cshowsPrec :: Int -> StatelessResetToken -> ShowS
Show)
newStatelessResetToken :: IO StatelessResetToken
newStatelessResetToken :: IO StatelessResetToken
newStatelessResetToken = Bytes -> StatelessResetToken
StatelessResetToken forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> IO Bytes
getRandomBytes Int
16
newtype PathData = PathData Bytes deriving (PathData -> PathData -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PathData -> PathData -> Bool
$c/= :: PathData -> PathData -> Bool
== :: PathData -> PathData -> Bool
$c== :: PathData -> PathData -> Bool
Eq,Int -> PathData -> ShowS
[PathData] -> ShowS
PathData -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PathData] -> ShowS
$cshowList :: [PathData] -> ShowS
show :: PathData -> String
$cshow :: PathData -> String
showsPrec :: Int -> PathData -> ShowS
$cshowsPrec :: Int -> PathData -> ShowS
Show)
newPathData :: IO PathData
newPathData :: IO PathData
newPathData = Bytes -> PathData
PathData forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> IO Bytes
getRandomBytes Int
8
data CIDInfo = CIDInfo {
CIDInfo -> Int
cidInfoSeq :: Int
, CIDInfo -> CID
cidInfoCID :: CID
, CIDInfo -> StatelessResetToken
cidInfoSRT :: StatelessResetToken
} deriving (CIDInfo -> CIDInfo -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CIDInfo -> CIDInfo -> Bool
$c/= :: CIDInfo -> CIDInfo -> Bool
== :: CIDInfo -> CIDInfo -> Bool
$c== :: CIDInfo -> CIDInfo -> Bool
Eq, Eq CIDInfo
CIDInfo -> CIDInfo -> Bool
CIDInfo -> CIDInfo -> Ordering
CIDInfo -> CIDInfo -> CIDInfo
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 :: CIDInfo -> CIDInfo -> CIDInfo
$cmin :: CIDInfo -> CIDInfo -> CIDInfo
max :: CIDInfo -> CIDInfo -> CIDInfo
$cmax :: CIDInfo -> CIDInfo -> CIDInfo
>= :: CIDInfo -> CIDInfo -> Bool
$c>= :: CIDInfo -> CIDInfo -> Bool
> :: CIDInfo -> CIDInfo -> Bool
$c> :: CIDInfo -> CIDInfo -> Bool
<= :: CIDInfo -> CIDInfo -> Bool
$c<= :: CIDInfo -> CIDInfo -> Bool
< :: CIDInfo -> CIDInfo -> Bool
$c< :: CIDInfo -> CIDInfo -> Bool
compare :: CIDInfo -> CIDInfo -> Ordering
$ccompare :: CIDInfo -> CIDInfo -> Ordering
Ord, Int -> CIDInfo -> ShowS
[CIDInfo] -> ShowS
CIDInfo -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CIDInfo] -> ShowS
$cshowList :: [CIDInfo] -> ShowS
show :: CIDInfo -> String
$cshow :: CIDInfo -> String
showsPrec :: Int -> CIDInfo -> ShowS
$cshowsPrec :: Int -> CIDInfo -> ShowS
Show)