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
}