internal void MarshalObject(INdrStruct thing) { RpcHeader.WriteHeader(this); if (WriteDeferred(thing)) { WriteStruct(thing); } var typeLength = Offset - RpcHeader.HeaderLength; BinaryPrimitives.WriteInt32LittleEndian(backingBuffer.Span.Slice(8, 4), typeLength); }
public void UnmarshalObject(INdrStruct thing) { if (!RpcHeader.TryReadHeader(this, out RpcHeader header)) { throw new InvalidDataException("Expecting a header but got something unknown"); } if (header.Endian != EndianType.Little) { throw new InvalidDataException("Expecting little endian encoding"); } if (header.ObjectBufferLength > BytesAvailable) { throw new InvalidDataException($"Expected length ({header.ObjectBufferLength} bytes) is greater than available bytes ({BytesAvailable} bytes)"); } ReadReferentStruct(thing); }