on master help sign in
making use of SETTINGS_HEADER_TABLE_SIZE for HPACK encoding.
commite9146f0105e7a9bf50de9d11401b8fb2f2fbed0f authorKazu Yamamoto <kazu@iij.ad.jp> dateFri 25 Sep 2015, 14:01 (11 years ago) parentcce67bd
4 files changed+15−4
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+2 warp/warp.cabal+2−2
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− enqueue outputQ (OFrame frame) highestPriority
189+ enqueue outputQ (OSettings frame alist) highestPriority
190190 return True
191191
192192control FramePing FrameHeader{flags} bs Context{outputQ} =
warp/Network/Wai/Handler/Warp/HTTP2/Sender.hs+10−1
@@ -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
warp/Network/Wai/Handler/Warp/HTTP2/Types.hs+2
@@ -72,6 +72,8 @@ data Output = OFinish
7272 -- ^ Terminate the connection.
7373 | OGoaway ByteString
7474 -- ^ Send a goaway frame and terminate the connection.
75+ | OSettings ByteString SettingsList
76+ -- ^ Update settings and send an ack settings frame.
7577 | OFrame ByteString
7678 -- ^ Send an entire pre-encoded frame.
7779 | OResponse Stream H.Status H.ResponseHeaders Aux
warp/warp.cabal+2−2
@@ -42,7 +42,7 @@ Library
4242 , ghc-prim
4343 , http-types >= 0.8.5
4444 , iproute >= 1.3.1
45− , http2 >= 1.0.2
45+ , http2 >= 1.1
4646 , simple-sendfile >= 0.2.7 && < 0.3
4747 , unix-compat >= 0.2
4848 , wai >= 3.0 && < 3.1
@@ -160,7 +160,7 @@ Test-Suite spec
160160 , directory
161161 , process
162162 , containers
163− , http2 >= 1.0.2
163+ , http2 >= 1.1
164164 , word8
165165 , hashable
166166