コード例 #1
0
        /// <summary>
        /// Clear all rules of the inbox folder.
        /// </summary>
        protected void ClearAllRules()
        {
            // Call RopGetRulesTable with valid TableFlags.
            RopGetRulesTableResponse ropGetRulesTableResponse;
            uint ruleTableHandle = this.OxoruleAdapter.RopGetRulesTable(this.InboxFolderHandle, TableFlags.Normal, out ropGetRulesTableResponse);

            if (ropGetRulesTableResponse.ReturnValue == 0)
            {
                // Get rule ID if rules exist.
                PropertyTag ruleIDTag = new PropertyTag
                {
                    PropertyId   = (ushort)PropertyId.PidTagRuleId,
                    PropertyType = (ushort)PropertyType.PtypInteger64
                };
                RopQueryRowsResponse queryRowsResponse = this.OxoruleAdapter.QueryPropertiesInTable(ruleTableHandle, new PropertyTag[1] {
                    ruleIDTag
                });
                Site.Assert.AreEqual <uint>(0, queryRowsResponse.ReturnValue, "Retrieving rows from the rule table should succeed.");

                // Delete all rules if exist.
                if (queryRowsResponse.RowCount > 0)
                {
                    RuleData[] ruleDatas = new RuleData[queryRowsResponse.RowCount];
                    for (int i = 0; i < queryRowsResponse.RowCount; i++)
                    {
                        ulong          ruleId         = BitConverter.ToUInt64(queryRowsResponse.RowData.PropertyRows[i].PropertyValues[0].Value, 0);
                        RuleProperties ruleProperties = new RuleProperties();
                        ruleDatas[i] = AdapterHelper.GenerateValidRuleData(ActionType.OP_MARK_AS_READ, TestRuleDataType.ForRemove, 0, RuleState.ST_ENABLED, null, ruleProperties, ruleId);
                    }

                    RopModifyRulesResponse modifyRulesResponse = this.OxoruleAdapter.RopModifyRules(this.InboxFolderHandle, ModifyRuleFlag.Modify_OnExisting, ruleDatas);
                    Site.Assert.AreEqual <uint>(0, modifyRulesResponse.ReturnValue, "Deleting rule should be success");

                    // Wait the rule to be deleted
                    Thread.Sleep(this.WaitForTheRuleToTakeEffect);
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Parse the ROPOutputBuffer structure.
        /// </summary>
        /// <param name="s">A stream containing the ROPOutputBuffer structure</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);

            this.RopSize = ReadUshort();
            List<object> ropsList = new List<object>();
            List<uint> serverObjectHandleTable = new List<uint>();
            List<uint> tempServerObjectHandleTable = new List<uint>();
            long currentPosition = s.Position;
            s.Position += (this.RopSize - 2);
            while (s.Position < s.Length)
            {
                uint serverObjectTable = ReadUint();
                tempServerObjectHandleTable.Add(serverObjectTable);
            }
            s.Position = currentPosition;

            if (this.RopSize > 2)
            {
                do
                {
                    int CurrentByte = s.ReadByte();
                    s.Position -= 1;
                    switch ((RopIdType)CurrentByte)
                    {
                        // MS-OXCSTOR ROPs
                        case RopIdType.RopLogon:
                            if (DecodingContext.SessionLogonFlag != null && DecodingContext.SessionLogonFlag.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID))
                            {
                                DecodingContext.LogonFlags = DecodingContext.SessionLogonFlag[MapiInspector.MAPIInspector.currentParsingSessionID];
                            }
                            else
                            {
                                throw new MissingInformationException("Missing LogonFlags information for RopLogon", (ushort)CurrentByte, null);
                            }
                            if (((byte)DecodingContext.LogonFlags & 0x01) == (byte)LogonFlags.Private)
                            {
                                RopLogonResponse_PrivateMailboxes RopLogonResponse_PrivateMailboxes = new RopLogonResponse_PrivateMailboxes();
                                RopLogonResponse_PrivateMailboxes.Parse(s);
                                ropsList.Add(RopLogonResponse_PrivateMailboxes);
                                break;
                            }
                            else
                            {
                                RopLogonResponse_PublicFolders RopLogonResponse_PublicFolders = new RopLogonResponse_PublicFolders();
                                RopLogonResponse_PublicFolders.Parse(s);
                                ropsList.Add(RopLogonResponse_PublicFolders);
                                break;
                            }
                        case RopIdType.RopGetReceiveFolder:
                            RopGetReceiveFolderResponse RopGetReceiveFolderResponse = new RopGetReceiveFolderResponse();
                            RopGetReceiveFolderResponse.Parse(s);
                            ropsList.Add(RopGetReceiveFolderResponse);
                            break;
                        case RopIdType.RopSetReceiveFolder:
                            RopSetReceiveFolderResponse RopSetReceiveFolderResponse = new RopSetReceiveFolderResponse();
                            RopSetReceiveFolderResponse.Parse(s);
                            ropsList.Add(RopSetReceiveFolderResponse);
                            break;
                        case RopIdType.RopGetReceiveFolderTable:
                            RopGetReceiveFolderTableResponse RopGetReceiveFolderTableResponse = new RopGetReceiveFolderTableResponse();
                            RopGetReceiveFolderTableResponse.Parse(s);
                            ropsList.Add(RopGetReceiveFolderTableResponse);
                            break;
                        case RopIdType.RopGetStoreState:
                            RopGetStoreStateResponse RopGetStoreStateResponse = new RopGetStoreStateResponse();
                            RopGetStoreStateResponse.Parse(s);
                            ropsList.Add(RopGetStoreStateResponse);
                            break;
                        case RopIdType.RopGetOwningServers:
                            RopGetOwningServersResponse RopGetOwningServersResponse = new RopGetOwningServersResponse();
                            RopGetOwningServersResponse.Parse(s);
                            ropsList.Add(RopGetOwningServersResponse);
                            break;
                        case RopIdType.RopPublicFolderIsGhosted:
                            RopPublicFolderIsGhostedResponse RopPublicFolderIsGhostedResponse = new RopPublicFolderIsGhostedResponse();
                            RopPublicFolderIsGhostedResponse.Parse(s);
                            ropsList.Add(RopPublicFolderIsGhostedResponse);
                            break;
                        case RopIdType.RopLongTermIdFromId:
                            RopLongTermIdFromIdResponse RopLongTermIdFromIdResponse = new RopLongTermIdFromIdResponse();
                            RopLongTermIdFromIdResponse.Parse(s);
                            ropsList.Add(RopLongTermIdFromIdResponse);
                            break;
                        case RopIdType.RopIdFromLongTermId:
                            RopIdFromLongTermIdResponse RopIdFromLongTermIdResponse = new RopIdFromLongTermIdResponse();
                            RopIdFromLongTermIdResponse.Parse(s);
                            ropsList.Add(RopIdFromLongTermIdResponse);
                            break;
                        case RopIdType.RopGetPerUserLongTermIds:
                            RopGetPerUserLongTermIdsResponse RopGetPerUserLongTermIdsResponse = new RopGetPerUserLongTermIdsResponse();
                            RopGetPerUserLongTermIdsResponse.Parse(s);
                            ropsList.Add(RopGetPerUserLongTermIdsResponse);
                            break;
                        case RopIdType.RopGetPerUserGuid:
                            RopGetPerUserGuidResponse RopGetPerUserGuidResponse = new RopGetPerUserGuidResponse();
                            RopGetPerUserGuidResponse.Parse(s);
                            ropsList.Add(RopGetPerUserGuidResponse);
                            break;
                        case RopIdType.RopReadPerUserInformation:
                            RopReadPerUserInformationResponse RopReadPerUserInformationResponse = new RopReadPerUserInformationResponse();
                            RopReadPerUserInformationResponse.Parse(s);
                            ropsList.Add(RopReadPerUserInformationResponse);
                            break;
                        case RopIdType.RopWritePerUserInformation:
                            RopWritePerUserInformationResponse RopWritePerUserInformationResponse = new RopWritePerUserInformationResponse();
                            RopWritePerUserInformationResponse.Parse(s);
                            ropsList.Add(RopWritePerUserInformationResponse);
                            break;

                        // MS-OXCROPS ROPs
                        case RopIdType.RopSubmitMessage:
                            RopSubmitMessageResponse RopSubmitMessageResponse = new RopSubmitMessageResponse();
                            RopSubmitMessageResponse.Parse(s);
                            ropsList.Add(RopSubmitMessageResponse);
                            break;
                        case RopIdType.RopAbortSubmit:
                            RopAbortSubmitResponse RopAbortSubmitResponse = new RopAbortSubmitResponse();
                            RopAbortSubmitResponse.Parse(s);
                            ropsList.Add(RopAbortSubmitResponse);
                            break;
                        case RopIdType.RopGetAddressTypes:
                            RopGetAddressTypesResponse RopGetAddressTypesResponse = new RopGetAddressTypesResponse();
                            RopGetAddressTypesResponse.Parse(s);
                            ropsList.Add(RopGetAddressTypesResponse);
                            break;
                        case RopIdType.RopSetSpooler:
                            RopSetSpoolerResponse RopSetSpoolerResponse = new RopSetSpoolerResponse();
                            RopSetSpoolerResponse.Parse(s);
                            ropsList.Add(RopSetSpoolerResponse);
                            break;
                        case RopIdType.RopSpoolerLockMessage:
                            RopSpoolerLockMessageResponse RopSpoolerLockMessageResponse = new RopSpoolerLockMessageResponse();
                            RopSpoolerLockMessageResponse.Parse(s);
                            ropsList.Add(RopSpoolerLockMessageResponse);
                            break;
                        case RopIdType.RopTransportSend:
                            RopTransportSendResponse RopTransportSendResponse = new RopTransportSendResponse();
                            RopTransportSendResponse.Parse(s);
                            ropsList.Add(RopTransportSendResponse);
                            break;
                        case RopIdType.RopTransportNewMail:
                            RopTransportNewMailResponse RopTransportNewMailResponse = new RopTransportNewMailResponse();
                            RopTransportNewMailResponse.Parse(s);
                            ropsList.Add(RopTransportNewMailResponse);
                            break;
                        case RopIdType.RopGetTransportFolder:
                            RopGetTransportFolderResponse RopGetTransportFolderResponse = new RopGetTransportFolderResponse();
                            RopGetTransportFolderResponse.Parse(s);
                            ropsList.Add(RopGetTransportFolderResponse);
                            break;
                        case RopIdType.RopOptionsData:
                            RopOptionsDataResponse RopOptionsDataResponse = new RopOptionsDataResponse();
                            RopOptionsDataResponse.Parse(s);
                            ropsList.Add(RopOptionsDataResponse);
                            break;
                        case RopIdType.RopBackoff:
                            RopBackoffResponse RopBackoffResponse = new RopBackoffResponse();
                            RopBackoffResponse.Parse(s);
                            ropsList.Add(RopBackoffResponse);
                            break;
                        case RopIdType.RopBufferTooSmall:
                            if (DecodingContext.SessionRequestRemainSize != null && DecodingContext.SessionRequestRemainSize.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID))
                            {
                                uint RequestBuffersSize = 0;
                                int RopCountInResponse = ropsList.Count;
                                if (DecodingContext.SessionRequestRemainSize[MapiInspector.MAPIInspector.currentParsingSessionID].Count > RopCountInResponse)
                                {
                                    RequestBuffersSize = DecodingContext.SessionRequestRemainSize[MapiInspector.MAPIInspector.currentParsingSessionID][RopCountInResponse - 1];
                                }
                                RopBufferTooSmallResponse RopBufferTooSmallResponse = new RopBufferTooSmallResponse(RequestBuffersSize);
                                RopBufferTooSmallResponse.Parse(s);
                                ropsList.Add(RopBufferTooSmallResponse);
                                break;
                            }
                            else
                            {
                                throw new MissingInformationException("Missing RequestBuffersSize information for RopBufferTooSmall", (ushort)CurrentByte, null);
                            }
                        // MSOXCTABL ROPs
                        case RopIdType.RopSetColumns:
                            RopSetColumnsResponse RopSetColumnsResponse = new RopSetColumnsResponse();
                            RopSetColumnsResponse.Parse(s);
                            ropsList.Add(RopSetColumnsResponse);

                            if ((ErrorCodes)RopSetColumnsResponse.ReturnValue == ErrorCodes.Success)
                            {
                                if (DecodingContext.SetColumnProTagMap_Index != null && DecodingContext.SetColumnProTagMap_Index.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID)
                                && DecodingContext.SetColumnProTagMap_Index[MapiInspector.MAPIInspector.currentParsingSessionID].ContainsKey(RopSetColumnsResponse.InputHandleIndex))
                                {
                                    if (DecodingContext.SetColumnProTagMap_Handle.Count == 0)
                                    {
                                        Dictionary<uint, PropertyTag[]> dic = new Dictionary<uint, PropertyTag[]>();
                                        dic.Add(tempServerObjectHandleTable[RopSetColumnsResponse.InputHandleIndex], DecodingContext.SetColumnProTagMap_Index[MapiInspector.MAPIInspector.currentParsingSessionID][RopSetColumnsResponse.InputHandleIndex]);
                                        DecodingContext.SetColumnProTagMap_Handle.Add(MapiInspector.MAPIInspector.currentParsingSessionID, dic);
                                    }
                                    else if (DecodingContext.SetColumnProTagMap_Handle.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID) && DecodingContext.SetColumnProTagMap_Handle[MapiInspector.MAPIInspector.currentParsingSessionID].ContainsKey(tempServerObjectHandleTable[RopSetColumnsResponse.InputHandleIndex]))
                                    {
                                        DecodingContext.SetColumnProTagMap_Handle[MapiInspector.MAPIInspector.currentParsingSessionID].Remove(tempServerObjectHandleTable[RopSetColumnsResponse.InputHandleIndex]);
                                        DecodingContext.SetColumnProTagMap_Handle[MapiInspector.MAPIInspector.currentParsingSessionID].Add(tempServerObjectHandleTable[RopSetColumnsResponse.InputHandleIndex], DecodingContext.SetColumnProTagMap_Index[MapiInspector.MAPIInspector.currentParsingSessionID][RopSetColumnsResponse.InputHandleIndex]);
                                    }
                                }
                            }
                            break;

                        case RopIdType.RopSortTable:
                            RopSortTableResponse RopSortTableResponse = new RopSortTableResponse();
                            RopSortTableResponse.Parse(s);
                            ropsList.Add(RopSortTableResponse);
                            break;

                        case RopIdType.RopRestrict:
                            RopRestrictResponse RopRestrictResponse = new RopRestrictResponse();
                            RopRestrictResponse.Parse(s);
                            ropsList.Add(RopRestrictResponse);
                            break;

                        case RopIdType.RopQueryRows:
                            long currentPos = s.Position;
                            s.Position += 1;
                            int TempInputHandleIndex = s.ReadByte();
                            UInt32 returnValue_queryRow = ReadUint();
                            s.Position = currentPos;
                            if (returnValue_queryRow == 0)
                            {
                                if (DecodingContext.SetColumnProTagMap_Handle != null && DecodingContext.SetColumnProTagMap_Handle.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID) && DecodingContext.SetColumnProTagMap_Handle[MapiInspector.MAPIInspector.currentParsingSessionID].ContainsKey(tempServerObjectHandleTable[TempInputHandleIndex]))
                                {
                                    RopQueryRowsResponse RopQueryRowsResponse = new RopQueryRowsResponse(DecodingContext.SetColumnProTagMap_Handle[MapiInspector.MAPIInspector.currentParsingSessionID][tempServerObjectHandleTable[TempInputHandleIndex]]);
                                    RopQueryRowsResponse.Parse(s);
                                    ropsList.Add(RopQueryRowsResponse);
                                    break;
                                }
                                else
                                {
                                    throw new MissingInformationException("Missing PropertyTags information for RopQueryRowsResponse", (ushort)RopIdType.RopQueryRows, tempServerObjectHandleTable[TempInputHandleIndex]);
                                }
                            }
                            else
                            {
                                RopQueryRowsResponse ropQueryRowsResponse = new RopQueryRowsResponse(null);
                                ropQueryRowsResponse.Parse(s);
                                ropsList.Add(ropQueryRowsResponse);
                                break;
                            }
                        case RopIdType.RopAbort:
                            RopAbortResponse RopAbortResponse = new RopAbortResponse();
                            RopAbortResponse.Parse(s);
                            ropsList.Add(RopAbortResponse);
                            break;

                        case RopIdType.RopGetStatus:
                            RopGetStatusResponse RopGetStatusResponse = new RopGetStatusResponse();
                            RopGetStatusResponse.Parse(s);
                            ropsList.Add(RopGetStatusResponse);
                            break;

                        case RopIdType.RopQueryPosition:
                            RopQueryPositionResponse RopQueryPositionResponse = new RopQueryPositionResponse();
                            RopQueryPositionResponse.Parse(s);
                            ropsList.Add(RopQueryPositionResponse);
                            break;

                        case RopIdType.RopSeekRow:
                            RopSeekRowResponse RopSeekRowResponse = new RopSeekRowResponse();
                            RopSeekRowResponse.Parse(s);
                            ropsList.Add(RopSeekRowResponse);
                            break;

                        case RopIdType.RopSeekRowBookmark:
                            RopSeekRowBookmarkResponse RopSeekRowBookmarkResponse = new RopSeekRowBookmarkResponse();
                            RopSeekRowBookmarkResponse.Parse(s);
                            ropsList.Add(RopSeekRowBookmarkResponse);
                            break;

                        case RopIdType.RopSeekRowFractional:
                            RopSeekRowFractionalResponse RopSeekRowFractionalResponse = new RopSeekRowFractionalResponse();
                            RopSeekRowFractionalResponse.Parse(s);
                            ropsList.Add(RopSeekRowFractionalResponse);
                            break;

                        case RopIdType.RopCreateBookmark:
                            RopCreateBookmarkResponse RopCreateBookmarkResponse = new RopCreateBookmarkResponse();
                            RopCreateBookmarkResponse.Parse(s);
                            ropsList.Add(RopCreateBookmarkResponse);
                            break;

                        case RopIdType.RopQueryColumnsAll:
                            RopQueryColumnsAllResponse RopQueryColumnsAllResponse = new RopQueryColumnsAllResponse();
                            RopQueryColumnsAllResponse.Parse(s);
                            ropsList.Add(RopQueryColumnsAllResponse);
                            break;

                        case RopIdType.RopFindRow:
                            long currentPos_findRow = s.Position;
                            s.Position += 1;
                            int TempInputHandleIndex_findRow = s.ReadByte();
                            UInt32 returnValue_findRow = ReadUint();
                            s.Position = currentPos_findRow;
                            if (returnValue_findRow == 0)
                            {
                                if (DecodingContext.SetColumnProTagMap_Handle != null && DecodingContext.SetColumnProTagMap_Handle.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID) && DecodingContext.SetColumnProTagMap_Handle[MapiInspector.MAPIInspector.currentParsingSessionID].ContainsKey(tempServerObjectHandleTable[TempInputHandleIndex_findRow]))
                                {
                                    RopFindRowResponse ropFindRowResponse = new RopFindRowResponse(DecodingContext.SetColumnProTagMap_Handle[MapiInspector.MAPIInspector.currentParsingSessionID][tempServerObjectHandleTable[TempInputHandleIndex_findRow]]);
                                    ropFindRowResponse.Parse(s);
                                    ropsList.Add(ropFindRowResponse);
                                    break;
                                }
                                else
                                {
                                    throw new MissingInformationException("Missing PropertyTags information for RopFindRowsResponse", (ushort)RopIdType.RopFindRow, tempServerObjectHandleTable[TempInputHandleIndex_findRow]);
                                }
                            }
                            else
                            {
                                RopFindRowResponse RopFindRowResponse = new RopFindRowResponse(null);
                                RopFindRowResponse.Parse(s);
                                ropsList.Add(RopFindRowResponse);
                                break;
                            }

                        case RopIdType.RopFreeBookmark:
                            RopFreeBookmarkResponse RopFreeBookmarkResponse = new RopFreeBookmarkResponse();
                            RopFreeBookmarkResponse.Parse(s);
                            ropsList.Add(RopFreeBookmarkResponse);
                            break;

                        case RopIdType.RopResetTable:
                            RopResetTableResponse RopResetTableResponse = new RopResetTableResponse();
                            RopResetTableResponse.Parse(s);
                            ropsList.Add(RopResetTableResponse);
                            break;

                        case RopIdType.RopExpandRow:
                            long currentPos_expandRow = s.Position;
                            s.Position += 1;
                            int TempInputHandleIndex_expandRow = s.ReadByte();
                            UInt32 returnValue_expandRow = ReadUint();
                            s.Position = currentPos_expandRow;
                            if (returnValue_expandRow == 0)
                            {
                                if (DecodingContext.SetColumnProTagMap_Handle != null && DecodingContext.SetColumnProTagMap_Handle.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID) && DecodingContext.SetColumnProTagMap_Handle[MapiInspector.MAPIInspector.currentParsingSessionID].ContainsKey(tempServerObjectHandleTable[TempInputHandleIndex_expandRow]))
                                {
                                    RopExpandRowResponse ropFindRowResponse = new RopExpandRowResponse(DecodingContext.SetColumnProTagMap_Handle[MapiInspector.MAPIInspector.currentParsingSessionID][tempServerObjectHandleTable[TempInputHandleIndex_expandRow]]);
                                    ropFindRowResponse.Parse(s);
                                    ropsList.Add(ropFindRowResponse);
                                    break;
                                }
                                else
                                {
                                    throw new MissingInformationException("Missing PropertyTags information for RopExpandRowsResponse", (ushort)RopIdType.RopExpandRow, tempServerObjectHandleTable[TempInputHandleIndex_expandRow]);
                                }
                            }
                            else
                            {
                                RopExpandRowResponse RopFindRowResponse = new RopExpandRowResponse(null);
                                RopFindRowResponse.Parse(s);
                                ropsList.Add(RopFindRowResponse);
                                break;
                            }

                        case RopIdType.RopCollapseRow:
                            RopCollapseRowResponse RopCollapseRowResponse = new RopCollapseRowResponse();
                            RopCollapseRowResponse.Parse(s);
                            ropsList.Add(RopCollapseRowResponse);
                            break;

                        case RopIdType.RopGetCollapseState:
                            RopGetCollapseStateResponse RopGetCollapseStateResponse = new RopGetCollapseStateResponse();
                            RopGetCollapseStateResponse.Parse(s);
                            ropsList.Add(RopGetCollapseStateResponse);
                            break;

                        case RopIdType.RopSetCollapseState:
                            RopSetCollapseStateResponse RopSetCollapseStateResponse = new RopSetCollapseStateResponse();
                            RopSetCollapseStateResponse.Parse(s);
                            ropsList.Add(RopSetCollapseStateResponse);
                            break;

                        // MSOXORULE ROPs
                        case RopIdType.RopModifyRules:
                            RopModifyRulesResponse RopModifyRulesResponse = new RopModifyRulesResponse();
                            RopModifyRulesResponse.Parse(s);
                            ropsList.Add(RopModifyRulesResponse);
                            break;

                        case RopIdType.RopGetRulesTable:
                            RopGetRulesTableResponse RopGetRulesTableResponse = new RopGetRulesTableResponse();
                            RopGetRulesTableResponse.Parse(s);
                            ropsList.Add(RopGetRulesTableResponse);
                            break;

                        case RopIdType.RopUpdateDeferredActionMessages:
                            RopUpdateDeferredActionMessagesResponse RopUpdateDeferredActionMessagesResponse = new RopUpdateDeferredActionMessagesResponse();
                            RopUpdateDeferredActionMessagesResponse.Parse(s);
                            ropsList.Add(RopUpdateDeferredActionMessagesResponse);
                            break;

                        //MS-OXCFXICS ROPs
                        case RopIdType.RopFastTransferSourceCopyProperties:
                            RopFastTransferSourceCopyPropertiesResponse RopFastTransferSourceCopyPropertiesResponse = new RopFastTransferSourceCopyPropertiesResponse();
                            RopFastTransferSourceCopyPropertiesResponse.Parse(s);
                            ropsList.Add(RopFastTransferSourceCopyPropertiesResponse);
                            break;
                        case RopIdType.RopFastTransferSourceCopyTo:
                            RopFastTransferSourceCopyToResponse RopFastTransferSourceCopyToResponse = new RopFastTransferSourceCopyToResponse();
                            RopFastTransferSourceCopyToResponse.Parse(s);
                            ropsList.Add(RopFastTransferSourceCopyToResponse);
                            break;
                        case RopIdType.RopFastTransferSourceCopyMessages:
                            RopFastTransferSourceCopyMessagesResponse RopFastTransferSourceCopyMessagesResponse = new RopFastTransferSourceCopyMessagesResponse();
                            RopFastTransferSourceCopyMessagesResponse.Parse(s);
                            ropsList.Add(RopFastTransferSourceCopyMessagesResponse);
                            break;
                        case RopIdType.RopFastTransferSourceCopyFolder:
                            RopFastTransferSourceCopyFolderResponse RopFastTransferSourceCopyFolderResponse = new RopFastTransferSourceCopyFolderResponse();
                            RopFastTransferSourceCopyFolderResponse.Parse(s);
                            ropsList.Add(RopFastTransferSourceCopyFolderResponse);
                            break;
                        case RopIdType.RopFastTransferSourceGetBuffer:
                            if (DecodingContext.SessionFastTransferStreamType != null && DecodingContext.SessionFastTransferStreamType.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID))
                            {
                                DecodingContext.StreamType_Getbuffer = DecodingContext.SessionFastTransferStreamType[MapiInspector.MAPIInspector.currentParsingSessionID];
                            }
                            else
                            {
                                throw new MissingInformationException("Missing TransferStream type information for RopFastTransferSourceGetBufferResponse", (ushort)CurrentByte, null);
                            }
                            RopFastTransferSourceGetBufferResponse RopFastTransferSourceGetBufferResponse = new RopFastTransferSourceGetBufferResponse();
                            RopFastTransferSourceGetBufferResponse.Parse(s);
                            ropsList.Add(RopFastTransferSourceGetBufferResponse);
                            break;
                        case RopIdType.RopTellVersion:
                            RopTellVersionResponse RopTellVersionResponse = new RopTellVersionResponse();
                            RopTellVersionResponse.Parse(s);
                            ropsList.Add(RopTellVersionResponse);
                            break;
                        case RopIdType.RopSynchronizationGetTransferState:
                            RopSynchronizationGetTransferStateResponse RopSynchronizationGetTransferStateResponse = new RopSynchronizationGetTransferStateResponse();
                            RopSynchronizationGetTransferStateResponse.Parse(s);
                            ropsList.Add(RopSynchronizationGetTransferStateResponse);
                            break;
                        case RopIdType.RopFastTransferDestinationConfigure:
                            RopFastTransferDestinationConfigureResponse RopFastTransferDestinationConfigureResponse = new RopFastTransferDestinationConfigureResponse();
                            RopFastTransferDestinationConfigureResponse.Parse(s);
                            ropsList.Add(RopFastTransferDestinationConfigureResponse);
                            break;
                        case RopIdType.RopFastTransferDestinationPutBuffer:
                            RopFastTransferDestinationPutBufferResponse RopFastTransferDestinationPutBufferResponse = new RopFastTransferDestinationPutBufferResponse();
                            RopFastTransferDestinationPutBufferResponse.Parse(s);
                            ropsList.Add(RopFastTransferDestinationPutBufferResponse);
                            break;
                        case RopIdType.RopSynchronizationConfigure:
                            RopSynchronizationConfigureResponse RopSynchronizationConfigureResponse = new RopSynchronizationConfigureResponse();
                            RopSynchronizationConfigureResponse.Parse(s);
                            ropsList.Add(RopSynchronizationConfigureResponse);
                            break;
                        case RopIdType.RopSynchronizationUploadStateStreamBegin:
                            RopSynchronizationUploadStateStreamBeginResponse RopSynchronizationUploadStateStreamBeginResponse = new RopSynchronizationUploadStateStreamBeginResponse();
                            RopSynchronizationUploadStateStreamBeginResponse.Parse(s);
                            ropsList.Add(RopSynchronizationUploadStateStreamBeginResponse);
                            break;
                        case RopIdType.RopSynchronizationUploadStateStreamContinue:
                            RopSynchronizationUploadStateStreamContinueResponse RopSynchronizationUploadStateStreamContinueResponse = new RopSynchronizationUploadStateStreamContinueResponse();
                            RopSynchronizationUploadStateStreamContinueResponse.Parse(s);
                            ropsList.Add(RopSynchronizationUploadStateStreamContinueResponse);
                            break;
                        case RopIdType.RopSynchronizationUploadStateStreamEnd:
                            RopSynchronizationUploadStateStreamEndResponse RopSynchronizationUploadStateStreamEndResponse = new RopSynchronizationUploadStateStreamEndResponse();
                            RopSynchronizationUploadStateStreamEndResponse.Parse(s);
                            ropsList.Add(RopSynchronizationUploadStateStreamEndResponse);
                            break;
                        case RopIdType.RopSynchronizationOpenCollector:
                            RopSynchronizationOpenCollectorResponse RopSynchronizationOpenCollectorResponse = new RopSynchronizationOpenCollectorResponse();
                            RopSynchronizationOpenCollectorResponse.Parse(s);
                            ropsList.Add(RopSynchronizationOpenCollectorResponse);
                            break;
                        case RopIdType.RopSynchronizationImportMessageChange:
                            RopSynchronizationImportMessageChangeResponse RopSynchronizationImportMessageChangeResponse = new RopSynchronizationImportMessageChangeResponse();
                            RopSynchronizationImportMessageChangeResponse.Parse(s);
                            ropsList.Add(RopSynchronizationImportMessageChangeResponse);
                            break;
                        case RopIdType.RopSynchronizationImportHierarchyChange:
                            RopSynchronizationImportHierarchyChangeResponse RopSynchronizationImportHierarchyChangeResponse = new RopSynchronizationImportHierarchyChangeResponse();
                            RopSynchronizationImportHierarchyChangeResponse.Parse(s);
                            ropsList.Add(RopSynchronizationImportHierarchyChangeResponse);
                            break;
                        case RopIdType.RopSynchronizationImportMessageMove:
                            RopSynchronizationImportMessageMoveResponse RopSynchronizationImportMessageMoveResponse = new RopSynchronizationImportMessageMoveResponse();
                            RopSynchronizationImportMessageMoveResponse.Parse(s);
                            ropsList.Add(RopSynchronizationImportMessageMoveResponse);
                            break;
                        case RopIdType.RopSynchronizationImportDeletes:
                            RopSynchronizationImportDeletesResponse RopSynchronizationImportDeletesResponse = new RopSynchronizationImportDeletesResponse();
                            RopSynchronizationImportDeletesResponse.Parse(s);
                            ropsList.Add(RopSynchronizationImportDeletesResponse);
                            break;
                        case RopIdType.RopSynchronizationImportReadStateChanges:
                            RopSynchronizationImportReadStateChangesResponse RopSynchronizationImportReadStateChangesResponse = new RopSynchronizationImportReadStateChangesResponse();
                            RopSynchronizationImportReadStateChangesResponse.Parse(s);
                            ropsList.Add(RopSynchronizationImportReadStateChangesResponse);
                            break;
                        case RopIdType.RopGetLocalReplicaIds:
                            RopGetLocalReplicaIdsResponse RopGetLocalReplicaIdsResponse = new RopGetLocalReplicaIdsResponse();
                            RopGetLocalReplicaIdsResponse.Parse(s);
                            ropsList.Add(RopGetLocalReplicaIdsResponse);
                            break;
                        case RopIdType.RopSetLocalReplicaMidsetDeleted:
                            RopSetLocalReplicaMidsetDeletedResponse RopSetLocalReplicaMidsetDeletedResponse = new RopSetLocalReplicaMidsetDeletedResponse();
                            RopSetLocalReplicaMidsetDeletedResponse.Parse(s);
                            ropsList.Add(RopSetLocalReplicaMidsetDeletedResponse);
                            break;

                        // MS-OXCPRPT ROPs
                        case RopIdType.RopGetPropertiesSpecific:
                            if (!(DecodingContext.SessionPropertyTags != null && DecodingContext.SessionPropertyTags.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID)))
                            {
                                throw new MissingInformationException("Missing PropertyTags information for RopFastTransferSourceCopyProperties", (ushort)CurrentByte, null);
                            }
                            RopGetPropertiesSpecificResponse RopGetPropertiesSpecificResponse = new RopGetPropertiesSpecificResponse();
                            RopGetPropertiesSpecificResponse.Parse(s);
                            ropsList.Add(RopGetPropertiesSpecificResponse);
                            break;
                        case RopIdType.RopGetPropertiesAll:
                            RopGetPropertiesAllResponse RopGetPropertiesAllResponse = new RopGetPropertiesAllResponse();
                            RopGetPropertiesAllResponse.Parse(s);
                            ropsList.Add(RopGetPropertiesAllResponse);
                            break;
                        case RopIdType.RopGetPropertiesList:
                            RopGetPropertiesListResponse RopGetPropertiesListResponse = new RopGetPropertiesListResponse();
                            RopGetPropertiesListResponse.Parse(s);
                            ropsList.Add(RopGetPropertiesListResponse);
                            break;
                        case RopIdType.RopSetProperties:
                            RopSetPropertiesResponse RopSetPropertiesResponse = new RopSetPropertiesResponse();
                            RopSetPropertiesResponse.Parse(s);
                            ropsList.Add(RopSetPropertiesResponse);
                            break;
                        case RopIdType.RopSetPropertiesNoReplicate:
                            RopSetPropertiesNoReplicateResponse RopSetPropertiesNoReplicateResponse = new RopSetPropertiesNoReplicateResponse();
                            RopSetPropertiesNoReplicateResponse.Parse(s);
                            ropsList.Add(RopSetPropertiesNoReplicateResponse);
                            break;
                        case RopIdType.RopDeleteProperties:
                            RopDeletePropertiesResponse RopDeletePropertiesResponse = new RopDeletePropertiesResponse();
                            RopDeletePropertiesResponse.Parse(s);
                            ropsList.Add(RopDeletePropertiesResponse);
                            break;
                        case RopIdType.RopDeletePropertiesNoReplicate:
                            RopDeletePropertiesNoReplicateResponse RopDeletePropertiesNoReplicateResponse = new RopDeletePropertiesNoReplicateResponse();
                            RopDeletePropertiesNoReplicateResponse.Parse(s);
                            ropsList.Add(RopDeletePropertiesNoReplicateResponse);
                            break;
                        case RopIdType.RopQueryNamedProperties:
                            RopQueryNamedPropertiesResponse RopQueryNamedPropertiesResponse = new RopQueryNamedPropertiesResponse();
                            RopQueryNamedPropertiesResponse.Parse(s);
                            ropsList.Add(RopQueryNamedPropertiesResponse);
                            break;
                        case RopIdType.RopCopyProperties:
                            RopCopyPropertiesResponse RopCopyPropertiesResponse = new RopCopyPropertiesResponse();
                            RopCopyPropertiesResponse.Parse(s);
                            ropsList.Add(RopCopyPropertiesResponse);
                            break;
                        case RopIdType.RopCopyTo:
                            RopCopyToResponse RopCopyToResponse = new RopCopyToResponse();
                            RopCopyToResponse.Parse(s);
                            ropsList.Add(RopCopyToResponse);
                            break;
                        case RopIdType.RopGetPropertyIdsFromNames:
                            RopGetPropertyIdsFromNamesResponse RopGetPropertyIdsFromNamesResponse = new RopGetPropertyIdsFromNamesResponse();
                            RopGetPropertyIdsFromNamesResponse.Parse(s);
                            ropsList.Add(RopGetPropertyIdsFromNamesResponse);
                            break;
                        case RopIdType.RopGetNamesFromPropertyIds:
                            RopGetNamesFromPropertyIdsResponse RopGetNamesFromPropertyIdsResponse = new RopGetNamesFromPropertyIdsResponse();
                            RopGetNamesFromPropertyIdsResponse.Parse(s);
                            ropsList.Add(RopGetNamesFromPropertyIdsResponse);
                            break;
                        case RopIdType.RopOpenStream:
                            RopOpenStreamResponse RopOpenStreamResponse = new RopOpenStreamResponse();
                            RopOpenStreamResponse.Parse(s);
                            ropsList.Add(RopOpenStreamResponse);
                            break;
                        case RopIdType.RopReadStream:
                            RopReadStreamResponse RopReadStreamResponse = new RopReadStreamResponse();
                            RopReadStreamResponse.Parse(s);
                            ropsList.Add(RopReadStreamResponse);
                            break;
                        case RopIdType.RopWriteStream:
                            RopWriteStreamResponse RopWriteStreamResponse = new RopWriteStreamResponse();
                            RopWriteStreamResponse.Parse(s);
                            ropsList.Add(RopWriteStreamResponse);
                            break;
                        case RopIdType.RopCommitStream:
                            RopCommitStreamResponse RopCommitStreamResponse = new RopCommitStreamResponse();
                            RopCommitStreamResponse.Parse(s);
                            ropsList.Add(RopCommitStreamResponse);
                            break;
                        case RopIdType.RopGetStreamSize:
                            RopGetStreamSizeResponse RopGetStreamSizeResponse = new RopGetStreamSizeResponse();
                            RopGetStreamSizeResponse.Parse(s);
                            ropsList.Add(RopGetStreamSizeResponse);
                            break;
                        case RopIdType.RopSetStreamSize:
                            RopSetStreamSizeResponse RopSetStreamSizeResponse = new RopSetStreamSizeResponse();
                            RopSetStreamSizeResponse.Parse(s);
                            ropsList.Add(RopSetStreamSizeResponse);
                            break;
                        case RopIdType.RopSeekStream:
                            RopSeekStreamResponse RopSeekStreamResponse = new RopSeekStreamResponse();
                            RopSeekStreamResponse.Parse(s);
                            ropsList.Add(RopSeekStreamResponse);
                            break;
                        case RopIdType.RopCopyToStream:
                            RopCopyToStreamResponse RopCopyToStreamResponse = new RopCopyToStreamResponse();
                            RopCopyToStreamResponse.Parse(s);
                            ropsList.Add(RopCopyToStreamResponse);
                            break;
                        case RopIdType.RopProgress:
                            RopProgressResponse RopProgressResponse = new RopProgressResponse();
                            RopProgressResponse.Parse(s);
                            ropsList.Add(RopProgressResponse);
                            break;
                        case RopIdType.RopLockRegionStream:
                            RopLockRegionStreamResponse RopLockRegionStreamResponse = new RopLockRegionStreamResponse();
                            RopLockRegionStreamResponse.Parse(s);
                            ropsList.Add(RopLockRegionStreamResponse);
                            break;
                        case RopIdType.RopUnlockRegionStream:
                            RopUnlockRegionStreamResponse RopUnlockRegionStreamResponse = new RopUnlockRegionStreamResponse();
                            RopUnlockRegionStreamResponse.Parse(s);
                            ropsList.Add(RopUnlockRegionStreamResponse);
                            break;
                        case RopIdType.RopWriteAndCommitStream:
                            RopWriteAndCommitStreamResponse RopWriteAndCommitStreamResponse = new RopWriteAndCommitStreamResponse();
                            RopWriteAndCommitStreamResponse.Parse(s);
                            ropsList.Add(RopWriteAndCommitStreamResponse);
                            break;
                        case RopIdType.RopCloneStream:
                            RopCloneStreamResponse RopCloneStreamResponse = new RopCloneStreamResponse();
                            RopCloneStreamResponse.Parse(s);
                            ropsList.Add(RopCloneStreamResponse);
                            break;

                        // MSOXCFOLD ROPs
                        case RopIdType.RopOpenFolder:
                            RopOpenFolderResponse RopOpenFolderResponse = new RopOpenFolderResponse();
                            RopOpenFolderResponse.Parse(s);
                            ropsList.Add(RopOpenFolderResponse);
                            break;

                        case RopIdType.RopCreateFolder:
                            RopCreateFolderResponse RopCreateFolderResponse = new RopCreateFolderResponse();
                            RopCreateFolderResponse.Parse(s);
                            ropsList.Add(RopCreateFolderResponse);
                            break;

                        case RopIdType.RopDeleteFolder:
                            RopDeleteFolderResponse RopDeleteFolderResponse = new RopDeleteFolderResponse();
                            RopDeleteFolderResponse.Parse(s);
                            ropsList.Add(RopDeleteFolderResponse);
                            break;

                        case RopIdType.RopSetSearchCriteria:
                            RopSetSearchCriteriaResponse RopSetSearchCriteriaResponse = new RopSetSearchCriteriaResponse();
                            RopSetSearchCriteriaResponse.Parse(s);
                            ropsList.Add(RopSetSearchCriteriaResponse);
                            break;

                        case RopIdType.RopGetSearchCriteria:
                            RopGetSearchCriteriaResponse RopGetSearchCriteriaResponse = new RopGetSearchCriteriaResponse();
                            RopGetSearchCriteriaResponse.Parse(s);
                            ropsList.Add(RopGetSearchCriteriaResponse);
                            break;

                        case RopIdType.RopMoveCopyMessages:
                            RopMoveCopyMessagesResponse RopMoveCopyMessagesResponse = new RopMoveCopyMessagesResponse();
                            RopMoveCopyMessagesResponse.Parse(s);
                            ropsList.Add(RopMoveCopyMessagesResponse);
                            break;

                        case RopIdType.RopMoveFolder:
                            RopMoveFolderResponse RopMoveFolderResponse = new RopMoveFolderResponse();
                            RopMoveFolderResponse.Parse(s);
                            ropsList.Add(RopMoveFolderResponse);
                            break;

                        case RopIdType.RopCopyFolder:
                            RopCopyFolderResponse RopCopyFolderResponse = new RopCopyFolderResponse();
                            RopCopyFolderResponse.Parse(s);
                            ropsList.Add(RopCopyFolderResponse);
                            break;

                        case RopIdType.RopEmptyFolder:
                            RopEmptyFolderResponse RopEmptyFolderResponse = new RopEmptyFolderResponse();
                            RopEmptyFolderResponse.Parse(s);
                            ropsList.Add(RopEmptyFolderResponse);
                            break;

                        case RopIdType.RopHardDeleteMessagesAndSubfolders:
                            RopHardDeleteMessagesAndSubfoldersResponse RopHardDeleteMessagesAndSubfoldersResponse = new RopHardDeleteMessagesAndSubfoldersResponse();
                            RopHardDeleteMessagesAndSubfoldersResponse.Parse(s);
                            ropsList.Add(RopHardDeleteMessagesAndSubfoldersResponse);
                            break;

                        case RopIdType.RopDeleteMessages:
                            RopDeleteMessagesResponse RopDeleteMessagesResponse = new RopDeleteMessagesResponse();
                            RopDeleteMessagesResponse.Parse(s);
                            ropsList.Add(RopDeleteMessagesResponse);
                            break;

                        case RopIdType.RopHardDeleteMessages:
                            RopHardDeleteMessagesResponse RopHardDeleteMessagesResponse = new RopHardDeleteMessagesResponse();
                            RopHardDeleteMessagesResponse.Parse(s);
                            ropsList.Add(RopHardDeleteMessagesResponse);
                            break;

                        case RopIdType.RopGetHierarchyTable:
                            RopGetHierarchyTableResponse RopGetHierarchyTableResponse = new RopGetHierarchyTableResponse();
                            RopGetHierarchyTableResponse.Parse(s);
                            ropsList.Add(RopGetHierarchyTableResponse);
                            break;

                        case RopIdType.RopGetContentsTable:
                            RopGetContentsTableResponse RopGetContentsTableResponse = new RopGetContentsTableResponse();
                            RopGetContentsTableResponse.Parse(s);
                            ropsList.Add(RopGetContentsTableResponse);
                            break;

                        //MS-OXCMSG ROPs
                        case RopIdType.RopOpenMessage:
                            RopOpenMessageResponse ropOpenMessageResponse = new RopOpenMessageResponse();
                            ropOpenMessageResponse.Parse(s);
                            ropsList.Add(ropOpenMessageResponse);
                            break;
                        case RopIdType.RopCreateMessage:
                            RopCreateMessageResponse ropCreateMessageResponse = new RopCreateMessageResponse();
                            ropCreateMessageResponse.Parse(s);
                            ropsList.Add(ropCreateMessageResponse);
                            break;
                        case RopIdType.RopSaveChangesMessage:
                            RopSaveChangesMessageResponse ropSaveChangesMessageResponse = new RopSaveChangesMessageResponse();
                            ropSaveChangesMessageResponse.Parse(s);
                            ropsList.Add(ropSaveChangesMessageResponse);
                            break;
                        case RopIdType.RopRemoveAllRecipients:
                            RopRemoveAllRecipientsResponse ropRemoveAllRecipientsResponse = new RopRemoveAllRecipientsResponse();
                            ropRemoveAllRecipientsResponse.Parse(s);
                            ropsList.Add(ropRemoveAllRecipientsResponse);
                            break;
                        case RopIdType.RopModifyRecipients:
                            RopModifyRecipientsResponse ropModifyRecipientsResponse = new RopModifyRecipientsResponse();
                            ropModifyRecipientsResponse.Parse(s);
                            ropsList.Add(ropModifyRecipientsResponse);
                            break;
                        case RopIdType.RopReadRecipients:
                            RopReadRecipientsResponse ropReadRecipientsResponse = new RopReadRecipientsResponse();
                            ropReadRecipientsResponse.Parse(s);
                            ropsList.Add(ropReadRecipientsResponse);
                            break;
                        case RopIdType.RopReloadCachedInformation:
                            RopReloadCachedInformationResponse ropReloadCachedInformationResponse = new RopReloadCachedInformationResponse();
                            ropReloadCachedInformationResponse.Parse(s);
                            ropsList.Add(ropReloadCachedInformationResponse);
                            break;
                        case RopIdType.RopSetMessageStatus:
                            RopSetMessageStatusResponse ropSetMessageStatusResponse = new RopSetMessageStatusResponse();
                            ropSetMessageStatusResponse.Parse(s);
                            ropsList.Add(ropSetMessageStatusResponse);
                            break;
                        case RopIdType.RopGetMessageStatus:
                            RopGetMessageStatusResponse ropGetMessageStatusResponse = new RopGetMessageStatusResponse();
                            ropGetMessageStatusResponse.Parse(s);
                            ropsList.Add(ropGetMessageStatusResponse);
                            break;
                        case RopIdType.RopSetReadFlags:
                            RopSetReadFlagsResponse ropSetReadFlagsResponse = new RopSetReadFlagsResponse();
                            ropSetReadFlagsResponse.Parse(s);
                            ropsList.Add(ropSetReadFlagsResponse);
                            break;
                        case RopIdType.RopSetMessageReadFlag:
                            RopSetMessageReadFlagResponse ropSetMessageReadFlagResponse = new RopSetMessageReadFlagResponse();
                            ropSetMessageReadFlagResponse.Parse(s);
                            ropsList.Add(ropSetMessageReadFlagResponse);
                            break;
                        case RopIdType.RopOpenAttachment:
                            RopOpenAttachmentResponse ropOpenAttachmentResponse = new RopOpenAttachmentResponse();
                            ropOpenAttachmentResponse.Parse(s);
                            ropsList.Add(ropOpenAttachmentResponse);
                            break;
                        case RopIdType.RopCreateAttachment:
                            RopCreateAttachmentResponse ropCreateAttachmentResponse = new RopCreateAttachmentResponse();
                            ropCreateAttachmentResponse.Parse(s);
                            ropsList.Add(ropCreateAttachmentResponse);
                            break;
                        case RopIdType.RopDeleteAttachment:
                            RopDeleteAttachmentResponse ropDeleteAttachmentResponse = new RopDeleteAttachmentResponse();
                            ropDeleteAttachmentResponse.Parse(s);
                            ropsList.Add(ropDeleteAttachmentResponse);
                            break;
                        case RopIdType.RopSaveChangesAttachment:
                            RopSaveChangesAttachmentResponse ropSaveChangesAttachmentResponse = new RopSaveChangesAttachmentResponse();
                            ropSaveChangesAttachmentResponse.Parse(s);
                            ropsList.Add(ropSaveChangesAttachmentResponse);
                            break;
                        case RopIdType.RopOpenEmbeddedMessage:
                            RopOpenEmbeddedMessageResponse ropOpenEmbeddedMessageResponse = new RopOpenEmbeddedMessageResponse();
                            ropOpenEmbeddedMessageResponse.Parse(s);
                            ropsList.Add(ropOpenEmbeddedMessageResponse);
                            break;
                        case RopIdType.RopGetAttachmentTable:
                            RopGetAttachmentTableResponse ropGetAttachmentTableResponse = new RopGetAttachmentTableResponse();
                            ropGetAttachmentTableResponse.Parse(s);
                            ropsList.Add(ropGetAttachmentTableResponse);
                            break;
                        case RopIdType.RopGetValidAttachments:
                            RopGetValidAttachmentsResponse ropGetValidAttachmentsResponse = new RopGetValidAttachmentsResponse();
                            ropGetValidAttachmentsResponse.Parse(s);
                            ropsList.Add(ropGetValidAttachmentsResponse);
                            break;

                        // MSOXCNOTIF ROPs
                        case RopIdType.RopRegisterNotification:
                            RopRegisterNotificationResponse RopRegisterNotificationResponse = new RopRegisterNotificationResponse();
                            RopRegisterNotificationResponse.Parse(s);
                            ropsList.Add(RopRegisterNotificationResponse);
                            break;

                        case RopIdType.RopPending:
                            RopPendingResponse RopPendingResponse = new RopPendingResponse();
                            RopPendingResponse.Parse(s);
                            ropsList.Add(RopPendingResponse);
                            break;

                        case RopIdType.RopNotify:
                            RopNotifyResponse ropNotifyResponse = new RopNotifyResponse();
                            ropNotifyResponse.Parse(s);
                            ropsList.Add(ropNotifyResponse);
                            break;

                        // MS-OXCPERM ROPs
                        case RopIdType.RopGetPermissionsTable:
                            RopGetPermissionsTableResponse RopGetPermissionsTableResponse = new RopGetPermissionsTableResponse();
                            RopGetPermissionsTableResponse.Parse(s);
                            ropsList.Add(RopGetPermissionsTableResponse);
                            break;

                        case RopIdType.RopModifyPermissions:
                            RopModifyPermissionsResponse RopModifyPermissionsResponse = new RopModifyPermissionsResponse();
                            RopModifyPermissionsResponse.Parse(s);
                            ropsList.Add(RopModifyPermissionsResponse);
                            break;

                        default:
                            object RopsBytes = ReadBytes(this.RopSize - (int)s.Position);
                            ropsList.Add(RopsBytes);
                            break;
                    }

                } while (s.Position < this.RopSize);

            }
            else
            {
                this.RopsList = null;
            }

            this.RopsList = ropsList.ToArray();
            while (s.Position < s.Length)
            {
                uint ServerObjectHandle = ReadUint();
                serverObjectHandleTable.Add(ServerObjectHandle);
            }
            this.ServerObjectHandleTable = serverObjectHandleTable.ToArray();

            if (this.RopsList.Length > 0)
            {
                foreach (var ropResponse in this.RopsList)
                {
                    if (ropResponse is RopCreateFolderResponse || ropResponse is RopOpenFolderResponse)
                    {
                        uint objectHandleKey;
                        if (ropResponse is RopCreateFolderResponse)
                        {
                            objectHandleKey = this.ServerObjectHandleTable[(ropResponse as RopCreateFolderResponse).OutputHandleIndex];
                        }
                        else
                        {
                            objectHandleKey = this.ServerObjectHandleTable[(ropResponse as RopOpenFolderResponse).OutputHandleIndex];
                        }
                        if (DecodingContext.SessionObjectHandles != null && DecodingContext.SessionObjectHandles.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID))
                        {
                            DecodingContext.SessionObjectHandles.Remove(MapiInspector.MAPIInspector.currentParsingSessionID);
                        }
                        Dictionary<int, ObjectHandlesType> tmpObjectHandle = new Dictionary<int, ObjectHandlesType>() { { (int)objectHandleKey, ObjectHandlesType.FolderHandles } };
                        DecodingContext.SessionObjectHandles.Add(MapiInspector.MAPIInspector.currentParsingSessionID, tmpObjectHandle);
                        if (DecodingContext.ObjectHandles != null && DecodingContext.ObjectHandles.ContainsKey((int)objectHandleKey))
                        {
                            DecodingContext.ObjectHandles.Remove((int)objectHandleKey);
                        }
                        DecodingContext.ObjectHandles.Add((int)objectHandleKey, ObjectHandlesType.FolderHandles);
                    }
                    else if (ropResponse is RopCreateMessageResponse)
                    {
                        uint objectHandleKey = this.ServerObjectHandleTable[(ropResponse as RopCreateMessageResponse).OutputHandleIndex];
                        if (DecodingContext.SessionObjectHandles != null && DecodingContext.SessionObjectHandles.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID))
                        {
                            DecodingContext.SessionObjectHandles.Remove(MapiInspector.MAPIInspector.currentParsingSessionID);
                        }
                        Dictionary<int, ObjectHandlesType> tmpObjectHandle = new Dictionary<int, ObjectHandlesType>() { { (int)objectHandleKey, ObjectHandlesType.MessageHandles } };
                        DecodingContext.SessionObjectHandles.Add(MapiInspector.MAPIInspector.currentParsingSessionID, tmpObjectHandle);

                        if (DecodingContext.ObjectHandles != null && DecodingContext.ObjectHandles.ContainsKey((int)objectHandleKey))
                        {
                            DecodingContext.ObjectHandles.Remove((int)objectHandleKey);
                        }
                        DecodingContext.ObjectHandles.Add((int)objectHandleKey, ObjectHandlesType.MessageHandles);
                    }
                    else if (ropResponse is RopCreateAttachmentResponse)
                    {
                        uint objectHandleKey = this.ServerObjectHandleTable[(ropResponse as RopCreateAttachmentResponse).OutputHandleIndex];
                        if (DecodingContext.SessionObjectHandles != null && DecodingContext.SessionObjectHandles.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID))
                        {
                            DecodingContext.SessionObjectHandles.Remove(MapiInspector.MAPIInspector.currentParsingSessionID);
                        }
                        Dictionary<int, ObjectHandlesType> tmpObjectHandle = new Dictionary<int, ObjectHandlesType>() { { (int)objectHandleKey, ObjectHandlesType.AttachmentHandles } };
                        DecodingContext.SessionObjectHandles.Add(MapiInspector.MAPIInspector.currentParsingSessionID, tmpObjectHandle);

                        if (DecodingContext.ObjectHandles != null && DecodingContext.ObjectHandles.ContainsKey((int)objectHandleKey))
                        {
                            DecodingContext.ObjectHandles.Remove((int)objectHandleKey);
                        }
                        DecodingContext.ObjectHandles.Add((int)objectHandleKey, ObjectHandlesType.AttachmentHandles);
                    }
                    else if (ropResponse is RopFastTransferSourceCopyToResponse)
                    {
                        uint objectHandleKey = this.ServerObjectHandleTable[(ropResponse as RopFastTransferSourceCopyToResponse).OutputHandleIndex];
                        if (DecodingContext.CopyTo_OutputHandles != null && DecodingContext.CopyTo_OutputHandles.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID))
                        {
                            DecodingContext.CopyTo_OutputHandles.Remove(MapiInspector.MAPIInspector.currentParsingSessionID);
                        }
                        DecodingContext.CopyTo_OutputHandles.Add(MapiInspector.MAPIInspector.currentParsingSessionID, (int)objectHandleKey);
                    }
                    else if (ropResponse is RopFastTransferSourceCopyPropertiesResponse)
                    {
                        uint objectHandleKey = this.ServerObjectHandleTable[(ropResponse as RopFastTransferSourceCopyPropertiesResponse).OutputHandleIndex];
                        if (DecodingContext.CopyProperties_OutputHandles != null && DecodingContext.CopyProperties_OutputHandles.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID))
                        {
                            DecodingContext.CopyProperties_OutputHandles.Remove(MapiInspector.MAPIInspector.currentParsingSessionID);
                        }
                        DecodingContext.CopyProperties_OutputHandles.Add(MapiInspector.MAPIInspector.currentParsingSessionID, (int)objectHandleKey);
                    }
                    else if (ropResponse is RopFastTransferSourceCopyMessagesResponse)
                    {
                        uint objectHandleKey = this.ServerObjectHandleTable[(ropResponse as RopFastTransferSourceCopyMessagesResponse).OutputHandleIndex];
                        if (DecodingContext.CopyMessage_OutputHandles != null && DecodingContext.CopyMessage_OutputHandles.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID))
                        {
                            DecodingContext.CopyMessage_OutputHandles.Remove(MapiInspector.MAPIInspector.currentParsingSessionID);
                        }
                        DecodingContext.CopyMessage_OutputHandles.Add(MapiInspector.MAPIInspector.currentParsingSessionID, (int)objectHandleKey);
                    }
                    else if (ropResponse is RopFastTransferSourceCopyFolderResponse)
                    {
                        uint objectHandleKey = this.ServerObjectHandleTable[(ropResponse as RopFastTransferSourceCopyFolderResponse).OutputHandleIndex];
                        if (DecodingContext.CopyFolder_OutputHandles != null && DecodingContext.CopyFolder_OutputHandles.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID))
                        {
                            DecodingContext.CopyFolder_OutputHandles.Remove(MapiInspector.MAPIInspector.currentParsingSessionID);
                        }
                        DecodingContext.CopyFolder_OutputHandles.Add(MapiInspector.MAPIInspector.currentParsingSessionID, (int)objectHandleKey);
                    }
                    else if (ropResponse is RopSynchronizationConfigureResponse)
                    {
                        uint objectHandleKey = this.ServerObjectHandleTable[(ropResponse as RopSynchronizationConfigureResponse).OutputHandleIndex];
                        if (DecodingContext.SyncConfigure_OutputHandles != null && DecodingContext.SyncConfigure_OutputHandles.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID))
                        {
                            DecodingContext.SyncConfigure_OutputHandles.Remove(MapiInspector.MAPIInspector.currentParsingSessionID);
                        }
                        DecodingContext.SyncConfigure_OutputHandles.Add(MapiInspector.MAPIInspector.currentParsingSessionID, (int)objectHandleKey);
                    }
                    else if (ropResponse is RopSynchronizationGetTransferStateResponse)
                    {
                        uint objectHandleKey = this.ServerObjectHandleTable[(ropResponse as RopSynchronizationGetTransferStateResponse).OutputHandleIndex];
                        if (DecodingContext.SyncGetTransferState_OutputHandles != null && DecodingContext.SyncGetTransferState_OutputHandles.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID))
                        {
                            DecodingContext.SyncGetTransferState_OutputHandles.Remove(MapiInspector.MAPIInspector.currentParsingSessionID);
                        }
                        DecodingContext.SyncGetTransferState_OutputHandles.Add(MapiInspector.MAPIInspector.currentParsingSessionID, (int)objectHandleKey);
                    }
                    else if (ropResponse is RopFastTransferDestinationConfigureResponse)
                    {
                        uint objectHandleKey = this.ServerObjectHandleTable[(ropResponse as RopFastTransferDestinationConfigureResponse).OutputHandleIndex];
                        if (DecodingContext.DestinationConfigure_OutputHandles != null && DecodingContext.DestinationConfigure_OutputHandles.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID))
                        {
                            DecodingContext.DestinationConfigure_OutputHandles.Remove(MapiInspector.MAPIInspector.currentParsingSessionID);
                        }
                        DecodingContext.DestinationConfigure_OutputHandles.Add(MapiInspector.MAPIInspector.currentParsingSessionID, (int)objectHandleKey);
                    }
                    else if (ropResponse is RopFastTransferDestinationPutBufferResponse)
                    {
                        uint objectHandleKey = this.ServerObjectHandleTable[(ropResponse as RopFastTransferDestinationPutBufferResponse).InputHandleIndex];

                        if (DecodingContext.PutBuffer_InPutHandles.ContainsKey(MapiInspector.MAPIInspector.currentParsingSessionID))
                        {
                            DecodingContext.PutBuffer_InPutHandles.Remove(MapiInspector.MAPIInspector.currentParsingSessionID);
                        }
                        DecodingContext.PutBuffer_InPutHandles.Add(MapiInspector.MAPIInspector.currentParsingSessionID, (int)objectHandleKey);
                    }
                    else
                    {
                        continue;
                    }
                }
            }
        }
