Skip to documentation
SLOP

tiny.quic.frame

Reference tiny.quic frame

Defined in tiny.quic.

API (22)

Actions

Public operations.

Types and contracts

Public types and contracts.

Values and defaults

Public values and defaults.

No direct callersNo direct callstiny.quicframe
Static calls · unresolved targets: unknown · external targets: unknown.

Source

Source: lib/quic/src/frame/model.zig:34

zig
pub const Ack = struct {    largest: u62,    delay: u62,    first_range: u62,    range_count: u8,    ranges: []const u8,    ecn: ?Ecn,    pub fn iterator(self: Ack) AckIterator {        return .{            .input = quic.cursor.Read.init(self.ranges),            .remaining = self.range_count,        };    }};

Source: lib/quic/src/frame/model.zig:16

zig
pub const AckIterator = struct {    input: quic.cursor.Read,    remaining: u8,    pub fn next(self: *AckIterator) quic.varint.DecodeError!?AckRange {        if (self.remaining == 0) return null;        self.remaining -= 1;        return .{            .gap = (try quic.varint.read(&self.input)).value,            .length = (try quic.varint.read(&self.input)).value,        };    }    pub fn exhausted(self: *const AckIterator) bool {        return self.remaining == 0 and self.input.remaining() == 0;    }};

Source: lib/quic/src/frame/model.zig:11

zig
pub const AckRange = struct {    gap: u62,    length: u62,};

Source: lib/quic/src/frame/model.zig:92

zig
pub const ConnectionClose = struct {    application: bool,    error_code: u62,    frame_type: ?u62,    reason: []const u8,};

Source: lib/quic/src/frame/model.zig:61

zig
pub const Crypto = struct {    offset: u62,    data: []const u8,};

Source: lib/quic/src/frame/model.zig:99

zig
pub const Datagram = struct {    length_present: bool,    data: []const u8,};

Source: lib/quic/src/frame/model.zig:5

zig
pub const Ecn = struct {    ect0: u62,    ect1: u62,    ce: u62,};

Source: lib/quic/src/frame/model.zig:104

zig
pub const Frame = union(enum) {    padding: void,    ping: void,    ack: Ack,    reset_stream: ResetStream,    stop_sending: StopSending,    crypto: Crypto,    new_token: []const u8,    stream: Stream,    max_data: u62,    max_stream_data: StreamData,    max_streams: StreamLimit,    data_blocked: u62,    stream_data_blocked: StreamData,    streams_blocked: StreamLimit,    new_connection_id: NewConnectionId,    retire_connection_id: u62,    path_challenge: [8]u8,    path_response: [8]u8,    connection_close: ConnectionClose,    handshake_done: void,    datagram: Datagram,};

Source: lib/quic/src/frame/model.zig:85

zig
pub const NewConnectionId = struct {    sequence: u62,    retire_prior_to: u62,    connection_id: quic.packet.ConnectionId,    reset_token: [16]u8,};

Source: lib/quic/src/frame/model.zig:50

zig
pub const ResetStream = struct {    stream_id: u62,    error_code: u62,    final_size: u62,};

Source: lib/quic/src/frame/model.zig:56

zig
pub const StopSending = struct {    stream_id: u62,    error_code: u62,};

Source: lib/quic/src/frame/model.zig:66

zig
pub const Stream = struct {    stream_id: u62,    offset: u62,    offset_present: bool,    length_present: bool,    fin: bool,    data: []const u8,};

Source: lib/quic/src/frame/model.zig:75

zig
pub const StreamData = struct {    stream_id: u62,    maximum: u62,};

Source: lib/quic/src/frame/model.zig:80

zig
pub const StreamLimit = struct {    unidirectional: bool,    maximum: u62,};

Source: lib/quic/src/frame/codec.zig:29

zig
pub const DecodeError = cursor.ReadError || varint.DecodeError || DecodeSpecific;

Source: lib/quic/src/frame/codec.zig:30

zig
pub const EncodeError = cursor.WriteError || varint.EncodeError || EncodeSpecific;

Source: lib/quic/src/frame/codec.zig:187

