encodeCall function

Uint8List encodeCall({
  1. required int xid,
  2. required int program,
  3. required int version,
  4. required int procedure,
  5. required List<int> args,
})

Build a complete ONC RPC CALL message (no record marker — caller wraps via wrapRecord).

Implementation

Uint8List encodeCall({
  required int xid,
  required int program,
  required int version,
  required int procedure,
  required List<int> args,
}) {
  final w = XdrWriter()
    ..writeUint32(xid)
    ..writeUint32(0) // msg_type = CALL
    ..writeUint32(2) // rpcvers = 2
    ..writeUint32(program)
    ..writeUint32(version)
    ..writeUint32(procedure)
    // cred = AUTH_NONE + zero-length opaque
    ..writeUint32(AuthFlavor.authNone)
    ..writeUint32(0)
    // verf = AUTH_NONE + zero-length opaque
    ..writeUint32(AuthFlavor.authNone)
    ..writeUint32(0);
  // Args encoded by the caller — already in `args`.
  final body = w.takeBytes();
  final out = Uint8List(body.length + args.length);
  out.setRange(0, body.length, body);
  out.setRange(body.length, body.length + args.length, args);
  return out;
}