/// <summary> /// Handles completion of the request transmission. /// </summary> /// <param name="ar">The async result.</param> private void OnRequestSent(IAsyncResult ar) { var httpAR = (HttpAsyncResult)ar.AsyncState; using (TimedLock.Lock(this)) { try { sock.EndSendAll(ar); // The request was sent successfully so start receiving // the response. httpAR.Response = new HttpResponse(cbContentMax); httpAR.Buffer = new byte[HttpStack.BlockSize]; httpAR.Response.BeginParse(); sock.BeginReceive(httpAR.Buffer, 0, HttpStack.BlockSize, SocketFlags.None, onResponseRecv, httpAR); } catch (Exception e) { httpAR.Notify(e); } } }
public void HttpServer_MaxQuerySize() { HttpServer server; HttpRequest request; HttpResponse response; BlockArray blocks; byte[] buf; int cb; EnhancedSocket sock; IAsyncResult ar; server = new HttpServer(new IPEndPoint[] { new IPEndPoint(IPAddress.Any, ServerPort) }, new IHttpModule[] { new TestModule() }, 5, 100, 200); server.Start(); try { request = new HttpRequest("PUT", "/foo.htm", null); request.Content = new BlockArray(500); request["Response"] = "abcd"; request["Close"] = "yes"; request["Content-Length"] = request.Content.Size.ToString(); blocks = request.Serialize(4096); sock = new EnhancedSocket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sock.Connect("localhost", ServerPort); Thread.Sleep(100); Assert.AreEqual(1, server.ConnectionCount); try { ar = sock.BeginSendAll(blocks, SocketFlags.None, null, null); sock.EndSendAll(ar); } catch { } response = new HttpResponse(); response.BeginParse(); buf = new byte[4096]; cb = sock.Receive(buf, buf.Length, SocketFlags.None); Assert.IsTrue(response.Parse(buf, cb)); response.EndParse(); Assert.AreEqual(HttpStatus.RequestEntityTooLarge, response.Status); sock.Close(); } finally { server.Stop(); } }
public void HttpServer_QueryResponse_Close() { HttpServer server; HttpRequest request; HttpResponse response; BlockArray blocks; byte[] buf; int cb; EnhancedSocket sock; IAsyncResult ar; server = new HttpServer(new IPEndPoint[] { new IPEndPoint(IPAddress.Any, ServerPort) }, new IHttpModule[] { new TestModule() }, 5, 100, int.MaxValue); server.Start(); try { request = new HttpRequest("GET", "/foo.htm", null); request.Content = new BlockArray(Encoding.ASCII.GetBytes("abcd")); request["Close"] = "yes"; blocks = request.Serialize(4096); sock = new EnhancedSocket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sock.Connect("localhost", ServerPort); Thread.Sleep(100); Assert.AreEqual(1, server.ConnectionCount); ar = sock.BeginSendAll(blocks, SocketFlags.None, null, null); sock.EndSendAll(ar); response = new HttpResponse(); response.BeginParse(); buf = new byte[4096]; cb = sock.Receive(buf, buf.Length, SocketFlags.None); Assert.IsTrue(response.Parse(buf, cb)); response.EndParse(); CollectionAssert.AreEqual(Encoding.ASCII.GetBytes("abcd"), response.Content.ToByteArray()); buf = new byte[4096]; cb = sock.Receive(buf, buf.Length, SocketFlags.None); Assert.AreEqual(0, cb); sock.Close(); } finally { server.Stop(); } }