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(); }
private void WriteResponseContent() { if (_writeStream != null) { _writeStream.Dispose(); } _writeStream = _context.Response.OutputStream.BaseStream; _writeStream.Position = 0; _state = ClientState.STATE.WRITING_CONTENT; BeginWrite(); }
private void WriteResponseHeaders() { byte[] headers = BuildResponseHeaders(); if (_writeStream != null) { _writeStream.Dispose(); } _writeStream = new MemoryStream(headers); _state = ClientState.STATE.WRITING_HEADERS; BeginWrite(); }
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; } }
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; } }
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(); } }