void OnRead (IAsyncResult ares)
{
HttpConnection cnc = (HttpConnection) ares.AsyncState;
int nread = -1;
try {
nread = stream.EndRead (ares);
ms.Write (buffer, 0, nread);
if (ms.Length > 32768) {
SendError ("Bad request", 400);
Close (true);
return;
}
} catch {
if (ms != null && ms.Length > 0)
SendError ();
if (sock != null)
CloseSocket ();
return;
}
if (nread == 0) {
//if (ms.Length > 0)
// SendError (); // Why bother?
CloseSocket ();
return;
}
if (ProcessInput (ms)) {
if (!context.HaveError)
context.Request.FinishInitialization ();
if (context.HaveError) {
SendError ();
Close (true);
return;
}
if (!epl.BindContext (context)) {
SendError ("Invalid host", 400);
Close (true);
}
context_bound = true;
return;
}
stream.BeginRead (buffer, 0, BufferSize, OnRead, cnc);
}