DoxigAlpha

decode

Use this function to increase idx.

Function parameters

Parameters

#
d:*Decoder
T:type

Type definitions in this namespace

Types

#
ApplicationCipher
Encryption parameters for application traffic.
Decoder
An abstraction to ensure that protocol-parsing code does not perform an

Functions in this namespace

Functions

#

= 5

Values

#
max_ciphertext_len
= max_ciphertext_inner_record_len + 256
max_ciphertext_record_len
= max_ciphertext_len + record_header_len
hello_retry_request_sequence
= [32]u8{ 0xCF, 0x21, 0xAD, 0x74, 0xE5, 0x9A, 0x61, 0x11, 0xBE, 0x1D, 0x8C, 0x02, 0x1E, 0x65, 0xB8, 0x91, 0xC2, 0xA2, 0x11, 0x16, 0x7A, 0xBB, 0x8C, 0x5E, 0x07, 0x9E, 0x09, 0xE2, 0xC8, 0xA8, 0x33, 0x9C, }
close_notify_alert
= [_]u8{ @intFromEnum(Alert.Level.warning), @intFromEnum(Alert.Description.close_notify), }

Source

Implementation

#
pub fn decode(d: *Decoder, comptime T: type) T {
    switch (@typeInfo(T)) {
        .int => |info| switch (info.bits) {
            8 => {
                skip(d, 1);
                return d.buf[d.idx - 1];
            },
            16 => {
                skip(d, 2);
                const b0: u16 = d.buf[d.idx - 2];
                const b1: u16 = d.buf[d.idx - 1];
                return (b0 << 8) | b1;
            },
            24 => {
                skip(d, 3);
                const b0: u24 = d.buf[d.idx - 3];
                const b1: u24 = d.buf[d.idx - 2];
                const b2: u24 = d.buf[d.idx - 1];
                return (b0 << 16) | (b1 << 8) | b2;
            },
            else => @compileError("unsupported int type: " ++ @typeName(T)),
        },
        .@"enum" => |info| {
            if (info.is_exhaustive) @compileError("exhaustive enum cannot be used");
            return @enumFromInt(d.decode(info.tag_type));
        },
        else => @compileError("unsupported type: " ++ @typeName(T)),
    }
}