-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | A fast, light-weight web server for WAI applications.
--   
--   The premier WAI handler. For more information, see
--   http://steve.vinoski.net/blog/2011/05/01/warp-a-haskell-web-server/.
--   
--   Changelog
--   
--   
--   
- 1.3.9 Support for byte range requests.
--   
- 1.3.7 Sockets now have FD_CLOEXEC set on them. This
--   behavior is more secure, and the change should not affect the vast
--   majority of use cases.
--   
@package warp
@version 1.3.9

-- | A fast, light-weight HTTP server handler for WAI.
module Network.Wai.Handler.Warp

-- | Run an Application on the given port. This calls
--   runSettings with defaultSettings.
run :: Port -> Application -> IO ()

-- | Run a Warp server with the given settings.
runSettings :: Settings -> Application -> IO ()

-- | Same as runSettings, but uses a user-supplied socket instead of
--   opening one. This allows the user to provide, for example, Unix named
--   socket, which can be used when reverse HTTP proxying into your
--   application.
--   
--   Note that the settingsPort will still be passed to
--   Applications via the serverPort record.
runSettingsSocket :: Settings -> Socket -> Application -> IO ()

-- | Various Warp server settings. This is purposely kept as an abstract
--   data type so that new settings can be added without breaking backwards
--   compatibility. In order to create a Settings value, use
--   defaultSettings and record syntax to modify individual records.
--   For example:
--   
--   
--   defaultSettings { settingsTimeout = 20 }
--   
data Settings

-- | The default settings for the Warp server. See the individual settings
--   for the default value.
defaultSettings :: Settings

-- | Port to listen on. Default value: 3000
settingsPort :: Settings -> Int

-- | Default value: HostIPv4
settingsHost :: Settings -> HostPreference

-- | What to do with exceptions thrown by either the application or server.
--   Default: ignore server-generated exceptions (see
--   InvalidRequest) and print application-generated applications to
--   stderr.
settingsOnException :: Settings -> SomeException -> IO ()

-- | What to do when a connection is open. Default: do nothing.
settingsOnOpen :: Settings -> IO ()

-- | What to do when a connection is close. Default: do nothing.
settingsOnClose :: Settings -> IO ()

-- | Timeout value in seconds. Default value: 30
settingsTimeout :: Settings -> Int
settingsIntercept :: Settings -> Request -> Maybe (Source (ResourceT IO) ByteString -> Connection -> ResourceT IO ())

-- | Use an existing timeout manager instead of spawning a new one. If
--   used, settingsTimeout is ignored. Default is Nothing
settingsManager :: Settings -> Maybe Manager

-- | Cache duratoin time of file descriptors in seconds. 0 means that the
--   cache mechanism is not used. Default value: 10
settingsFdCacheDuration :: Settings -> Int

-- | If True, each request/response pair will run in a separate
--   ResourceT. This provides more intuitive behavior for dynamic
--   code, but can hinder performance in high-throughput cases. File
--   servers can safely set to False for increased performance.
--   Default is True.
settingsResourceTPerRequest :: Settings -> Bool

-- | Code to run after the listening socket is ready but before entering
--   the main event loop. Useful for signaling to tests that they can start
--   running, or to drop permissions after binding to a restricted port.
--   
--   Default: do nothing.
--   
--   Since 1.3.6
settingsBeforeMainLoop :: Settings -> IO ()

-- | Server name to be sent in the Server header.
--   
--   Default: Warp/version
--   
--   Since 1.3.8
settingsServerName :: Settings -> ByteString

-- | Which host to bind.
--   
--   Note: The IsString instance recognizes the following special
--   values:
--   
--   
--   
- * means HostAny
--   
- *4 means HostIPv4
--   
- *6 means HostIPv6
--   
data HostPreference :: *
HostAny :: HostPreference
HostIPv4 :: HostPreference
HostIPv6 :: HostPreference
Host :: String -> HostPreference

-- | 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 2048 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.
--   
data Connection
Connection :: ([ByteString] -> IO ()) -> (ByteString -> IO ()) -> (FilePath -> Integer -> Integer -> IO () -> [ByteString] -> Cleaner -> IO ()) -> IO () -> IO ByteString -> Connection
connSendMany :: Connection -> [ByteString] -> IO ()
connSendAll :: Connection -> ByteString -> IO ()

-- | offset, length
connSendFile :: Connection -> FilePath -> Integer -> Integer -> IO () -> [ByteString] -> Cleaner -> IO ()
connClose :: Connection -> IO ()
connRecv :: Connection -> IO ByteString
runSettingsConnection :: Settings -> IO (Connection, SockAddr) -> Application -> IO ()

-- | Allows you to provide a function which will return a
--   Connection. In cases where creating the Connection
--   can be expensive, this allows the expensive computations to be
--   performed in a separate thread instead of the main server loop.
--   
--   Since 1.3.5
runSettingsConnectionMaker :: Settings -> IO (IO Connection, SockAddr) -> Application -> IO ()

-- | TCP port number
type Port = Int
data InvalidRequest
NotEnoughLines :: [String] -> InvalidRequest
BadFirstLine :: String -> InvalidRequest
NonHttp :: InvalidRequest
IncompleteHeaders :: InvalidRequest
ConnectionClosedByPeer :: InvalidRequest
OverLargeHeader :: InvalidRequest

-- | A timeout manager
data Manager

-- | A handle used by Manager
--   
--   First field is action to be performed on timeout.
data Handle
initialize :: Int -> IO Manager

-- | Call the inner function with a timeout manager.
withManager :: Int -> (Manager -> IO a) -> IO a
register :: Manager -> IO () -> IO Handle
registerKillThread :: Manager -> IO Handle
pause :: Handle -> IO ()
resume :: Handle -> IO ()
cancel :: Handle -> IO ()
parseRequest :: Connection -> Port -> SockAddr -> Source (ResourceT IO) ByteString -> ResourceT IO (Request, IO (ResumableSource (ResourceT IO) ByteString))
sendResponse :: Settings -> Cleaner -> Request -> Connection -> Response -> ResourceT IO Bool

-- | A dummy Cleaner, intended for applications making use of the
--   low-level request parsing and rendering functions.
--   
--   Since 1.3.4
dummyCleaner :: Cleaner

-- | Default action value for Connection
socketConnection :: Socket -> Connection
warpVersion :: String
