module Network.HTTP2.TLS.Client.Settings where

import Data.X509.CertificateStore (CertificateStore)
import Network.Socket

import Network.Control
import Network.HTTP2.Client (
    cacheLimit,
    defaultClientConfig,
 )

-- Client settings type.
data Settings = Settings
    { Settings -> String -> IO ()
settingsKeyLogger :: String -> IO ()
    -- ^ Key logger (TLS and H2)
    --
    -- Applications may wish to set this depending on the SSLKEYLOGFILE environment variable. Default is do nothing.
    , Settings -> Bool
settingsValidateCert :: Bool
    -- ^ Should we validate TLS certificates? (TLS and H2)
    --
    -- >>> settingsValidateCert defaultSettings
    -- True
    , Settings -> CertificateStore
settingsCAStore :: CertificateStore
    -- ^ Certificate store used for validation. The default is 'mempty'. (TLS and H2)
    , Settings -> [AddrInfoFlag]
settingsAddrInfoFlags :: [AddrInfoFlag]
    -- ^ Flags that control the querying behaviour of @getAddrInfo@. (TLS and H2)
    --
    -- >>> settingsAddrInfoFlags defaultSettings
    -- []
    , Settings -> Int
settingsCacheLimit :: Int
    -- ^ How many pushed responses are contained in the cache (H2 and H2c)
    --
    -- >>> settingsCacheLimits defaultSettings
    -- 64
    , Settings -> Int
settingsConcurrentStreams :: Int
    -- ^ The maximum number of incoming streams on the net (H2 and H2c)
    --
    -- >>> settingsConcurrentStreams defaultSettings
    -- 64
    , Settings -> Int
settingsStreamWindowSize :: Int
    -- ^ The window size of incoming streams (H2 and H2c)
    --
    -- >>> settingsStreamWindowSize defaultSettings
    -- 262144
    , Settings -> Int
settingsConnectionWindowSize :: Int
    -- ^ The window size of a connection (H2 and H2c)
    --
    -- >>> settingsConnectionWindowSize defaultSettings
    -- 1048575
    }

-- | Default settings.
defaultSettings :: Settings
defaultSettings :: Settings
defaultSettings =
    Settings
        { settingsKeyLogger :: String -> IO ()
settingsKeyLogger = \String
_ -> forall (m :: * -> *) a. Monad m => a -> m a
return ()
        , settingsValidateCert :: Bool
settingsValidateCert = Bool
True
        , settingsCAStore :: CertificateStore
settingsCAStore = forall a. Monoid a => a
mempty
        , settingsAddrInfoFlags :: [AddrInfoFlag]
settingsAddrInfoFlags = []
        , settingsCacheLimit :: Int
settingsCacheLimit = ClientConfig -> Int
cacheLimit ClientConfig
defaultClientConfig
        , settingsConcurrentStreams :: Int
settingsConcurrentStreams = Int
defaultMaxStreams
        , settingsStreamWindowSize :: Int
settingsStreamWindowSize = Int
defaultMaxStreamData
        , settingsConnectionWindowSize :: Int
settingsConnectionWindowSize = Int
defaultMaxData
        }