http2-0.6.0: HTTP/2.0 library including HPACK

Safe HaskellNone
LanguageHaskell2010

Network.HTTP2

Contents

Synopsis

Decoding and Encoding

decodeFrame Source

Arguments

:: Settings

HTTP/2 settings

-> ByteString

Input byte-stream

-> Either ErrorCodeId (Frame, ByteString)

(Decoded frame, leftover byte-stream)

Parsing byte stream to make an HTTP/2 frame.

data EncodeInfo Source

Auxiliary information for frame encoding.

Constructors

EncodeInfo 

Fields

encodeFlags :: FrameFlags

Flags to be set in a frame header

encodeStreamId :: StreamIdentifier

Stream id to be set in a frame header

encodePadding :: Maybe Padding

Padding if any

encodeFrame :: EncodeInfo -> FramePayload -> ByteString Source

Encoding an HTTP/2 frame to byte stream.

Settings

fromSettingsKeyId :: SettingsKeyId -> Word16 Source

>>> fromSettingsKeyId SettingsHeaderTableSize
1
>>> fromSettingsKeyId SettingsMaxHeaderBlockSize
6

toSettingsKeyId :: Word16 -> Maybe SettingsKeyId Source

>>> toSettingsKeyId 0
Nothing
>>> toSettingsKeyId 1
Just SettingsHeaderTableSize
>>> toSettingsKeyId 6
Just SettingsMaxHeaderBlockSize
>>> toSettingsKeyId 7
Nothing

defaultSettings :: Settings Source

Default settings. All values are Nothing.

toSettings :: [(SettingsKeyId, SettingsValue)] -> Settings Source

>>> toSettings [(SettingsHeaderTableSize,10),(SettingsInitialWindowSize,20),(SettingsHeaderTableSize,30)]
array (SettingsHeaderTableSize,SettingsMaxHeaderBlockSize) [(SettingsHeaderTableSize,Just 30),(SettingsEnablePush,Nothing),(SettingsMaxConcurrentStreams,Nothing),(SettingsInitialWindowSize,Just 20),(SettingsMaxFrameSize,Nothing),(SettingsMaxHeaderBlockSize,Nothing)]

fromSettings :: Settings -> [(SettingsKeyId, SettingsValue)] Source

>>> fromSettings $ toSettings [(SettingsHeaderTableSize,10),(SettingsInitialWindowSize,20),(SettingsHeaderTableSize,30)]
[(SettingsHeaderTableSize,30),(SettingsInitialWindowSize,20)]

Error code

fromErrorCodeId :: ErrorCodeId -> ErrorCode Source

>>> fromErrorCodeId NoError
0
>>> fromErrorCodeId InadequateSecurity
12

toErrorCodeId :: ErrorCode -> ErrorCodeId Source

>>> toErrorCodeId 0
NoError
>>> toErrorCodeId 0xc
InadequateSecurity
>>> toErrorCodeId 0xd
UnknownErrorCode 13

Frame type

fromFrameTypeId :: FrameTypeId -> FrameType Source

>>> fromFrameTypeId FrameData
0
>>> fromFrameTypeId FrameContinuation
9

toFrameTypeId :: FrameType -> Maybe FrameTypeId Source

>>> toFrameTypeId 0
Just FrameData
>>> toFrameTypeId 9
Just FrameContinuation
>>> toFrameTypeId 10
Nothing

Frame

Stream identifier

Flags

testEndStream :: FrameFlags -> Bool Source

>>> testEndStream 0x1
True

testAck :: FrameFlags -> Bool Source

>>> testAck 0x1
True

testEndHeader :: FrameFlags -> Bool Source

>>> testEndHeader 0x4
True

testPadded :: FrameFlags -> Bool Source

>>> testPadded 0x8
True

testPriority :: FrameFlags -> Bool Source

>>> testPriority 0x20
True

setEndStream :: FrameFlags -> FrameFlags Source

>>> setEndStream 0
1

setAck :: FrameFlags -> FrameFlags Source

>>> setAck 0
1

setEndHeader :: FrameFlags -> FrameFlags Source

>>> setEndHeader 0
4

setPadded :: FrameFlags -> FrameFlags Source

>>> setPadded 0
8

setPriority :: FrameFlags -> FrameFlags Source

>>> setPriority 0
32

Payload length

Types