Parse() public method

Parse the RopCreateAttachmentResponse structure.
public Parse ( Stream s ) : void
s Stream An stream containing RopCreateAttachmentResponse structure
return void
        /// <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;
                    }
                }
            }
        }