/// <summary>
        /// Verify the RopCopyProperties operation related requirements.
        /// </summary>
        /// <param name="ropCopyPropertiesResponse">The RopCopyProperties response buffer structure.</param>
        /// <param name="objectType">Indicates which object type the RopCopyProperties operation is acting on.</param>
        /// <param name="copyFlags">CopyFlags parameter in request of RopCopyProperties.</param>
        /// <param name="isPropertyFound">Indicates the property is found or not.</param>
        private void VerifyRopCopyProperties(
            RopCopyPropertiesResponse ropCopyPropertiesResponse,
            ServerObjectType objectType,
            CopyFlags copyFlags,
            bool isPropertyFound)
        {
            // Since the RopCopyProperties ROP response was parsed successfully, MS-OXCPRPT_R50003 can be captured directly.
            Site.CaptureRequirement(
                50003,
                @"[In Processing RopCopyProperties] The server responds with a RopCopyProperties ROP response buffer.");

            if (ropCopyPropertiesResponse.ReturnValue.Equals((uint)CPRPTErrorCode.None))
            {
                // The parser has ensured the field satisfied the format, otherwise the response cannot be received.
                Site.CaptureRequirement(
                  16801,
                  @"[In RopCopyProperties ROP Response Buffer] DestHandleIndex: 4 bytes integer.");

                if (objectType == ServerObjectType.Message)
                {
                    // If the object type this operation acting on is Message object and this operation is performed successfully, then the following requirement can be captured.
                    Site.CaptureRequirement(
                        14901,
                        @"[In RopCopyProperties ROP] This operation [RopCopyProperties ROP] is valid on Message objects.");
                }

                if (objectType == ServerObjectType.Folder)
                {
                    // If the object type this operation acting on is Folder object and this operation is performed successfully, then the following requirement can be captured.
                    Site.CaptureRequirement(
                        14902,
                        @"[In RopCopyProperties ROP] This operation [RopCopyProperties ROP] is valid on Folder objects.");
                }

                if (objectType == ServerObjectType.Attachment)
                {
                    // If the object type this operation acting on is Attachment object and this operation is performed successfully, then the following requirement can be captured.
                    Site.CaptureRequirement(
                        14903,
                        @"[In RopCopyProperties ROP] This operation [RopCopyProperties ROP] is valid on Attachment objects.");
                }

                // The parser has ensured the field satisfied the format, otherwise the response cannot be received.
                Site.CaptureRequirement(
                165,
                @"[In RopCopyProperties ROP Response Buffer] propertyProblemCount: 2 bytes integer.");

                Site.CaptureRequirementIfAreEqual<ushort>(
                      ropCopyPropertiesResponse.PropertyProblemCount,
                      (ushort)ropCopyPropertiesResponse.PropertyProblems.Length,
                      16502,
                      @"[In RopCopyProperties ROP Response Buffer] propertyProblemCount: An integer that specifies the number of elements contained in the PropertyProblems field. ");

                if (ropCopyPropertiesResponse.PropertyProblemCount != 0)
                {
                    // The parser has ensured the field satisfied the format, otherwise the response cannot be received.
                    Site.CaptureRequirement(
                        167,
                        @"[In RopCopyProperties ROP Response Buffer] PropertyProblems (variable): An array of PropertyProblem structures ([MS-OXCDATA] section 2.7).");

                    for (int counter = 0; counter < ropCopyPropertiesResponse.PropertyProblems.Length; counter++)
                    {
                        this.VerifyPropertyProblemSturctureInCDATA();
                    }
                }

                Site.CaptureRequirementIfIsTrue(
                   isPropertyFound,
                   500,
                   @"[In Processing RopCopyProperties] The server MUST copy or move the properties specified from the source object to the destination object.");
            }

            if (ropCopyPropertiesResponse.ReturnValue == 0x80070057)
            {
                // The parser has ensured the field satisfied the format, otherwise the response cannot be received.
                Site.CaptureRequirement(
                    "MS-OXCDATA",
                      904,
                     @"[In Error Codes] The numeric value (hex) for error code InvalidParameter is 0x80070057, %x57.00.07.80.");
            }

            if (ropCopyPropertiesResponse.ReturnValue == 0x80040102)
            {
                // The parser has ensured the field satisfied the format, otherwise the response cannot be received.
                Site.CaptureRequirement(
                    "MS-OXCDATA",
                      928,
                     @"[In Error Codes] The numeric value (hex) for error code NotSupported is 0x80040102, %x02.01.04.80.");
            }

            if (ropCopyPropertiesResponse.ReturnValue.Equals((uint)CPRPTErrorCode.NullDestinationObject))
            {
                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCPRPT_R168");

                // Verify MS-OXCPRPT requirement: MS-OXCPRPT_R168
                // The value of DestHandleIndex is not 0 means this field is present.
                Site.CaptureRequirementIfAreNotEqual<uint>(
                    0,
                    ropCopyPropertiesResponse.DestHandleIndex,
                    168,
                    @"[In RopCopyProperties ROP Response Buffer] DestHandleIndex: The DestHandleIndex field MUST be set to the value of the DestHandleIndex field of the ROP request buffer. ");

                // Verify MS-OXCPRPT requirement: MS-OXCPRPT_R737
                // The value of PropertyProblemCount is 0 means this field is not present.
                Site.CaptureRequirementIfAreEqual<ushort>(
                    0,
                    ropCopyPropertiesResponse.PropertyProblemCount,
                    737,
                    @"[In RopCopyProperties ROP Response Buffer] PropertyProblemCount: This field MUST NOT be present if the ReturnValue field is set to NullDestinationObject (0x00000503).");

                // Verify MS-OXCPRPT requirement: MS-OXCPRPT_R738
                // PropertyProblems is null means this field is not present.
                Site.CaptureRequirementIfIsNull(
                    ropCopyPropertiesResponse.PropertyProblems,
                    738,
                    @"[In RopCopyProperties ROP Response Buffer] propertyProblems: This field MUST NOT be present if the ReturnValue field is set to NullDestinationObject (0x00000503).");
            }
            else
            {
                // Verify MS-OXCPRPT requirement: MS-OXCPRPT_R170
                // The value of DestHandleIndex is 0 means this field is not present.
                Site.CaptureRequirementIfAreEqual<uint>(
                    0,
                    ropCopyPropertiesResponse.DestHandleIndex,
                    170,
                    @"[In RopCopyProperties ROP Response Buffer] DestHandleIndex: The DestHandleIndex field MUST NOT be present if the ReturnValue field is set to any value other than NullDestinationObject (0x00000503).");
            }

            if ((objectType == ServerObjectType.Folder) && (copyFlags == CopyFlags.Move))
            {
                if (Common.IsRequirementEnabled(882, this.Site))
                {
                    Site.CaptureRequirementIfAreEqual<uint>(
                        (uint)CPRPTErrorCode.NotSupported,
                        ropCopyPropertiesResponse.ReturnValue,
                        882,
                        @"[In Processing RopCopyProperties] Implementation does return NotSupported error, if the original object is a Folder object and the CopyFlags field has the Move flag set.(Microsoft Exchange Server 2007 and above follow this behavior)");
                }
            }
        }
        /// <summary>
        /// Verify RopCopyProperties Null Destination Failure Response
        /// </summary>
        /// <param name="ropCopyPropertiesResponse">The null destination failure response of RopCopyProperties request</param>
        /// <param name="sourceHandleIndex">The field of SourceHandleIndex in RopCopyProperties request</param>
        /// <param name="destHandleIndex">The field of DestHandleIndex in RopCopyProperties request</param>
        private void VerifyRopCopyPropertiesNullDestinationFailureResponse(RopCopyPropertiesResponse ropCopyPropertiesResponse, byte sourceHandleIndex, uint destHandleIndex)
        {
            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3038");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3038
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte),
                ropCopyPropertiesResponse.RopId.GetType(),
                3038,
                @"[In RopCopyProperties ROP Null Destination Failure Response Buffer]RopId (1 byte): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3040");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3040
            Site.CaptureRequirementIfAreEqual<byte>(
                (byte)RopId.RopCopyProperties,
                ropCopyPropertiesResponse.RopId,
                3040,
                @"[In RopCopyProperties ROP Null Destination Failure Response Buffer,RopId (1 byte)]For this operation[RopCopyProperties], this field is set to 0x67.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3041");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3041
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte),
                ropCopyPropertiesResponse.SourceHandleIndex.GetType(),
                3041,
                @"[In RopCopyProperties ROP Null Destination Failure Response Buffer]SourceHandleIndex (1 byte): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3042");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3042
            Site.CaptureRequirementIfAreEqual<byte>(
                sourceHandleIndex,
                ropCopyPropertiesResponse.SourceHandleIndex,
                3042,
                @"[In RopCopyProperties ROP Null Destination Failure Response Buffer,SourceHandleIndex (1 byte)]This index MUST be set to the value specified in the SourceHandleIndex field in the request.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3044");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3044
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(uint),
                ropCopyPropertiesResponse.ReturnValue.GetType(),
                3044,
                @"[In RopCopyProperties ROP Null Destination Failure Response Buffer]ReturnValue (4 bytes): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3046");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3046
            Site.CaptureRequirementIfAreEqual<uint>(
                ReturnValueForRopMoveFolderResponseAndMoveCopyMessage,
                ropCopyPropertiesResponse.ReturnValue,
                3046,
                @"[In RopCopyProperties ROP Null Destination Failure Response Buffer,ReturnValue (4 bytes)]For this response[Null Destination Failure Response], this field is set to 0x00000503.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3047");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3047
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(uint),
                ropCopyPropertiesResponse.DestHandleIndex.GetType(),
                3047,
                @"[In RopCopyProperties ROP Null Destination Failure Response Buffer]DestHandleIndex (4 bytes): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3048");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3048
            Site.CaptureRequirementIfAreEqual<uint>(
                destHandleIndex,
                ropCopyPropertiesResponse.DestHandleIndex,
                3048,
                @"[In RopCopyProperties ROP Null Destination Failure Response Buffer,DestHandleIndex (4 bytes)]This index MUST be set to the value specified in the DestHandleIndex field in the request.");
        }
        /// <summary>
        /// Verify RopCopyProperties Failure Response
        /// </summary>
        /// <param name="ropCopyPropertiesResponse">The failure response of RopCopyProperties request</param>
        /// <param name="sourceHandleIndex">The field of SourceHandleIndex in RopCopyProperties request</param>
        private void VerifyRopCopyPropertiesFailureResponse(RopCopyPropertiesResponse ropCopyPropertiesResponse, byte sourceHandleIndex)
        {
            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3050");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3050
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte),
                ropCopyPropertiesResponse.RopId.GetType(),
                3050,
                @"[In RopCopyProperties ROP Failure Response Buffer]RopId (1 byte): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3052");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3052
            Site.CaptureRequirementIfAreEqual<byte>(
                (byte)RopId.RopCopyProperties,
                ropCopyPropertiesResponse.RopId,
                3052,
                @"[In RopCopyProperties ROP Failure Response Buffer,RopId (1 byte)]For this operation[RopCopyProperties], this field is set to 0x67.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3053");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3053
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte),
                ropCopyPropertiesResponse.SourceHandleIndex.GetType(),
                3053,
                @"[In RopCopyProperties ROP Failure Response Buffer]SourceHandleIndex (1 byte): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3054");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3054
            Site.CaptureRequirementIfAreEqual<byte>(
                sourceHandleIndex,
                ropCopyPropertiesResponse.SourceHandleIndex,
                3054,
                @"[In RopCopyProperties ROP Failure Response Buffer,SourceHandleIndex (1 byte)]This index MUST be set to the value specified in the SourceHandleIndex field in the request.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3056");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3056
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(uint),
                ropCopyPropertiesResponse.ReturnValue.GetType(),
                3056,
                @"[In RopCopyProperties ROP Failure Response Buffer]ReturnValue (4 bytes): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3058,the ReturnValue:{0}", ropCopyPropertiesResponse.ReturnValue);

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3058
            bool isVerifyR3058 =
                (ropCopyPropertiesResponse.ReturnValue != SuccessReturnValue) &&
                (ropCopyPropertiesResponse.ReturnValue != ReturnValueForRopMoveFolderResponseAndMoveCopyMessage);

            Site.CaptureRequirementIfIsTrue(
                isVerifyR3058,
                3058,
                @"[In RopCopyProperties ROP Failure Response Buffer,ReturnValue (4 bytes)]For this response[Failure Response], this field is set to a value other than 0x00000000 or 0x00000503.");
        }
        /// <summary>
        /// Verify RopCopyProperties Success Response
        /// </summary>
        /// <param name="ropCopyPropertiesResponse">The success response of RopCopyProperties request</param>
        /// <param name="sourceHandleIndex">The field of SourceHandleIndex in RopCopyProperties request</param>
        private void VerifyRopCopyPropertiesSuccessResponse(RopCopyPropertiesResponse ropCopyPropertiesResponse, byte sourceHandleIndex)
        {
            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3024");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3024
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte),
                ropCopyPropertiesResponse.RopId.GetType(),
                3024,
                @"[In RopCopyProperties ROP Success Response Buffer]RopId (1 byte): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3026");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3026
            Site.CaptureRequirementIfAreEqual<byte>(
                (byte)RopId.RopCopyProperties,
                ropCopyPropertiesResponse.RopId,
                3026,
                @"[In RopCopyProperties ROP Success Response Buffer,RopId (1 byte)]For this operation[RopCopyProperties], this field is set to 0x67.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3027");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3027
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte),
                ropCopyPropertiesResponse.SourceHandleIndex.GetType(),
                3027,
                @"[In RopCopyProperties ROP Success Response Buffer]SourceHandleIndex (1 byte): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3028");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3028
            Site.CaptureRequirementIfAreEqual<byte>(
                sourceHandleIndex,
                ropCopyPropertiesResponse.SourceHandleIndex,
                3028,
                @"[In RopCopyProperties ROP Success Response Buffer,SourceHandleIndex (1 byte)]This index MUST be set to the value specified in the SourceHandleIndex field specified in the request.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3030");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3030
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(uint),
                ropCopyPropertiesResponse.ReturnValue.GetType(),
                3030,
                @"[In RopCopyProperties ROP Success Response Buffer]ReturnValue (4 bytes): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3032");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3032
            Site.CaptureRequirementIfAreEqual<uint>(
                SuccessReturnValue,
                ropCopyPropertiesResponse.ReturnValue,
                3032,
                @"[In RopCopyProperties ROP Success Response Buffer,ReturnValue (4 bytes) ]For this response[Success Response], this field is set to 0x00000000.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3033");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3033
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(ushort),
                ropCopyPropertiesResponse.PropertyProblemCount.GetType(),
                3033,
                @"[In RopCopyProperties ROP Success Response Buffer]PropertyProblemCount (2 bytes): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3035");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3035
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(PropertyProblem[]),
                ropCopyPropertiesResponse.PropertyProblems.GetType(),
                3035,
                @"[In RopCopyProperties ROP Success Response Buffer]PropertyProblems (variable): An array of PropertyProblem structures.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3036");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R3036
            Site.CaptureRequirementIfAreEqual<int>(
                ropCopyPropertiesResponse.PropertyProblemCount,
                ropCopyPropertiesResponse.PropertyProblems.Length,
                3036,
                @"[In RopCopyProperties ROP Success Response Buffer,PropertyProblems (variable)]The number of structures contained in this field[PropertyProblems (variable)] is specified by the PropertyProblemCount field.");
        }