コード例 #3
0
        public void MSOXORULE_S04_TC01_AddModifyDeleteStandardRule_OnPublicFolder()
        {
            this.CheckMAPIHTTPTransportSupported();

            #region TestUser1 logs on to the public folder.
            RopOpenFolderResponse openFolderResponse;
            RopLogonResponse      logonResponse;
            bool ret = this.OxoruleAdapter.Connect(ConnectionType.PublicFolderServer, this.User1Name, this.User1ESSDN, this.User1Password);
            Site.Assert.IsTrue(ret, "connect to public folder server should be successful");
            uint publicFolderLogonHandler = this.OxoruleAdapter.RopLogon(LogonType.PublicFolder, this.User1ESSDN, out logonResponse);

            // Assert the client to log on to the public folder successfully.
            Site.Assert.AreEqual <uint>(0, logonResponse.ReturnValue, "Logon the public folder should be successful.");

            // Folder index 1 is the Interpersonal Messages subtree, and this is defined in MS-OXCSTOR.
            uint publicfolderHandler = this.OxoruleAdapter.RopOpenFolder(publicFolderLogonHandler, logonResponse.FolderIds[1], out openFolderResponse);

            // Get the store object's entry ID.
            this.GetStoreObjectEntryID(StoreObjectType.PublicFolder, this.Server, this.User1ESSDN);

            RopCreateFolderResponse createFolderResponse;
            string newFolderName   = Common.GenerateResourceName(this.Site, Constants.FolderDisplayName);
            uint   newFolderHandle = this.OxoruleAdapter.RopCreateFolder(publicfolderHandler, newFolderName, Constants.FolderComment, out createFolderResponse);
            Site.Assert.AreEqual <uint>(0, createFolderResponse.ReturnValue, "Creating folder operation should succeed.");
            #endregion

            #region TestUser1 prepares value for rule properties variable.
            RuleProperties ruleProperties = AdapterHelper.GenerateRuleProperties(this.Site, Constants.RuleNameDelete);
            RuleData       ruleForDelete  = AdapterHelper.GenerateValidRuleData(ActionType.OP_DELETE, TestRuleDataType.ForAdd, 1, RuleState.ST_ENABLED, new DeleteMarkReadActionData(), ruleProperties, null);
            #endregion

            #region TestUser1 adds rule OP_Delelte.
            RopModifyRulesResponse modifyRulesResponse = this.OxoruleAdapter.RopModifyRules(newFolderHandle, ModifyRuleFlag.Modify_ReplaceAll, new RuleData[] { ruleForDelete });
            Site.Assert.AreEqual <uint>(0, modifyRulesResponse.ReturnValue, "Adding Delete rule should succeed.");
            #endregion

            #region TestUser1 gets rule ID of the created rule.
            RopGetRulesTableResponse ropGetRulesTableResponse;
            uint ruleTableHandle = this.OxoruleAdapter.RopGetRulesTable(newFolderHandle, TableFlags.Normal, out ropGetRulesTableResponse);
            Site.Assert.AreEqual <uint>(0, ropGetRulesTableResponse.ReturnValue, "Getting rule table should succeed.");

            PropertyTag ruleIDTag = new PropertyTag
            {
                PropertyId   = (ushort)PropertyId.PidTagRuleId,
                PropertyType = (ushort)PropertyType.PtypInteger64
            };
            RopQueryRowsResponse queryRowsResponse = this.OxoruleAdapter.QueryPropertiesInTable(ruleTableHandle, new PropertyTag[1] {
                ruleIDTag
            });
            Site.Assert.AreEqual <uint>(0, queryRowsResponse.ReturnValue, "Retrieving rows from the rule table should succeed.");

            // Only one rule added in this folder, so the row count in the rule table should be 1.
            Site.Assert.AreEqual <uint>(1, queryRowsResponse.RowCount, "The rule number in the rule table is {0}", queryRowsResponse.RowCount);
            this.VerifyRuleTable();
            ulong ruleId = BitConverter.ToUInt64(queryRowsResponse.RowData.PropertyRows[0].PropertyValues[0].Value, 0);
            #endregion

            #region TestUser1 modifies the created rule.
            ruleProperties.Name = Common.GenerateResourceName(this.Site, "RuleNameForModify");
            ruleForDelete       = AdapterHelper.GenerateValidRuleData(ActionType.OP_DELETE, TestRuleDataType.ForModify, 1, RuleState.ST_ENABLED, new DeleteMarkReadActionData(), ruleProperties, ruleId);
            modifyRulesResponse = this.OxoruleAdapter.RopModifyRules(newFolderHandle, ModifyRuleFlag.Modify_OnExisting, new RuleData[] { ruleForDelete });
            Site.Assert.AreEqual <uint>(0, modifyRulesResponse.ReturnValue, "Modifying the OP_DELETE rule should be success");
            #endregion

            #region TestUser1 calls RopGetRulesTable with valid TableFlags.
            ruleTableHandle = this.OxoruleAdapter.RopGetRulesTable(newFolderHandle, TableFlags.Normal, out ropGetRulesTableResponse);
            #endregion

            #region TestUser1 retrieves rule information for the modified rule.

            PropertyTag ruleNameTag = new PropertyTag {
                PropertyId = (ushort)PropertyId.PidTagRuleName, PropertyType = (ushort)PropertyType.PtypString
            };

            // Retrieves rows from the rule table.
            queryRowsResponse = this.OxoruleAdapter.QueryPropertiesInTable(ruleTableHandle, new PropertyTag[2] {
                ruleIDTag, ruleNameTag
            });
            Site.Assert.AreEqual <uint>(0, queryRowsResponse.ReturnValue, "Retrieving rows from the rule table should succeed.");

            // Only one rule added in this folder, so the row count in the rule table should be 1.
            Site.Assert.AreEqual <uint>(1, queryRowsResponse.RowCount, "The rule number in the rule table is {0}", queryRowsResponse.RowCount);
            this.VerifyRuleTable();

            ulong ruleIdModified = BitConverter.ToUInt64(queryRowsResponse.RowData.PropertyRows[0].PropertyValues[0].Value, 0);
            bool  isSameRuleId   = ruleId == ruleIdModified;
            Site.Assert.IsTrue(isSameRuleId, "The original rule Id is {0} and the modified rule Id is {1}", ruleId, ruleIdModified);

            string modifiedRuleName = AdapterHelper.PropertyValueConvertToString(queryRowsResponse.RowData.PropertyRows.ToArray()[0].PropertyValues[1].Value);
            Site.Assert.AreEqual <string>(ruleProperties.Name, modifiedRuleName, "The actual rule name {0} should be equal to the expected rule name {1}.", modifiedRuleName, ruleProperties.Name);
            #endregion

            #region TestUser1 deletes the created rule.
            ruleForDelete       = AdapterHelper.GenerateValidRuleData(ActionType.OP_DELETE, TestRuleDataType.ForRemove, 1, RuleState.ST_ENABLED, null, ruleProperties, ruleId);
            modifyRulesResponse = this.OxoruleAdapter.RopModifyRules(newFolderHandle, ModifyRuleFlag.Modify_OnExisting, new RuleData[] { ruleForDelete });
            Site.Assert.AreEqual <uint>(0, modifyRulesResponse.ReturnValue, "Deleting the OP_DELETE rule should succeed.");

            RopDeleteFolderResponse deleteFolder = this.OxoruleAdapter.RopDeleteFolder(publicfolderHandler, createFolderResponse.FolderId);
            Site.Assert.AreEqual <uint>(0, deleteFolder.ReturnValue, "Deleting folder should succeed.");
            #endregion
        }
