Safe Haskell | None |
---|---|
Language | Haskell2010 |
Network.HPACK.Internal
Synopsis
- decodeI :: Int -> Word8 -> ReadBuffer -> IO Int
- decodeInteger :: Int -> Word8 -> ByteString -> IO Int
- encodeI :: WriteBuffer -> (Word8 -> Word8) -> Int -> Int -> IO ()
- encodeInteger :: Int -> Int -> IO ByteString
- encodeS :: WriteBuffer -> Bool -> (Word8 -> Word8) -> (Word8 -> Word8) -> Int -> ByteString -> IO ()
- encodeString :: Bool -> ByteString -> IO ByteString
- decodeS :: (Word8 -> Word8) -> (Word8 -> Bool) -> Int -> HuffmanDecoder -> ReadBuffer -> IO ByteString
- decodeSimple :: (Word8 -> ReadBuffer -> IO TokenHeader) -> ReadBuffer -> IO [Header]
- decodeSophisticated :: (Word8 -> ReadBuffer -> IO TokenHeader) -> ReadBuffer -> IO TokenHeaderTable
- decodeString :: ReadBuffer -> IO ByteString
- toTokenHeaderTable :: [Header] -> IO TokenHeaderTable
- decH :: WriteBuffer -> ReadBuffer -> Int -> IO ()
- decodeH :: GCBuffer -> BufferSize -> ReadBuffer -> Int -> IO ByteString
- decodeHuffman :: ByteString -> IO ByteString
- encodeH :: WriteBuffer -> ByteString -> IO Int
- encodeHuffman :: ByteString -> IO ByteString
- type GCBuffer = ForeignPtr Word8
- type HuffmanDecoder = ReadBuffer -> Int -> IO ByteString
- dummyEntry :: Entry
- entryFieldValue :: Entry -> FieldValue
- entryHeaderName :: Entry -> HeaderName
- entrySize :: Entry -> Size
- entryToken :: Entry -> Token
- entryTokenHeader :: Entry -> TokenHeader
- maxNumbers :: Size -> Int
- toEntry :: Header -> Entry
- toEntryToken :: Token -> FieldValue -> Entry
- type FieldValue = ByteString
- data Entry = Entry Size Token FieldValue
- type Size = Int
- type Index = Int
- data CompressionAlgo
- data EncodeStrategy = EncodeStrategy {}
Integer encoding/decoding
Arguments
:: Int | N+ |
-> Word8 | The head of encoded integer whose prefix is already dropped |
-> ReadBuffer | |
-> IO Int |
Integer decoding with a read buffer. The first argument is N of prefix.
Arguments
:: Int | N+ |
-> Word8 | The head of encoded integer whose prefix is already dropped |
-> ByteString | The tail of encoded integer |
-> IO Int |
Integer decoding. The first argument is N of prefix.
>>>
decodeInteger 5 10 $ BS.empty
10>>>
decodeInteger 5 31 $ BS.pack [154,10]
1337>>>
decodeInteger 8 42 $ BS.empty
42
Integer encoding with a write buffer.
Arguments
:: Int | N+ |
-> Int | Target |
-> IO ByteString |
Encoding integer with a temporary buffer whose size is 4096. No prefix is set.
>>>
BS.unpack <$> encodeInteger 5 10
[10]>>>
BS.unpack <$> encodeInteger 5 1337
[31,154,10]>>>
BS.unpack <$> encodeInteger 8 42
[42]
String encoding/decoding
Arguments
:: WriteBuffer | |
-> Bool | Use Huffman if efficient |
-> (Word8 -> Word8) | Setting prefix |
-> (Word8 -> Word8) | Setting huffman flag |
-> Int | N+ |
-> ByteString | Target |
-> IO () |
String encoding. The algorithm based on copy avoidance and selection of better result of huffman or raw.
Arguments
:: Bool | Use Huffman if efficient |
-> ByteString | Target |
-> IO ByteString |
String encoding (7+) with a temporary buffer whose size is 4096.
Arguments
:: (Word8 -> Word8) | Dropping prefix and Huffman |
-> (Word8 -> Bool) | Checking Huffman flag |
-> Int | N+ |
-> HuffmanDecoder | |
-> ReadBuffer | |
-> IO ByteString |
String decoding with Huffman decoder.
decodeSimple :: (Word8 -> ReadBuffer -> IO TokenHeader) -> ReadBuffer -> IO [Header] Source #
Converting to '[Header]'.
- Headers are decoded as is.
DecodeError
would be thrown if the HPACK format is broken.BufferOverrun
will be thrown if the temporary buffer for Huffman decoding is too small.
decodeSophisticated :: (Word8 -> ReadBuffer -> IO TokenHeader) -> ReadBuffer -> IO TokenHeaderTable Source #
Converting to TokenHeaderList
and ValueTable
.
- Multiple values of Cookie: are concatenated.
- If a pseudo header appears multiple times,
IllegalHeaderName
is thrown. - If unknown pseudo headers appear,
IllegalHeaderName
is thrown. - If pseudo headers are found after normal headers,
IllegalHeaderName
is thrown. - If a header key contains capital letters,
IllegalHeaderName
is thrown. - If the number of header fields is too large,
TooLargeHeader
is thrown DecodeError
would be thrown if the HPACK format is broken.BufferOverrun
will be thrown if the temporary buffer for Huffman decoding is too small.
decodeString :: ReadBuffer -> IO ByteString Source #
String decoding (7+) with a temporal Huffman decoder whose buffer is 4096.
toTokenHeaderTable :: [Header] -> IO TokenHeaderTable Source #
Converting a header list of the http-types style to
TokenHeaderList
and ValueTable
.
decH :: WriteBuffer -> ReadBuffer -> Int -> IO () Source #
Low devel Huffman decoding in a write buffer.
Arguments
:: GCBuffer | A working space |
-> BufferSize | |
-> ReadBuffer | A read buffer which contains the target |
-> Int | The target length |
-> IO ByteString |
Huffman decoding.
decodeHuffman :: ByteString -> IO ByteString Source #
Huffman decoding with a temporary buffer whose size is 4096.
Arguments
:: WriteBuffer | |
-> ByteString | Target |
-> IO Int | The length of the encoded string. |
Huffman encoding.
encodeHuffman :: ByteString -> IO ByteString Source #
Huffman encoding with a temporary buffer whose size is 4096.
type GCBuffer = ForeignPtr Word8 Source #
type HuffmanDecoder = ReadBuffer -> Int -> IO ByteString Source #
Huffman decoding.
dummyEntry :: Entry Source #
Dummy Entry
to initialize a dynamic table.
entryFieldValue :: Entry -> FieldValue Source #
Getting FieldValue
.
entryHeaderName :: Entry -> HeaderName Source #
Getting HeaderName
.
entryTokenHeader :: Entry -> TokenHeader Source #
Getting TokenHeader
.
maxNumbers :: Size -> Int Source #
How many entries can be stored in a dynamic table?
toEntryToken :: Token -> FieldValue -> Entry Source #
type FieldValue = ByteString #
Field value.
Type for table entry. Size includes the 32 bytes magic number.
Constructors
Entry Size Token FieldValue |
Types
data CompressionAlgo Source #
Compression algorithms for HPACK encoding.
Instances
Show CompressionAlgo Source # | |
Defined in Network.HPACK.Types Methods showsPrec :: Int -> CompressionAlgo -> ShowS # show :: CompressionAlgo -> String # showList :: [CompressionAlgo] -> ShowS # | |
Eq CompressionAlgo Source # | |
Defined in Network.HPACK.Types Methods (==) :: CompressionAlgo -> CompressionAlgo -> Bool # (/=) :: CompressionAlgo -> CompressionAlgo -> Bool # |
data EncodeStrategy Source #
Strategy for HPACK encoding.
Constructors
EncodeStrategy | |
Fields
|
Instances
Show EncodeStrategy Source # | |
Defined in Network.HPACK.Types Methods showsPrec :: Int -> EncodeStrategy -> ShowS # show :: EncodeStrategy -> String # showList :: [EncodeStrategy] -> ShowS # | |
Eq EncodeStrategy Source # | |
Defined in Network.HPACK.Types Methods (==) :: EncodeStrategy -> EncodeStrategy -> Bool # (/=) :: EncodeStrategy -> EncodeStrategy -> Bool # |