1{-# LANGUAGE DeriveDataTypeable #-} 2 3module Network.HPACK.Types ( 4 -- * Header 5 HeaderName 6 , HeaderValue 7 , HeaderStuff 8 , Header 9 , HeaderList 10 , TokenHeader 11 , TokenHeaderList 12 -- * Misc 13 , Index 14 , HIndex(..) 15 -- * Encoding and decoding 16 , CompressionAlgo(..) 17 , EncodeStrategy(..) 18 , defaultEncodeStrategy 19 , DecodeError(..) 20 -- * Buffer 21 , Buffer 22 , BufferSize 23 , BufferOverrun(..) 24 ) where 25 26import Control.Exception as E 27import Data.Typeable 28import Network.ByteOrder (Buffer, BufferSize, BufferOverrun(..)) 29 30import Imports 31import Network.HPACK.Token (Token) 32 33---------------------------------------------------------------- 34 35-- | Header name. 36type HeaderName = ByteString 37 38-- | Header value. 39type HeaderValue = ByteString 40 41-- | Header. 42type Header = (HeaderName, HeaderValue) 43 44-- | Header list. 45type HeaderList = [Header] 46 47-- | To be a 'HeaderName' or 'HeaderValue'. 48type HeaderStuff = ByteString 49 50-- | TokenBased header. 51type TokenHeader = (Token, HeaderValue) 52 53-- | TokenBased header list. 54type TokenHeaderList = [TokenHeader] 55 56---------------------------------------------------------------- 57 58-- | Index for table. 59type Index = Int 60 61data HIndex = SIndex Int | DIndex Int deriving (Eq, Ord, Show) 62 63---------------------------------------------------------------- 64 65-- | Compression algorithms for HPACK encoding. 66data CompressionAlgo = Naive -- ^ No compression 67 | Static -- ^ Using indices in the static table only 68 | Linear -- ^ Using indices 69 deriving (Eq, Show) 70 71-- | Strategy for HPACK encoding. 72data EncodeStrategy = EncodeStrategy { 73 -- | Which compression algorithm is used. 74 compressionAlgo :: !CompressionAlgo 75 -- | Whether or not to use Huffman encoding for strings. 76 , useHuffman :: !Bool 77 } deriving (Eq, Show) 78 79-- | Default 'EncodeStrategy'. 80-- 81-- >>> defaultEncodeStrategy 82-- EncodeStrategy {compressionAlgo = Linear, useHuffman = False} 83defaultEncodeStrategy :: EncodeStrategy 84defaultEncodeStrategy = EncodeStrategy { 85 compressionAlgo = Linear 86 , useHuffman = False 87 } 88 89---------------------------------------------------------------- 90 91-- | Errors for decoder. 92data DecodeError = IndexOverrun Index -- ^ Index is out of range 93 | EosInTheMiddle -- ^ Eos appears in the middle of huffman string 94 | IllegalEos -- ^ Non-eos appears in the end of huffman string 95 | TooLongEos -- ^ Eos of huffman string is more than 7 bits 96 | EmptyEncodedString -- ^ Encoded string has no length 97 | TooSmallTableSize -- ^ A peer set the dynamic table size less than 32 98 | TooLargeTableSize -- ^ A peer tried to change the dynamic table size over the limit 99 | IllegalTableSizeUpdate -- ^ Table size update at the non-beginning 100 | HeaderBlockTruncated 101 | IllegalHeaderName 102 deriving (Eq,Show,Typeable) 103 104instance Exception DecodeError 105