示例#1
0
        private void ProcessProlog()
        {
            var line = ReadBuffer.ReadLine();

            if (line == null)
            {
                return;
            }
            var match = PrologRegex.Match(line);

            if (!match.Success)
            {
                throw new ProtocolException("The following line could not be parsed by PrologRegex member: " + line);
            }

            Method   = match.Groups[1].Value;
            Request  = match.Groups[2].Value;
            Protocol = match.Groups[3].Value;

            Console.WriteLine("Method: " + Method);     ////////
            Console.WriteLine("Request: " + Request);   ////////
            Console.WriteLine("Protocol: " + Protocol); ////////

            _state = ClientState.STATE.READING_HEADERS;
            ProcessHeaders();
        }
示例#2
0
 private void WriteResponseContent()
 {
     if (_writeStream != null)
     {
         _writeStream.Dispose();
     }
     _writeStream          = _context.Response.OutputStream.BaseStream;
     _writeStream.Position = 0;
     _state = ClientState.STATE.WRITING_CONTENT;
     BeginWrite();
 }
示例#3
0
 private void WriteResponseHeaders()
 {
     byte[] headers = BuildResponseHeaders();
     if (_writeStream != null)
     {
         _writeStream.Dispose();
     }
     _writeStream = new MemoryStream(headers);
     _state       = ClientState.STATE.WRITING_HEADERS;
     BeginWrite();
 }
示例#4
0
        private void Reset()
        {
            _state   = ClientState.STATE.READING_PROLOG;
            _context = null;
            if (_parser != null)
            {
                _parser.Dispose();
                _parser = null;
            }

            if (_writeStream != null)
            {
                _writeStream.Dispose();
                _writeStream = null;
            }

            if (InputStream != null)
            {
                InputStream.Dispose();
                InputStream = null;
            }

            ReadBuffer.Reset();
            Method         = null;
            Protocol       = null;
            Request        = null;
            Headers        = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);
            PostParameters = new NameValueCollection();

            if (MultiPartItems != null)
            {
                foreach (var item in MultiPartItems)
                {
                    if (item.Stream != null)
                    {
                        item.Stream.Dispose();
                    }
                }

                MultiPartItems = null;
            }
        }
示例#5
0
 public void Dispose()
 {
     if (!_disposed)
     {
         Server.UnregisterClient(this);
         _state = ClientState.STATE.CLOSED;
         if (_stream != null)
         {
             _stream.Dispose();
             _stream = null;
         }
         if (TcpClient != null)
         {
             TcpClient.Close();
             TcpClient = null;
         }
         Reset();
         _disposed = true;
     }
 }
示例#6
0
        private void ProcessHeaders()
        {
            string line;

            while ((line = ReadBuffer.ReadLine()) != null)
            {
                if (line.Length == 0)
                {
                    ReadBuffer.Reset();
                    _state = ClientState.STATE.READING_CONTENT;
                    ProcessContent();
                    return;
                }
                string[] parts = line.Split(new[] { ':' }, 2);
                if (parts.Length != 2)
                {
                    throw new ProtocolException("Received header without colon.");
                }
                Headers[parts[0].Trim()] = parts[1].Trim();
            }
        }