http2 1.3.0 → 1.3.1
raw patch · 5 files changed
+26/−17 lines, 5 files
Files
- ChangeLog.md +4/−0
- Network/HPACK/HeaderBlock/From.hs +16/−14
- Network/HPACK/Types.hs +1/−0
- http2.cabal +1/−2
- test/HTTP2/PrioritySpec.hs +4/−1
ChangeLog.md view
@@ -1,3 +1,7 @@+## 1.3.1++* Defining IllegalTableSizeUpdate.+ ## 1.3.0 * APIs `Network.HTTP2.Priority` are changed again. `Precedence` is introduced.
Network/HPACK/HeaderBlock/From.hs view
@@ -17,14 +17,14 @@ ---------------------------------------------------------------- -type Ctx = (DynamicTable, Builder Header)+type Ctx = (DynamicTable, Builder Header, Bool) type Step = Ctx -> HeaderField -> IO Ctx -- | Decoding 'HeaderBlock' to 'HeaderList'. fromHeaderBlock :: DynamicTable -> HeaderBlock -> IO (DynamicTable, HeaderList)-fromHeaderBlock !dyntbl rs = decodeLoop rs (dyntbl,empty)+fromHeaderBlock !dyntbl rs = decodeLoop rs (dyntbl,empty,True) ---------------------------------------------------------------- @@ -37,37 +37,39 @@ -- | Decoding step for one 'HeaderField'. Exporting for the -- test purpose. decodeStep :: Step-decodeStep (!dyntbl,!builder) (ChangeTableSize siz) = do+decodeStep (!dyntbl,!builder,beginning) (ChangeTableSize siz)+ | beginning = do unless (isSuitableSize siz dyntbl) $ throwIO TooLargeTableSize dyntbl' <- renewDynamicTable siz dyntbl- return (dyntbl',builder)-decodeStep (!dyntbl,!builder) (Indexed idx) = do+ return (dyntbl',builder,True)+ | otherwise = throwIO IllegalTableSizeUpdate+decodeStep (!dyntbl,!builder,_) (Indexed idx) = do w <- which dyntbl idx case w of (InStaticTable, e) -> do let b = builder << fromEntry e- return (dyntbl,b)+ return (dyntbl,b,False) (InDynamicTable, e) -> do let b = builder << fromEntry e- return (dyntbl,b)-decodeStep (!dyntbl,!builder) (Literal NotAdd naming v) = do+ return (dyntbl,b,False)+decodeStep (!dyntbl,!builder,_) (Literal NotAdd naming v) = do k <- fromNaming naming dyntbl let b = builder << (k,v)- return (dyntbl, b)-decodeStep (!dyntbl,!builder) (Literal Never naming v) = do+ return (dyntbl, b, False)+decodeStep (!dyntbl,!builder,_) (Literal Never naming v) = do k <- fromNaming naming dyntbl let b = builder << (k,v)- return (dyntbl, b)-decodeStep (!dyntbl,!builder) (Literal Add naming v) = do+ return (dyntbl, b, False)+decodeStep (!dyntbl,!builder,_) (Literal Add naming v) = do k <- fromNaming naming dyntbl let h = (k,v) e = toEntry (k,v) b = builder << h dyntbl' <- insertEntry e dyntbl- return (dyntbl',b)+ return (dyntbl',b,False) decodeFinal :: Ctx -> IO (DynamicTable, HeaderList)-decodeFinal (!dyntbl, !builder) = return (dyntbl, run builder)+decodeFinal (!dyntbl,!builder,_) = return (dyntbl, run builder) ----------------------------------------------------------------
Network/HPACK/Types.hs view
@@ -71,6 +71,7 @@ | EmptyEncodedString -- ^ Encoded string has no length | EmptyBlock -- ^ Header block is empty | TooLargeTableSize -- ^ A peer tried to change the dynamic table size over the limit+ | IllegalTableSizeUpdate -- ^ Table size update at the non-beginning deriving (Eq,Show,Typeable) instance Exception DecodeError
http2.cabal view
@@ -1,12 +1,11 @@ Name: http2-Version: 1.3.0+Version: 1.3.1 Author: Kazu Yamamoto <kazu@iij.ad.jp> Maintainer: Kazu Yamamoto <kazu@iij.ad.jp> License: BSD3 License-File: LICENSE Synopsis: HTTP/2.0 library including frames and HPACK Description: HTTP/2.0 library including frames and HPACK.- Currently HTTP/2 16 framing and HPACK 10 is supported. Category: Network Cabal-Version: >= 1.10 Build-Type: Simple
test/HTTP2/PrioritySpec.hs view
@@ -1,7 +1,10 @@-{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE BangPatterns, CPP #-} module HTTP2.PrioritySpec where +#if __GLASGOW_HASKELL__ < 709+import Control.Applicative+#endif import Data.List (group, sort) import Test.Hspec