/// <summary> /// The NspiBind method initiates a session between a client and the server. /// </summary> /// <param name="flags">A DWORD value that contains a set of bit flags.</param> /// <param name="stat">A STAT block that describes a logical position in a specific address book container.</param> /// <param name="serverGuid">The value NULL or a pointer to a GUID value that is associated with the specific server.</param> /// <returns>Status of NSPI method.</returns> public ErrorCodeValue Bind(uint flags, STAT stat, ref FlatUID_r?serverGuid) { ErrorCodeValue result; BindRequestBody bindRequestBody = this.BuildBindRequestBody(stat, flags); byte[] rawBuffer = null; ChunkedResponse chunkedResponse = null; BindResponseBody bindResponseBody = null; // Send the execute HTTP request and get the response HttpWebResponse response = MapiHttpAdapter.SendMAPIHttpRequest(this.site, this.addressBookUrl, this.userName, this.domainName, this.password, bindRequestBody, RequestType.Bind.ToString(), AdapterHelper.SessionContextCookies); // Read the HTTP response buffer and parse the response to correct format rawBuffer = MapiHttpAdapter.ReadHttpResponse(response); result = (ErrorCodeValue)int.Parse(response.Headers["X-ResponseCode"]); if (result == ErrorCodeValue.Success) { chunkedResponse = ChunkedResponse.ParseChunkedResponse(rawBuffer); bindResponseBody = BindResponseBody.Parse(chunkedResponse.ResponseBodyRawData); result = (ErrorCodeValue)bindResponseBody.ErrorCode; if (bindResponseBody.ServerGuid != null) { FlatUID_r newGuid = new FlatUID_r(); newGuid.Ab = bindResponseBody.ServerGuid.ToByteArray(); serverGuid = newGuid; } else { serverGuid = null; } } response.GetResponseStream().Close(); AdapterHelper.SessionContextCookies = response.Cookies; return(result); }
/// <summary> /// Send the request to address book server endpoint. /// </summary> /// <param name="requestBody">The request body.</param> /// <param name="requestType">The type of the request.</param> /// <param name="cookieChange">Whether the session context cookie is changed.</param> /// <returns>The returned chunked response.</returns> private ChunkedResponse SendAddressBookRequest(IRequestBody requestBody, RequestType requestType, bool cookieChange = true) { byte[] rawBuffer = null; ChunkedResponse chunkedResponse = null; // Send the execute HTTP request and get the response HttpWebResponse response = MapiHttpAdapter.SendMAPIHttpRequest(this.site, this.addressBookUrl, this.userName, this.domainName, this.password, requestBody, requestType.ToString(), AdapterHelper.SessionContextCookies); rawBuffer = MapiHttpAdapter.ReadHttpResponse(response); string responseCode = response.Headers["X-ResponseCode"]; this.site.Assert.AreEqual <uint>(0, uint.Parse(responseCode), "The request to the address book server should be executed successfully!"); // Read the HTTP response buffer and parse the response to correct format chunkedResponse = ChunkedResponse.ParseChunkedResponse(rawBuffer); response.GetResponseStream().Close(); if (cookieChange) { AdapterHelper.SessionContextCookies = response.Cookies; } return(chunkedResponse); }