using System.Collections.Generic; using System.IO; using System; using System.Net; namespace Tesses.WebServer { public class ServerContext { public string Method { get; set; } public ServerContext(string method,Stream strm,string path,Dictionary> headers) { Method = method; NetworkStream = strm; RequestHeaders = headers; ResponseHeaders = new Dictionary>(); QueryParams = new Dictionary>(); StatusCode = 200; // /joel/path/luigi?local=jim&john_surname=connor&demi_surname=lovato&local=tim string[] splitUrl = path.Split(new char[] { '?' }, 2); if (splitUrl.Length > 0) { UrlPath = splitUrl[0]; if (splitUrl.Length == 2) { //local=jim&john_surname=connor&demi_surname=lovato&local=tim //we want to split on & q_parm = splitUrl[1]; } else { q_parm = ""; } ResetQueryParms(); } } public void ResetQueryParms() { QueryParams.Clear(); foreach (var item in q_parm.Split(new char[] { '&' }, StringSplitOptions.RemoveEmptyEntries)) { //Console.WriteLine(item); var itemSplit = item.Split(new char[] { '=' }, 2); if (itemSplit.Length > 0) { string key = itemSplit[0]; string value = ""; if (itemSplit.Length == 2) { value = itemSplit[1]; } QueryParams.Add(key, value); } } } private string get_host() { if(RequestHeaders.ContainsKey("Host")) { return RequestHeaders.GetFirst("Host"); } return Server.Address.ToString(); } string q_parm; public IPEndPoint Server { get; set; } public IPEndPoint Client { get; set; } public string Host { get { return get_host(); } } public string UrlPath { get; set; } public Dictionary> QueryParams { get; set; } public Dictionary> RequestHeaders { get; set; } public Dictionary> ResponseHeaders { get; set; } public Stream NetworkStream { get; set; } public int StatusCode { get; internal set; } } }