on master help sign in
Add 'promoteApplication'; use it in 'serveConnection'
8273bedAndrew Pritchard
warp/Network/Wai/Handler/Warp/HTTP2.hs+11−1
@@ -1,7 +1,11 @@
1{-# LANGUAGE OverloadedStrings #-}
1{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE RecordWildCards #-}
2{-# LANGUAGE RecordWildCards #-}
3
3
4−module Network.Wai.Handler.Warp.HTTP2 (isHTTP2, http2) where
4+module Network.Wai.Handler.Warp.HTTP2
5+ ( isHTTP2
6+ , http2
7+ , promoteApplication
8+ ) where
5
9
6import Control.Concurrent (forkIO, killThread)
10import Control.Concurrent (forkIO, killThread)
7import qualified Control.Exception as E
11import qualified Control.Exception as E
@@ -11,6 +15,7 @@ import Data.ByteString (ByteString)
11import Network.HTTP2
15import Network.HTTP2
12import Network.Socket (SockAddr)
16import Network.Socket (SockAddr)
13
17
18+import Network.Wai (Application)
14import Network.Wai.HTTP2 (Http2Application)
19import Network.Wai.HTTP2 (Http2Application)
15import Network.Wai.Handler.Warp.HTTP2.EncodeFrame
20import Network.Wai.Handler.Warp.HTTP2.EncodeFrame
16import Network.Wai.Handler.Warp.HTTP2.Manager
21import Network.Wai.Handler.Warp.HTTP2.Manager
@@ -66,3 +71,8 @@ goaway :: Connection -> ErrorCodeId -> ByteString -> IO ()
66goaway Connection{..} etype debugmsg = connSendAll bytestream
71goaway Connection{..} etype debugmsg = connSendAll bytestream
67 where
72 where
68 bytestream = goawayFrame 0 etype debugmsg
73 bytestream = goawayFrame 0 etype debugmsg
74+
75+-- | Promote a normal WAI 'Application' to an 'Http2Application' by ignoring
76+-- the HTTP/2-specific features.
77+promoteApplication :: Application -> Http2Application
78+promoteApplication app = app
warp/Network/Wai/Handler/Warp/Run.hs+2−2
@@ -25,7 +25,7 @@ import Network.Wai.Handler.Warp.Buffer
25import Network.Wai.Handler.Warp.Counter
25import Network.Wai.Handler.Warp.Counter
26import qualified Network.Wai.Handler.Warp.Date as D
26import qualified Network.Wai.Handler.Warp.Date as D
27import qualified Network.Wai.Handler.Warp.FdCache as F
27import qualified Network.Wai.Handler.Warp.FdCache as F
28−import Network.Wai.Handler.Warp.HTTP2
28+import Network.Wai.Handler.Warp.HTTP2 (http2, isHTTP2, promoteApplication)
29import Network.Wai.Handler.Warp.Header
29import Network.Wai.Handler.Warp.Header
30import Network.Wai.Handler.Warp.ReadInt
30import Network.Wai.Handler.Warp.ReadInt
31import Network.Wai.Handler.Warp.Recv
31import Network.Wai.Handler.Warp.Recv
@@ -311,7 +311,7 @@ serveConnection conn ii origAddr transport settings app = do
311 if h2 then do
311 if h2 then do
312 recvN <- makeReceiveN bs (connRecv conn) (connRecvBuf conn)
312 recvN <- makeReceiveN bs (connRecv conn) (connRecvBuf conn)
313 -- fixme: origAddr
313 -- fixme: origAddr
314− http2 conn ii origAddr transport settings recvN app
314+ http2 conn ii origAddr transport settings recvN $ promoteApplication app
315 else do
315 else do
316 istatus <- newIORef False
316 istatus <- newIORef False
317 src <- mkSource (wrappedRecv conn th istatus (settingsSlowlorisSize settings))
317 src <- mkSource (wrappedRecv conn th istatus (settingsSlowlorisSize settings))