packages feed

http2-tls-0.2.7: Network/HTTP2/TLS/Server/Settings.hs

module Network.HTTP2.TLS.Server.Settings where

import Network.Control
import Network.HTTP2.Server (
    defaultServerConfig,
    numberOfWorkers,
 )
import Network.Run.TCP.Timeout
import Network.Socket
import Network.TLS (SessionManager, noSessionManager)

-- Server settings type.
data Settings = Settings
    { settingsTimeout :: Int
    -- ^ Timeout in seconds. (All)
    --
    -- >>> settingsTimeout defaultSettings
    -- 30
    , settingsSendBufferSize :: Int
    -- ^ Send buffer size. (H2 and H2c)
    --
    -- >>> settingsSendBufferSize defaultSettings
    -- 4096
    , settingsSlowlorisSize :: Int
    -- ^ If the size of receiving data is less than or equal,
    --   the timeout is not reset.
    --   (All)
    --
    -- >>> settingsSlowlorisSize defaultSettings
    -- 50
    , settingsReadBufferSize :: Int
    -- ^ When the size of a read buffer is lower than this limit, the buffer is thrown awany (and is eventually freed). Then a new buffer is allocated. (All)
    --
    -- >>> settingsReadBufferSize defaultSettings
    -- 16384
    , settingsReadBufferLowerLimit :: Int
    -- ^  The allocation size for a read buffer.  (All)
    --
    -- >>> settingsReadBufferLowerLimit defaultSettings
    -- 2048
    , settingsKeyLogger :: String -> IO ()
    -- ^ Key logger.
    --
    -- Applications may wish to set this depending on the SSLKEYLOGFILE environment variable. The default is do nothing.
    --
    -- Default: do nothing
    , settingsNumberOfWorkers :: Int
    -- ^ The number of workers. (H2 and H2c)
    --
    -- >>> settingsNumberOfWorkers defaultSettings
    -- 8
    , settingsConcurrentStreams :: Int
    -- ^ The maximum number of incoming streams on the net (H2 and H2c)
    --
    -- >>> settingsConcurrentStreams defaultSettings
    -- 64
    , settingsStreamWindowSize :: Int
    -- ^ The window size of incoming streams (H2 and H2c)
    --
    -- >>> settingsStreamWindowSize defaultSettings
    -- 262144
    , settingsConnectionWindowSize :: Int
    -- ^ The window size of a connection (H2 and H2c)
    --
    -- >>> settingsConnectionWindowSize defaultSettings
    -- 1048575
    , settingsSessionManager :: SessionManager
    -- ^ TLS session manager (H2 and TLS)
    --
    -- Default: 'noSessionManager'
    , settingsOpenServerSocket :: AddrInfo -> IO Socket
    -- ^ Function to initialize the server socket (All)
    --
    -- Default: 'openServerSocket'
    , settingsEarlyDataSize :: Int
    -- ^ The max size of early data (0-RTT) to be accepted. (H2 and TLS)
    -- 0 means that early data is not accepted.
    --
    -- >>> settingsEarlyDataSize defaultSettings
    -- 0
    }

-- | Default settings.
defaultSettings :: Settings
defaultSettings =
    Settings
        { settingsTimeout = 30
        , settingsSendBufferSize = 4096
        , settingsSlowlorisSize = 50
        , settingsReadBufferSize = 16384
        , settingsReadBufferLowerLimit = 2048
        , settingsKeyLogger = \_ -> return ()
        , settingsNumberOfWorkers = numberOfWorkers defaultServerConfig
        , settingsConcurrentStreams = defaultMaxStreams
        , settingsStreamWindowSize = defaultMaxStreamData
        , settingsConnectionWindowSize = defaultMaxData
        , settingsSessionManager = noSessionManager
        , settingsOpenServerSocket = openServerSocket
        , settingsEarlyDataSize = 0
        }