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?