public HttpRequestHeader(TcpClient client, HttpServers.BaseServer server, bool autoRead = true) { Client = client; System.Net.IPEndPoint remoteEndPoint = ((System.Net.IPEndPoint)Client.Client.RemoteEndPoint); ClientAddress = remoteEndPoint.ToString(); ClientIP = remoteEndPoint.Address.ToString(); ClientPort = remoteEndPoint.Port; Server = server; HeaderKeys = new Dictionary <string, string>(); P_UploadFilePaths = new List <string>(); Parameters = new System.Collections.Specialized.NameValueCollection(); if (autoRead) { ProcessRequestHeader(client); } }
public static HttpRespondHeader GenerateRespond(HttpRequestHeader requestHeader, HttpServers.BaseServer server) { if (Rule.Corrupted.Equals(requestHeader.Repository)) { throw new NotSupportedException(string.Format("[HttpRequestHeader].Repository is Corrupted!")); } HttpRespondHeader respond = new HttpRespondHeader(); if (requestHeader.HeaderKeys.ContainsKey("Resolved-Location")) /* [DUPRECATED SCOPE] */ { respond.SetState(requestHeader.HttpVersion, HttpRespondState.MOVED_PERMANENTLY); respond.AddHeader("Location", requestHeader.HeaderKeys["Resolved-Location"]); } else { bool headerState = string.IsNullOrEmpty(requestHeader.AbsoluteFilePath); string mimeType = headerState ? "plain/text" : MimeType.GetMimeTypeFromFile(requestHeader.AbsoluteFilePath); bool canICacheThisResource = false; if (headerState) { respond.SetState(requestHeader.HttpVersion, HttpRespondState.NOT_FOUND); respond.AddHeader("Server", CurrentServerVersion.ToString()); } else { byte[] respondBody = headerState ? null : ProcessRequestedFile(requestHeader, server.Settings, out canICacheThisResource, respond); if (respondBody != null && !respondBody.Equals(HttpRequestHeader.ContentSplitter)) { /// /// FOR REGULAR FILES AND SCRIPTS WHOME NOT USING SELF-RESPOND PROCEDURES /// respond.SetState(requestHeader.HttpVersion, (respondBody != null && respondBody.Length > 0) || respond.P_BodySet ? HttpRespondState.OK : HttpRespondState.NO_CONTENT); respond.AddHeader("Server", ModetorServerVersion.V1_0.ToString()); respond.AddHeader("Connection", "close");//keep-alive if ((respondBody != null && respondBody.Length > 0) || respond.P_BodySet) { if (canICacheThisResource) { if ((bool)server.Settings.Current.DebugMode) { if ((bool)server.Settings.Current.EnableCachingFrontendFiles) { respond.AddHeader("Cache-Control", "public, max-age=604800, immutable"); } else if (!(requestHeader.AbsoluteFilePath.EndsWith(EXT_JAVASCRIPT) || requestHeader.AbsoluteFilePath.EndsWith(EXT_CSS) || requestHeader.AbsoluteFilePath.EndsWith(EXT_HTML))) { respond.AddHeader("Cache-Control", "public, max-age=604800, immutable"); } } else { respond.AddHeader("Cache-Control", "public, max-age=604800, immutable"); } } respond.AddHeader("Content-Type", mimeType);//+ "; charset=UTF-8" respond.AddHeader("Content-Length", respond.P_BodySet ? respond.RespondBuffer[2].Length.ToString() : respondBody.Length.ToString()); respond.SetBody(respondBody); } } else { /// /// THIS FOR SCRIPTS WITH SELF-RESPOND PROCEDURES /// } } } return(respond); }
internal ServerStateEventArgs(HttpServers.BaseServer server) { Server = server; IP = Server.IP; Port = Server.Port; }