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); }
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; }
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; }
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; }
public Pluginer(Gateway gateway, Routes.UrlRoute urlRoute) { Gateway = gateway; UrlRoute = urlRoute; }
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); }
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}"); } } }
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}"); } } }
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); }
public EventAgentRequestingArgs(HttpRequest request, HttpResponse response, Gateway gateway, Servers.ServerAgent server, Routes.UrlRoute urlRoute) : base(request, response, gateway) { Server = server; UrlRoute = urlRoute; }