tiny.quic.frame
Defined in tiny.quic.
API (22)
Actions
Public operations.
Types and contracts
Public types and contracts.
AckAckIteratorAckRangeConnectionCloseCryptoDatagramDecodeErrorEcnEncodeErrorFrameNewConnectionIdResetStreamStopSendingStreamStreamDataStreamLimit
Values and defaults
Public values and defaults.
Source
Source: lib/quic/src/frame/model.zig:34
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
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
pub const AckRange = struct { gap: u62, length: u62,};Source: lib/quic/src/frame/model.zig:92
pub const ConnectionClose = struct { application: bool, error_code: u62, frame_type: ?u62, reason: []const u8,};Source: lib/quic/src/frame/model.zig:61
pub const Crypto = struct { offset: u62, data: []const u8,};Source: lib/quic/src/frame/model.zig:99
pub const Datagram = struct { length_present: bool, data: []const u8,};Source: lib/quic/src/frame/model.zig:5
pub const Ecn = struct { ect0: u62, ect1: u62, ce: u62,};Source: lib/quic/src/frame/model.zig:104
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
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
pub const ResetStream = struct { stream_id: u62, error_code: u62, final_size: u62,};Source: lib/quic/src/frame/model.zig:56
pub const StopSending = struct { stream_id: u62, error_code: u62,};Source: lib/quic/src/frame/model.zig:66
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
pub const StreamData = struct { stream_id: u62, maximum: u62,};Source: lib/quic/src/frame/model.zig:80
pub const StreamLimit = struct { unidirectional: bool, maximum: u62,};Source: lib/quic/src/frame/codec.zig:29
pub const DecodeError = cursor.ReadError || varint.DecodeError || DecodeSpecific;Source: lib/quic/src/frame/codec.zig:30
pub const EncodeError = cursor.WriteError || varint.EncodeError || EncodeSpecific;Source: lib/quic/src/frame/codec.zig:187
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, };}Source: lib/quic/src/frame/codec.zig:331
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); }, }}Source: lib/quic/src/frame/model.zig:3
pub const ack_ranges_max: u8 = 64;Source: lib/quic/src/frame/root.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
pub const frame = @import("frame/root.zig");Complete call list for frame.decode
12 direct calls.
lib.quic.src.frame.codec.decodeAck[function] — private source atlib/quic/src/frame/codec.zig:75in nearest public ownerlib.quic.src.frame.codeclib.quic.src.frame.codec.decodeConnectionClose[function] — private source atlib/quic/src/frame/codec.zig:164in nearest public ownerlib.quic.src.frame.codeclib.quic.src.frame.codec.decodeCrypto[function] — private source atlib/quic/src/frame/codec.zig:105in nearest public ownerlib.quic.src.frame.codeclib.quic.src.frame.codec.decodeDatagram[function] — private source atlib/quic/src/frame/codec.zig:179in nearest public ownerlib.quic.src.frame.codeclib.quic.src.frame.codec.decodeNewConnectionId[function] — private source atlib/quic/src/frame/codec.zig:145in nearest public ownerlib.quic.src.frame.codeclib.quic.src.frame.codec.decodeStream[function] — private source atlib/quic/src/frame/codec.zig:119in nearest public ownerlib.quic.src.frame.codeclib.quic.src.frame.codec.decodeStreamData[function] — private source atlib/quic/src/frame/codec.zig:227in nearest public ownerlib.quic.src.frame.codeclib.quic.src.frame.codec.decodeStreamLimit[function] — private source atlib/quic/src/frame/codec.zig:139in nearest public ownerlib.quic.src.frame.codeclib.quic.src.frame.codec.decodeToken[function] — private source atlib/quic/src/frame/codec.zig:113in nearest public ownerlib.quic.src.frame.codeclib.quic.src.frame.codec.readEight[function] — private source atlib/quic/src/frame/codec.zig:234in nearest public ownerlib.quic.src.frame.codeclib.quic.src.frame.codec.readType[function] — private source atlib/quic/src/frame/codec.zig:54in nearest public ownerlib.quic.src.frame.codectiny.quic.varint.read[function] atlib/quic/src/varint.zig:41
Complete call list for frame.encode
11 direct calls.
lib.quic.src.frame.codec.encodeAck[function] — private source atlib/quic/src/frame/codec.zig:254in nearest public ownerlib.quic.src.frame.codeclib.quic.src.frame.codec.encodeConnectionClose[function] — private source atlib/quic/src/frame/codec.zig:316in nearest public ownerlib.quic.src.frame.codeclib.quic.src.frame.codec.encodeEight[function] — private source atlib/quic/src/frame/codec.zig:398in nearest public ownerlib.quic.src.frame.codeclib.quic.src.frame.codec.encodeNewConnectionId[function] — private source atlib/quic/src/frame/codec.zig:302in nearest public ownerlib.quic.src.frame.codeclib.quic.src.frame.codec.encodeOne[function] — private source atlib/quic/src/frame/codec.zig:383in nearest public ownerlib.quic.src.frame.codeclib.quic.src.frame.codec.encodeStream[function] — private source atlib/quic/src/frame/codec.zig:278in nearest public ownerlib.quic.src.frame.codeclib.quic.src.frame.codec.encodeStreamData[function] — private source atlib/quic/src/frame/codec.zig:388in nearest public ownerlib.quic.src.frame.codeclib.quic.src.frame.codec.encodeStreamLimit[function] — private source atlib/quic/src/frame/codec.zig:292in nearest public ownerlib.quic.src.frame.codeclib.quic.src.frame.codec.rangeFits[function] — private source atlib/quic/src/frame/codec.zig:48in nearest public ownerlib.quic.src.frame.codeclib.quic.src.frame.codec.sliceLength[function] — private source atlib/quic/src/frame/codec.zig:39in nearest public ownerlib.quic.src.frame.codectiny.quic.varint.write[function] atlib/quic/src/varint.zig:19
Audit
| Definitions | 23 |
|---|---|
| Public names | 23 |
| Members | 61 |
| Version | 26.7.0 |
| Revision | daab053ee433 |