コード例 #4
0
        public void MSOXORULE_S04_TC04_AddNotSupportedRule_OnPublicFolder()
        {
            this.CheckMAPIHTTPTransportSupported();

            #region TestUser2 logs on to the public folder.
            RopOpenFolderResponse openFolderResponse;
            RopLogonResponse      logonResponse;
            bool ret = this.OxoruleAdapter.Connect(ConnectionType.PublicFolderServer, this.User2Name, this.User2ESSDN, this.User2Password);
            Site.Assert.IsTrue(ret, "connect to public folder server should be successful");
            uint publicFolderLogonHandler = this.OxoruleAdapter.RopLogon(LogonType.PublicFolder, this.User2ESSDN, out logonResponse);

            // Assert the client to log on to the public folder successfully.
            Site.Assert.AreEqual <uint>(0, logonResponse.ReturnValue, "Logon the public folder should be successful.");

            // Folder index 1 is the Interpersonal Messages subtree, and this is defined in MS-OXCSTOR.
            uint  publicfolderHandler = this.OxoruleAdapter.RopOpenFolder(publicFolderLogonHandler, logonResponse.FolderIds[1], out openFolderResponse);
            ulong publicFolderID      = logonResponse.FolderIds[1];
            #endregion

            #region TestUser2 tests the unsupported rules in public folder.
            #region TestUser2 prepares value for ruleProperties variable.
            RuleProperties ruleProperties = AdapterHelper.GenerateRuleProperties(this.Site, Constants.RuleNameDeferredAction);
            #endregion

            #region TestUser2 adds a Rule set Action Type to OP_DEFER_ACTION.
            DeferredActionData deferredActionData = new DeferredActionData
            {
                Data = Common.GetBytesFromBinaryHexString(Constants.DeferredActionBufferData)
            };
            RuleData deferredActionRuleData = AdapterHelper.GenerateValidRuleData(ActionType.OP_DEFER_ACTION, TestRuleDataType.ForAdd, 5, RuleState.ST_ENABLED, deferredActionData, ruleProperties, null);
            RopModifyRulesResponse ropModifyRulesResponse = this.OxoruleAdapter.RopModifyRules(publicfolderHandler, ModifyRuleFlag.Modify_ReplaceAll, new RuleData[] { deferredActionRuleData });
            #endregion

            // Add the debug information.
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R258: server returned value is {0}", ropModifyRulesResponse.ReturnValue);

            // Verify MS-OXORULE requirement: MS-OXORULE_R258.
            // If the ReturnValue is not 0x00000000, it means the server failed to add a public folder rule with this OP_DEFER_ACTION Type action.
            // So it is not used in a public folder rule.
            bool isVerifyR258 = ropModifyRulesResponse.ReturnValue != 0x00000000;

            Site.CaptureRequirementIfIsTrue(
                isVerifyR258,
                258,
                @"[In ActionBlock Structure] The meaning of action type OP_DEFER_ACTION: MUST NOT be used in a public folder rule (4).");

            #region TestUser2 prepares rules' data.
            MoveCopyActionData moveCopyActionData = new MoveCopyActionData();

            // Get the Inbox folder entry ID.
            byte[] folderEId = this.OxoruleAdapter.GetFolderEntryId(StoreObjectType.PublicFolder, publicfolderHandler, publicFolderID);

            // Get the store object's entry ID.
            byte[] storeEId = this.GetStoreObjectEntryID(StoreObjectType.PublicFolder, this.Server, this.User1ESSDN);
            moveCopyActionData.FolderEID     = folderEId;
            moveCopyActionData.StoreEID      = storeEId;
            moveCopyActionData.FolderEIDSize = (ushort)folderEId.Length;
            moveCopyActionData.StoreEIDSize  = (ushort)storeEId.Length;
            #endregion

            #region TestUser2 prepares value for ruleProperties variable.
            ruleProperties = AdapterHelper.GenerateRuleProperties(this.Site, Constants.RuleNameMoveOne);
            #endregion

            #region TestUser2 adds OP_MOVE rule to the public folder.
            ruleProperties.Name = Common.GenerateResourceName(this.Site, Constants.RuleNameMoveOne);
            RuleData ruleForMove = AdapterHelper.GenerateValidRuleData(ActionType.OP_MOVE, TestRuleDataType.ForAdd, 0, RuleState.ST_ENABLED, moveCopyActionData, ruleProperties, null);
            RopModifyRulesResponse modifyRulesResponse = this.OxoruleAdapter.RopModifyRules(publicfolderHandler, ModifyRuleFlag.Modify_ReplaceAll, new RuleData[] { ruleForMove });
            #endregion

            // Add the debug information.
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R839: server returned value is {0}", modifyRulesResponse.ReturnValue);

            // Verify MS-OXORULE requirement: MS-OXORULE_R839.
            // If the returnValue is not 0x00000000, it means this OP_MOVE Type used in a public folder rule is failed,
            // so it is not used in a public folder rule.
            bool isVerifyR839 = modifyRulesResponse.ReturnValue != 0x00000000;

            Site.CaptureRequirementIfIsTrue(
                isVerifyR839,
                839,
                @"[In ActionBlock Structure] The meaning of action type OP_MOVE: MUST NOT be used in a public folder rule (4).");

            #region TestUser2 adds OP_COPY rule to the public folder.
            ruleProperties.Name = Common.GenerateResourceName(this.Site, Constants.RuleNameMoveTwo);
            RuleData ruleForCopy = AdapterHelper.GenerateValidRuleData(ActionType.OP_COPY, TestRuleDataType.ForAdd, 1, RuleState.ST_ENABLED, moveCopyActionData, ruleProperties, null);
            modifyRulesResponse = this.OxoruleAdapter.RopModifyRules(publicfolderHandler, ModifyRuleFlag.Modify_ReplaceAll, new RuleData[] { ruleForCopy });
            #endregion

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXORULE_R840: server returned value is {0}", modifyRulesResponse.ReturnValue);

            // Verify MS-OXORULE requirement: MS-OXORULE_R840.
            // If the ReturnValue is not 0x00000000, it means this OP_COPY Type used in a public folder rule is failed,
            // so it is not used in a public folder rule.
            bool isVerifyR840 = modifyRulesResponse.ReturnValue != 0x00000000;

            Site.CaptureRequirementIfIsTrue(
                isVerifyR840,
                840,
                @"[In ActionBlock Structure] The meaning of action type OP_COPY: MUST NOT be used in a public folder rule (4).");
            #endregion
        }
