bool ProcessInput (MemoryStream ms)
{
byte [] buffer = ms.GetBuffer ();
int len = (int) ms.Length;
int used = 0;
string line;
try {
line = ReadLine (buffer, position, len - position, ref used);
position += used;
} catch (Exception e) {
context.ErrorMessage = "Bad request";
context.ErrorStatus = 400;
return true;
}
do {
if (line == null)
break;
if (line == "") {
if (input_state == InputState.RequestLine)
continue;
current_line = null;
ms = null;
return true;
}
if (input_state == InputState.RequestLine) {
context.Request.SetRequestLine (line);
input_state = InputState.Headers;
} else {
try {
context.Request.AddHeader (line);
} catch (Exception e) {
context.ErrorMessage = e.Message;
context.ErrorStatus = 400;
return true;
}
}
if (context.HaveError)
return true;
if (position >= len)
break;
try {
line = ReadLine (buffer, position, len - position, ref used);
position += used;
} catch (Exception e) {
context.ErrorMessage = "Bad request";
context.ErrorStatus = 400;
return true;
}
} while (line != null);
if (used == len) {
ms.SetLength (0);
position = 0;
}
return false;
}