/// <summary> /// This method is used by the client to delete a Session Context with the server. /// </summary> /// <param name="responseBody">The response body of the Disconnect request type.</param> /// <returns>The status code of the Disconnect request type.</returns> public uint Disconnect(out MailboxResponseBodyBase responseBody) { responseBody = null; byte[] rawBuffer; // Prepare the disconnect request body. DisconnectRequestBody disconnectRequestBody = new DisconnectRequestBody(); byte[] rgbAuxIn = new byte[] { }; disconnectRequestBody.AuxiliaryBufferSize = (uint)rgbAuxIn.Length; disconnectRequestBody.AuxiliaryBuffer = rgbAuxIn; WebHeaderCollection webHeaderCollection = AdapterHelper.InitializeHTTPHeader(RequestType.Disconnect, AdapterHelper.ClientInstance, AdapterHelper.Counter); // Send the disconnect HTTP request and get the response. HttpWebResponse response = this.SendMAPIHttpRequest(this.userName, this.password, disconnectRequestBody, ServerEndpoint.MailboxServerEndpoint, AdapterHelper.SessionContextCookies, webHeaderCollection, out rawBuffer); uint responseCode = AdapterHelper.GetFinalResponseCode(response.Headers["X-ResponseCode"]); // Read the HTTP response buffer and parse the response to correct format. CommonResponse commonResponse = CommonResponse.ParseCommonResponse(rawBuffer); if (responseCode == 0) { Site.Assert.IsNotNull(commonResponse.ResponseBodyRawData, "The response body should contains data."); uint statusCode = BitConverter.ToUInt32(commonResponse.ResponseBodyRawData, 0); if (statusCode == 0) { // Disconnect succeeded when the StatusCode field equals zero. DisconnectSuccessResponseBody responseSuccess = DisconnectSuccessResponseBody.Parse(commonResponse.ResponseBodyRawData); responseBody = responseSuccess; this.VerifyDisconnectSuccessResponseBody(responseSuccess); } this.VerifyHTTPS(response); this.VerifyAuthentication(response); this.VerifyAutoDiscover(response.StatusCode, ServerEndpoint.MailboxServerEndpoint); this.VerifyHTTPHeaders(response.Headers); this.VerifyAdditionalHeaders(commonResponse.AdditionalHeaders); this.VerifyDisconnectResponse(response); this.VerifyRequestTypesForMailboxServerEndpoint(response.Headers, commonResponse); this.VerifyResponseMetaTags(commonResponse.MetaTags); } this.VerifyContentTypeHeader(response.Headers); this.VerifyRespondingToAllRequestTypeRequests(response, commonResponse, responseCode); response.GetResponseStream().Close(); AdapterHelper.SessionContextCookies = response.Cookies; return(responseCode); }
/// <summary> /// Parse the Disconnect request type success response body. /// </summary> /// <param name="rawData">The raw data which is returned by server.</param> /// <returns>An instance of DisconnectSuccessResponseBody class.</returns> public static DisconnectSuccessResponseBody Parse(byte[] rawData) { DisconnectSuccessResponseBody responseBody = new DisconnectSuccessResponseBody(); int index = 0; responseBody.StatusCode = BitConverter.ToUInt32(rawData, index); index += 4; responseBody.ErrorCode = BitConverter.ToUInt32(rawData, index); index += 4; responseBody.AuxiliaryBufferSize = BitConverter.ToUInt32(rawData, index); index += 4; responseBody.AuxiliaryBuffer = new byte[responseBody.AuxiliaryBufferSize]; Array.Copy(rawData, index, responseBody.AuxiliaryBuffer, 0, responseBody.AuxiliaryBufferSize); return(responseBody); }