Esempio n. 1
0
        public ProcessingResult Process(RequestContext context)
        {
            IRequest  request  = context.Request;
            IResponse response = context.Response;

            // only handle GET
            if (!context.Request.Method.StartsWith("GET", StringComparison.OrdinalIgnoreCase))
            {
                return(ProcessingResult.Continue);
            }

            string output;

            // serve a directory
            if (TryGenerateDirectoryPage(context, out output))
            {
                response.ContentType         = new ContentTypeHeader("text/html");
                response.ContentLength.Value = output.Length;

                ResponseWriter generator = new ResponseWriter();
                generator.SendHeaders(context.HttpContext, response);
                generator.Send(context.HttpContext, output, Encoding.UTF8);

                return(ProcessingResult.Abort);
            }

            return(ProcessingResult.Continue);
        }
Esempio n. 2
0
        private void SendErrorPage(Exception exception)
        {
            var httpException = exception as HttpException;
            var response      = HttpContext.Current.Response;

            response.Status = httpException != null ? httpException.Code : HttpStatusCode.InternalServerError;
            response.Reason = exception.Message;
            response.Body.SetLength(0);

            var args = new ErrorPageEventArgs(HttpContext.Current)
            {
                Exception = exception
            };

            ErrorPageRequested(this, args);

            try
            {
                var generator = new ResponseWriter();
                if (args.IsHandled)
                {
                    generator.Send(HttpContext.Current, response);
                }
                else
                {
                    generator.SendErrorPage(HttpContext.Current, response, exception);
                }
            }
            catch (Exception err)
            {
                _logger.Error("Failed to display error page", err);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// An error have occurred and we need to send a result pack to the client
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="exception">The exception.</param>
        /// <remarks>
        /// Invoke base class (<see cref="Server"/>) to send the contents
        /// of <see cref="IHttpContext.Response"/>.
        /// </remarks>
        protected virtual void DisplayErrorPage(IHttpContext context, Exception exception)
        {
            var httpException = exception as HttpException;

            if (httpException != null)
            {
                context.Response.Reason = httpException.Code.ToString();
                context.Response.Status = httpException.Code;
            }
            else
            {
                context.Response.Reason = "Internal Server Error";
                context.Response.Status = HttpStatusCode.InternalServerError;
            }


            var args = new ErrorPageEventArgs(context)
            {
                Exception = exception
            };

            ErrorPageRequested(this, args);

            ResponseWriter writer = HttpFactory.Current.Get <ResponseWriter>();

            if (args.IsHandled)
            {
                writer.Send(context, context.Response);
            }
            else
            {
                writer.SendErrorPage(context, context.Response, exception);
                args.IsHandled = true;
            }
        }
Esempio n. 4
0
        private void ErrorPage(IRequest request, IResponse response, HttpException exception)
        {
            response.Status = exception.Code;
            response.Reason = exception.Message;
            response.Body.SetLength(0);

            var args = new ErrorPageEventArgs(HttpContext.Current, request, response);

            args.Exception = exception;
            ErrorPageRequested(this, args);

            // Add default error body.
            if (!args.IsHandled)
            {
                string htmlTemplate = "<html><head><title>{1}</title></head><body>Error {0}: {1}</body></html>";
                byte[] body         = Encoding.UTF8.GetBytes(string.Format(htmlTemplate, (int)response.Status, response.Reason));
                response.Body.Write(body, 0, body.Length);
            }

            try
            {
                var generator = new ResponseWriter();
                generator.Send(HttpContext.Current, response);
            }
            catch (Exception err)
            {
#if DEBUG
                if (ExceptionThrown.GetInvocationList().Length == 1)
                {
                    throw;
                }
#endif
                ExceptionThrown(this, new ExceptionEventArgs(err));
            }
        }
        public ProcessingResult Process(RequestContext context)
        {
            IRequest  request    = context.Request;
            IResponse response   = context.Response;
            var       header     = request.Headers["FWCID"].HeaderValue;
            var       IsFWCHandy = header != null;
            bool      IsAuthed   = false;

            if (IsFWCHandy)
            {
                IsAuthed = (dbConn.Find <users>(x => x.mobile_id == header)).mobile_id == header;
            }
            string output = "";
            string R      = System.IO.Path.GetFileName(request.Uri.LocalPath);

            if (R == "register")
            {
                var xUsr = new users {
                    mobile_id = header,
                    Nachname  = request.Parameters["lname"],
                    Vorname   = request.Parameters["fname"],
                    rights    = ""
                };
                System.Net.WebClient WC = new System.Net.WebClient();
                WC.DownloadString("https://www.feuerwehrcloud.de/deiva/regalert.php?fname=" + request.Parameters["fname"] + "&lname=" + request.Parameters["lname"] + "&id=" + header + "&fwid=" + System.Environment.MachineName);

                dbConn.Insert(xUsr);
            }
            else if (R == "alarms" && IsAuthed)
            {
                System.Collections.Generic.Dictionary <string, string> Data = new System.Collections.Generic.Dictionary <string, string>();
                foreach (var item in System.IO.Directory.GetFiles("public/alarms/", "*.txt"))
                {
                    //var F = new System.Collections.Generic.Dictionary<string, string>();
                    Data.Add(item, System.IO.File.ReadAllText(item.Replace(".txt", ".xml")));
                }
                output = JsonConvert.SerializeObject(Data, Formatting.Indented);
            }
            else if (R == "mydata" && IsAuthed)
            {
            }
            else
            {
                return(ProcessingResult.Continue);
            }
            // Set default content type
            response.ContentType = new ContentTypeHeader("text/html");

            //ProcessHeaders(response, CgiFeuerwehrCloud.Helper.ParseCgiHeaders(ref output));

            response.ContentLength.Value = output.Length;

            ResponseWriter generator = new ResponseWriter();

            generator.SendHeaders(context.HttpContext, response);
            generator.Send(context.HttpContext, output, System.Text.Encoding.UTF8);
            return(ProcessingResult.Abort);
        }
Esempio n. 6
0
        private void SendInternalServerError(HttpContext context, Exception exception)
        {
            var generator = new ResponseWriter();
            var response  = HttpFactory.Current.Get <IResponse>();

            byte[] body = Encoding.ASCII.GetBytes("Internal server error " + exception);
            response.Body.Write(body, 0, body.Length);
            response.Status = HttpStatusCode.InternalServerError;
            response.Reason = exception.Message;
            generator.Send(context, response);
        }
Esempio n. 7
0
        /// <summary>
        /// Returns pure string content.
        /// </summary>
        /// <param name="context"></param>
        /// <param name="action"></param>
        /// <returns></returns>
        private ProcessingResult ProcessStringContent(RequestContext context, IActionResult action)
        {
            var content = (StringContent)action;

            context.Response.ContentLength.Value = context.Response.Encoding.GetByteCount(content.Body);
            if (content.ContentType != null)
            {
                context.Response.ContentType.Value = content.ContentType;
            }

            var writer = new ResponseWriter();

            writer.SendHeaders(context.HttpContext, context.Response);
            writer.Send(context.HttpContext, content.Body, context.Response.Encoding);
            context.HttpContext.Stream.Flush();
            return(ProcessingResult.Abort);
        }
Esempio n. 8
0
        /// <exception cref="Exception">Throwing exception if in debug mode and not exception handler have been specified.</exception>
        private void OnRequest(object sender, RequestEventArgs e)
        {
            var context = (HttpContext)sender;

            HttpFactory.Current = Factory;
            HttpContext.Current = context;

            try
            {
                var args = new RequestEventArgs(context, e.Request, e.Response);
                RequestReceived(this, args);
                if (!args.IsHandled)
                {
                    // need to respond to the context.
                    var generator = new ResponseWriter();
                    generator.Send(context, args.Response);
                }

                // Disconnect when done.
                if (e.Response.HttpVersion == "HTTP/1.0" || e.Response.Connection.Type == ConnectionType.Close)
                {
                    context.Disconnect();
                }
            }
            catch (Exception err)
            {
                if (err is HttpException)
                {
                    var exception = (HttpException)err;
                    ErrorPage(e.Request, e.Response, exception);
                }
                else
                {
                    _logger.Debug("Request failed.", err);
#if DEBUG
                    if (ExceptionThrown.GetInvocationList().Length == 1)
                    {
                        throw;
                    }
#endif
                    ExceptionThrown(this, new ExceptionEventArgs(err));
                    SendInternalServerError(context, err);
                }
            }
        }
Esempio n. 9
0
        /// <summary>
        /// 响应上下文中接收请求消息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnContextRequest(object sender, RequestEventArgs e)
        {
            var context = (HttpContext)sender;

            HttpFactory.Current = Factory;
            HttpContext.Current = context;

            try
            {
                var args = new RequestEventArgs(context, e.Request, e.Response);
                // 触发请求收到事件通知
                RequestReceived(this, args);
                // 判断外部程序是否已处理该请求
                if (!args.IsHandled)
                {
                    // 如果外部程序未处理该请求,则发送请求的响应消息
                    var generator = new ResponseWriter();
                    generator.Send(context, args.Response);
                }

                // 请求被处理后断开连接
                if (e.Response.HttpVersion == "HTTP/1.0" || e.Response.Connection.Type == ConnectionType.Close)
                {
                    context.Disconnect();
                }
            }
            catch (Exception err)
            {
                if (err is HttpException)
                {
                    var exception = (HttpException)err;
                    SendErrorPage(exception);
                }
                else
                {
                    Logger.Debug("Request failed.");
                    ExceptionHandler.Handle(err);
                    SendErrorPage(err);
                }
                e.IsHandled = true;
            }
        }
Esempio n. 10
0
        /// <exception cref="Exception">Throwing exception if in debug mode and not exception handler have been specified.</exception>
        private void OnRequest(object sender, RequestEventArgs e)
        {
            var context = (HttpContext)sender;

            HttpFactory.Current = Factory;
            HttpContext.Current = context;

            try
            {
                var args = new RequestEventArgs(context, e.Request, e.Response);
                RequestReceived(this, args);
                if (!args.IsHandled)
                {
                    // need to respond to the context.
                    var generator = new ResponseWriter();
                    generator.Send(context, args.Response);
                }

                // Disconnect when done.
                if (e.Response.HttpVersion == "HTTP/1.0" || e.Response.Connection.Type == ConnectionType.Close)
                {
                    context.Disconnect();
                }
            }
            catch (Exception err)
            {
                if (err is HttpException)
                {
                    var exception = (HttpException)err;
                    SendErrorPage(exception);
                }
                else
                {
                    _logger.Debug("Request failed.", err);
                    SendErrorPage(err);
                }
                e.IsHandled = true;
            }
        }
Esempio n. 11
0
        /// <summary>
        /// Process a request.
        /// </summary>
        /// <param name="context">Request information</param>
        /// <returns>What to do next.</returns>
        /// <exception cref="InternalServerException">Failed to find file extension</exception>
        /// <exception cref="ForbiddenException">Forbidden file type.</exception>
        public ProcessingResult Process(RequestContext context)
        {
            var scriptName = CgiHelper.GetScriptName(context.Request.Uri, _cgiService.Extension);
            var filePath   = scriptName.Replace("/", @"\").TrimStart('\\');
            var path       = Path.Combine(_homeDirectory, filePath);

            if (String.IsNullOrEmpty(path))
            {
                return(ProcessingResult.Continue);
            }

            IRequest  request  = context.Request;
            IResponse response = context.Response;

            try
            {
                string ext = Path.GetExtension(scriptName).TrimStart('.');

                if (!ext.Equals(_cgiService.Extension, StringComparison.OrdinalIgnoreCase))
                {
                    return(ProcessingResult.Continue);
                }

                // TODO: is this a good place to lock?
                lock (_readLock)
                {
                    int code = _cgiService.Execute(context.HttpContext, path, scriptName);

                    string output = String.Empty;

                    // Check StandardError stream
                    if (_cgiService.HasError)
                    {
                        output = _cgiService.StandardError;
                    }
                    else
                    {
                        output = System.Text.Encoding.Default.GetString(System.Text.Encoding.UTF8.GetBytes(_cgiService.StandardOutput));
                        //System.Text.Encoding.de
                    }

                    // Set default content type
                    response.ContentType = new ContentTypeHeader("text/html");

                    ProcessHeaders(response, CgiHelper.ParseCgiHeaders(ref output));

                    response.ContentLength.Value = output.Length;

                    ResponseWriter generator = new ResponseWriter();
                    generator.SendHeaders(context.HttpContext, response);
                    generator.Send(context.HttpContext, output, CgiHelper.Encoding);
                }

                return(ProcessingResult.Abort);
            }
            catch (FileNotFoundException err)
            {
                throw new InternalServerException("Failed to process file '" + request.Uri + "'.", err);
            }
            catch (Exception err)
            {
                throw new InternalServerException("Failed to process file '" + request.Uri + "'.", err);
            }
        }
Esempio n. 12
0
        /// <summary>
        /// Process a request.
        /// </summary>
        /// <param name="context">Request information</param>
        /// <returns>What to do next.</returns>
        /// <exception cref="InternalServerException">Failed to find file extension</exception>
        /// <exception cref="ForbiddenException">Forbidden file type.</exception>
        public ProcessingResult Process(RequestContext context)
        {
            IRequest  request  = context.Request;
            IResponse response = context.Response;

            IFileService _fileService = new DiskFileService("/", _homeDirectory);
            var          fileContext  = new FileContext(context.Request, System.DateTime.Now);

            _fileService.GetFile(fileContext);
            var scriptName = fileContext.Filename;

            if (!fileContext.IsFound)
            {
                response.Status = HttpStatusCode.NotFound;
                return(ProcessingResult.SendResponse);
            }


            try
            {
                string ext = Path.GetExtension(scriptName).TrimStart('.');

                if (!ext.Equals("fritz", StringComparison.OrdinalIgnoreCase))
                {
                    return(ProcessingResult.Continue);
                }

                // TODO: is this a good place to lock?
                lock (_readLock)
                {
                    string fileContent = System.IO.File.ReadAllText(scriptName);


                    string[] XInfo = fileContent.Split(new [] { "{%" }, StringSplitOptions.RemoveEmptyEntries);
                    for (int i = 1; i < XInfo.Length; i++)
                    {
                        if (XInfo[i].Contains("%}"))
                        {
                            XInfo[i] = XInfo[i].Substring(0, XInfo[i].IndexOf("%}"));
                        }
                    }
                    XInfo = XInfo.RemoveAt(0);


//					Wanpppconn1 service = new Wanpppconn1("https://192.168.178.1");
//					service.SoapHttpClientProtocol.Credentials = new NetworkCredential("dslf-config", "Viking2011");
//					string ip;
//					service.GetExternalIPAddress(out ip);
                    //service.AddPortMapping
                    //service.DeletePortMapping
                    //service.ForceTermination
                    //service.SetUserName
                    //service.SetPassword
                    //service.SetAutoDisconnectTimeSpan
                    //service.SetConnectionType
                    //service.SetConnectionTrigger
                    //service.SetIdleDisconnectTime
                    //service.GetUserName (out ip);
                    //service.GetConnectionTypeInfo (out ip, out ip2);
                    //service.SetUserName ("ar15636672741");
                    //service.SetPassword ("internet");

//					/* Anrufbeantworter */
//					Tam service2 = new Tam("https://l7dmkoihvym5jghm.myfritz.net:499");
//					service2.SoapHttpClientProtocol.Credentials = new NetworkCredential("dslf-config", "Viking2011");
//					string url;
//					service2.GetMessageList(0, out url); // Get Tam message List
//					//service2.SetEnable
//					//service2.DeleteMessage
//					//service2.MarkMessage
//					FritzTR064.Generated.Voip service4;
//					//service4.AddVoIPAccount
//					//service4.DelVoIPAccount
//					//service4.DialSetConfig
//					FritzTR064.Generated.Voip f;

//				    System.Net.WebClient Anrufbeantworter = new WebClient ();
//					Anrufbeantworter.Credentials = service2.SoapHttpClientProtocol.Credentials;
//					string AB = Anrufbeantworter.DownloadString (url);


                    //Deviceconfig service3 = new Deviceconfig("https://fritz.box");
                    //service3.

                    /* Telefonbuch */
                    //Contact service = new Contact("https://fritz.box");
                    //service.AddPhonebook("ExtraID", "Name"); // Create a new Phonebook
                    //string callListUrl;
                    //service.GetCallList(out callListUrl);

                    ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
                    System.Xml.XmlDocument CallList = new System.Xml.XmlDocument();
                    CallList.Load("dyndata/calllist.xml");
                    System.Xml.XmlDocument TamsList = new System.Xml.XmlDocument();
                    TamsList.Load("dyndata/tam1.xml");

                    System.Collections.Generic.Dictionary <string, string> DSL  = FeuerwehrCloud.Helper.AppSettings.Load("dyndata/wandsl.info");
                    System.Collections.Generic.Dictionary <string, string> WLAN = FeuerwehrCloud.Helper.AppSettings.Load("dyndata/wlan.info");
                    System.Collections.Generic.Dictionary <string, string> TAM  = FeuerwehrCloud.Helper.AppSettings.Load("dyndata/tam.info");
                    System.Collections.Generic.Dictionary <string, string> DEVI = FeuerwehrCloud.Helper.AppSettings.Load("dyndata/Deviceinfo.info");
                    System.Collections.Generic.Dictionary <string, string> WAN  = FeuerwehrCloud.Helper.AppSettings.Load("dyndata/wanppp.info");
                    System.Collections.Generic.Dictionary <string, string> TEL  = FeuerwehrCloud.Helper.AppSettings.Load("dyndata/phone.info");

                    foreach (var XP in XInfo)
                    {
                        switch (XP)
                        {
                        case "INCLUDE_HEADER":
                            fileContent = fileContent.Replace("{%" + XP + "%}", System.IO.File.ReadAllText("web/header.html"));
                            break;

                        case "INCLUDE_FOOTER":
                            fileContent = fileContent.Replace("{%" + XP + "%}", System.IO.File.ReadAllText("web/footer.html"));
                            break;

                        case "FAX_ENABLED":
                            fileContent = fileContent.Replace("{%" + XP + "%}", "Alarmfax-System aktiviert");
                            break;

                        case "INFO_LED_TYPE":
                            fileContent = fileContent.Replace("{%" + XP + "%}", "blinkt bei neuen Nachrichten/Anrufen");
                            break;

                        //
                        case "TAM_DATA":
                            int    iTamz = 0;
                            string CLL2  = "";

                            foreach (System.Xml.XmlElement item in TamsList["Root"].SelectNodes("//Message"))
                            {
                                //if(item.Name =="Call") {

                                CLL2 += "<tr><td>" + item["Date"].InnerText + "<td>" + item ["Number"].InnerText + "</td></tr>";
                                iTamz++;

                                //}
                                if (iTamz > 8)
                                {
                                    break;
                                }
                            }
                            fileContent = fileContent.Replace("{%" + XP + "%}", CLL2);
                            break;

                        case "TAM_COUNT":
                            fileContent = fileContent.Replace("{%" + XP + "%}", (TamsList["Root"].SelectNodes("//Message").Count).ToString());
                            break;

                        case "CALL_COUNT":
                            fileContent = fileContent.Replace("{%" + XP + "%}", (CallList["root"].SelectNodes("//Call").Count).ToString());
                            break;

                        case "CALL_LIST":
                            int    iCallZ = 0;
                            string CLL    = "";

                            foreach (System.Xml.XmlElement item in CallList["root"].SelectNodes("//Call"))
                            {
                                //if(item.Name =="Call") {

                                CLL += "<tr><td" + (item ["Type"].InnerText == "2"?" style='color:red'":(item ["Type"].InnerText == "3"?" style='color:#00AA00'":" style='color:#0000CC'")) + ">" + item["Date"].InnerText + "<td" + (item ["Type"].InnerText == "2"?" style='color:red'":(item ["Type"].InnerText == "3"?" style='color:#00AA00'":" style='color:#0000CC'")) + ">" + (item ["Name"].InnerText != ""?item ["Name"].InnerText + " (" + item ["Called"].InnerText + ")" : item ["Called"].InnerText) + "</td></tr>";
                                iCallZ++;

                                //}
                                if (iCallZ > 8)
                                {
                                    break;
                                }
                            }
                            fileContent = fileContent.Replace("{%" + XP + "%}", CLL);
                            break;

                        case "DSL_CONNECTED":
                            fileContent = fileContent.Replace("{%" + XP + "%}", (bool.Parse(DSL["wandslIFEnable"]) == true?"bereit, " + (int.Parse(DSL["DownstreamCurrRate"]) / 1024) + " Mbit/s (down), " + (int.Parse(DSL["UpstreamCurrRate"])) + " kbit/s (up)":"getrennt"));
                            break;

                        case "NETWORK_DEVICE_COUNT":
                            string[] result1      = System.IO.File.ReadAllLines(System.IO.Path.Combine(System.Environment.CurrentDirectory, "network.csv"));
                            int      iDeviceCount = 0;
                            for (int i = 0; i < result1.Length; i++)
                            {
                                string[] Columns = result1[i].Split(new [] { ";" }, StringSplitOptions.None);
                                if (Columns[2] == "up")
                                {
                                    iDeviceCount++;
                                }
                            }
                            fileContent = fileContent.Replace("{%" + XP + "%}", (iDeviceCount.ToString()));
                            break;

                        case "NETWORK_DEVICE_LIST":
                            string[] result2   = System.IO.File.ReadAllLines(System.IO.Path.Combine(System.Environment.CurrentDirectory, "network.csv"));
                            string   HTMLTable = "";
                            int      idev      = 0;
                            for (int i = 0; i < result2.Length; i++)
                            {
                                string[] Columns = result2[i].Split(new [] { ";" }, StringSplitOptions.None);
                                if (Columns[2] == "up")
                                {
                                    HTMLTable += "<tr><td>" + (Columns[4] == ""?"PC-" + Columns[0].Replace(".", "-"):Columns[4]).Replace(".fritz.box", "") + "</td><td>LAN</td></tr>";
                                    idev++;
                                    if (idev == 9)
                                    {
                                        break;
                                    }
                                }
                            }
                            string dHTM = "";
                            for (int i = 0; i < result2.Length; i++)
                            {
                                string[] Columns = result2[i].Split(new [] { ";" }, StringSplitOptions.None);
                                if (Columns[2] == "up")
                                {
                                    dHTM += "<tr><td><a href='http://" + Columns[0] + "' target='_blank'>" + (Columns[4] == ""?"PC-" + Columns[0].Replace(".", "-"):Columns[4]).Replace(".fritz.box", "") + "</a></td><td>" + Columns[0] + "</td><td>" + Columns[5] + "</td><td>" + Columns[6] + "</td></tr>";
                                }
                            }
                            System.IO.File.WriteAllText("web/devices_online.htm", dHTM);
                            dHTM = "";
                            for (int i = 0; i < result2.Length; i++)
                            {
                                string[] Columns = result2[i].Split(new [] { ";" }, StringSplitOptions.None);
                                if (Columns[2] == "down")
                                {
                                    dHTM += "<tr><td>" + (Columns[4] == ""?"PC-" + Columns[0].Replace(".", "-"):Columns[4]).Replace(".fritz.box", "") + "</td><td>" + Columns[0] + "</td><td>" + Columns[5] + "</td><td>" + Columns[6] + "</td></tr>";
                                }
                            }
                            System.IO.File.WriteAllText("web/devices_offline.htm", dHTM);
                            fileContent = fileContent.Replace("{%" + XP + "%}", HTMLTable);
                            break;

                        case "WLAN_CONNECTED":
                            fileContent = fileContent.Replace("{%" + XP + "%}", (bool.Parse(WLAN["Enable"])?"An, " + WLAN["Status"]:"Deaktiviert"));
                            break;

                        case "DECT_CONNECTED":
                            fileContent = fileContent.Replace("{%" + XP + "%}", "Deaktiviert");
                            break;

                        case "USB_CONNECTED":
                            fileContent = fileContent.Replace("{%" + XP + "%}", ((int.Parse(FeuerwehrCloud.Helper.AppSettings.Load("dyndata/usb.info")["Count"])) - 5) + " Geräte angeschlossen");
                            break;

                        case "I2C_CONNECTED":
                            fileContent = fileContent.Replace("{%" + XP + "%}", ((int.Parse(FeuerwehrCloud.Helper.AppSettings.Load("dyndata/i2c.info")["Count"]))) + " Module angeschlossen");
                            break;

                        case "CONNECTED_SINCE4":
                            if (WAN["ConnectionStatus"] == "Connected")
                            {
                                fileContent = fileContent.Replace("{%" + XP + "%}", "verbunden seit " + WAN["Uptime"]);
                            }
                            else
                            {
                                fileContent = fileContent.Replace("{%" + XP + "%}", "nicht verbunden");
                            }
                            break;

                        case "CONNECTED_IP4":
                            fileContent = fileContent.Replace("{%" + XP + "%}", WAN["ExternalIPAddress"]);
                            break;

                        case "CONNECTED_SINCE6":
                            fileContent = fileContent.Replace("{%" + XP + "%}", "");
                            break;

                        case "CONNECTED_IP6":
                            fileContent = fileContent.Replace("{%" + XP + "%}", "");
                            break;

                        case "PHONE_LINES_STRING":
                            fileContent = fileContent.Replace("{%" + XP + "%}", TEL["NumberList"]);
                            break;

                        case "PHONE_LINE_COUNT":
                            fileContent = fileContent.Replace("{%" + XP + "%}", TEL["NumberOfNumbers"]);
                            break;

                        default:
                            fileContent = fileContent.Replace("{%" + XP + "%}", "");
                            break;
                        }
                    }
                    //fileContent = fileContent.Replace("%")


                    string output = fileContent;

                    // Set default content type
                    response.ContentType = new ContentTypeHeader("text/html");

                    //ProcessHeaders(response, CgiFeuerwehrCloud.Helper.ParseCgiHeaders(ref output));

                    response.ContentLength.Value = output.Length;

                    ResponseWriter generator = new ResponseWriter();
                    generator.SendHeaders(context.HttpContext, response);
                    generator.Send(context.HttpContext, output, System.Text.Encoding.UTF8);
                }

                return(ProcessingResult.Abort);
            }
            catch (FileNotFoundException err)
            {
                throw new InternalServerException("Failed to process file '" + request.Uri + "'.", err);
            }
            catch (Exception err)
            {
                throw new InternalServerException("Failed to process file '" + request.Uri + "'.", err);
            }
        }