protected virtual void OnProcessResource(HttpRequest request, HttpResponse response) { if (request.Method == HttpParse.GET_TAG) { try { mResourceCenter.ProcessFile(request, response); } catch (Exception e_) { if (EnableLog(LogType.Error)) { BaseServer.Error(e_, request.Session, $"{request.RemoteIPAddress} {request.Method} {request.BaseUrl} file error {e_.Message}"); InnerErrorResult result = new InnerErrorResult($"response file error ", e_, ServerConfig.OutputStackTrace); response.Result(result); } } } else { if (EnableLog(LogType.Info)) { Log(LogType.Info, $"{request.RemoteIPAddress}{request.Method} {request.Url} not support"); } NotSupportResult notSupport = new NotSupportResult($"{request.Method} {request.Url} not support"); response.Result(notSupport); } }
private void OnHttpDecode(ISession session, PipeStream pstream) { START: if (mRequest == null) { mRequest = mServer.CreateRequest(session); //new HttpRequest(session, mServer); } if (mRequest.Read(pstream) == LoadedState.Completed) { int length = mRequest.Length; if (mRequest.Method == HttpParse.POST_TAG || mRequest.Method == HttpParse.GET_TAG || mRequest.Method == HttpParse.PUT_TAG || mRequest.Method == HttpParse.DELETE_TAG ) { Completed?.Invoke(this, mCompletedArgs.SetInfo(session, mRequest)); } else { if (session.Server.EnableLog(LogType.Warring)) { session.Server.Log(LogType.Warring, session, "{0} {1} {2} not support", session.RemoteEndPoint, mRequest.Method, mRequest.Url); } HttpToken token = (HttpToken)session.Tag; token.KeepAlive = false; NotSupportResult notSupport = new NotSupportResult("Method:" + mRequest.Method + " not supper"); mRequest.CreateResponse().Result(notSupport); } mRequest = null; if (pstream.Length == 0) { return; } goto START; } else { if ((int)mRequest.State < (int)LoadedState.Header && pstream.Length > 1024 * 4) { if (session.Server.EnableLog(LogType.Warring)) { session.Server.Log(LogType.Warring, session, "{0} http header too long!", session.RemoteEndPoint); } session.Dispose(); } else if (mRequest.Length > mServerConfig.MaxBodyLength) { if (session.Server.EnableLog(LogType.Warring)) { session.Server.Log(LogType.Warring, session, "{0} http body too long!", session.RemoteEndPoint); } session.Dispose(); return; } return; } }
protected virtual void OnProcessResource(HttpRequest request, HttpResponse response) { if (string.Compare(request.Method, "GET", true) == 0) { try { mResourceCenter.ProcessFile(request, response); } catch (Exception e_) { if (EnableLog(LogType.Error)) { BaseServer.Error(e_, request.Session, "{0} response file error {1}", request.ClientIPAddress, e_.Message); InnerErrorResult result = new InnerErrorResult(e_, ServerConfig.OutputStackTrace); response.Result(result); } } } else { NotSupportResult notSupport = new NotSupportResult("{0} method {1} not support", request.Url, request.Method); response.Result(notSupport); } }
public void Execute(HttpRequest request, HttpResponse response, HttpApiServer server) { ActionHandler handler = GetAction(request.BaseUrl); if (handler == null) { if (server.EnableLog(EventArgs.LogType.Warring)) { server.BaseServer.Log(EventArgs.LogType.Warring, request.Session, $"{request.RemoteIPAddress} {request.Method} {request.Url} not found"); } if (!server.OnHttpRequesNotfound(request, response).Cancel) { NotFoundResult notFoundResult = new NotFoundResult($"{request.Method} {request.Url} not found"); response.Result(notFoundResult); } } else { try { if (request.Method != handler.Method) { if (request.Method == HttpParse.OPTIONS_TAG && handler.OptionsAttribute != null) { if (server.EnableLog(EventArgs.LogType.Info)) { server.BaseServer.Log(EventArgs.LogType.Info, request.Session, $"{request.RemoteIPAddress}{request.Method}{request.Url} request"); } response.Result(handler.OptionsAttribute); } else { if (server.EnableLog(EventArgs.LogType.Warring)) { server.BaseServer.Log(EventArgs.LogType.Warring, request.Session, $"{request.RemoteIPAddress}{request.Method} {request.Url} not support"); } NotSupportResult notSupportResult = new NotSupportResult($"{request.Method}{request.Url} not support"); response.Result(notSupportResult); } return; } if (!handler.NoConvert && handler.DataConvert == null) { handler.DataConvert = DataContextBind.GetConvertAttribute(request.ContentType); } if (!handler.NoConvert) { handler.DataConvert.Execute(request.Data, request); } HttpContext pc = new HttpContext(server, request, response, request.Data); long startTime = server.BaseServer.GetRunTime(); pc.ActionUrl = request.BaseUrl; HttpActionResultHandler actionResult = new HttpActionResultHandler(Server, request, response, startTime); ActionContext context = new ActionContext(handler, pc, this); if (handler.OptionsAttribute != null) { handler.OptionsAttribute.SetResponse(request, response); } context.Execute(actionResult); } catch (Exception e_) { handler.IncrementError(); if (server.EnableLog(EventArgs.LogType.Error)) { server.Log(EventArgs.LogType.Error, $"{request.RemoteIPAddress} http {request.Method} { request.Url} inner error {e_.Message}@{e_.StackTrace}"); } InnerErrorResult result = new InnerErrorResult($"http execute {request.BaseUrl} error ", e_, server.Options.OutputStackTrace); response.Result(result); } } }
public void Execute(HttpRequest request, HttpResponse response, HttpApiServer server) { ActionHandler handler = GetAction(request.BaseUrl); if (handler == null) { if (server.EnableLog(EventArgs.LogType.Warring)) { server.BaseServer.Log(EventArgs.LogType.Warring, request.Session, "{0} execute {1} action not found", request.ClientIPAddress, request.Url); } if (!server.OnHttpRequesNotfound(request, response).Cancel) { NotFoundResult notFoundResult = new NotFoundResult("{0} action not found", request.Url); response.Result(notFoundResult); } } else { try { if (request.Method != handler.Method) { if (server.EnableLog(EventArgs.LogType.Warring)) { server.BaseServer.Log(EventArgs.LogType.Warring, request.Session, "{0} execute {1} action {1} not support", request.ClientIPAddress, request.Url, request.Method); } NotSupportResult notSupportResult = new NotSupportResult("{0} action not support {1}", request.Url, request.Method); response.Result(notSupportResult); return; } if (handler.DataConvert != null) { handler.DataConvert.Execute(request.Data, request); } HttpContext pc = new HttpContext(server, request, response, request.Data); long startTime = server.BaseServer.GetRunTime(); pc.ActionUrl = request.BaseUrl; ActionContext context = new ActionContext(handler, pc); context.Execute(); if (!response.AsyncResult) { object result = context.Result; response.Result(result); if (server.EnableLog(EventArgs.LogType.Info)) { server.BaseServer.Log(EventArgs.LogType.Info, request.Session, "{0} http execute {1} action use time:{2}ms", request.ClientIPAddress, request.BaseUrl, server.BaseServer.GetRunTime() - startTime); } } } catch (Exception e_) { InnerErrorResult result = new InnerErrorResult(e_, server.ServerConfig.OutputStackTrace); response.Result(result); if (server.EnableLog(EventArgs.LogType.Error)) { response.Session.Server.Log(EventArgs.LogType.Error, response.Session, "{0} execute {1} action inner error {2}@{3}", request.ClientIPAddress, request.Url, e_.Message, e_.StackTrace); } } } }