Microsoft.Protocols.TestSuites.MS_OXCROPS.MS_OXCROPSAdapter.ProcessSingleRopWithOptionResponseBufferSize C# (CSharp) Method

ProcessSingleRopWithOptionResponseBufferSize() public method

Method which executes single ROP operation with the maximum size of the rgbOut buffer set as pcbOut. For more detail about rgbOut and pcbOut, see [MS-OXCRPC].
public ProcessSingleRopWithOptionResponseBufferSize ( ISerializable ropRequest, uint inputObjHandle, IDeserializable &response, byte &rawData, RopResponseType expectedRopResponseType, uint pcbOut ) : List>
ropRequest ISerializable ROP request objects.
inputObjHandle uint Server object handle in request.
response IDeserializable ROP response objects.
rawData byte The ROP response payload.
expectedRopResponseType RopResponseType ROP response type expected.
pcbOut uint The maximum size of the rgbOut buffer to place Response in.
return List>
        public List<List<uint>> ProcessSingleRopWithOptionResponseBufferSize(
            ISerializable ropRequest,
            uint inputObjHandle,
            ref IDeserializable response,
            ref byte[] rawData,
            RopResponseType expectedRopResponseType,
            uint pcbOut)
        {
            List<ISerializable> requestRops = new List<ISerializable>
            {
                ropRequest
            };

            List<uint> requestSOH = new List<uint>
            {
                inputObjHandle
            };

            if (Common.IsOutputHandleInRopRequest(ropRequest))
            {
                // Add an element for server output object handle and set default value to 0xFFFFFFFF.
                requestSOH.Add(DefaultOutputHandle);
            }

            if (this.IsInvalidInputHandleNeeded(ropRequest, expectedRopResponseType))
            {
                // Add an invalid input handle in request and set its value to 0xFFFFFFFF.
                requestSOH.Add(InvalidInputHandle);
            }

            List<IDeserializable> responseRops = new List<IDeserializable>();
            List<List<uint>> responseSOHs = new List<List<uint>>();

            uint ret = this.RopCall(requestRops, requestSOH, ref responseRops, ref responseSOHs, ref rawData, pcbOut);
            if (ret != OxcRpcErrorCode.ECNone)
            {
                Site.Assert.AreEqual<RopResponseType>(RopResponseType.RPCError, expectedRopResponseType, "Unexpected RPC error {0} occurred.", ret);
                return null;
            }

            if (responseRops != null)
            {
                if (responseRops.Count > 0)
                {
                    response = responseRops[0];
                }
            }
            else
            {
                response = null;
            }

            if (ropRequest.GetType() == typeof(RopReleaseRequest))
            {
                return responseSOHs;
            }

            try
            {
                this.VerifyAdapterCaptureCode(expectedRopResponseType, response, ropRequest);
            }
            catch (TargetInvocationException invocationEx)
            {
                Site.Log.Add(LogEntryKind.Debug, invocationEx.Message);
                if (invocationEx.InnerException != null)
                {
                    throw invocationEx.InnerException;
                }
            }
            catch (NullReferenceException nullEx)
            {
                Site.Log.Add(LogEntryKind.Debug, nullEx.Message);
            }

            return responseSOHs;
        }
MS_OXCROPSAdapter