zig
pub fn decode(input: *cursor.Read) DecodeError!model.Frame {    const frame_type = try readType(input);    if (frame_type >= 0x08 and frame_type <= 0x0f) {        return decodeStream(input, frame_type);    }    return switch (frame_type) {        0x00 => .{ .padding = {} },        0x01 => .{ .ping = {} },        0x02 => decodeAck(input, false),        0x03 => decodeAck(input, true),        0x04 => .{ .reset_stream = .{            .stream_id = (try varint.read(input)).value,            .error_code = (try varint.read(input)).value,            .final_size = (try varint.read(input)).value,        } },        0x05 => .{ .stop_sending = .{            .stream_id = (try varint.read(input)).value,            .error_code = (try varint.read(input)).value,        } },        0x06 => decodeCrypto(input),        0x07 => decodeToken(input),        0x10 => .{ .max_data = (try varint.read(input)).value },        0x11 => .{ .max_stream_data = try decodeStreamData(input) },        0x12, 0x13 => .{ .max_streams = try decodeStreamLimit(input, frame_type) },        0x14 => .{ .data_blocked = (try varint.read(input)).value },        0x15 => .{ .stream_data_blocked = try decodeStreamData(input) },        0x16, 0x17 => .{ .streams_blocked = try decodeStreamLimit(input, frame_type) },        0x18 => decodeNewConnectionId(input),        0x19 => .{ .retire_connection_id = (try varint.read(input)).value },        0x1a => .{ .path_challenge = try readEight(input) },        0x1b => .{ .path_response = try readEight(input) },        0x1c => decodeConnectionClose(input, false),        0x1d => decodeConnectionClose(input, true),        0x1e => .{ .handshake_done = {} },        0x30 => decodeDatagram(input, false),        0x31 => decodeDatagram(input, true),        else => error.InvalidFrameType,    };}
Called byCallsNo direct callersprivate sourcelib.quic.src.frame.codecdecodeAckprivate sourcelib.quic.src.frame.codecdecodeConnectionCloseprivate sourcelib.quic.src.frame.codecdecodeCryptoprivate sourcelib.quic.src.frame.codecdecodeDatagramprivate sourcelib.quic.src.frame.codecdecodeNewConnectionId+7 moreframedecode
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/quic/src/frame/codec.zig:331

zig
pub fn encode(value: model.Frame, output: *cursor.Write) EncodeError!void {    switch (value) {        .padding => try output.byte(0x00),        .ping => try output.byte(0x01),        .ack => |frame| try encodeAck(frame, output),        .reset_stream => |frame| {            try output.byte(0x04);            _ = try varint.write(frame.stream_id, output);            _ = try varint.write(frame.error_code, output);            _ = try varint.write(frame.final_size, output);        },        .stop_sending => |frame| {            try output.byte(0x05);            _ = try varint.write(frame.stream_id, output);            _ = try varint.write(frame.error_code, output);        },        .crypto => |frame| {            if (!rangeFits(frame.offset, frame.data.len)) return error.InvalidLength;            try output.byte(0x06);            _ = try varint.write(frame.offset, output);            _ = try varint.write(try sliceLength(frame.data.len), output);            try output.put(frame.data);        },        .new_token => |token| {            if (token.len == 0) return error.EmptyToken;            try output.byte(0x07);            _ = try varint.write(try sliceLength(token.len), output);            try output.put(token);        },        .stream => |frame| try encodeStream(frame, output),        .max_data => |maximum| try encodeOne(0x10, maximum, output),        .max_stream_data => |frame| try encodeStreamData(0x11, frame, output),        .max_streams => |frame| try encodeStreamLimit(0x12, frame, output),        .data_blocked => |maximum| try encodeOne(0x14, maximum, output),        .stream_data_blocked => |frame| try encodeStreamData(0x15, frame, output),        .streams_blocked => |frame| try encodeStreamLimit(0x16, frame, output),        .new_connection_id => |frame| try encodeNewConnectionId(frame, output),        .retire_connection_id => |sequence| try encodeOne(0x19, sequence, output),        .path_challenge => |data| try encodeEight(0x1a, data, output),        .path_response => |data| try encodeEight(0x1b, data, output),        .connection_close => |frame| try encodeConnectionClose(frame, output),        .handshake_done => try output.byte(0x1e),        .datagram => |frame| {            try output.byte(if (frame.length_present) 0x31 else 0x30);            if (frame.length_present) {                _ = try varint.write(try sliceLength(frame.data.len), output);            }            try output.put(frame.data);        },    }}
Called byCallsNo direct callersprivate sourcelib.quic.src.frame.codecencodeAckprivate sourcelib.quic.src.frame.codecencodeConnectionCloseprivate sourcelib.quic.src.frame.codecencodeEightprivate sourcelib.quic.src.frame.codecencodeNewConnectionIdprivate sourcelib.quic.src.frame.codecencodeOne+6 moreframeencode
Static calls · unresolved targets: 1 · external targets: 1.

Source: lib/quic/src/frame/model.zig:3

zig
pub const ack_ranges_max: u8 = 64;

Source: lib/quic/src/frame/root.zig

zig
const codec = @import("codec.zig");const model = @import("model.zig");pub const ack_ranges_max = model.ack_ranges_max;pub const Ecn = model.Ecn;pub const AckRange = model.AckRange;pub const AckIterator = model.AckIterator;pub const Ack = model.Ack;pub const ResetStream = model.ResetStream;pub const StopSending = model.StopSending;pub const Crypto = model.Crypto;pub const Stream = model.Stream;pub const StreamData = model.StreamData;pub const StreamLimit = model.StreamLimit;pub const NewConnectionId = model.NewConnectionId;pub const ConnectionClose = model.ConnectionClose;pub const Datagram = model.Datagram;pub const Frame = model.Frame;pub const DecodeError = codec.DecodeError;pub const EncodeError = codec.EncodeError;pub const decode = codec.decode;pub const encode = codec.encode;

Source: lib/quic/src/root.zig:47

zig
pub const frame = @import("frame/root.zig");

Complete call list for frame.decode

12 direct calls.

Complete call list for frame.encode

11 direct calls.

Audit

Definitions23
Public names23
Members61
Version26.7.0
Revisiondaab053ee433