/// <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); }
/// <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)); }
/// <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(); } }