Ejemplo n.º 1
0
        /// <summary>
        /// Open a specified message in specified folder.
        /// </summary>
        /// <param name="messageId">The specified message ID.</param>
        /// <param name="folderId">The specified folder ID.</param>
        /// <param name="openModeFlags">OpenModeFlags for RopOpenMessage.</param>
        /// <returns>The response of RopOpenMessage ROP operation.</returns>
        protected RopOpenMessageResponse OpenMessage(ulong messageId, ulong folderId, MessageOpenModeFlags openModeFlags)
        {
            RopOpenFolderRequest openFolderRequest = new RopOpenFolderRequest
            {
                RopId             = (byte)RopId.RopOpenFolder,
                LogonId           = Constants.CommonLogonId,
                InputHandleIndex  = Constants.CommonInputHandleIndex,
                OutputHandleIndex = Constants.CommonOutputHandleIndex,
                OpenModeFlags     = (byte)FolderOpenModeFlags.None,
                FolderId          = folderId
            };
            RopOpenFolderResponse openFolderResponse = this.Adapter.OpenFolder(openFolderRequest, this.LogonHandle, ref this.responseHandles);
            uint folderHandle = this.responseHandles[0][openFolderResponse.OutputHandleIndex];

            RopOpenMessageRequest openMessageRequest = new RopOpenMessageRequest();
            object ropResponse = null;

            openMessageRequest.RopId             = (byte)RopId.RopOpenMessage;
            openMessageRequest.LogonId           = Constants.CommonLogonId;
            openMessageRequest.InputHandleIndex  = Constants.CommonInputHandleIndex;
            openMessageRequest.OutputHandleIndex = Constants.CommonOutputHandleIndex;
            openMessageRequest.OpenModeFlags     = (byte)openModeFlags;
            openMessageRequest.FolderId          = folderId;
            openMessageRequest.MessageId         = messageId;
            openMessageRequest.CodePageId        = 0x0fff;
            this.Adapter.DoRopCall(openMessageRequest, folderHandle, ref ropResponse, ref this.responseHandles);
            return((RopOpenMessageResponse)ropResponse);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// This ROP opens an existing message in a mailbox.
        /// </summary>
        /// <param name="handle">The handle to operate</param>
        /// <param name="folderId">The parent folder of the message to be opened.</param>
        /// <param name="messageId">The identifier of the message to be opened.</param>
        /// <param name="openMessageResponse">The response of this ROP.</param>
        /// <param name="needVerify">Whether need to verify the response</param>
        /// <returns>The handle of the opened message</returns>
        private uint RopOpenMessage(uint handle, ulong folderId, ulong messageId, out RopOpenMessageResponse openMessageResponse, bool needVerify)
        {
            this.rawDataValue      = null;
            this.responseValue     = null;
            this.responseSOHsValue = null;

            RopOpenMessageRequest openMessageRequest = new RopOpenMessageRequest()
            {
                RopId             = (byte)RopId.RopOpenMessage,
                LogonId           = LogonId,
                InputHandleIndex  = (byte)HandleIndex.FirstIndex,
                OutputHandleIndex = (byte)HandleIndex.SecondIndex,

                // Set CodePageId to SameAsLogonObject, which indicates it uses the same code page as the one for logon object.
                CodePageId = (ushort)CodePageId.SameAsLogonObject,
                FolderId   = folderId,

                // Set OpenModeFlags to read and write for further operation.
                OpenModeFlags = (byte)MessageOpenModeFlags.ReadWrite,
                MessageId     = messageId
            };

            this.responseSOHsValue = this.ProcessSingleRop(openMessageRequest, handle, ref this.responseValue, ref this.rawDataValue, RopResponseType.SuccessResponse);
            openMessageResponse    = (RopOpenMessageResponse)this.responseValue;
            if (needVerify)
            {
                this.Site.Assert.AreEqual((uint)RopResponseType.SuccessResponse, openMessageResponse.ReturnValue, string.Format("RopOpenMessageResponse Failed! Error: 0x{0:X8}", openMessageResponse.ReturnValue));
            }

            return(this.responseSOHsValue[0][openMessageResponse.OutputHandleIndex]);
        }