/// <summary>
        /// Removes a subfolder.
        /// </summary>
        /// <param name="ropDeleteFolderRequest">RopDeleteFolderRequest object.</param>
        /// <param name="insideObjHandle">Server object handle in RopDeleteFolderRequest.</param>
        /// <param name="responseSOHTable">Server objects handles in RopDeleteFolderResponse.</param>
        /// <returns>RopDeleteFolderResponse object.</returns>
        public RopDeleteFolderResponse DeleteFolder(RopDeleteFolderRequest ropDeleteFolderRequest, uint insideObjHandle, ref List <List <uint> > responseSOHTable)
        {
            object temp = new object();

            this.ExcuteRopCall((ISerializable)ropDeleteFolderRequest, insideObjHandle, ref temp, ref responseSOHTable, ref this.rawData);
            RopDeleteFolderResponse ropDeleteFolderResponse = (RopDeleteFolderResponse)temp;

            #region Capture Code
            // The ReturnValue equal to 0x00000000 indicate ROP operation success
            if (0x00000000 == ropDeleteFolderResponse.ReturnValue)
            {
                this.VerifyRopDeleteFolder(ropDeleteFolderResponse);
            }
            #endregion

            return(ropDeleteFolderResponse);
        }
Пример #2
0
        /// <summary>
        /// This ROP deletes a folder and its contents.
        /// </summary>
        /// <param name="handle">The handle of the folder to be deleted.</param>
        /// <param name="folderId">The Id of the folder to be deleted.</param>
        /// <returns>The response of this ROP</returns>
        private RopDeleteFolderResponse RopDeleteFolder(uint handle, ulong folderId)
        {
            this.rawDataValue      = null;
            this.responseValue     = null;
            this.responseSOHsValue = null;

            RopDeleteFolderRequest deleteFolderRequest = new RopDeleteFolderRequest()
            {
                RopId             = (byte)RopId.RopDeleteFolder,
                LogonId           = LogonId,
                InputHandleIndex  = (byte)HandleIndex.FirstIndex,
                DeleteFolderFlags = 0x15,
                FolderId          = folderId,
            };

            this.responseSOHsValue = this.ProcessSingleRop(deleteFolderRequest, handle, ref this.responseValue, ref this.rawDataValue, RopResponseType.SuccessResponse);
            RopDeleteFolderResponse deleteFolderResponse = (RopDeleteFolderResponse)this.responseValue;

            this.Site.Assert.IsNotNull(deleteFolderResponse, string.Format("RopDeleteFolderResponse Failed! Error: 0x{0:X8}", deleteFolderResponse.ReturnValue));
            return(deleteFolderResponse);
        }
        /// <summary>
        /// Composes the RopDeleteFolder Request Buffer.
        /// This ROP deletes a subfolder. More detailed information about this operation can be found in [MS-OXCFOLD].
        /// </summary>
        /// <param name="inputServerObjectHandle">The handle for the input Server Object.</param>
        /// <param name="folderId">This value identifies the parent folder.</param>
        /// <returns>The rgbIn buffer generated by this method.</returns>
        public byte[] ComposeDeleteFolderRequest(uint inputServerObjectHandle, ulong folderId)
        {
            RopDeleteFolderRequest deleteFolderRequest = new RopDeleteFolderRequest
            {
                RopId             = (byte)RopId.RopDeleteFolder,
                LogonId           = Convert.ToByte(0),
                InputHandleIndex  = Convert.ToByte(0),
                DeleteFolderFlags = (byte)DeleteFolderFlags.DeleteHardDelete,
                FolderId          = folderId
            };

            List <ISerializable> requestRops = new List <ISerializable>
            {
                deleteFolderRequest
            };
            List <uint> requestSOH = new List <uint>
            {
                inputServerObjectHandle
            };

            return(this.BuildRequestBuffer(requestRops, requestSOH));
        }
Пример #4
0
        /// <summary>
        /// Overrides TestClassBase's TestCleanup()
        /// </summary>
        protected override void TestCleanup()
        {
            bool transportIsMAPI = Common.GetConfigurationPropertyValue("TransportSeq", this.Site).ToLower() == "mapi_http";

            if (!transportIsMAPI || Common.IsRequirementEnabled(1340, this.Site))
            {
                if (!this.needCleanup)
                {
                    return;
                }

                #region Hard Delete Messages and Subfolders of Inbox
                if (this.isRootFolderCreated)
                {
                    RopDeleteFolderRequest  deleteFolderRequest = new RopDeleteFolderRequest();
                    RopDeleteFolderResponse deleteFolderResponse;
                    deleteFolderRequest.RopId            = (byte)RopId.RopDeleteFolder;
                    deleteFolderRequest.LogonId          = Constants.CommonLogonId;
                    deleteFolderRequest.InputHandleIndex = Constants.CommonInputHandleIndex;

                    // Set the DeleteFolderFlags to indicate hard delete the common generic folder,
                    // including all folders and messages under the folder.
                    deleteFolderRequest.DeleteFolderFlags = (byte)DeleteFolderFlags.DelFolders
                                                            | (byte)DeleteFolderFlags.DelMessages
                                                            | (byte)DeleteFolderFlags.DeleteHardDelete;
                    deleteFolderRequest.FolderId = this.RootFolderId;

                    int  count = 0;
                    bool rootFolderCleanUpSuccess = false;
                    do
                    {
                        deleteFolderResponse = this.Adapter.DeleteFolder(deleteFolderRequest, this.inboxFolderHandle, ref this.responseHandles);
                        if (deleteFolderResponse.ReturnValue == Constants.SuccessCode && deleteFolderResponse.PartialCompletion == 0)
                        {
                            rootFolderCleanUpSuccess = true;
                        }
                        else
                        {
                            Thread.Sleep(this.WaitTime);
                        }

                        if (count > this.RetryCount)
                        {
                            break;
                        }

                        count++;
                    }while (!rootFolderCleanUpSuccess);

                    Site.Assert.IsTrue(rootFolderCleanUpSuccess, "Test case cleanup should succeed.");
                }
                #endregion

                #region  RopRelease
                RopReleaseRequest releaseRequest = new RopReleaseRequest();
                object            ropResponse    = null;
                releaseRequest.RopId            = (byte)RopId.RopRelease;
                releaseRequest.LogonId          = Constants.CommonLogonId;
                releaseRequest.InputHandleIndex = Constants.CommonInputHandleIndex;
                this.Adapter.DoRopCall(releaseRequest, this.LogonHandle, ref ropResponse, ref this.responseHandles);
                #endregion

                this.logonHandle     = 0;
                ropResponse          = null;
                this.responseHandles = null;
                this.Adapter.DoDisconnect();
            }
        }