http3-0.0.11: test/HTTP3/Config.hs
{-# LANGUAGE OverloadedStrings #-}
module HTTP3.Config (
makeTestServerConfig,
testClientConfig,
testH3ClientConfig,
) where
import Data.ByteString (ByteString)
import qualified Data.List as L
import qualified Network.HTTP3.Client as H3
import Network.TLS (Credentials (..), credentialLoadX509)
import Network.QUIC.Client
import Network.QUIC.Internal
makeTestServerConfig :: IO ServerConfig
makeTestServerConfig = do
cred <-
either error id
<$> credentialLoadX509 "test/servercert.pem" "test/serverkey.pem"
let credentials = Credentials [cred]
return
testServerConfig
{ scCredentials = credentials
, scALPN = Just chooseALPN
}
testServerConfig :: ServerConfig
testServerConfig =
defaultServerConfig
{ scAddresses = [("127.0.0.1", 8003)]
}
testClientConfig :: ClientConfig
testClientConfig =
defaultClientConfig
{ ccPortName = "8003"
, ccValidate = False
}
chooseALPN :: Version -> [ByteString] -> IO ByteString
chooseALPN _ver protos = return $ case mh3idx of
Nothing -> case mhqidx of
Nothing -> ""
Just _ -> "hq"
Just h3idx -> case mhqidx of
Nothing -> "h3"
Just hqidx -> if h3idx < hqidx then "h3" else "hq"
where
mh3idx = "h3" `L.elemIndex` protos
mhqidx = "hq" `L.elemIndex` protos
testH3ClientConfig :: H3.ClientConfig
testH3ClientConfig = H3.ClientConfig "https" "127.0.0.1"