/// <summary> /// Parse the QueryColumns request type response body. /// </summary> /// <param name="rawData">The raw data of response.</param> /// <returns>The QueryColumns request type response body.</returns> public static QueryColumnsResponseBody Parse(byte[] rawData) { QueryColumnsResponseBody responseBody = new QueryColumnsResponseBody(); int index = 0; responseBody.StatusCode = BitConverter.ToUInt32(rawData, index); index += sizeof(uint); responseBody.ErrorCode = BitConverter.ToUInt32(rawData, index); index += sizeof(uint); responseBody.HasColumns = BitConverter.ToBoolean(rawData, index); index += sizeof(bool); if (responseBody.HasColumns) { responseBody.Columns = LargePropertyTagArray.Parse(rawData, ref index); } else { responseBody.Columns = null; } 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; }
/// <summary> /// Parse the QueryColumns request type response body. /// </summary> /// <param name="rawData">The raw data of response.</param> /// <returns>The QueryColumns request type response body.</returns> public static QueryColumnsResponseBody Parse(byte[] rawData) { QueryColumnsResponseBody responseBody = new QueryColumnsResponseBody(); int index = 0; responseBody.StatusCode = BitConverter.ToUInt32(rawData, index); index += sizeof(uint); responseBody.ErrorCode = BitConverter.ToUInt32(rawData, index); index += sizeof(uint); responseBody.HasColumns = BitConverter.ToBoolean(rawData, index); index += sizeof(bool); if (responseBody.HasColumns) { responseBody.Columns = LargePropertyTagArray.Parse(rawData, ref index); } else { responseBody.Columns = null; } 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); }
/// <summary> /// This method is used by the client to get a list of all the properties that exist in the address book. /// </summary> /// <param name="queryColumnsRequestBody">The QueryColumns request type request body.</param> /// <returns>The response body of QueryColumns request type.</returns> public QueryColumnsResponseBody QueryColumns(QueryColumnsRequestBody queryColumnsRequestBody) { CommonResponse commonResponse = this.SendAddressBookRequest(queryColumnsRequestBody, RequestType.QueryColumns); QueryColumnsResponseBody queryColumnsResponseBody = QueryColumnsResponseBody.Parse(commonResponse.ResponseBodyRawData); this.VerifyQueryColumnsResponseBody(queryColumnsResponseBody); this.VerifyLargePropertyTagArrayStructure(queryColumnsResponseBody.Columns.Value); return(queryColumnsResponseBody); }
/// <summary> /// Verify the requirements related to QueryColumns request type response body. /// </summary> /// <param name="queryColumnsResponseBody">The response body of QueryColumns request type.</param> private void VerifyQueryColumnsResponseBody(QueryColumnsResponseBody queryColumnsResponseBody) { // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCMAPIHTTP_R885"); // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R885 this.Site.CaptureRequirementIfIsInstanceOfType( queryColumnsResponseBody.StatusCode, typeof(uint), 885, @"[In QueryColumns Request Type Success Response Body] StatusCode (4 bytes): An unsigned integer that specifies the status of the request."); // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCMAPIHTTP_R886"); // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R886 this.Site.CaptureRequirementIfAreEqual<uint>( 0, queryColumnsResponseBody.StatusCode, 886, @"[In QueryColumns Request Type Success Response Body] [StatusCode] This field MUST be set to 0x00000000."); // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCMAPIHTTP_R887"); // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R887 this.Site.CaptureRequirementIfIsInstanceOfType( queryColumnsResponseBody.ErrorCode, typeof(uint), 887, @"[In QueryColumns Request Type Success Response Body] ErrorCode (4 bytes): An unsigned integer that specifies the return status of the operation."); // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCMAPIHTTP_R888"); // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R888 this.Site.CaptureRequirementIfIsInstanceOfType( queryColumnsResponseBody.HasColumns, typeof(bool), 888, @"[In QueryColumns Request Type Success Response Body] HasColumns (1 byte): A Boolean value that specifies whether the Columns field is present."); if (queryColumnsResponseBody.HasColumns) { // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCMAPIHTTP_R889"); // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R889 this.Site.CaptureRequirementIfIsInstanceOfType( queryColumnsResponseBody.Columns, typeof(LargePropertyTagArray), 889, @"[In QueryColumns Request Type Success Response Body] Columns (optional) (variable): A LargePropTagArray structure (section 2.2.1.3) that specifies the properties that exist on the address book."); // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCMAPIHTTP_R890"); // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R890 this.Site.CaptureRequirementIfIsNotNull( queryColumnsResponseBody.Columns, 890, @"[In QueryColumns Request Type Success Response Body] [Columns] This field is present when the HasColumns field is nonzero."); } // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCMAPIHTTP_R892"); // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R892 this.Site.CaptureRequirementIfIsInstanceOfType( queryColumnsResponseBody.AuxiliaryBufferSize, typeof(uint), 892, @"[In QueryColumns Request Type Success Response Body] AuxiliaryBufferSize (4 bytes): An unsigned integer that specifies the size, in bytes, of the AuxiliaryBuffer field."); // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCMAPIHTTP_R893"); // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R893 this.Site.CaptureRequirementIfIsInstanceOfType( queryColumnsResponseBody.AuxiliaryBuffer, typeof(byte[]), 893, @"[In QueryColumns Request Type Success Response Body] AuxiliaryBuffer (variable): An array of bytes that constitute the auxiliary payload data returned from the server."); // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCMAPIHTTP_R894"); // Verify MS-OXCMAPIHTTP requirement: MS-OXCMAPIHTTP_R894 this.Site.CaptureRequirementIfAreEqual<uint>( queryColumnsResponseBody.AuxiliaryBufferSize, (uint)queryColumnsResponseBody.AuxiliaryBuffer.Length, 894, @"[In QueryColumns Request Type Success Response Body] [AuxiliaryBuffer] The size of this field, in bytes, is specified by the AuxiliaryBufferSize field."); }