Пример #1
0
        internal void CopyHeadersTo(Stream outputStream)
        {
            // Prepare response headers.
            List <string> responseHeaders = new List <string>();

            responseHeaders.Add(Version + " " + Status);

            // Copy response headers to final set of headers.
            responseHeaders.AddRange(Headers);

            responseHeaders.Add("Date: " + DateTime.UtcNow.ToString("R"));
            if (IsKeepAlive)
            {
                responseHeaders.Add("Connection: Keep-Alive");
            }

            // Convert headers to bytes.
            string headersString = String.Join("\r\n", responseHeaders) + "\r\n\r\n";

            byte[] headersBytes = Encoding.ASCII.GetBytes(headersString);

            // Send headers.
            outputStream.Write(headersBytes, 0, headersBytes.Length);
            outputStream.Flush();

            // For debugging.
            logger.WriteHeaders(Encoding.ASCII.GetString(headersBytes));
        }
Пример #2
0
        public void ReadHeaders(Stream inputStream, Stream outputStream)
        {
            int           c;
            StringBuilder builder   = new StringBuilder();
            LastChars     lastChars = LastChars.None;

            while (true)
            {
                c = inputStream.ReadByte();
                Utils.CheckByteRead(c);

                if (outputStream != null)
                {
                    outputStream.WriteByte((byte)c);
                }

                logger.WriteHeaders((char)c);
                builder.Append((char)c);

                if (c == '\r' && lastChars == LastChars.None)
                {
                    lastChars = LastChars.Cr;
                }
                else if (c == '\n' && lastChars == LastChars.Cr)
                {
                    lastChars = LastChars.CrLf;
                    ParseHeader(builder.ToString());
                    builder.Clear();
                }
                else if (c == '\r' && lastChars == LastChars.CrLf)
                {
                    lastChars = LastChars.CrLfCr;
                }
                else if (c == '\n' && lastChars == LastChars.CrLfCr)
                {
                    break;
                }
                else
                {
                    lastChars = LastChars.None;
                }
            }

            ParseCommonHeaders();
        }