Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
 internal ServerStateEventArgs(HttpServers.BaseServer server)
 {
     Server = server;
     IP     = Server.IP;
     Port   = Server.Port;
 }