http2-0.7.0: HTTP/2.0 library including frames and HPACK

Safe HaskellNone
LanguageHaskell2010

Network.HTTP2

Contents

Synopsis

Magic

connectionPreface :: ByteString Source

"PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"

connectionPrefaceLength :: Int Source

Length of the preface

Encoding and decoding

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.

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.

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

The default settings.

updateSettings :: Settings -> SettingsList -> Settings Source

Updating settings.

>>> updateSettings defaultSettings [(SettingsEnablePush,0),(SettingsMaxHeaderBlockSize,200)]
Settings {headerTableSize = 4096, establishPush = False, maxConcurrentStreams = 100, initialWindowSize = 65535, maxFrameSize = 16384, maxHeaderBlockSize = Just 200}

Error code

fromErrorCodeId :: ErrorCodeId -> ErrorCode Source

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

toErrorCodeId :: ErrorCode -> ErrorCodeId Source

>>> toErrorCodeId 0
NoError
>>> toErrorCodeId 0xc
InadequateSecurity
>>> toErrorCodeId 0xe
UnknownErrorCode 14

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