bool Reader_HandlePacket(Fastcgi.PacketType Type, ushort RequestId, byte[] Content)
{
var Request = GetOrCreateFastcgiRequest(RequestId);
if (Debug)
{
Console.WriteLine("Handling Packet (" + Type + ")");
}
switch (Type)
{
case Fastcgi.PacketType.FCGI_BEGIN_REQUEST:
var Role = (Fastcgi.Role)(Content[0] | (Content[1] << 8));
var Flags = (Fastcgi.Flags)(Content[2]);
break;
case Fastcgi.PacketType.FCGI_PARAMS:
if (Content.Length == 0)
{
Request.ParamsStream.Finalized = true;
}
else
{
Request.ParamsStream.Write(Content, 0, Content.Length);
}
break;
case Fastcgi.PacketType.FCGI_STDIN:
if (Content.Length == 0)
{
Request.StdinStream.Finalized = true;
Request.FinalizedRequest = true;
}
else
{
Request.StdinStream.Write(Content, 0, Content.Length);
}
break;
default:
Console.Error.WriteLine("Unhandled packet type: '" + Type + "'");
//throw (new Exception("Unhandled packet type: '" + Type + "'"));
break;
}
if (Debug)
{
Console.WriteLine(" : FinalizedRequest(" + Request.FinalizedRequest + ")");
}
if (Request.ParamsStream.Finalized && Request.Processing == false)
{
Request.Processing = true;
ThreadPool.QueueUserWorkItem(HandleRequest, Request);
}
if (Request.FinalizedRequest)
{
return false;
}
else
{
return true;
}
}