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;
}