Esempio n. 1
0
 public RequestAgent(TcpClientAgent clientAgent, ServerAgent serverAgent, HttpRequest request, HttpResponse response,
                     UrlRouteServerGroup.UrlServerInfo urlServerInfo, Routes.UrlRoute urlRoute)
 {
     mTransferEncoding = false;
     mRequestLength    = 0;
     Code         = 0;
     Server       = serverAgent;
     Request      = request;
     Response     = response;
     mClientAgent = clientAgent;
     mClientAgent.Client.ClientError = OnSocketError;
     mClientAgent.Client.DataReceive = OnReveive;
     mBuffer       = mClientAgent.Buffer;
     Status        = RequestStatus.None;
     UrlServerInfo = urlServerInfo;
     UrlRoute      = urlRoute;
     mStartTime    = TimeWatch.GetElapsedMilliseconds();
     mRequestID    = request.ID;
     //System.Threading.Interlocked.Increment(ref RequestCount);
     //mHistoryRequests[mRequestID] = this;
     if (UrlRoute.TimeOut > 0)
     {
         TimerOutValue = mStartTime + UrlRoute.TimeOut;
         UrlRoute.Gateway.TimeoutFactory.Add(this);
     }
     mProxyStream = new PipeStream(UrlRoute.Gateway.ProxyBufferPool);
 }
Esempio n. 2
0
        public EventRequestCompletedArgs(Routes.UrlRoute urlRoute, HttpRequest request, HttpResponse response, Gateway gateway, int code,
                                         Servers.ServerAgent server, long useTime, long requestid, string error)

        {
            Error           = error;
            RequestID       = requestid;
            Gateway         = gateway;
            UrlRewrite      = request.IsRewrite;
            SourceBaseUrl   = request.GetSourceBaseUrl();
            SourceUrl       = request.GetSourceUrl();
            SourcePath      = request.GetSourcePath();
            Url             = request.Url;
            BaseUrl         = request.BaseUrl;
            Path            = request.Path;
            Code            = code;
            Server          = server;
            Time            = useTime;
            UrlRoute        = urlRoute;
            Cookies         = request.Cookies.Copy();
            Headers         = request.Header.Copy();
            RemoteIPAddress = request.RemoteIPAddress;
            Data            = request.Data.Copy();
            Method          = request.Method;
            Host            = request.GetHostBase();
        }
 public EventRequestCompletedArgs(Routes.UrlRoute urlRoute, HttpRequest request, HttpResponse response, Gateway gateway, int code,
                                  Servers.ServerAgent server, long useTime)
     : base(request, response, gateway)
 {
     Code     = code;
     Server   = server;
     Time     = useTime;
     UrlRoute = urlRoute;
 }
Esempio n. 4
0
        public EventRequestCompletedArgs(Routes.UrlRoute urlRoute, HttpRequest request, HttpResponse response, Gateway gateway, int code,
                                         Servers.ServerAgent server, long useTime)

        {
            Gateway         = gateway;
            BaseUrl         = request.BaseUrl;
            Url             = request.Url;
            Code            = code;
            Server          = server;
            Time            = useTime;
            UrlRoute        = urlRoute;
            Cookies         = request.Cookies.Copy();
            Headers         = request.Header.Copy();
            RemoteIPAddress = request.RemoteIPAddress;
            Data            = request.Data.Copy();
            Path            = request.Path;
            Method          = request.Method;
        }
Esempio n. 5
0
 public RequestAgent(TcpClientAgent clientAgent, ServerAgent serverAgent, HttpRequest request, HttpResponse response,
                     UrlRouteServerGroup.UrlServerInfo urlServerInfo, Routes.UrlRoute urlRoute)
 {
     mTransferEncoding = false;
     mRequestLength    = 0;
     Code         = 0;
     Server       = serverAgent;
     Request      = request;
     Response     = response;
     mClientAgent = clientAgent;
     mClientAgent.Client.ClientError = OnSocketError;
     mClientAgent.Client.DataReceive = OnReveive;
     mBuffer       = mClientAgent.Buffer;
     Status        = RequestStatus.None;
     UrlServerInfo = urlServerInfo;
     UrlRoute      = urlRoute;
     mStartTime    = TimeWatch.GetElapsedMilliseconds();
     mRequestID    = System.Threading.Interlocked.Increment(ref mRequestIDSqueue);
     //System.Threading.Interlocked.Increment(ref RequestCount);
     //mHistoryRequests[mRequestID] = this;
 }
Esempio n. 6
0
 public Pluginer(Gateway gateway, Routes.UrlRoute urlRoute)
 {
     Gateway  = gateway;
     UrlRoute = urlRoute;
 }
