Microsoft.Protocols.TestSuites.MS_OXCMAPIHTTP.RopBufferHelper.BuildRequestBufferWithoutRop C# (CSharp) Method

BuildRequestBufferWithoutRop() public method

The method creates a request without ROPs.
public BuildRequestBufferWithoutRop ( ) : byte[]
return byte[]
        public byte[] BuildRequestBufferWithoutRop()
        {
            // Only RopSize field (2 bytes) exists in the payload of request without ROPs.
            int payloadLen = 2;
            ushort ropSize = 2;
            int rpcHeaderExtlength = Marshal.SizeOf(typeof(RPC_HEADER_EXT));

            byte[] requestBuffer = new byte[rpcHeaderExtlength + payloadLen];
            int index = 0;

            // Constructs RPC header ext buffer
            RPC_HEADER_EXT rpcHeaderExt = new RPC_HEADER_EXT
            {
                // According to Open Specification, Version filed MUST be set to 0x0000.
                Version = 0,
                Flags = (byte)RpcHeaderExtFlags.Last,
                Size = (ushort)payloadLen,
                SizeActual = (ushort)payloadLen
            };

            // No compression and No obfuscation
            IntPtr ptr = Marshal.AllocHGlobal(rpcHeaderExtlength);

            // Release ptr in final sub-statement to make sure the resources will be released even if an exception occurs
            try
            {
                Marshal.StructureToPtr(rpcHeaderExt, ptr, true);
                Marshal.Copy(ptr, requestBuffer, index, rpcHeaderExtlength);
                index += rpcHeaderExtlength;
            }
            catch (ArgumentException e)
            {
                // Marshal.StructureToPtr or Marshal.Copy throw exception.
                throw new NotImplementedException(e.Message);
            }
            finally
            {
                Marshal.FreeHGlobal(ptr);
            }

            Array.Copy(BitConverter.GetBytes(ropSize), 0, requestBuffer, index, sizeof(ushort));

            return requestBuffer;
        }