Пример #1
0
        protected override void DataReceived(HTTPConnection sender, NetworkBuffer data)
        {
            //Console.WriteLine(Data);
            // Initialize a new session
            //HTTPConnection HTTP = (HTTPConnection)sender.ExtraObject;

            //string Data = System.Text.Encoding.Default.GetString(ReceivedData);

            byte[] msg = data.Read();



            var BL = sender.Parse(msg);

            if (BL == 0)
            {
                if (sender.Request.Method == HTTPRequestPacket.HTTPMethod.UNKNOWN)
                {
                    sender.Close();
                    return;
                }
                if (sender.Request.URL == "")
                {
                    sender.Close();
                    return;
                }
            }
            else if (BL == -1)
            {
                data.HoldForNextWrite(msg);
                return;
            }
            else if (BL < 0)
            {
                data.HoldFor(msg, (uint)(msg.Length - BL));
                return;
            }
            else if (BL > 0)
            {
                if (BL > maxPost)
                {
                    sender.Send(
                        "<html><body>POST method content is larger than "
                        + maxPost
                        + " bytes.</body></html>");

                    sender.Close();
                }
                else
                {
                    data.HoldFor(msg, (uint)(msg.Length + BL));
                }
                return;
            }
            else if (BL < 0) // for security
            {
                sender.Close();
                return;
            }



            if (sender.IsWebsocketRequest() & !sender.WSMode)
            {
                sender.Upgrade();
                //return;
            }


            //return;

            try
            {
                foreach (IResource resource in Instance.Children)
                {
                    if (resource is HTTPFilter)
                    {
                        if ((resource as HTTPFilter).Execute(sender))
                        {
                            return;
                        }
                    }
                }

                sender.Send("Bad Request");
                sender.Close();
            }
            catch (Exception ex)
            {
                if (ex.Message != "Thread was being aborted.")
                {
                    Global.Log("HTTPServer", LogType.Error, ex.ToString());

                    //Console.WriteLine(ex.ToString());
                    //EventLog.WriteEntry("HttpServer", ex.ToString(), EventLogEntryType.Error);
                    sender.Send(Return500(ex.Message));
                }
            }
        }
Пример #2
0
    protected override void DataReceived(NetworkBuffer data)
    {
        byte[] msg = data.Read();

        var BL = Parse(msg);

        if (BL == 0)
        {
            if (Request.Method == HTTPRequestPacket.HTTPMethod.UNKNOWN)
            {
                Close();
                return;
            }
            if (Request.URL == "")
            {
                Close();
                return;
            }
        }
        else if (BL == -1)
        {
            data.HoldForNextWrite(msg);
            return;
        }
        else if (BL < 0)
        {
            data.HoldFor(msg, (uint)(msg.Length - BL));
            return;
        }
        else if (BL > 0)
        {
            if (BL > Server.MaxPost)
            {
                Send(
                    "<html><body>POST method content is larger than "
                    + Server.MaxPost
                    + " bytes.</body></html>");

                Close();
            }
            else
            {
                data.HoldFor(msg, (uint)(msg.Length + BL));
            }
            return;
        }
        else if (BL < 0) // for security
        {
            Close();
            return;
        }



        if (IsWebsocketRequest(Request) & !WSMode)
        {
            Upgrade();
            //return;
        }


        //return;

        try
        {
            if (!Server.Execute(this))
            {
                Response.Number = HTTPResponsePacket.ResponseCode.InternalServerError;
                Send("Bad Request");
                Close();
            }
        }
        catch (Exception ex)
        {
            if (ex.Message != "Thread was being aborted.")
            {
                Global.Log("HTTPServer", LogType.Error, ex.ToString());

                //Console.WriteLine(ex.ToString());
                //EventLog.WriteEntry("HttpServer", ex.ToString(), EventLogEntryType.Error);
                Send(Error500(ex.Message));
            }
        }
    }