コード例 #5
0
        public void MSOXORULE_S04_TC03_ServerExecuteRule_Action_OP_TAG_OnPublicFolder()
        {
            this.CheckMAPIHTTPTransportSupported();

            #region TestUser1 logs on to the public folder.
            RopOpenFolderResponse openFolderResponse;
            RopLogonResponse      logonResponse;
            bool ret = this.OxoruleAdapter.Connect(ConnectionType.PublicFolderServer, this.User1Name, this.User1ESSDN, this.User1Password);
            Site.Assert.IsTrue(ret, "connect to public folder server should be successful");
            uint publicFolderLogonHandler = this.OxoruleAdapter.RopLogon(LogonType.PublicFolder, this.User1ESSDN, out logonResponse);

            // Assert the client to log on to the public folder successfully.
            Site.Assert.AreEqual <uint>(0, logonResponse.ReturnValue, "Logon the public folder should be successful.");

            // Folder index 1 is the Interpersonal Messages subtree, and this is defined in MS-OXCSTOR.
            uint publicfolderHandler = this.OxoruleAdapter.RopOpenFolder(publicFolderLogonHandler, logonResponse.FolderIds[1], out openFolderResponse);

            // Get the store object's entry ID.
            this.GetStoreObjectEntryID(StoreObjectType.PublicFolder, this.Server, this.User1ESSDN);

            RopCreateFolderResponse createFolderResponse;
            string newFolderName   = Common.GenerateResourceName(this.Site, Constants.FolderDisplayName);
            uint   newFolderHandle = this.OxoruleAdapter.RopCreateFolder(publicfolderHandler, newFolderName, Constants.FolderComment, out createFolderResponse);
            ulong  newFolderID     = createFolderResponse.FolderId;
            Site.Assert.AreEqual <uint>(0, createFolderResponse.ReturnValue, "Creating folder operation should succeed.");
            #endregion

            #region TestUser1 prepares value for ruleProperties variable.
            RuleProperties ruleProperties = AdapterHelper.GenerateRuleProperties(this.Site, Constants.RuleNameTag);
            #endregion

            #region TestUser1 adds an OP_TAG rule to the new created folder.
            TagActionData tagActionData            = new TagActionData();
            PropertyTag   tagActionDataPropertyTag = new PropertyTag
            {
                PropertyId   = (ushort)PropertyId.PidTagImportance,
                PropertyType = (ushort)PropertyType.PtypInteger32
            };
            tagActionData.PropertyTag   = tagActionDataPropertyTag;
            tagActionData.PropertyValue = BitConverter.GetBytes(1);

            RuleData ruleOpTag = AdapterHelper.GenerateValidRuleData(ActionType.OP_TAG, TestRuleDataType.ForAdd, 1, RuleState.ST_ENABLED, tagActionData, ruleProperties, null);
            RopModifyRulesResponse modifyRulesResponse = this.OxoruleAdapter.RopModifyRules(newFolderHandle, ModifyRuleFlag.Modify_ReplaceAll, new RuleData[] { ruleOpTag });
            Site.Assert.AreEqual <uint>(0, modifyRulesResponse.ReturnValue, "Adding OP_TAG rule should succeed.");
            #endregion

            #region TestUser1 creates a message.
            RopCreateMessageResponse ropCreateMessageResponse;
            uint messageHandle = this.OxoruleAdapter.RopCreateMessage(newFolderHandle, newFolderID, Convert.ToByte(false), out ropCreateMessageResponse);
            Site.Assert.AreEqual <uint>(0, ropCreateMessageResponse.ReturnValue, "Creating message should succeed.");
            #endregion

            #region TestUser1 saves the subject property of the message to trigger the rule.
            string subjectName = Common.GenerateResourceName(this.Site, ruleProperties.ConditionSubjectName + "Title");
            TaggedPropertyValue subjectProperty          = new TaggedPropertyValue();
            PropertyTag         pidTagSubjectPropertyTag = new PropertyTag
            {
                PropertyId   = (ushort)PropertyId.PidTagSubject,
                PropertyType = (ushort)PropertyType.PtypString
            };
            subjectProperty.PropertyTag = pidTagSubjectPropertyTag;
            subjectProperty.Value       = Encoding.Unicode.GetBytes(subjectName + "\0");

            // Set properties for the created message to trigger the rule.
            RopSetPropertiesResponse ropSetPropertiesResponse = this.OxoruleAdapter.RopSetProperties(messageHandle, new TaggedPropertyValue[] { subjectProperty });
            Site.Assert.AreEqual <uint>(0, ropSetPropertiesResponse.ReturnValue, "Setting property for the created message should succeed.");

            // Save changes of message.
            RopSaveChangesMessageResponse ropSaveChangesMessagResponse = this.OxoruleAdapter.RopSaveChangesMessage(messageHandle);
            Site.Assert.AreEqual <uint>(0, ropSaveChangesMessagResponse.ReturnValue, "Saving the created message should succeed.");

            // Wait for the message to be saved and the rule to take effect.
            Thread.Sleep(this.WaitForTheRuleToTakeEffect);
            #endregion

            #region TestUser1 gets the message and its properties to verify the rule evaluation.
            PropertyTag[] propertyTagList = new PropertyTag[2];
            propertyTagList[0].PropertyId   = (ushort)PropertyId.PidTagImportance;
            propertyTagList[0].PropertyType = (ushort)PropertyType.PtypInteger32;
            propertyTagList[1].PropertyId   = (ushort)PropertyId.PidTagSubject;
            propertyTagList[1].PropertyType = (ushort)PropertyType.PtypString;

            uint contentTableHandle = 0;
            uint rowCount           = 0;
            RopQueryRowsResponse getMailMessageContent = this.GetExpectedMessage(newFolderHandle, ref contentTableHandle, propertyTagList, ref rowCount, 1, subjectName);
            Site.Assert.AreEqual <uint>(1, rowCount, @"The message number in the specific folder should be 1.");
            Site.Assert.AreEqual <int>(1, BitConverter.ToInt32(getMailMessageContent.RowData.PropertyRows[(int)rowCount - 1].PropertyValues[0].Value, 0), "If the rule is executed, the PidTagImportance property of the message should be the value set by the rule.");

            RopDeleteFolderResponse deleteFolder = this.OxoruleAdapter.RopDeleteFolder(publicfolderHandler, newFolderID);
            Site.Assert.AreEqual <uint>(0, deleteFolder.ReturnValue, "Deleting folder should succeed.");
            #endregion
        }