Http2 Module

Types and nested modules

Type/Module Description

H2cPriorKnowledge

H2cUpgrade

Push

Trailers

EncodeInfo

ErrorCode

FlowControlWindow

A mutable flow-control window. `available` is the number of DATA octets the holder may still send (for an outbound window) or receive (for an inbound window).

Frame

FrameHeader

FramePayload

FrameValidation

HeaderBlockReassembly

In-progress reassembly of a header block. `pending` accumulates the header-block fragments concatenated in receive order; `streamId` is the stream that owns it; `isPushPromise` records the origin (so the downstream HPACK consumer knows whether it's processing a request or a server-pushed response promise).

Http2Connection

Message<'a>

PayloadDecoder

Priority

ReassemblyResult

Result of feeding one frame into the reassembler.

Settings

StreamData

Per-stream bookkeeping inside an HTTP/2 connection.

StreamEvent

Events that may transition a stream's state. `endStream` is the value of the END_STREAM flag on the frame that triggered the event.

StreamState

State of a single HTTP/2 stream. Mirrors the diagram in RFC 7540 §5.1.

Functions and values

Function or value Description

applyInitialWindowSizeChange window oldInitial newInitial

Full Usage: applyInitialWindowSizeChange window oldInitial newInitial

Parameters:
Returns: Result<unit, ErrorCode>

Apply the effect of a SETTINGS_INITIAL_WINDOW_SIZE change to a window. Per RFC 7540 §6.9.2: every active stream's window is adjusted by the signed difference between the old and new settings. If the resulting window would exceed the maximum, FLOW_CONTROL_ERROR.

window : FlowControlWindow
oldInitial : int32
newInitial : int32
Returns: Result<unit, ErrorCode>

checkEndianness b

Full Usage: checkEndianness b

Parameters:
    b : byte[]

Returns: byte[]
b : byte[]
Returns: byte[]

connectionPreface

Full Usage: connectionPreface

Returns: string
Returns: string

defaultMaxHeaderBlockReassemblyBytes

Full Usage: defaultMaxHeaderBlockReassemblyBytes

Returns: int32

Hard cap on the cumulative *compressed* bytes of one header block (HEADERS + any CONTINUATION frames). HPACK can be denser than the uncompressed form (the whole point of indexed representations) so this is set to the decoded cap; combined with the per-block decoded check it leaves no path for an unbounded attacker accumulation.

Returns: int32

defaultMaxHeaderListSize

Full Usage: defaultMaxHeaderListSize

Returns: int32

Default cap (in bytes, RFC 7541 §4.1 accounting) on the decoded size of a single header list. Chosen to match Suave's HTTP/1.1 header-buffer heuristics and the de-facto industry default (Tomcat / IIS ~32 KiB).

Returns: int32

defaultSetting

Full Usage: defaultSetting

Returns: Settings
Returns: Settings

encodeFrameHeader header

Full Usage: encodeFrameHeader header

Parameters:
Returns: byte array
header : FrameHeader
Returns: byte array

encodeFramePayload encodeInfo _arg1

Full Usage: encodeFramePayload encodeInfo _arg1

Parameters:
Returns: FrameHeader * byte[] list
encodeInfo : EncodeInfo
_arg1 : FramePayload
Returns: FrameHeader * byte[] list

encodeHpackHeaderBlock dyntbl headers

Full Usage: encodeHpackHeaderBlock dyntbl headers

Parameters:
Returns: byte[]

Encode a list of (name, value) headers as a single HPACK header block using the per-connection encoder dynamic table. Uses `defaultEncodeStrategy` (Linear algorithm, no Huffman) which yields output that any compliant HPACK decoder — including the in-tree `Hpack.decodeHeader` — can parse.

dyntbl : DynamicTable
headers : (string * string) list
Returns: byte[]

encodePriority priority

Full Usage: encodePriority priority

Parameters:
Returns: byte array
priority : Priority
Returns: byte array

estimateHpackBufferSize headers

Full Usage: estimateHpackBufferSize headers

Parameters:
    headers : (string * string) list

Returns: int

Estimate a safe upper bound for the encoded byte length of `headers`. HPACK's worst case for a Linear-without-Huffman encoding of a single (name,value) pair is `1` (type byte) + `5` (length prefix for name) + `name` + `5` (length prefix for value) + `value` bytes; we round up to `name + value + 32` per header (matching `headerSizeMagicNumber`) and double that to leave headroom for any table-size-update prefix the encoder may emit on the first call.

headers : (string * string) list
Returns: int

extractRequestPseudoHeaders headers

Full Usage: extractRequestPseudoHeaders headers

Parameters:
    headers : (string * string) list

Returns: Result<(string * string * string * string * (string * string) list), ErrorCode>

Translate a list of decoded HPACK headers into the shape expected by `HttpRequest`: split the pseudo-headers (`:method`, `:path`, `:scheme`, `:authority`) out of the regular header list per RFC 7540 §8.1.2.3 and validate that the mandatory request pseudo-headers are present. Returns `Ok (method, path, scheme, authority, regularHeaders)` on success, or `Result.Error ProtocolError` on a missing or repeated pseudo-header.

headers : (string * string) list
Returns: Result<(string * string * string * string * (string * string) list), ErrorCode>

feedContinuation acc h fragment

Full Usage: feedContinuation acc h fragment

Parameters:
Returns: ReassemblyResult

Feed a CONTINUATION frame (or any other frame, to detect interleaving).

acc : HeaderBlockReassembly
h : FrameHeader
fragment : byte[]
Returns: ReassemblyResult

fromErrorCode _arg1

Full Usage: fromErrorCode _arg1

Parameters:
Returns: int
_arg1 : ErrorCode
Returns: int

get24BitBytes value

Full Usage: get24BitBytes value

Parameters:
Returns: byte[]
value : Int32
Returns: byte[]

get31Bit data

Full Usage: get31Bit data

Parameters:
    data : byte[]

Returns: int

Get 31-bit int from 4-byte array (which MUST be in network order)

data : byte[]
Returns: int

increment window delta

Full Usage: increment window delta

Parameters:
Returns: Result<unit, ErrorCode>

Apply a WINDOW_UPDATE delta to a window. Per RFC 7540 §6.9.1: - a delta of 0 is a stream-level PROTOCOL_ERROR - causing the window to exceed 2^31 − 1 is FLOW_CONTROL_ERROR - a negative delta is illegal (WINDOW_UPDATE.windowSizeIncrement is unsigned 31-bit)

window : FlowControlWindow
delta : int32
Returns: Result<unit, ErrorCode>

isPriority bs

Full Usage: isPriority bs

Parameters:
    bs : byte

Returns: bool
bs : byte
Returns: bool

maxFlowControlWindow

Full Usage: maxFlowControlWindow

Returns: int

Maximum legal flow-control window size per RFC 7540 §6.9.1.

Returns: int

maxNumbers size

Full Usage: maxNumbers size

Parameters:
    size : int

Returns: int
size : int
Returns: int

newDynamicRevIndex arg1

Full Usage: newDynamicRevIndex arg1

Parameters:
    arg0 : 'a

Returns: Dictionary<HeaderValue, HIndex> array
arg0 : 'a
Returns: Dictionary<HeaderValue, HIndex> array

newDynamicTable maxsize info

Full Usage: newDynamicTable maxsize info

Parameters:
Returns: DynamicTable
maxsize : int
info : CodeInfo
Returns: DynamicTable

newDynamicTableForDecoding maxsiz huftmpsiz

Full Usage: newDynamicTableForDecoding maxsiz huftmpsiz

Parameters:
    maxsiz : int
    huftmpsiz : int

Returns: DynamicTable
maxsiz : int
huftmpsiz : int
Returns: DynamicTable

newDynamicTableForEncoding maxSize

Full Usage: newDynamicTableForEncoding maxSize

Parameters:
    maxSize : int

Returns: DynamicTable
maxSize : int
Returns: DynamicTable

newFlowControlWindow initial

Full Usage: newFlowControlWindow initial

Parameters:
    initial : int32

Returns: FlowControlWindow
initial : int32
Returns: FlowControlWindow

newOtherRevIndex arg1

Full Usage: newOtherRevIndex arg1

Parameters:
    arg0 : 'a

Returns: Dictionary<KeyValue, HIndex>
arg0 : 'a
Returns: Dictionary<KeyValue, HIndex>

newStreamData peerInitialWindow localInitialWindow

Full Usage: newStreamData peerInitialWindow localInitialWindow

Parameters:
    peerInitialWindow : int32
    localInitialWindow : int32

Returns: StreamData
peerInitialWindow : int32
localInitialWindow : int32
Returns: StreamData

newrevIndex arg1

Full Usage: newrevIndex arg1

Parameters:
    arg0 : 'a

Returns: RevIndex
arg0 : 'a
Returns: RevIndex

parseContinuation header payload

Full Usage: parseContinuation header payload

Parameters:
Returns: FramePayload
header : FrameHeader
payload : byte[]
Returns: FramePayload

parseData header payload

Full Usage: parseData header payload

Parameters:
Returns: FramePayload
header : FrameHeader
payload : byte[]
Returns: FramePayload

parseFrameHeader bytes

Full Usage: parseFrameHeader bytes

Parameters:
    bytes : byte[]

Returns: FrameHeader
bytes : byte[]
Returns: FrameHeader

parseGoAway header payload

Full Usage: parseGoAway header payload

Parameters:
Returns: FramePayload
header : FrameHeader
payload : byte[]
Returns: FramePayload

parseHeaders header payload

Full Usage: parseHeaders header payload

Parameters:
Returns: FramePayload
header : FrameHeader
payload : byte[]
Returns: FramePayload

parsePing header payload

Full Usage: parsePing header payload

Parameters:
Returns: FramePayload
header : FrameHeader
payload : byte[]
Returns: FramePayload

parsePriority header payload

Full Usage: parsePriority header payload

Parameters:
Returns: FramePayload
header : FrameHeader
payload : byte[]
Returns: FramePayload

parsePushPromise header payload

Full Usage: parsePushPromise header payload

Parameters:
Returns: FramePayload
header : FrameHeader
payload : byte[]
Returns: FramePayload

parseRstStream header payload

Full Usage: parseRstStream header payload

Parameters:
Returns: FramePayload
header : FrameHeader
payload : byte[]
Returns: FramePayload

parseSettings header payload

Full Usage: parseSettings header payload

Parameters:
Returns: FramePayload
header : FrameHeader
payload : byte[]
Returns: FramePayload

parseWindowUpdate header payload

Full Usage: parseWindowUpdate header payload

Parameters:
Returns: FramePayload
header : FrameHeader
payload : byte[]
Returns: FramePayload

payloadDecoders

Full Usage: payloadDecoders

Returns: PayloadDecoder[]
Returns: PayloadDecoder[]

poke16 arr i w

Full Usage: poke16 arr i w

Parameters:
    arr : byte array
    i : int
    w : int

Poke a 16-bit int into a byte array in network byte order (big-endian)

arr : byte array
i : int
w : int

poke32 arr i w

Full Usage: poke32 arr i w

Parameters:
    arr : byte array
    i : int
    w : int32

Poke a 32-bit int into a byte array in network byte order (big-endian)

arr : byte array
i : int
w : int32

priority header payload

Full Usage: priority header payload

Parameters:
Returns: Priority option
header : FrameHeader
payload : byte[]
Returns: Priority option

readBytes facade n

Full Usage: readBytes facade n

Parameters:
Returns: SocketOp<byte[]>

Read exactly `n` bytes from the connection's pipe reader into a fresh array. Replaces the legacy `ConnectionFacade.readBytesToArray` helper that no longer exists on the current facade. Used by the HTTP/2 frame reader. Returns an `Error` if fewer than `n` bytes are available before the pipe stops yielding data (e.g. peer closed the connection mid-frame), since short reads on HTTP/2 frames are protocol errors per RFC 7540 §5.4.1.

facade : ConnectionFacade
n : int
Returns: SocketOp<byte[]>

readFrame facade

Full Usage: readFrame facade

Parameters:
Returns: SocketOp<FrameHeader * FramePayload>
facade : ConnectionFacade
Returns: SocketOp<FrameHeader * FramePayload>

readFrameHeader facade

Full Usage: readFrameHeader facade

Parameters:
Returns: SocketOp<FrameHeader>
facade : ConnectionFacade
Returns: SocketOp<FrameHeader>

readRawFrame facade

Full Usage: readRawFrame facade

Parameters:
Returns: SocketOp<FrameHeader * byte[]>

Read a frame header and its raw payload, without decoding the payload. Used by the connection's read loop so that frame-level validation (RFC 7540 §4.1/§4.2/§6.x) can run before the per-type parser, which otherwise asserts on malformed inputs.

facade : ConnectionFacade
Returns: SocketOp<FrameHeader * byte[]>

removePadding header payload

Full Usage: removePadding header payload

Parameters:
Returns: 'a array
header : FrameHeader
payload : byte[]
Returns: 'a array

setAck x

Full Usage: setAck x

Parameters:
    x : byte

Returns: byte
x : byte
Returns: byte

setEnablePush settings s

Full Usage: setEnablePush settings s

Parameters:
Returns: Settings
settings : Settings
s : bool
Returns: Settings

setEndHeader x

Full Usage: setEndHeader x

Parameters:
    x : byte

Returns: byte
x : byte
Returns: byte

setEndStream x

Full Usage: setEndStream x

Parameters:
    x : byte

Returns: byte
x : byte
Returns: byte

setHeaderTableSize settings s

Full Usage: setHeaderTableSize settings s

Parameters:
Returns: Settings
settings : Settings
s : int32
Returns: Settings

setInitialWindowSize settings s

Full Usage: setInitialWindowSize settings s

Parameters:
Returns: Settings
settings : Settings
s : int32
Returns: Settings

setMaxConcurrentStreams settings s

Full Usage: setMaxConcurrentStreams settings s

Parameters:
Returns: Settings
settings : Settings
s : int32 option
Returns: Settings

setMaxFrameSize settings s

Full Usage: setMaxFrameSize settings s

Parameters:
Returns: Settings
settings : Settings
s : int32
Returns: Settings

setMaxHeaderBlockSize settings s

Full Usage: setMaxHeaderBlockSize settings s

Parameters:
Returns: Settings
settings : Settings
s : int32 option
Returns: Settings

setPadded x

Full Usage: setPadded x

Parameters:
    x : byte

Returns: byte
x : byte
Returns: byte

setPriority x

Full Usage: setPriority x

Parameters:
    x : byte

Returns: byte
x : byte
Returns: byte

startHeaderBlock h fragment isPushPromise endStream

Full Usage: startHeaderBlock h fragment isPushPromise endStream

Parameters:
    h : FrameHeader
    fragment : byte[]
    isPushPromise : bool
    endStream : bool

Returns: ReassemblyResult

Begin reassembly with a HEADERS or PUSH_PROMISE frame.

h : FrameHeader
fragment : byte[]
isPushPromise : bool
endStream : bool
Returns: ReassemblyResult

testAck x

Full Usage: testAck x

Parameters:
    x : byte

Returns: bool
x : byte
Returns: bool

testEndHeader x

Full Usage: testEndHeader x

Parameters:
    x : byte

Returns: bool
x : byte
Returns: bool

testEndHeaderFlag flags

Full Usage: testEndHeaderFlag flags

Parameters:
    flags : byte

Returns: bool
flags : byte
Returns: bool

testEndStream x

Full Usage: testEndStream x

Parameters:
    x : byte

Returns: bool
x : byte
Returns: bool

testPadded x

Full Usage: testPadded x

Parameters:
    x : byte

Returns: bool
x : byte
Returns: bool

testPriority x

Full Usage: testPriority x

Parameters:
    x : byte

Returns: bool
x : byte
Returns: bool

toErrorCode _arg1

Full Usage: toErrorCode _arg1

Parameters:
    _arg1 : int

Returns: ErrorCode
_arg1 : int
Returns: ErrorCode

transitionStream state event

Full Usage: transitionStream state event

Parameters:
Returns: Result<StreamState, ErrorCode>

Apply a state event. Returns the new state on success, or an error code on protocol violation (per RFC 7540 §5.1 the listed responses are PROTOCOL_ERROR or STREAM_CLOSED). RST_STREAM and END_STREAM transitions to Closed are always permitted.

state : StreamState
event : StreamEvent
Returns: Result<StreamState, ErrorCode>

tryConsume window n

Full Usage: tryConsume window n

Parameters:
Returns: bool

Attempt to consume `n` octets from the window. Returns `true` on success (the window was decremented) or `false` if the window is too small. Callers that get `false` must block / queue the data until WINDOW_UPDATE arrives. A negative `n` is treated as a caller bug and returns `false` without mutating the window. Frame-level validation (parseFrameHeader, etc.) should already have rejected anything that could produce a negative length; this is defence in depth.

window : FlowControlWindow
n : int32
Returns: bool

validateFrame header rawLen maxFrameSize isIdleStream

Full Usage: validateFrame header rawLen maxFrameSize isIdleStream

Parameters:
    header : FrameHeader
    rawLen : int
    maxFrameSize : int32
    isIdleStream : int32 -> bool

Returns: FrameValidation

Per-type validation that depends only on the header and the raw payload length. RST_STREAM additionally needs to know whether the stream is in the Idle state (i.e. never opened), which the caller provides through `isIdleStream`.

header : FrameHeader
rawLen : int
maxFrameSize : int32
isIdleStream : int32 -> bool
Returns: FrameValidation

validateSettingsValues payload

Full Usage: validateSettingsValues payload

Parameters:
    payload : byte[]

Returns: Result<unit, ErrorCode>

Validate the individual entries of a SETTINGS payload against the per-identifier rules in RFC 7540 §6.5.2. The decoded `parseSettings` helper discards out-of-range values silently (e.g. coerces SETTINGS_ENABLE_PUSH = 2 to `false`), so this validator works against the raw payload bytes before parsing.

payload : byte[]
Returns: Result<unit, ErrorCode>

writeFrame encInfo payload t

Full Usage: writeFrame encInfo payload t

Parameters:
Returns: SocketOp<unit>
encInfo : EncodeInfo
payload : FramePayload
t : ITransport
Returns: SocketOp<unit>

writeFrameHeader h t

Full Usage: writeFrameHeader h t

Parameters:
Returns: SocketOp<unit>
h : FrameHeader
t : ITransport
Returns: SocketOp<unit>