createInitialMessage static method

Uint8List createInitialMessage(
  1. List<NegentropyItem> items,
  2. int idSize
)

Creates an initial client message (NEG-OPEN query payload)

Implementation

static Uint8List createInitialMessage(
    List<NegentropyItem> items, int idSize) {
  items.sort((a, b) {
    final tsCmp = a.timestamp.compareTo(b.timestamp);
    if (tsCmp != 0) return tsCmp;
    return _compareBytes(a.id, b.id);
  });

  final output = BytesBuilder();
  output.addByte(protocolVersion);

  // Single range covering all items with fingerprint
  // Upper bound - use max timestamp + 1 if we have items, otherwise use a large value
  final maxTs = items.isEmpty ? 0x7FFFFFFF : items.last.timestamp + 1;
  output.add(encodeVarint(maxTs));
  output.addByte(0); // prefix length

  // Always send fingerprint mode (even for empty set)
  output.addByte(modeFingerprint);
  final ids = items.map((i) => i.id).toList();
  output.add(calculateFingerprint(ids));

  return output.toBytes();
}