@@ -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