on master help sign in
enqueueing initialFrame.
commit1a3efe9b56c1d59235051fe3c008552d3eb9b126 authorKazu Yamamoto <kazu@iij.ad.jp> dateFri 18 Dec 2015, 10:07 (11 years ago) parent1239eff
2 files changed+6−8
warp/Network/Wai/Handler/Warp/HTTP2.hs+5 warp/Network/Wai/Handler/Warp/HTTP2/Sender.hs+1−8
warp/Network/Wai/Handler/Warp/HTTP2.hs+5
@@ -8,6 +8,7 @@ import qualified Control.Exception as E
88import Control.Monad (when, unless, replicateM_)
99import Data.ByteString (ByteString)
1010import Network.HTTP2
11+import Network.HTTP2.Priority
1112import Network.Socket (SockAddr)
1213import Network.Wai
1314import Network.Wai.Handler.Warp.HTTP2.EncodeFrame
@@ -22,6 +23,9 @@ import Network.Wai.Handler.Warp.Types
2223
2324----------------------------------------------------------------
2425
26+initialFrame :: ByteString
27+initialFrame = settingsFrame id [(SettingsMaxConcurrentStreams,recommendedConcurrency)]
28+
2529http2 :: Connection -> InternalInfo -> SockAddr -> Transport -> S.Settings -> (BufSize -> IO ByteString) -> Application -> IO ()
2630http2 conn ii addr transport settings readN app = do
2731 checkTLS
@@ -42,6 +46,7 @@ http2 conn ii addr transport settings readN app = do
4246 -- Receiver
4347 let mkreq = mkRequest ii settings addr
4448 tid <- forkIO $ frameReceiver ctx mkreq readN
49+ enqueueControl (outputQ ctx) 0 $ OFrame initialFrame
4550 -- Sender
4651 -- frameSender is the main thread because it ensures to send
4752 -- a goway frame.
warp/Network/Wai/Handler/Warp/HTTP2/Sender.hs+1−8
@@ -81,18 +81,11 @@ waitStreaming tbq = do
8181frameSender :: Context -> Connection -> InternalInfo -> S.Settings -> IO ()
8282frameSender ctx@Context{outputQ,connectionWindow,encodeDynamicTable}
8383 conn@Connection{connWriteBuffer,connBufferSize,connSendAll}
84− ii settings = go `E.catch` ignore
84+ ii settings = loop `E.catch` ignore
8585 where
86− initialSettings = [(SettingsMaxConcurrentStreams,recommendedConcurrency)]
87− initialFrame = settingsFrame id initialSettings
8886 bufHeaderPayload = connWriteBuffer `plusPtr` frameHeaderLength
8987 headerPayloadLim = connBufferSize - frameHeaderLength
9088
91− go = do
92− connSendAll initialFrame
93− loop
94−
95− -- ignoring the old priority because the value might be changed.
9689 loop = dequeue outputQ >>= \(_sid,pre,out) -> switch out pre
9790
9891 ignore :: E.SomeException -> IO ()