nhttp_int (nhttp_lib v1.0.0)
View SourcePrefixed integer codec for HPACK and QPACK.
Implements the variable-length integer encoding defined in RFC 7541 Section 5.1 (HPACK) and RFC 9204 Section 4.1.1 (QPACK). Both protocols use the same encoding scheme with different prefix sizes.
A prefixed integer uses N bits of the first byte (the prefix). When the value fits in those N bits, encoding is a single byte. Larger values set all N prefix bits to 1 and encode the remainder in subsequent bytes using a 7-bit-per-byte continuation scheme.
This module provides per-prefix-size encode and decode functions for prefix sizes 3 through 8 bits.
Summary
Functions
Decode a 3-bit prefixed integer.
Decode a 4-bit prefixed integer.
Decode a 5-bit prefixed integer.
Decode a 6-bit prefixed integer.
Decode a 7-bit prefixed integer.
Decode an 8-bit prefixed integer (full byte prefix, no upper bits).
Encode a 3-bit prefixed integer. Prefix occupies the upper 5 bits.
Encode a 4-bit prefixed integer. Prefix occupies the upper 4 bits.
Encode a 5-bit prefixed integer. Prefix occupies the upper 3 bits.
Encode a 6-bit prefixed integer. Prefix occupies the upper 2 bits.
Encode a 7-bit prefixed integer. Prefix occupies the upper 1 bit.
Encode an 8-bit prefixed integer (full byte prefix, no upper bits).
Types
Functions
-spec dec3(bitstring()) -> {ok, non_neg_integer(), bitstring()} | {error, decode_error()}.
Decode a 3-bit prefixed integer.
-spec dec4(bitstring()) -> {ok, non_neg_integer(), bitstring()} | {error, decode_error()}.
Decode a 4-bit prefixed integer.
-spec dec5(bitstring()) -> {ok, non_neg_integer(), bitstring()} | {error, decode_error()}.
Decode a 5-bit prefixed integer.
-spec dec6(bitstring()) -> {ok, non_neg_integer(), bitstring()} | {error, decode_error()}.
Decode a 6-bit prefixed integer.
-spec dec7(bitstring()) -> {ok, non_neg_integer(), bitstring()} | {error, decode_error()}.
Decode a 7-bit prefixed integer.
-spec dec8(bitstring()) -> {ok, non_neg_integer(), bitstring()} | {error, decode_error()}.
Decode an 8-bit prefixed integer (full byte prefix, no upper bits).
-spec enc3(non_neg_integer(), 0..31) -> binary().
Encode a 3-bit prefixed integer. Prefix occupies the upper 5 bits.
-spec enc4(non_neg_integer(), 0..15) -> binary().
Encode a 4-bit prefixed integer. Prefix occupies the upper 4 bits.
-spec enc5(non_neg_integer(), 0..7) -> binary().
Encode a 5-bit prefixed integer. Prefix occupies the upper 3 bits.
-spec enc6(non_neg_integer(), 0..3) -> binary().
Encode a 6-bit prefixed integer. Prefix occupies the upper 2 bits.
-spec enc7(non_neg_integer(), 0..1) -> binary().
Encode a 7-bit prefixed integer. Prefix occupies the upper 1 bit.
-spec enc8(non_neg_integer()) -> binary().
Encode an 8-bit prefixed integer (full byte prefix, no upper bits).