private ProcessRequestHeader ( char data ) : void | ||
data | char | |
return | void |
private void ProcessRequestHeader(char[] data)
{
var content = new string(data);
var indexOf = content.IndexOf('\n');
var firstLine = content.Substring(0, indexOf);
// Parse the first line of the request: "GET /path/ HTTP/1.1"
var words = firstLine.Split(' ');
Method = words[0];
URL = words[1];
// Could look for any further headers in other lines of the request if required (e.g. User-Agent, Cookie)
}
Request::ProcessRequestHeader ( ) : void |
private void StartListening() { while (true) { using (IClientSocket clientSocket = new ClientSocket(ListeningSocket.Accept())) { Log.Debug("Received request from " + clientSocket.RemoteEndPoint); Log.Debug(DateTime.Now + " " + clientSocket.Available + " request bytes available"); int bytesReceived = DetermineBytesReceived(clientSocket.Available); if (bytesReceived > 0) { byte[] buffer = clientSocket.Receive(bytesReceived); // Buffer probably should be larger than this. using (var r = new Request(clientSocket, Encoding.UTF8.GetChars(buffer))) { r.ProcessRequestHeader(); Log.Debug(DateTime.Now + " " + r.URL); if (_requestReceived != null) _requestReceived(r); } } } // I always like to have this in a continuous loop. Helps prevent lock-ups Thread.Sleep(10); } }