Example #1
0
        /// <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);
                }
            }
        }
Example #2
0
        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();
            }
        }
Example #3
0
        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();
            }
        }