Beispiel #1
0
        public void BlockOffset()
        {
            BlockStream s;
            BlockArray  ba;

            s = new BlockStream(0, 10, 5);
            for (int i = 0; i < 20; i++)
            {
                s.WriteByte((byte)i);
            }

            ba = s.ToBlocks(false);
            Assert.Equal(4, ba.Count);
            for (int i = 0; i < ba.Count; i++)
            {
                Block b = ba.GetBlock(i);

                Assert.Equal(5, b.Length);
                Assert.Equal(5, b.Offset);
                for (int j = 0; j < 5; j++)
                {
                    Assert.Equal(i * 5 + j, (int)b.Buffer[b.Offset + j]);
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Serializes the request/response line and headers into a binary
        /// form suitiable for network transmission.
        /// </summary>
        /// <param name="blockSize">Size of the underlying blocks.</param>
        /// <returns>The request as a block array.</returns>
        internal BlockArray Serialize(int blockSize)
        {
            var bs     = new BlockStream(0, blockSize);
            var writer = new StreamWriter(bs);

            if (isRequest)
            {
                writer.Write("{0} {1} HTTP/{2}.{3}\r\n", method, rawUri, version.Major, version.Major);
            }
            else
            {
                writer.Write("HTTP/{0}.{1} {2} {3}\r\n", version.Major, version.Major, (int)status, reason);
            }

            foreach (HttpHeader header in headers.Values)
            {
                writer.Write("{0}: {1}\r\n", header.Name, header.Value);
            }

            writer.Write("\r\n");

            writer.Flush();

            return(bs.ToBlocks(true));
        }
Beispiel #3
0
            public HttpResponse OnRequest(HttpServer server, HttpRequest request, bool newCon, out bool close)
            {
                HttpResponse response = new HttpResponse(HttpStatus.OK, "OK");
                BlockStream  bs       = new BlockStream(0, 4096);
                TextWriter   writer   = new StreamWriter(bs, Encoding.ASCII);

                writer.Write(request["Response"]);
                writer.Flush();

                response.Content = bs.ToBlocks(true);
                server.AddDefaultHeaders(response);

                close = request["Close"] != null && request["Close"].ToUpper() == "YES";
                return(response);
            }
Beispiel #4
0
            public HttpResponse OnRequest(HttpServer server, HttpRequest request, bool newCon, out bool close)
            {
                HttpResponse response = new HttpResponse(HttpStatus.OK, "OK");
                BlockStream  bs       = new BlockStream(0, 4096);
                TextWriter   writer   = new StreamWriter(bs, Encoding.ASCII);

                writer.WriteLine("<html>");
                writer.WriteLine("<head><title>Hello World!</title></head>");
                writer.WriteLine("<body>");
                writer.WriteLine("<h1>Hello World!</h1>");
                writer.WriteLine("</body>");
                writer.WriteLine("</html>");
                writer.Flush();

                response.Content = bs.ToBlocks(true);
                server.AddDefaultHeaders(response);
                response["Content-Type"] = "text/html";

                close = true;
                return(response);
            }