packages feed

http2 1.3.0 → 1.3.1

raw patch · 5 files changed

+26/−17 lines, 5 files

Files

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