@@ -92,28 +92,32 @@ cleanupStream ctx@Context{outputQ} set strm req me = do
92 Nothing -> return ()
92 Nothing -> return ()
93 Just e -> S.settingsOnException set req e
93 Just e -> S.settingsOnException set req e
95−pushResponder :: Context -> S.Settings -> Stream -> PushPromise -> Responder -> IO ()
95+pushResponder :: Context -> S.Settings -> Stream -> PushPromise -> Responder -> IO Bool
96pushResponder ctx set strm promise responder = do
96pushResponder ctx set strm promise responder = do
97 let Context{ http2settings
97 let Context{ http2settings
98 , nextPushStreamId
98 , nextPushStreamId
99 , streamTable
99 , streamTable
101+ enabled <- enablePush <$> readIORef http2settings
101− -- Claim the next outgoing stream.
103+ -- Claim the next outgoing stream.
102− newSid <- atomicModifyIORef nextPushStreamId $ \sid -> (sid+2, sid)
104+ newSid <- atomicModifyIORef nextPushStreamId $ \sid -> (sid+2, sid)
103− ws <- initialWindowSize <$> readIORef http2settings
105+ ws <- initialWindowSize <$> readIORef http2settings
105− newStrm <- newStream newSid ws
107+ newStrm <- newStream newSid ws
106− opened ctx newStrm
108+ writeIORef (streamPriority newStrm) $
107− insert streamTable newSid newStrm
109− let pri = Priority False (streamNumber strm) 16
109+ Priority False (streamNumber strm) 16
111+ insert streamTable newSid newStrm
110− mkOutput = OPush strm promise
113+ let mkOutput = OPush strm promise
111− tickle = return ()
114+ tickle = return ()
112− respond = runStream ctx mkOutput
115+ respond = runStream ctx mkOutput
114− -- TODO(awpr): synthesize a Request for 'settingsOnException'?
117+ -- TODO(awpr): synthesize a Request for 'settingsOnException'?
115− runResponder responder respond tickle newStrm `E.catch`
118+ runResponder responder respond tickle newStrm `E.catch`
116− (cleanupStream ctx set strm Nothing . Just)
119+ (cleanupStream ctx set strm Nothing . Just)
118data Break = Break deriving (Show, Typeable)
122data Break = Break deriving (Show, Typeable)