Пример #1
0
        public virtual WSClientAdapter GetAdapter(Gateway gateway, BeetleX.FastHttpApi.HttpRequest request, UrlRouteAgent urlRouteAgent, DataFrame frame)
        {
            WSClientAdapter result = (WSClientAdapter)request.Session["__ws_agent_adapter"];

            if (result == null)
            {
                result         = CreateAdapter();
                result.Request = request;
                result.Gateway = gateway;

                result.Init(urlRouteAgent);

                request.Session["__ws_agent_adapter"] = result;
            }
            return(result);
        }
Пример #2
0
            public void Add(int code, long time, Servers.ServerAgent server, BeetleX.FastHttpApi.HttpRequest request)
            {
                var stats = GetStatistics(request, code);

                stats?.Add(code, time, server, request);
            }
Пример #3
0
 public virtual UrlRoute GetRouteAgent(Gateway gateway, BeetleX.FastHttpApi.HttpRequest request, UrlRouteAgent urlRouteAgent)
 {
     return(urlRouteAgent.UrlRoute);
 }
Пример #4
0
 private void OnHttpDecode(ISession session, PipeStream pstream)
 {
     mReceives++;
     if (mRequest == null)
     {
         mRequest    = mServer.CreateRequest(session);
         mRequest.ID = HttpRequest.GetID();
     }
     if (mRequest.Read(pstream) == LoadedState.Completed)
     {
         try
         {
             Completed?.Invoke(this, mCompletedArgs.SetInfo(session, mRequest));
         }
         finally
         {
             mRequest  = null;
             mReceives = 0;
         }
         return;
     }
     else
     {
         HttpToken token = (HttpToken)session.Tag;
         if (session.Server.EnableLog(LogType.Info))
         {
             session.Server.Log(LogType.Info, session, $"HTTP {mRequest.ID} {session.RemoteEndPoint} request from multi receive");
         }
         if (mRequest.State == LoadedState.None)
         {
             if (mReceives > 3)
             {
                 if (session.Server.EnableLog(LogType.Warring))
                 {
                     session.Server.Log(LogType.Warring, session, $"HTTP {mRequest.ID} {session.RemoteEndPoint} receive data error!");
                 }
                 token.KeepAlive = false;
                 var response = mRequest.CreateResponse();
                 InnerErrorResult innerErrorResult = new InnerErrorResult("400", "Request http receive data error!");
                 response.Result(innerErrorResult);
                 return;
             }
             if (pstream.FirstBuffer.Length > 10)
             {
                 var  span     = pstream.FirstBuffer.Memory.Slice(0, 10).Span;
                 var  method   = Encoding.ASCII.GetString(span.ToArray());
                 bool ismethod = method.IndexOf("GET") == 0 || method.IndexOf("POST") == 0 || method.IndexOf("HEAD") == 0 ||
                                 method.IndexOf("PUT") == 0 || method.IndexOf("DELETE") == 0 || method.IndexOf("CONNECT") == 0 || method.IndexOf("OPTIONS") == 0 ||
                                 method.IndexOf("TRACE") == 0;
                 if (!ismethod)
                 {
                     if (session.Server.EnableLog(LogType.Warring))
                     {
                         session.Server.Log(LogType.Warring, session, $"HTTP {mRequest.ID} {session.RemoteEndPoint} protocol data error!");
                     }
                     token.KeepAlive = false;
                     var response = mRequest.CreateResponse();
                     InnerErrorResult innerErrorResult = new InnerErrorResult("400", "Request http protocol data error!");
                     response.Result(innerErrorResult);
                     return;
                 }
             }
         }
         if ((int)mRequest.State < (int)LoadedState.Header && (pstream.Length > 1024 * 4 || mReceives > 20))
         {
             if (session.Server.EnableLog(LogType.Warring))
             {
                 session.Server.Log(LogType.Warring, session, $"HTTP {mRequest.ID} {session.RemoteEndPoint} header too long!");
             }
             token.KeepAlive = false;
             var response = mRequest.CreateResponse();
             InnerErrorResult innerErrorResult = new InnerErrorResult("400", "Request header too large");
             response.Result(innerErrorResult);
         }
         else if (mRequest.Length > mServerConfig.MaxBodyLength)
         {
             if (session.Server.EnableLog(LogType.Warring))
             {
                 session.Server.Log(LogType.Warring, session, $"HTTP {mRequest.ID} {session.RemoteEndPoint} body too long!");
             }
             token.KeepAlive = false;
             var response = mRequest.CreateResponse();
             InnerErrorResult innerErrorResult = new InnerErrorResult("400", "Request entity too large");
             response.Result(innerErrorResult);
             return;
         }
         if (mReceives > 10 & pstream.Length < mReceives * 256)
         {
             if (session.Server.EnableLog(LogType.Warring))
             {
                 session.Server.Log(LogType.Warring, session, $"HTTP {mRequest.ID} {session.RemoteEndPoint} protocol data commit exception!");
             }
             token.KeepAlive = false;
             var response = mRequest.CreateResponse();
             InnerErrorResult innerErrorResult = new InnerErrorResult("400", "protocol data commit exception");
             response.Result(innerErrorResult);
         }
         return;
     }
 }