public static ParseChunkedResponse ( byte rawData ) : |
||
rawData | byte | The response data from the server. |
return |
public static ChunkedResponse ParseChunkedResponse(byte[] rawData)
{
ChunkedResponse response = new ChunkedResponse();
response.MetaTags = new List<string>();
response.AdditionHeaders = new Dictionary<string, string>();
List<byte> responseBodyData = new List<byte>();
bool isDone = false;
bool isStartReadBody = false;
do
{
byte[] lineData = ReadLine(ref rawData, isStartReadBody);
string line = Encoding.ASCII.GetString(lineData);
if (isDone == false)
{
if (string.Compare(line, "PROCESSING", true) == 0 || string.Compare(line, "PENDING", true) == 0)
{
response.MetaTags.Add(line);
}
else if (string.Compare(line, "DONE", true) == 0)
{
response.MetaTags.Add(line);
isDone = true;
}
}
else
{
if (isStartReadBody == false)
{
if (line == string.Empty)
{
isStartReadBody = true;
}
else
{
string[] headerkeyAndValue = line.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries);
response.AdditionHeaders.Add(headerkeyAndValue[0], headerkeyAndValue[1]);
}
}
else
{
responseBodyData.AddRange(lineData);
}
}
}
while (rawData.Length > 0);
response.ResponseBodyRawData = responseBodyData.ToArray();
return response;
}
/// <summary> /// This method sends the disconnect request through MAPIHTTP transport to the server. /// </summary> /// <returns>If the method succeeds, the return value is 0. If the method fails, the return value is an implementation-specific error code.</returns> public uint Disconnect() { uint returnValue = 0; DisconnectRequestBody disconnectBody = new DisconnectRequestBody(); disconnectBody.AuxiliaryBufferSize = 0; disconnectBody.AuxiliaryBuffer = new byte[] { }; HttpWebResponse response = SendMAPIHttpRequest(this.site, this.mailStoreUrl, this.userName, this.domain, this.userPassword, disconnectBody, "Disconnect", this.cookies); string transferEncoding = response.Headers["Transfer-Encoding"]; string pendingInterval = response.Headers["X-PendingPeriod"]; string responseCode = response.Headers["X-ResponseCode"]; if (transferEncoding != null) { if (string.Compare(transferEncoding, "chunked") == 0) { byte[] rawBuffer = ReadHttpResponse(response); if (uint.Parse(responseCode) == 0) { ChunkedResponse chunkedResponse = ChunkedResponse.ParseChunkedResponse(rawBuffer); DisconnectSuccessResponseBody responseSuccess = DisconnectSuccessResponseBody.Parse(chunkedResponse.ResponseBodyRawData); returnValue = responseSuccess.ErrorCode; } } } response.GetResponseStream().Close(); this.cookies = null; return(returnValue); }