1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
module Network.HTTP2.Server.Types where
import Network.Socket (SockAddr)
import qualified System.TimeManager as T
import Imports
import Network.HTTP2.H2
----------------------------------------------------------------
-- | Server type. Server takes a HTTP request, should
-- generate a HTTP response and push promises, then
-- should give them to the sending function.
-- The sending function would throw exceptions so that
-- they can be logged.
type Server = Request -> Aux -> (Response -> [PushPromise] -> IO ()) -> IO ()
-- | Request from client.
newtype Request = Request InpObj deriving (Show)
-- | Response from server.
newtype Response = Response OutObj deriving (Show)
-- | HTTP/2 push promise or sever push.
-- Pseudo REQUEST headers in push promise is automatically generated.
-- Then, a server push is sent according to 'promiseResponse'.
data PushPromise = PushPromise
{ promiseRequestPath :: ByteString
-- ^ Accessor for a URL path in a push promise (a virtual request from a server).
-- E.g. \"\/style\/default.css\".
, promiseResponse :: Response
-- ^ Accessor for response actually pushed from a server.
}
-- | Additional information.
data Aux = Aux
{ auxTimeHandle :: T.Handle
-- ^ Time handle for the worker processing this request and response.
, auxMySockAddr :: SockAddr
-- ^ Local socket address copied from 'Config'.
, auxPeerSockAddr :: SockAddr
-- ^ Remove socket address copied from 'Config'.
}
|