Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }