@@ -30,15 +30,15 @@ import Network.Wai.Handler.Warp.IORef
30import qualified Network.Wai.Handler.Warp.Response as R
30import qualified Network.Wai.Handler.Warp.Response as R
31import qualified Network.Wai.Handler.Warp.Settings as S
31import qualified Network.Wai.Handler.Warp.Settings as S
32import qualified Network.Wai.Handler.Warp.Timeout as T
32import qualified Network.Wai.Handler.Warp.Timeout as T
33−import Network.Wai.Internal (Response(..), ResponseReceived(..), ResponseReceived(..))
33+import Network.Wai.Internal (Response(..))
35----------------------------------------------------------------
35----------------------------------------------------------------
37−-- | The wai definition is @type Http2Application = Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived@.
37+-- | The wai definition is @type Http2Application = Request -> (Response -> IO ()) -> IO Trailers@.
38−-- This type implements the second argument @Response -> IO ResponseReceived@
38+-- This type implements the second argument @Response -> IO ()@
39-- with extra arguments.
39-- with extra arguments.
40type Responder = ThreadContinue -> T.Handle -> Stream -> Request ->
40type Responder = ThreadContinue -> T.Handle -> Stream -> Request ->
41− TBQueue Sequence -> Response -> IO ResponseReceived
41+ TBQueue Sequence -> Response -> IO ()
43-- | This function is passed to workers.
43-- | This function is passed to workers.
44-- They also pass 'Response's from 'Http2Application's to this function.
44-- They also pass 'Response's from 'Http2Application's to this function.
@@ -74,7 +74,6 @@ response Context{outputQ} mgr tconf th strm req sq rsp = do
74 && R.hasBody (responseStatus rsp)
74 && R.hasBody (responseStatus rsp)
75 out = OResponse strm rsp (Oneshot hasBody)
75 out = OResponse strm rsp (Oneshot hasBody)
76 enqueueOrSpawnTemporaryWaiter strm outputQ out
76 enqueueOrSpawnTemporaryWaiter strm outputQ out
77− return ResponseReceived
79data Break = Break deriving (Show, Typeable)
78data Break = Break deriving (Show, Typeable)
@@ -102,8 +101,8 @@ worker ctx@Context{inputQ,outputQ} set tm app responder = do
102 T.tickle th
101 T.tickle th
103 app req $ responder tcont th strm req sq
102 app req $ responder tcont th strm req sq
104 cont1 <- case ex of
103 cont1 <- case ex of
105− Right ResponseReceived -> do
104+ Right trailers -> do
106− atomically $ writeTBQueue sq $ SFinish []
105+ atomically $ writeTBQueue sq $ SFinish trailers
107 return True
106 return True
108 Left e@(SomeException _)
107 Left e@(SomeException _)
109 | Just Break <- E.fromException e -> do
108 | Just Break <- E.fromException e -> do