| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Network.HTTP2.Frame
Description
Framing in HTTP/2(https://www.rfc-editor.org/rfc/rfc9113).
Synopsis
- data Frame = Frame {}
- data FrameHeader = FrameHeader {
- payloadLength :: Int
- flags :: FrameFlags
- streamId :: StreamId
- data FramePayload
- = DataFrame ByteString
- | HeadersFrame (Maybe Priority) HeaderBlockFragment
- | PriorityFrame Priority
- | RSTStreamFrame ErrorCode
- | SettingsFrame SettingsList
- | PushPromiseFrame StreamId HeaderBlockFragment
- | PingFrame ByteString
- | GoAwayFrame StreamId ErrorCode ByteString
- | WindowUpdateFrame WindowSize
- | ContinuationFrame HeaderBlockFragment
- | UnknownFrame FrameType ByteString
- type HeaderBlockFragment = ByteString
- type Padding = ByteString
- isPaddingDefined :: FramePayload -> Bool
- encodeFrame :: EncodeInfo -> FramePayload -> ByteString
- encodeFrameChunks :: EncodeInfo -> FramePayload -> [ByteString]
- encodeFrameHeader :: FrameType -> FrameHeader -> ByteString
- encodeFrameHeaderBuf :: FrameType -> FrameHeader -> Ptr Word8 -> IO ()
- encodeFramePayload :: EncodeInfo -> FramePayload -> (FrameHeader, [ByteString])
- data EncodeInfo = EncodeInfo {}
- encodeInfo :: (FrameFlags -> FrameFlags) -> Int -> EncodeInfo
- decodeFrame :: ByteString -> Either FrameDecodeError Frame
- decodeFrameHeader :: ByteString -> (FrameType, FrameHeader)
- checkFrameHeader :: (FrameType, FrameHeader) -> Either FrameDecodeError (FrameType, FrameHeader)
- data FrameDecodeError = FrameDecodeError ErrorCode StreamId ShortByteString
- decodeFramePayload :: FrameType -> FramePayloadDecoder
- type FramePayloadDecoder = FrameHeader -> ByteString -> Either FrameDecodeError FramePayload
- decodeDataFrame :: FramePayloadDecoder
- decodeHeadersFrame :: FramePayloadDecoder
- decodePriorityFrame :: FramePayloadDecoder
- decodeRSTStreamFrame :: FramePayloadDecoder
- decodeSettingsFrame :: FramePayloadDecoder
- decodePushPromiseFrame :: FramePayloadDecoder
- decodePingFrame :: FramePayloadDecoder
- decodeGoAwayFrame :: FramePayloadDecoder
- decodeWindowUpdateFrame :: FramePayloadDecoder
- decodeContinuationFrame :: FramePayloadDecoder
- newtype FrameType where
- FrameType Word8
- pattern FrameData :: FrameType
- pattern FrameHeaders :: FrameType
- pattern FramePriority :: FrameType
- pattern FrameRSTStream :: FrameType
- pattern FrameSettings :: FrameType
- pattern FramePushPromise :: FrameType
- pattern FramePing :: FrameType
- pattern FrameGoAway :: FrameType
- pattern FrameWindowUpdate :: FrameType
- pattern FrameContinuation :: FrameType
- fromFrameType :: FrameType -> Word8
- toFrameType :: Word8 -> FrameType
- minFrameType :: FrameType
- maxFrameType :: FrameType
- framePayloadToFrameType :: FramePayload -> FrameType
- data Priority = Priority {}
- type Weight = Int
- type StreamId = Int
- isControl :: StreamId -> Bool
- isClientInitiated :: StreamId -> Bool
- isServerInitiated :: StreamId -> Bool
- testExclusive :: StreamId -> Bool
- setExclusive :: StreamId -> StreamId
- clearExclusive :: StreamId -> StreamId
- 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 SettingsList = [(SettingsKey, SettingsValue)]
- newtype SettingsKey where
- SettingsKey Word16
- pattern SettingsTokenHeaderTableSize :: SettingsKey
- pattern SettingsEnablePush :: SettingsKey
- pattern SettingsMaxConcurrentStreams :: SettingsKey
- pattern SettingsInitialWindowSize :: SettingsKey
- pattern SettingsMaxFrameSize :: SettingsKey
- pattern SettingsMaxHeaderListSize :: SettingsKey
- type SettingsValue = Int
- fromSettingsKey :: SettingsKey -> Word16
- toSettingsKey :: Word16 -> SettingsKey
- defaultPayloadLength :: Int
- maxPayloadLength :: Int
- type WindowSize = Int
- defaultWindowSize :: WindowSize
- maxWindowSize :: WindowSize
- isWindowOverflow :: WindowSize -> Bool
- newtype ErrorCode where
- ErrorCode Word32
- pattern NoError :: ErrorCode
- pattern ProtocolError :: ErrorCode
- pattern InternalError :: ErrorCode
- pattern FlowControlError :: ErrorCode
- pattern SettingsTimeout :: ErrorCode
- pattern StreamClosed :: ErrorCode
- pattern FrameSizeError :: ErrorCode
- pattern RefusedStream :: ErrorCode
- pattern Cancel :: ErrorCode
- pattern CompressionError :: ErrorCode
- pattern ConnectError :: ErrorCode
- pattern EnhanceYourCalm :: ErrorCode
- pattern InadequateSecurity :: ErrorCode
- pattern HTTP11Required :: ErrorCode
- fromErrorCode :: ErrorCode -> Word32
- toErrorCode :: Word32 -> ErrorCode
- connectionPreface :: ByteString
- connectionPrefaceLength :: Int
- frameHeaderLength :: Int
- recommendedConcurrency :: Int
- type ErrorCodeId = ErrorCode
- type SettingsKeyId = SettingsKey
- type FrameTypeId = FrameType
Frame
The data type for HTTP/2 frames.
Constructors
| Frame | |
Fields | |
data FrameHeader Source #
The data type for HTTP/2 frame headers.
Constructors
| FrameHeader | |
Fields
| |
Instances
| Read FrameHeader Source # | |
Defined in Network.HTTP2.Frame.Types Methods readsPrec :: Int -> ReadS FrameHeader # readList :: ReadS [FrameHeader] # readPrec :: ReadPrec FrameHeader # readListPrec :: ReadPrec [FrameHeader] # | |
| Show FrameHeader Source # | |
Defined in Network.HTTP2.Frame.Types Methods showsPrec :: Int -> FrameHeader -> ShowS # show :: FrameHeader -> String # showList :: [FrameHeader] -> ShowS # | |
| Eq FrameHeader Source # | |
Defined in Network.HTTP2.Frame.Types | |
data FramePayload Source #
The data type for HTTP/2 frame payloads.
Constructors
Instances
| Read FramePayload Source # | |
Defined in Network.HTTP2.Frame.Types Methods readsPrec :: Int -> ReadS FramePayload # readList :: ReadS [FramePayload] # | |
| Show FramePayload Source # | |
Defined in Network.HTTP2.Frame.Types Methods showsPrec :: Int -> FramePayload -> ShowS # show :: FramePayload -> String # showList :: [FramePayload] -> ShowS # | |
| Eq FramePayload Source # | |
Defined in Network.HTTP2.Frame.Types | |
type HeaderBlockFragment = ByteString Source #
The type for fragments of a header encoded with HPACK.
type Padding = ByteString Source #
The type for padding in payloads.
isPaddingDefined :: FramePayload -> Bool Source #
Checking if padding is defined in this frame type.
>>>isPaddingDefined $ DataFrame ""True>>>isPaddingDefined $ PingFrame ""False
Encoding
encodeFrame :: EncodeInfo -> FramePayload -> ByteString Source #
Encoding an HTTP/2 frame to ByteString.
This function is not efficient enough for high performace
program because of the concatenation of ByteString.
>>>encodeFrame (encodeInfo id 1) (DataFrame "body")"\NUL\NUL\EOT\NUL\NUL\NUL\NUL\NUL\SOHbody"
encodeFrameChunks :: EncodeInfo -> FramePayload -> [ByteString] Source #
Encoding an HTTP/2 frame to [ByteString].
This is suitable for sendMany.
encodeFrameHeader :: FrameType -> FrameHeader -> ByteString Source #
Encoding an HTTP/2 frame header. The frame header must be completed.
encodeFrameHeaderBuf :: FrameType -> FrameHeader -> Ptr Word8 -> IO () Source #
Writing an encoded HTTP/2 frame header to the buffer. The length of the buffer must be larger than or equal to 9 bytes.
encodeFramePayload :: EncodeInfo -> FramePayload -> (FrameHeader, [ByteString]) Source #
Encoding an HTTP/2 frame payload. This returns a complete frame header and chunks of payload.
data EncodeInfo Source #
Auxiliary information for frame encoding.
Constructors
| EncodeInfo | |
Fields
| |
Instances
| Read EncodeInfo Source # | |
Defined in Network.HTTP2.Frame.Encode Methods readsPrec :: Int -> ReadS EncodeInfo # readList :: ReadS [EncodeInfo] # readPrec :: ReadPrec EncodeInfo # readListPrec :: ReadPrec [EncodeInfo] # | |
| Show EncodeInfo Source # | |
Defined in Network.HTTP2.Frame.Encode Methods showsPrec :: Int -> EncodeInfo -> ShowS # show :: EncodeInfo -> String # showList :: [EncodeInfo] -> ShowS # | |
Arguments
| :: (FrameFlags -> FrameFlags) | |
| -> Int | stream identifier |
| -> EncodeInfo |
A smart builder of EncodeInfo.
>>>encodeInfo setAck 0EncodeInfo {encodeFlags = 1, encodeStreamId = 0, encodePadding = Nothing}
Decoding
Arguments
| :: ByteString | Input byte-stream |
| -> Either FrameDecodeError Frame | Decoded frame |
Decoding an HTTP/2 frame to ByteString.
The second argument must be include the entire of frame.
So, this function is not useful for real applications
but useful for testing.
decodeFrameHeader :: ByteString -> (FrameType, FrameHeader) Source #
Decoding an HTTP/2 frame header. Must supply 9 bytes.
checkFrameHeader :: (FrameType, FrameHeader) -> Either FrameDecodeError (FrameType, FrameHeader) Source #
Checking a frame header and reporting an error if any.
>>>checkFrameHeader (FrameData,(FrameHeader 100 0 0))Left (FrameDecodeError ProtocolError 0 "cannot used in control stream")
data FrameDecodeError Source #
Constructors
| FrameDecodeError ErrorCode StreamId ShortByteString |
Instances
| Exception FrameDecodeError Source # | |
Defined in Network.HTTP2.Frame.Decode Methods toException :: FrameDecodeError -> SomeException # | |
| Show FrameDecodeError Source # | |
Defined in Network.HTTP2.Frame.Decode Methods showsPrec :: Int -> FrameDecodeError -> ShowS # show :: FrameDecodeError -> String # showList :: [FrameDecodeError] -> ShowS # | |
| Eq FrameDecodeError Source # | |
Defined in Network.HTTP2.Frame.Decode Methods (==) :: FrameDecodeError -> FrameDecodeError -> Bool # (/=) :: FrameDecodeError -> FrameDecodeError -> Bool # | |
Decoding payload
decodeFramePayload :: FrameType -> FramePayloadDecoder Source #
Decoding an HTTP/2 frame payload. This function is considered to return a frame payload decoder according to a frame type.
type FramePayloadDecoder = FrameHeader -> ByteString -> Either FrameDecodeError FramePayload Source #
The type for frame payload decoder.
decodeDataFrame :: FramePayloadDecoder Source #
Frame payload decoder for DATA frame.
decodeHeadersFrame :: FramePayloadDecoder Source #
Frame payload decoder for HEADERS frame.
decodePriorityFrame :: FramePayloadDecoder Source #
Frame payload decoder for PRIORITY frame.
decodeRSTStreamFrame :: FramePayloadDecoder Source #
Frame payload decoder for RST_STREAM frame.
decodeSettingsFrame :: FramePayloadDecoder Source #
Frame payload decoder for SETTINGS frame.
decodePushPromiseFrame :: FramePayloadDecoder Source #
Frame payload decoder for PUSH_PROMISE frame.
decodePingFrame :: FramePayloadDecoder Source #
Frame payload decoder for PING frame.
decodeGoAwayFrame :: FramePayloadDecoder Source #
Frame payload decoder for GOAWAY frame.
decodeWindowUpdateFrame :: FramePayloadDecoder Source #
Frame payload decoder for WINDOW_UPDATE frame.
decodeContinuationFrame :: FramePayloadDecoder Source #
Frame payload decoder for CONTINUATION frame.
Frame type
The type for raw frame type.
Bundled Patterns
| pattern FrameData :: FrameType | |
| pattern FrameHeaders :: FrameType | |
| pattern FramePriority :: FrameType | |
| pattern FrameRSTStream :: FrameType | |
| pattern FrameSettings :: FrameType | |
| pattern FramePushPromise :: FrameType | |
| pattern FramePing :: FrameType | |
| pattern FrameGoAway :: FrameType | |
| pattern FrameWindowUpdate :: FrameType | |
| pattern FrameContinuation :: FrameType |
Instances
| Ix FrameType Source # | |
Defined in Network.HTTP2.Frame.Types Methods range :: (FrameType, FrameType) -> [FrameType] # index :: (FrameType, FrameType) -> FrameType -> Int # unsafeIndex :: (FrameType, FrameType) -> FrameType -> Int # inRange :: (FrameType, FrameType) -> FrameType -> Bool # rangeSize :: (FrameType, FrameType) -> Int # unsafeRangeSize :: (FrameType, FrameType) -> Int # | |
| Read FrameType Source # | |
| Show FrameType Source # | |
| Eq FrameType Source # | |
| Ord FrameType Source # | |
fromFrameType :: FrameType -> Word8 Source #
toFrameType :: Word8 -> FrameType Source #
framePayloadToFrameType :: FramePayload -> FrameType Source #
Getting FrameType from FramePayload.
>>>framePayloadToFrameType (DataFrame "body")FrameData
Priority
Type for stream priority. Deprecated in RFC 9113 but provided for FrameHeaders.
The type for weight in priority. Its values are from 1 to 256. Deprecated in RFC 9113.
Stream identifier
isControl :: StreamId -> Bool Source #
Checking if the stream identifier for control.
>>>isControl 0True>>>isControl 1False
isClientInitiated :: StreamId -> Bool Source #
Checking if the stream identifier is from a client.
>>>isClientInitiated 0False>>>isClientInitiated 1True
isServerInitiated :: StreamId -> Bool Source #
Checking if the stream identifier is from a server.
>>>isServerInitiated 0False>>>isServerInitiated 2True
Stream identifier related
testExclusive :: StreamId -> Bool Source #
Checking if the exclusive flag is set.
setExclusive :: StreamId -> StreamId Source #
Setting the exclusive flag.
clearExclusive :: StreamId -> StreamId Source #
Clearing the exclusive flag.
Flags
type FrameFlags = Word8 Source #
The type for flags.
defaultFlags :: FrameFlags Source #
The initial value of flags. No flags are set.
>>>defaultFlags0
testEndStream :: FrameFlags -> Bool Source #
Checking if the END_STREAM flag is set. >>> testEndStream 0x1 True
testAck :: FrameFlags -> Bool Source #
Checking if the ACK flag is set. >>> testAck 0x1 True
testEndHeader :: FrameFlags -> Bool Source #
Checking if the END_HEADERS flag is set.
>>>testEndHeader 0x4True
testPadded :: FrameFlags -> Bool Source #
Checking if the PADDED flag is set.
>>>testPadded 0x8True
testPriority :: FrameFlags -> Bool Source #
Checking if the PRIORITY flag is set.
>>>testPriority 0x20True
setEndStream :: FrameFlags -> FrameFlags Source #
Setting the END_STREAM flag.
>>>setEndStream 01
setAck :: FrameFlags -> FrameFlags Source #
Setting the ACK flag.
>>>setAck 01
setEndHeader :: FrameFlags -> FrameFlags Source #
Setting the END_HEADERS flag.
>>>setEndHeader 04
setPadded :: FrameFlags -> FrameFlags Source #
Setting the PADDED flag.
>>>setPadded 08
setPriority :: FrameFlags -> FrameFlags Source #
Setting the PRIORITY flag.
>>>setPriority 032
SettingsList
type SettingsList = [(SettingsKey, SettingsValue)] Source #
Association list of SETTINGS.
newtype SettingsKey Source #
The type for SETTINGS key.
Constructors
| SettingsKey Word16 |
Bundled Patterns
| pattern SettingsTokenHeaderTableSize :: SettingsKey | |
| pattern SettingsEnablePush :: SettingsKey | |
| pattern SettingsMaxConcurrentStreams :: SettingsKey | |
| pattern SettingsInitialWindowSize :: SettingsKey | |
| pattern SettingsMaxFrameSize :: SettingsKey | |
| pattern SettingsMaxHeaderListSize :: SettingsKey |
Instances
| Read SettingsKey Source # | |
Defined in Network.HTTP2.Frame.Types Methods readsPrec :: Int -> ReadS SettingsKey # readList :: ReadS [SettingsKey] # readPrec :: ReadPrec SettingsKey # readListPrec :: ReadPrec [SettingsKey] # | |
| Show SettingsKey Source # | |
Defined in Network.HTTP2.Frame.Types Methods showsPrec :: Int -> SettingsKey -> ShowS # show :: SettingsKey -> String # showList :: [SettingsKey] -> ShowS # | |
| Eq SettingsKey Source # | |
Defined in Network.HTTP2.Frame.Types | |
| Ord SettingsKey Source # | |
Defined in Network.HTTP2.Frame.Types Methods compare :: SettingsKey -> SettingsKey -> Ordering # (<) :: SettingsKey -> SettingsKey -> Bool # (<=) :: SettingsKey -> SettingsKey -> Bool # (>) :: SettingsKey -> SettingsKey -> Bool # (>=) :: SettingsKey -> SettingsKey -> Bool # max :: SettingsKey -> SettingsKey -> SettingsKey # min :: SettingsKey -> SettingsKey -> SettingsKey # | |
type SettingsValue = Int Source #
The type for raw SETTINGS value.
fromSettingsKey :: SettingsKey -> Word16 Source #
toSettingsKey :: Word16 -> SettingsKey Source #
Payload length
defaultPayloadLength :: Int Source #
The default payload length of HTTP/2 payload.
>>>defaultPayloadLength16384
maxPayloadLength :: Int Source #
The maximum payload length of HTTP/2 payload.
>>>maxPayloadLength16777215
Window
type WindowSize = Int #
Window size.
defaultWindowSize :: WindowSize Source #
The default initial window size.
>>>defaultWindowSize65535
maxWindowSize :: WindowSize Source #
The maximum window size.
>>>maxWindowSize2147483647
isWindowOverflow :: WindowSize -> Bool Source #
Checking if a window size exceeds the maximum window size.
>>>isWindowOverflow 10False>>>isWindowOverflow maxWindowSizeFalse>>>isWindowOverflow (maxWindowSize + 1)True
Error code
The type for raw error code.
Bundled Patterns
| pattern NoError :: ErrorCode | The type for error code. See https://www.rfc-editor.org/rfc/rfc9113#ErrorCodes. |
| pattern ProtocolError :: ErrorCode | |
| pattern InternalError :: ErrorCode | |
| pattern FlowControlError :: ErrorCode | |
| pattern SettingsTimeout :: ErrorCode | |
| pattern StreamClosed :: ErrorCode | |
| pattern FrameSizeError :: ErrorCode | |
| pattern RefusedStream :: ErrorCode | |
| pattern Cancel :: ErrorCode | |
| pattern CompressionError :: ErrorCode | |
| pattern ConnectError :: ErrorCode | |
| pattern EnhanceYourCalm :: ErrorCode | |
| pattern InadequateSecurity :: ErrorCode | |
| pattern HTTP11Required :: ErrorCode |
Instances
| Read ErrorCode Source # | |
| Show ErrorCode Source # | |
| Eq ErrorCode Source # | |
| Ord ErrorCode Source # | |
fromErrorCode :: ErrorCode -> Word32 Source #
toErrorCode :: Word32 -> ErrorCode Source #
Predefined values
connectionPreface :: ByteString Source #
The preface of HTTP/2.
>>>connectionPreface"PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
connectionPrefaceLength :: Int Source #
Length of the preface.
>>>connectionPrefaceLength24
frameHeaderLength :: Int Source #
The length of HTTP/2 frame header.
>>>frameHeaderLength9
recommendedConcurrency :: Int Source #
Default concurrency.
>>>recommendedConcurrency100
Deprecated
type ErrorCodeId = ErrorCode Source #
type SettingsKeyId = SettingsKey Source #
type FrameTypeId = FrameType Source #