{-# OPTIONS_GHC -fno-warn-deprecations #-}

module Network.Wai.Handler.Warp.Internal (
    -- * Settings
    Settings (..)
  , ProxyProtocol(..)
    -- * Low level run functions
  , runSettingsConnection
  , runSettingsConnectionMaker
  , runSettingsConnectionMakerSecure
  , Transport (..)
    -- * Connection
  , Connection (..)
  , socketConnection
    -- ** Receive
  , Recv
  , RecvBuf
  , makePlainReceiveN
    -- ** Buffer
  , Buffer
  , BufSize
  , bufferSize
  , allocateBuffer
  , freeBuffer
  , copy
    -- ** Sendfile
  , FileId (..)
  , SendFile
  , sendFile
  , readSendFile
    -- * Version
  , warpVersion
    -- * Data types
  , InternalInfo (..)
  , HeaderValue
  , IndexedHeader
  , requestMaxIndex
    -- * Time out manager
    -- |
    --
    -- In order to provide slowloris protection, Warp provides timeout handlers. We
    -- follow these rules:
    --
    -- * A timeout is created when a connection is opened.
    --
    -- * When all request headers are read, the timeout is tickled.
    --
    -- * Every time at least the slowloris size settings number of bytes of the request
    --   body are read, the timeout is tickled.
    --
    -- * The timeout is paused while executing user code. This will apply to both
    --   the application itself, and a ResponseSource response. The timeout is
    --   resumed as soon as we return from user code.
    --
    -- * Every time data is successfully sent to the client, the timeout is tickled.
  , module Network.Wai.Handler.Warp.Timeout
    -- * File descriptor cache
  , module Network.Wai.Handler.Warp.FdCache
    -- * File information cache
  , module Network.Wai.Handler.Warp.FileInfoCache
    -- * Date
  , module Network.Wai.Handler.Warp.Date
    -- * Request and response
  , Source
  , recvRequest
  , sendResponse
  ) where

import Network.Wai.Handler.Warp.Buffer
import Network.Wai.Handler.Warp.Date
import Network.Wai.Handler.Warp.FdCache
import Network.Wai.Handler.Warp.FileInfoCache
import Network.Wai.Handler.Warp.Header
import Network.Wai.Handler.Warp.Recv
import Network.Wai.Handler.Warp.Request
import Network.Wai.Handler.Warp.Response
import Network.Wai.Handler.Warp.Run
import Network.Wai.Handler.Warp.SendFile
import Network.Wai.Handler.Warp.Settings
import Network.Wai.Handler.Warp.Timeout
import Network.Wai.Handler.Warp.Types