http2-3.0.3: HTTP/2 library
Safe Haskell None
Language Haskell2010

Network.HPACK.Internal

Synopsis

Integer encoding/decoding

encodeI Source #

Arguments

:: WriteBuffer
-> ( Word8 -> Word8 )

Setting prefix

-> Int

N+

-> Int

Target

-> IO ()

Integer encoding with a write buffer.

encodeInteger Source #

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]

decodeI Source #

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.

decodeInteger Source #

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

String encoding/decoding

encodeS Source #

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.

encodeString Source #

Arguments

:: Bool

Use Huffman if efficient

-> ByteString

Target

-> IO ByteString

String encoding (7+) with a temporary buffer whose size is 4096.

decodeSimple :: ( Word8 -> ReadBuffer -> IO TokenHeader ) -> ReadBuffer -> IO HeaderList Source #

Converting to HeaderList .

  • 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 HeaderTable Source #

Converting to TokenHeaderList and ValueTable .

decodeString :: ReadBuffer -> IO ByteString Source #

String decoding (7+) with a temporal Huffman decoder whose buffer is 4096.

decodeS Source #

Arguments

:: ( Word8 -> Word8 )

Dropping prefix and Huffman

-> ( Word8 -> Bool )

Checking Huffman flag

-> Int

N+

-> HuffmanDecoder
-> ReadBuffer
-> IO ByteString

String decoding with Huffman decoder.

Huffman encoding/decoding

encodeH Source #

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.

decodeH Source #

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.

decH :: WriteBuffer -> ReadBuffer -> Int -> IO () Source #

Low devel Huffman decoding in a write buffer.

Type

type Size = Int Source #

Size in bytes.

data Entry Source #

Type for table entry. Size includes the 32 bytes magic number.

type Index = Int Source #

Index for table.

Header and Entry

Getters

For initialization

dummyEntry :: Entry Source #

Dummy Entry to initialize a dynamic table.

maxNumbers :: Size -> Int Source #

How many entries can be stored in a dynamic table?