Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- encodeI :: WriteBuffer -> (Word8 -> Word8) -> Int -> Int -> IO ()
- encodeInteger :: Int -> Int -> IO ByteString
- decodeI :: Int -> Word8 -> ReadBuffer -> IO Int
- decodeInteger :: Int -> Word8 -> ByteString -> IO Int
- encodeS :: WriteBuffer -> Bool -> (Word8 -> Word8) -> (Word8 -> Word8) -> Int -> ByteString -> IO ()
- encodeString :: Bool -> ByteString -> IO ByteString
- decodeSimple :: (Word8 -> ReadBuffer -> IO TokenHeader) -> ReadBuffer -> IO HeaderList
- decodeSophisticated :: (Word8 -> ReadBuffer -> IO TokenHeader) -> ReadBuffer -> IO HeaderTable
- decodeString :: ReadBuffer -> IO ByteString
- decodeS :: (Word8 -> Word8) -> (Word8 -> Bool) -> Int -> HuffmanDecoder -> ReadBuffer -> IO ByteString
- encodeH :: WriteBuffer -> ByteString -> IO Int
- encodeHuffman :: ByteString -> IO ByteString
- decodeH :: GCBuffer -> BufferSize -> ReadBuffer -> Int -> IO ByteString
- decodeHuffman :: ByteString -> IO ByteString
- type HuffmanDecoder = ReadBuffer -> Int -> IO ByteString
- decH :: WriteBuffer -> ReadBuffer -> Int -> IO ()
- type GCBuffer = ForeignPtr Word8
- type Size = Int
- data Entry = Entry Size Token HeaderValue
- type Header = (HeaderName, HeaderValue)
- type HeaderName = ByteString
- type HeaderValue = ByteString
- type Index = Int
- toEntry :: Header -> Entry
- toEntryToken :: Token -> HeaderValue -> Entry
- entrySize :: Entry -> Size
- entryTokenHeader :: Entry -> TokenHeader
- entryToken :: Entry -> Token
- entryHeaderName :: Entry -> HeaderName
- entryHeaderValue :: Entry -> HeaderValue
- dummyEntry :: Entry
- maxNumbers :: Size -> Int
Integer encoding/decoding
Integer encoding with a write buffer.
:: 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]
:: 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.
:: 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
:: 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.
:: 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
.
- 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.
:: (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
:: 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.
:: 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.
type HuffmanDecoder = ReadBuffer -> Int -> IO ByteString Source #
Huffman decoding.
decH :: WriteBuffer -> ReadBuffer -> Int -> IO () Source #
Low devel Huffman decoding in a write buffer.
type GCBuffer = ForeignPtr Word8 Source #
Type
Type for table entry. Size includes the 32 bytes magic number.
type Header = (HeaderName, HeaderValue) Source #
Header.
type HeaderName = ByteString Source #
Header name.
type HeaderValue = ByteString Source #
Header value.
Header and Entry
toEntryToken :: Token -> HeaderValue -> Entry Source #
Getters
entryTokenHeader :: Entry -> TokenHeader Source #
Getting TokenHeader
.
entryHeaderName :: Entry -> HeaderName Source #
Getting HeaderName
.
entryHeaderValue :: Entry -> HeaderValue Source #
Getting HeaderValue
.
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?