toBytes method
Serialize the frame into a byte list.
Implementation
@override
Uint8List toBytes() {
final buffer = Uint8List(length);
final view = ByteData.view(buffer.buffer);
int offset = 0;
view.setUint8(offset, FrameType.ack.code);
offset += 1;
view.setUint32(offset, largestAcked, Endian.big);
offset += 4;
view.setUint16(offset, ackDelay, Endian.big);
offset += 2;
// One-byte fields: a value that doesn't fit would be truncated into an ACK
// for sequences that never arrived, so refuse it (see fromReceived).
if (ackRanges.length > maxRanges || ackRanges.any((r) => r.gap > maxGap)) {
throw ArgumentError('ACK range count or gap does not fit its one-byte field');
}
view.setUint8(offset, ackRanges.length); // Count of *additional* ranges
offset += 1;
view.setUint32(offset, firstAckRangeLength, Endian.big);
offset += 4;
for (final range in ackRanges) {
view.setUint8(offset, range.gap);
offset += 1;
view.setUint32(offset, range.ackRangeLength, Endian.big);
offset += 4;
}
return buffer;
}