write method

  1. @override
Future<void> write(
  1. Uint8List data
)
override

Writes data to the connection.

Implementation

@override
Future<void> write(Uint8List data) async {
  // Acquire write lock to ensure writes are atomic and don't interleave
  await _acquireWriteLock();

  try {
    _log.finer(
        'SecuredConnection.write: Plaintext data received (length: ${data.length}, first 20 bytes: ${data.take(20).toList()})');

    // libp2p Noise spec: 2-byte length prefix, max 65535 bytes per frame.
    // Max plaintext per frame = 65535 - 16 (MAC) = 65519 bytes.
    const maxPlaintextPerFrame = 65535 - 16;

    // Chunk data if it exceeds max plaintext per frame
    var offset = 0;
    do {
      final chunkEnd = (offset + maxPlaintextPerFrame < data.length)
          ? offset + maxPlaintextPerFrame
          : data.length;
      final chunk = data.sublist(offset, chunkEnd);
      await _writeFrame(chunk);
      offset = chunkEnd;
    } while (offset < data.length);
  } finally {
    // Always release the write lock, even if an exception occurs
    _releaseWriteLock();
  }
}