/// <summary> /// This method is used by the client to get a number of rows from the specified Explicit Table. /// </summary> /// <param name="queryRowsRequestBody">The QueryRows request type request body.</param> /// <returns>The response body of QueryRows request type</returns> public QueryRowsResponseBody QueryRows(QueryRowsRequestBody queryRowsRequestBody) { CommonResponse commonResponse = this.SendAddressBookRequest(queryRowsRequestBody, RequestType.QueryRows); QueryRowsResponseBody queryRowsResponseBody = QueryRowsResponseBody.Parse(commonResponse.ResponseBodyRawData); this.VerifyQueryRowsResponseBody(queryRowsResponseBody, queryRowsRequestBody); if (queryRowsResponseBody.HasColumnsAndRows) { foreach (AddressBookPropertyRow row in queryRowsResponseBody.RowData) { this.VerifyAddressBookPropertyRowStructure(row); if (row.Flag == 0x0) { for (int i = 0; i < row.ValueArray.Length; i++) { if (queryRowsRequestBody.Columns.PropertyTags[i].PropertyType != 0x0000) { this.VerifyAddressBookPropertyValueStructure(row.ValueArray[i]); } } } else { for (int j = 0; j < row.ValueArray.Length; j++) { this.VerifyAddressBookFlaggedPropertyValueStructure((AddressBookFlaggedPropertyValue)row.ValueArray[j]); } } } this.VerifyLargePropertyTagArrayStructure(queryRowsResponseBody.Columns.Value); } return(queryRowsResponseBody); }
/// <summary> /// This method is used to establish a Session Context with the server with specified user. /// </summary> /// <param name="userName">The UserName used to connect with server.</param> /// <param name="password">The password used to connect with server.</param> /// <param name="userDN">The UserESSDN used to connect with server.</param> /// <param name="cookies">Cookies used to identify the Session Context.</param> /// <param name="responseBody">The response body of the Connect request type.</param> /// <param name="webHeaderCollection">The web headers of the Connect request type.</param> /// <param name="httpStatus">The HTTP call response status.</param> /// <returns>The status code of the Connect request type.</returns> public uint Connect(string userName, string password, string userDN, ref CookieCollection cookies, out MailboxResponseBodyBase responseBody, ref WebHeaderCollection webHeaderCollection, out HttpStatusCode httpStatus) { responseBody = null; byte[] rgbAuxIn = new byte[] { }; byte[] rawBuffer; // Prepare the connect request body. ConnectRequestBody connectRequestBody = new ConnectRequestBody(); connectRequestBody.UserDN = userDN; connectRequestBody.Flags = ConstValues.ConnectionFlag; connectRequestBody.Cpid = ConstValues.CodePageId; connectRequestBody.LcidString = ConstValues.DefaultLocale; connectRequestBody.LcidSort = ConstValues.DefaultLocale; connectRequestBody.AuxiliaryBufferSize = (uint)rgbAuxIn.Length; connectRequestBody.AuxiliaryBuffer = rgbAuxIn; // Send the HTTP request and get the HTTP response. HttpWebResponse response = this.SendMAPIHttpRequest(userName, password, connectRequestBody, ServerEndpoint.MailboxServerEndpoint, cookies, webHeaderCollection, out rawBuffer); webHeaderCollection = response.Headers; httpStatus = response.StatusCode; uint responseCode = AdapterHelper.GetFinalResponseCode(response.Headers["X-ResponseCode"]); if (httpStatus != HttpStatusCode.OK) { return(0); } // 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) { // Connect succeeded when the StatusCode field equals zero. ConnectSuccessResponseBody responseSuccess = ConnectSuccessResponseBody.Parse(commonResponse.ResponseBodyRawData); responseBody = responseSuccess; this.VerifyConnectSuccessResponseBody(responseSuccess); } this.VerifyHTTPS(response); this.VerifyAuthentication(response); this.VerifyAutoDiscover(httpStatus, ServerEndpoint.MailboxServerEndpoint); this.VerifyHTTPHeaders(response.Headers); this.VerifyAdditionalHeaders(commonResponse.AdditionalHeaders); this.VerifyConnectResponse(response); this.VerifyConnectOrBindResponse(response.Headers); this.VerifyRequestTypesForMailboxServerEndpoint(response.Headers, commonResponse); this.VerifyResponseMetaTags(commonResponse.MetaTags); } this.VerifyRespondingToAllRequestTypeRequests(response, commonResponse, responseCode); response.GetResponseStream().Close(); AdapterHelper.SessionContextCookies = response.Cookies; cookies = response.Cookies; return(responseCode); }