Exemplo n.º 1
0
 private static bool HServer_OnDataStaticSentEvent(object sender, DataReceiveArgs args)
 {
     return(true);
 }
Exemplo n.º 2
0
 private static ResponseMethod HServer_OnDataReceiveEvent(object sender, DataReceiveArgs args)
 {
     Console.WriteLine($"{args.Method}: {args.RemoteIP} -> {args.URL}");
     return(new ResponseMethod("ok boss"));
 }
Exemplo n.º 3
0
        private void ServerWork(IAsyncResult result)
        {
            HttpListenerContext context;

            try
            {
                context = httpServer.EndGetContext(result);
            }
            catch (Exception) { return; }

            HttpListenerRequest request = context.Request;

            using (HttpListenerResponse response = context.Response)
            {
                var remoteIP = request.RemoteEndPoint.Address;

                if ((!request.IsLocal && httpServerConfig.LocalOnly) || Array.Exists(httpServerConfig.BlacklistedIPs, (e) => e == remoteIP.ToString()))
                {
                    return;
                }
                if (!fr.AccessPermitted(remoteIP))
                {
                    response.StatusCode = 403;
                    WriteToRemote(request, response, new byte[0]);
                    return;
                }

                response.Headers["Server"] = httpServerConfig.ServerHeader;

                if (!rl.IsAllowed(remoteIP))
                {
                    response.AddHeader("Retry-After", httpServerConfig.RateLimitWaitTime.ToString());
                    response.StatusCode = 429;
                    WriteToRemote(request, response, rateLimited);
                    return;
                }

                string item = request.RawUrl;

                if (item == "/")
                {
                    item = "/index.html";
                }

                byte[]          buffer    = sFM.GetStaticItem(item);
                DataReceiveArgs eventArgs = new DataReceiveArgs()
                {
                    ContentType = request.ContentType,
                    Cookies     = request.Cookies,
                    HostName    = request.UserHostName,
                    Local       = request.IsLocal,
                    Referer     = request.UrlReferrer,
                    RemoteIP    = request.RemoteEndPoint,
                    URL         = request.RawUrl,
                    UserAgent   = request.UserAgent,
                    Method      = request.HttpMethod,
                    Headers     = request.Headers.AllKeys
                };
                ResponseMethod output = Tools.FireEvent(OnDataReceiveEvent, this, eventArgs);

                if (output.cancelExecution && output.Status != 200)
                {
                    string errorString = $"<html><head><title>{output.Status} {respStatus[output.Status]}</title></head><body bgcolor=\"white\"><center><h1>{output.Status} {respStatus[output.Status]}</h1></center><hr><center>nginx/1.10.3</center></body></html>";
                    return;
                }
                if (output.cancelExecution)
                {
                    return;
                }
                if (buffer.Length > 1 && Tools.FireEvent(OnDataStaticSentEvent, this, eventArgs))
                {
                    WriteToRemote(request, response, buffer);
                    return;
                }
                buffer = Encoding.UTF8.GetBytes(output.response);
                WriteToRemote(request, response, buffer);
            }
        }