Esempio n. 7
0
        public bool AgentRequesting(HttpRequest request, HttpResponse response, Servers.ServerAgent server, Routes.UrlRoute urlRoute)
        {
            var items = mAgentRequestingHandlers;

            if (items.Length > 0)
            {
                Events.EventAgentRequestingArgs e = new Events.EventAgentRequestingArgs(request, response, Gateway, server, urlRoute);
                for (int i = 0; i < items.Length; i++)
                {
                    if (!e.Cancel && Gateway.PluginCenter.PluginIsEnabled(items[i]))
                    {
                        try
                        {
                            items[i].Execute(e);
                        }
                        catch (Exception e_)
                        {
                            Gateway.HttpServer.GetLog(LogType.Error)?
                            .Log(LogType.Error, $"gateway {request.ID} {request.RemoteIPAddress} {request.Method} {request.GetSourceUrl()} {items[i].Name} agent requesting plugin process error {e_.Message}@{e_.StackTrace}");
                        }
                    }
                }
                return(!e.Cancel);
            }
            return(true);
        }
Esempio n. 8
0
        public async void Execute(HttpRequest request, HttpResponse response, UrlRouteServerGroup.UrlServerInfo serverInfo, Routes.UrlRoute urlRoute)
        {
            try
            {
                if (request.Server.EnableLog(LogType.Debug))
                {
                    request.Server.Log(LogType.Debug, $"Gateway {request.RemoteIPAddress} {request.Method} {request.Url} request {urlRoute.Url}'s get connectino pool");
                }
                var clientAgent = await PopClient();

                if (request.Server.EnableLog(LogType.Debug))
                {
                    request.Server.Log(LogType.Debug, $"Gateway {request.RemoteIPAddress} {request.Method} {request.Url} request {urlRoute.Url}'s get connectino completed");
                }
                if (clientAgent == null)
                {
                    string error = $"Unable to reach {Host}:{Port} request queue overflow!";
                    Events.EventResponseErrorArgs erea = new Events.EventResponseErrorArgs(request, response,
                                                                                           Gateway, error, Gateway.SERVER_AGENT_QUEUE_OVERFLOW);
                    Gateway.OnResponseError(erea);
                    if (request.Server.EnableLog(LogType.Info))
                    {
                        request.Server.Log(LogType.Info, $"Gateway {request.ID} {request.RemoteIPAddress} {request.Method} {request.Url} route to {Uri} error  exceeding maximum number of connections");
                    }
                }
                else
                {
                    clientAgent.Status = TcpClientAgentStatus.None;
                    RequestAgent agent           = new RequestAgent(clientAgent, this, request, response, serverInfo, urlRoute);
                    var          eventRequesting = Gateway.OnServerHttpRequesting(agent);
                    if (eventRequesting == null || !eventRequesting.Cancel)
                    {
                        agent.Completed = OnCompleted;
                        agent.Execute();
                    }
                }
            }
            catch (Exception e_)
            {
                if (urlRoute.Gateway.HttpServer.EnableLog(LogType.Error))
                {
                    urlRoute.Gateway.HttpServer.Log(LogType.Error, $"Gateway {request.RemoteIPAddress} {request.Method} {request.Url} route to {Uri} error {e_.Message}{e_.StackTrace}");
                }
            }
        }
Esempio n. 9
0
        public async void Execute(HttpRequest request, HttpResponse response, UrlRouteServerGroup.UrlServerInfo serverInfo, Routes.UrlRoute urlRoute)
        {
            try
            {
                var clientAgent = await PopClient();

                if (clientAgent == null)
                {
                    string error = $"Unable to reach {Host}:{Port} HTTP request, exceeding maximum number of connections";
                    Events.EventResponseErrorArgs erea = new Events.EventResponseErrorArgs(request, response,
                                                                                           Gateway, error, Gateway.SERVER_MAX_OF_CONNECTIONS);
                    Gateway.OnResponseError(erea);
                }
                else
                {
                    RequestAgent agent = new RequestAgent(clientAgent, this, request, response, serverInfo, urlRoute);
                    agent.Completed = OnCompleted;
                    Gateway.AddRequest(agent);
                    //agent.Execute();
                }
            }
            catch (Exception e_)
            {
                if (urlRoute.Gateway.HttpServer.EnableLog(LogType.Error))
                {
                    urlRoute.Gateway.HttpServer.Log(LogType.Error, $"gateway {request.Url} route to {Uri} error {e_.Message}{e_.StackTrace}");
                }
            }
        }
Esempio n. 10
0
        public bool AgentRequesting(HttpRequest request, HttpResponse response, Servers.ServerAgent server, Routes.UrlRoute urlRoute)
        {
            var items = mAgentRequestingHandlers;

            if (items.Length > 0)
            {
                Events.EventAgentRequestingArgs e = new Events.EventAgentRequestingArgs(request, response, Gateway, server, urlRoute);
                for (int i = 0; i < items.Length; i++)
                {
                    if (!e.Cancel)
                    {
                        items[i].Execute(e);
                    }
                }
                return(!e.Cancel);
            }
            return(true);
        }
Esempio n. 11
0
 public EventAgentRequestingArgs(HttpRequest request, HttpResponse response, Gateway gateway, Servers.ServerAgent server, Routes.UrlRoute urlRoute) :
     base(request, response, gateway)
 {
     Server   = server;
     UrlRoute = urlRoute;
 }