Safe Haskell | None |
---|---|
Language | Haskell2010 |
- connectionPreface :: ByteString
- connectionPrefaceLength :: Int
- data EncodeInfo = EncodeInfo {}
- encodeInfo :: (FrameFlags -> FrameFlags) -> Int -> EncodeInfo
- encodeFrame :: EncodeInfo -> FramePayload -> ByteString
- decodeFrame :: Settings -> ByteString -> Either ErrorCodeId (Frame, ByteString)
- type SettingsKey = Word16
- data SettingsKeyId
- type SettingsValue = Int
- fromSettingsKeyId :: SettingsKeyId -> Word16
- toSettingsKeyId :: Word16 -> Maybe SettingsKeyId
- data Settings = Settings {}
- type SettingsList = [(SettingsKeyId, SettingsValue)]
- defaultSettings :: Settings
- updateSettings :: Settings -> SettingsList -> Settings
- type ErrorCode = Word32
- data ErrorCodeId
- fromErrorCodeId :: ErrorCodeId -> ErrorCode
- toErrorCodeId :: ErrorCode -> ErrorCodeId
- type FrameType = Word8
- data FrameTypeId
- fromFrameTypeId :: FrameTypeId -> FrameType
- toFrameTypeId :: FrameType -> Maybe FrameTypeId
- data Frame = Frame {}
- data FrameHeader = FrameHeader {}
- data FramePayload
- = DataFrame ByteString
- | HeadersFrame (Maybe Priority) HeaderBlockFragment
- | PriorityFrame Priority
- | RSTStreamFrame ErrorCodeId
- | SettingsFrame SettingsList
- | PushPromiseFrame PromisedStreamId HeaderBlockFragment
- | PingFrame ByteString
- | GoAwayFrame LastStreamId ErrorCodeId ByteString
- | WindowUpdateFrame WindowSizeIncrement
- | ContinuationFrame HeaderBlockFragment
- | UnknownFrame FrameType ByteString
- framePayloadToFrameType :: FramePayload -> FrameType
- newtype StreamIdentifier = StreamIdentifier Int
- type StreamDependency = StreamIdentifier
- type PromisedStreamId = StreamIdentifier
- type LastStreamId = StreamIdentifier
- fromStreamIdentifier :: StreamIdentifier -> Int
- toStreamIdentifier :: Int -> StreamIdentifier
- streamIdentifierForSeetings :: StreamIdentifier
- testExclusive :: Int -> Bool
- setExclusive :: Int -> Int
- type FrameFlags = Word8
- defaultFlags :: FrameFlags
- testEndStream :: FrameFlags -> Bool
- testAck :: FrameFlags -> Bool
- testEndHeader :: FrameFlags -> Bool
- testPadded :: FrameFlags -> Bool
- testPriority :: FrameFlags -> Bool
- setEndStream :: FrameFlags -> FrameFlags
- setAck :: FrameFlags -> FrameFlags
- setEndHeader :: FrameFlags -> FrameFlags
- setPadded :: FrameFlags -> FrameFlags
- setPriority :: FrameFlags -> FrameFlags
- type PayloadLength = Int
- maxPayloadLength :: PayloadLength
- type WindowSizeIncrement = Word32
- type HeaderBlockFragment = ByteString
- data Priority = Priority {}
- type Padding = ByteString
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.
EncodeInfo | |
|
encodeInfo :: (FrameFlags -> FrameFlags) -> Int -> EncodeInfo Source
A smart builder of EncodeInfo
.
encodeFrame :: EncodeInfo -> FramePayload -> ByteString Source
Encoding an HTTP/2 frame to byte stream.
:: 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
type SettingsKey = Word16 Source
data SettingsKeyId Source
type SettingsValue = Int Source
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
type SettingsList = [(SettingsKeyId, SettingsValue)] Source
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
data ErrorCodeId Source
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
data FrameTypeId Source
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
data FrameHeader Source
data FramePayload Source
Stream identifier
newtype StreamIdentifier Source
type LastStreamId = StreamIdentifier Source
testExclusive :: Int -> Bool Source
setExclusive :: Int -> Int Source
Flags
type FrameFlags = Word8 Source
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
type PayloadLength = Int Source
Types
type WindowSizeIncrement = Word32 Source
type HeaderBlockFragment = ByteString Source
type Padding = ByteString Source