public void handlePOSTRequest()
{
// this post data processing just reads everything into a memory stream.
// this is fine for smallish things, but for large stuff we should really
// hand an input stream to the request processor. However, the input stream
// we hand him needs to let him see the "end of the stream" at this content
// length, because otherwise he won't know when he's seen it all!
Console.WriteLine( "get post data start" );
int content_len = 0;
var ms = new MemoryStream();
if (httpHeaders.ContainsKey( "Content-Length" ))
{
content_len = Convert.ToInt32( httpHeaders["Content-Length"] );
if (content_len > MAX_POST_SIZE)
{
throw new Exception(
String.Format( "POST Content-Length({0}) too big for this simple server",
content_len ) );
}
var buf = new byte[BUF_SIZE];
int to_read = content_len;
while (to_read > 0)
{
Console.WriteLine( "starting Read, to_read={0}", to_read );
int numread = inputStream.Read( buf, 0, Math.Min( BUF_SIZE, to_read ) );
Console.WriteLine( "read finished, numread={0}", numread );
if (numread == 0)
{
if (to_read == 0)
{
break;
}
throw new Exception( "client disconnected during post" );
}
to_read -= numread;
ms.Write( buf, 0, numread );
}
ms.Seek( 0, SeekOrigin.Begin );
}
Console.WriteLine( "get post data end" );
srv.handlePOSTRequest( this, new StreamReader( ms ) );
}