YamuxFrame.fromBytes constructor

YamuxFrame.fromBytes(
  1. Uint8List bytes
)

Creates a frame from bytes

Implementation

factory YamuxFrame.fromBytes(Uint8List bytes) {
  if (bytes.length < 12) {
    throw FormatException('Frame too short');
  }

  final header = ByteData.view(bytes.buffer, bytes.offsetInBytes, 12);

  // Version must be 0
  final version = header.getUint8(0);
  if (version != YamuxFrame.version) {
    throw FormatException('Invalid version: $version');
  }

  // Parse type
  final type = YamuxFrameType.fromValue(header.getUint8(1));

  // Parse flags
  final flags = header.getUint16(2, Endian.big);

  // Parse stream ID
  final streamId = header.getUint32(4, Endian.big);

  // Parse length
  final length = header.getUint32(8, Endian.big);

  // Get data
  final data = bytes.length > 12 ? bytes.sublist(12) : Uint8List(0);
  if (data.length != length) {
    throw FormatException('Frame data length mismatch');
  }

  return YamuxFrame(
    type: type,
    flags: flags,
    streamId: streamId,
    length: length,
    data: data,
  );
}