on master help sign in
Honor the ENABLE_PUSH setting
commitf043d8c076b4ba197296dada12a062cb0c6b1499 authorAndrew Pritchard <awpr@google.com> dateWed 5 Aug 2015, 22:26 (11 years ago) parent3c420e1
2 files changed+22−18
wai/Network/Wai/HTTP2.hs+1−1 warp/Network/Wai/Handler/Warp/HTTP2/Worker.hs+21−17
wai/Network/Wai/HTTP2.hs+1−1
@@ -34,7 +34,7 @@ data PushPromise = PushPromise
3434
3535-- | The type of an HTTP\/2 request: a normal HTTP request and an action to
3636-- push streams associated with this request.
37−type Request = (H1.Request, PushPromise -> Responder -> IO ())
37+type Request = (H1.Request, PushPromise -> Responder -> IO Bool)
3838
3939-- | The HTTP\/2-aware equivalent of 'Network.Wai.Application'.
4040type Http2Application = Request -> Responder
warp/Network/Wai/Handler/Warp/HTTP2/Worker.hs+21−17
@@ -92,28 +92,32 @@ cleanupStream ctx@Context{outputQ} set strm req me = do
9292 Nothing -> return ()
9393 Just e -> S.settingsOnException set req e
9494
95−pushResponder :: Context -> S.Settings -> Stream -> PushPromise -> Responder -> IO ()
95+pushResponder :: Context -> S.Settings -> Stream -> PushPromise -> Responder -> IO Bool
9696pushResponder ctx set strm promise responder = do
9797 let Context{ http2settings
9898 , nextPushStreamId
9999 , streamTable
100100 } = ctx
101− -- Claim the next outgoing stream.
102− newSid <- atomicModifyIORef nextPushStreamId $ \sid -> (sid+2, sid)
103− ws <- initialWindowSize <$> readIORef http2settings
104−
105− newStrm <- newStream newSid ws
106− opened ctx newStrm
107− insert streamTable newSid newStrm
108−
109− let pri = Priority False (streamNumber strm) 16
110− mkOutput = OPush strm promise
111− tickle = return ()
112− respond = runStream ctx mkOutput
113−
114− -- TODO(awpr): synthesize a Request for 'settingsOnException'?
115− runResponder responder respond tickle newStrm `E.catch`
116− (cleanupStream ctx set strm Nothing . Just)
101+ enabled <- enablePush <$> readIORef http2settings
102+ when enabled $ do
103+ -- Claim the next outgoing stream.
104+ newSid <- atomicModifyIORef nextPushStreamId $ \sid -> (sid+2, sid)
105+ ws <- initialWindowSize <$> readIORef http2settings
106+
107+ newStrm <- newStream newSid ws
108+ writeIORef (streamPriority newStrm) $
109+ Priority False (streamNumber strm) 16
110+ opened ctx newStrm
111+ insert streamTable newSid newStrm
112+
113+ let mkOutput = OPush strm promise
114+ tickle = return ()
115+ respond = runStream ctx mkOutput
116+
117+ -- TODO(awpr): synthesize a Request for 'settingsOnException'?
118+ runResponder responder respond tickle newStrm `E.catch`
119+ (cleanupStream ctx set strm Nothing . Just)
120+ return enabled
117121
118122data Break = Break deriving (Show, Typeable)
119123