quic_h3_frame (quic v1.3.1)

View Source

HTTP/3 frame encoding and decoding.

HTTP/3 frames use QUIC variable-length integer encoding for frame type and length fields.

Summary

Functions

Decode an HTTP/3 frame from binary. Returns {ok, Frame, Rest} | {error, Reason} | {more, N}.

Decode all frames from binary buffer.

Decode SETTINGS frame payload to settings map.

Decode stream type from unidirectional stream.

Return default HTTP/3 settings.

Encode an HTTP/3 frame to binary.

Encode a CANCEL_PUSH frame.

Encode a DATA frame.

Encode a GOAWAY frame.

Encode a HEADERS frame.

Encode a MAX_PUSH_ID frame.

Encode a PUSH_PROMISE frame.

Encode a SETTINGS frame.

Encode settings map to SETTINGS frame payload.

Encode stream type for unidirectional streams.

Check if a frame type is reserved (grease). Reserved types are 0x1f * N + 0x21 for any non-negative integer N.

Check if a settings identifier is reserved (grease). Reserved identifiers are 0x1f * N + 0x21 for any non-negative integer N.

Types

frame/0

-type frame() ::
          {data, binary()} |
          {headers, binary()} |
          {cancel_push, non_neg_integer()} |
          {settings, map()} |
          {push_promise, non_neg_integer(), binary()} |
          {goaway, non_neg_integer()} |
          {max_push_id, non_neg_integer()} |
          {unknown, non_neg_integer(), binary()}.

Functions

decode(Data)

-spec decode(binary()) -> {ok, frame(), binary()} | {error, term()} | {more, non_neg_integer()}.

Decode an HTTP/3 frame from binary. Returns {ok, Frame, Rest} | {error, Reason} | {more, N}.

decode_all(Data)

-spec decode_all(binary()) -> {ok, [frame()], binary()} | {error, term()}.

Decode all frames from binary buffer.

decode_settings_payload(Data)

-spec decode_settings_payload(binary()) -> {ok, map()} | {error, term()}.

Decode SETTINGS frame payload to settings map.

decode_stream_type(Data)

-spec decode_stream_type(binary()) ->
                            {ok,
                             control | qpack_encoder | qpack_decoder | push |
                             {unknown, non_neg_integer()},
                             binary()} |
                            {more, non_neg_integer()}.

Decode stream type from unidirectional stream.

default_settings()

-spec default_settings() -> map().

Return default HTTP/3 settings.

encode(_)

-spec encode(frame()) -> binary().

Encode an HTTP/3 frame to binary.

encode_cancel_push(PushId)

-spec encode_cancel_push(non_neg_integer()) -> binary().

Encode a CANCEL_PUSH frame.

encode_data(Payload)

-spec encode_data(binary()) -> binary().

Encode a DATA frame.

encode_goaway(StreamId)

-spec encode_goaway(non_neg_integer()) -> binary().

Encode a GOAWAY frame.

encode_headers(HeaderBlock)

-spec encode_headers(binary()) -> binary().

Encode a HEADERS frame.

encode_max_push_id(PushId)

-spec encode_max_push_id(non_neg_integer()) -> binary().

Encode a MAX_PUSH_ID frame.

encode_push_promise(PushId, HeaderBlock)

-spec encode_push_promise(non_neg_integer(), binary()) -> binary().

Encode a PUSH_PROMISE frame.

encode_settings(Settings)

-spec encode_settings(map()) -> binary().

Encode a SETTINGS frame.

encode_settings_payload(Settings)

-spec encode_settings_payload(map()) -> binary().

Encode settings map to SETTINGS frame payload.

encode_stream_type(Type)

-spec encode_stream_type(control | qpack_encoder | qpack_decoder | push | non_neg_integer()) -> binary().

Encode stream type for unidirectional streams.

is_reserved_frame_type(Type)

-spec is_reserved_frame_type(non_neg_integer()) -> boolean().

Check if a frame type is reserved (grease). Reserved types are 0x1f * N + 0x21 for any non-negative integer N.

is_reserved_setting(Id)

-spec is_reserved_setting(non_neg_integer()) -> boolean().

Check if a settings identifier is reserved (grease). Reserved identifiers are 0x1f * N + 0x21 for any non-negative integer N.