@@ -17,6 +17,7 @@ import qualified Data.ByteString.Builder.Extra as B
1717import Data.Monoid ((<>))
1818import Foreign.Ptr
1919import qualified Network.HTTP.Types as H
20+import Network.HPACK (setLimitForEncoding)
2021import Network.HTTP2
2122import Network.HTTP2.Priority
2223import Network.Wai (FilePart(..))
@@ -84,7 +85,7 @@ getWindowSize connWindow strmWindow = do
8485 return $ min cw sw
8586
8687frameSender :: Context -> Connection -> InternalInfo -> S.Settings -> IO ()
87−frameSender ctx@Context{outputQ,connectionWindow}
88+frameSender ctx@Context{outputQ,connectionWindow,encodeDynamicTable}
8889 conn@Connection{connWriteBuffer,connBufferSize,connSendAll}
8990 ii settings = go `E.catch` ignore
9091 where
@@ -105,6 +106,14 @@ frameSender ctx@Context{outputQ,connectionWindow}
105106
106107 switch OFinish = return ()
107108 switch (OGoaway frame) = connSendAll frame
109+ switch (OSettings frame alist) = do
110+ connSendAll frame
111+ case lookup SettingsHeaderTableSize alist of
112+ Nothing -> return ()
113+ Just siz -> do
114+ dyntbl <- readIORef encodeDynamicTable
115+ setLimitForEncoding siz dyntbl
116+ loop
108117 switch (OFrame frame) = do
109118 connSendAll frame
110119 loop