on master help sign in
making use of SETTINGS_HEADER_TABLE_SIZE for HPACK encoding.
commit83bec558e7883821cfb060ed5103abe115bcefca authorKazu Yamamoto <kazu@iij.ad.jp> dateTue 8 Dec 2015, 16:52 (11 years ago) parentc007c98
3 files changed+12−2
warp/Network/Wai/Handler/Warp/HTTP2/Receiver.hs+1−1 warp/Network/Wai/Handler/Warp/HTTP2/Sender.hs+10−1 warp/Network/Wai/Handler/Warp/HTTP2/Types.hs+1
warp/Network/Wai/Handler/Warp/HTTP2/Receiver.hs+1−1
@@ -186,7 +186,7 @@ control FrameSettings header@FrameHeader{flags} bs Context{http2settings, output
186186 unless (testAck flags) $ do
187187 modifyIORef http2settings $ \old -> updateSettings old alist
188188 let frame = settingsFrame setAck []
189− enqueueControl outputQ 0 $ OFrame frame
189+ enqueueControl outputQ 0 $ OSettings frame alist
190190 return True
191191
192192control FramePing FrameHeader{flags} bs Context{outputQ} =
warp/Network/Wai/Handler/Warp/HTTP2/Sender.hs+10−1
@@ -13,6 +13,7 @@ import Control.Monad (unless, void, when)
1313import qualified Data.ByteString as BS
1414import qualified Data.ByteString.Builder.Extra as B
1515import Foreign.Ptr
16+import Network.HPACK (setLimitForEncoding)
1617import Network.HTTP2
1718import Network.HTTP2.Priority
1819import Network.Wai
@@ -68,7 +69,7 @@ getWindowSize connWindow strmWindow = do
6869 return $ min cw sw
6970
7071frameSender :: Context -> Connection -> InternalInfo -> S.Settings -> IO ()
71−frameSender ctx@Context{outputQ,connectionWindow}
72+frameSender ctx@Context{outputQ,connectionWindow,encodeDynamicTable}
7273 conn@Connection{connWriteBuffer,connBufferSize,connSendAll}
7374 ii settings = go `E.catch` ignore
7475 where
@@ -92,6 +93,14 @@ frameSender ctx@Context{outputQ,connectionWindow}
9293 switch (OFrame frame) _ = do
9394 connSendAll frame
9495 loop
96+ switch (OSettings frame alist) _ = do
97+ connSendAll frame
98+ case lookup SettingsHeaderTableSize alist of
99+ Nothing -> return ()
100+ Just siz -> do
101+ dyntbl <- readIORef encodeDynamicTable
102+ setLimitForEncoding siz dyntbl
103+ loop
95104 switch (OResponse strm rsp aux) pre = do
96105 writeIORef (streamPrecedence strm) pre
97106 unlessClosed ctx conn strm $ do
warp/Network/Wai/Handler/Warp/HTTP2/Types.hs+1
@@ -62,6 +62,7 @@ data Next = Next BytesFilled (Control DynaNext)
6262data Output = OFinish
6363 | OGoaway ByteString
6464 | OFrame ByteString
65+ | OSettings ByteString SettingsList
6566 | OResponse Stream Response Aux
6667 | ONext Stream DynaNext
6768