internal void OnHTTPDataReceived(HttpListenerContext context) { var evtargs = new HTTPDataReceivedEventArgs(); evtargs.Filename = this.context.Request.Url.LocalPath.ToLowerInvariant(); evtargs.Arguments = this.context.Request.QueryString; evtargs.ContentType = this.context.Request.ContentType; evtargs.Headers = this.context.Request.Headers; evtargs.Method = this.context.Request.HttpMethod; if (this.HTTPDataReceived != null) this.HTTPDataReceived(this, evtargs); }
internal void DataReceived(object source, HTTPDataReceivedEventArgs e) { var length = 0L; var statuscode = 200; var description = "OK"; var url = this.ParseRequest(e.Filename != null ? e.Filename : "/", e.Arguments, out length); if (string.IsNullOrEmpty(url)) return; if (!Filesystem.Exist(url) && e.Method == "GET") { this.Send(new byte[0], 404, "File not Found!"); return; } var data = new byte[length]; var bytesRead = 0; Files.Read(url, ref data, out bytesRead); if (url.EndsWith(".htm") || url.EndsWith(".html") || url.EndsWith(".js") || url.EndsWith(".css")) { var pagecontent = string.Empty; if (url.EndsWith(".htm") || url.EndsWith(".html")) { pagecontent += this.HTML_header(Settings.Charset); if (url.EndsWith("index.html")) { pagecontent += "\t\t<div id=\"page\">\n"; pagecontent += "\t\t\t<nav>\n"; pagecontent += this.Generate_head_bar("index", "link"); pagecontent += "\t\t\t</nav>\n"; pagecontent += "\t\t<header>\n"; pagecontent += "\t\t<h2></h2>\n"; pagecontent += "\t\t</header>\n"; } pagecontent += "\t<script type=\"text/javascript\">\n"; pagecontent += "\tdocument.getElementById('anchor_summary').click();\n"; pagecontent += "\t</script>\n"; pagecontent += "\t\t\t<main>\n"; } pagecontent += Encoding.UTF8.GetString(data, 0, data.Length); if (url.EndsWith(".htm") || url.EndsWith(".html")) { pagecontent = pagecontent.Replace("[[DESIGN]]", Settings.Design); pagecontent = pagecontent.Replace("[[SERVER_INFO_BLOCK]]", this.Gen_ServerInfo()); pagecontent = pagecontent.Replace("[[SERVER_SETTINGS_BLOCK]]", this.Gen_settings_page()); pagecontent = pagecontent.Replace("[[SERVERNAME]]", Settings.ServerName); if (pagecontent.Contains("[[CLIENT_BOOTP_OVERVIEW_LIST]]") && e.Headers.HasKeys() && e.Headers["Needs"] == "bootp") { var bootp_clients = this.Gen_BOOTP_client_list(); if (bootp_clients == null) { statuscode = 800; description = "Keine Clients gefunden"; } else pagecontent = pagecontent.Replace("[[CLIENT_BOOTP_OVERVIEW_LIST]]", bootp_clients); } if (pagecontent.Contains("[[CLIENT_TFTP_OVERVIEW_LIST]]") && e.Headers.HasKeys() && e.Headers["Needs"] == "tftp") { var tftp_clients = this.Gen_TFTP_client_list(); if (tftp_clients == null) { statuscode = 800; description = "Keine aktiven TFTP-Sitzungen"; } else pagecontent = pagecontent.Replace("[[CLIENT_TFTP_OVERVIEW_LIST]]", tftp_clients); } pagecontent += "\t\t\t</main>\n"; pagecontent += "\t\t</div>\n"; pagecontent += this.HTML_footer(); } if (statuscode == 800) pagecontent = string.Empty; data = Encoding.UTF8.GetBytes(pagecontent); pagecontent = null; } this.Send(data, statuscode, description); Array.Clear(data, 0, data.Length); }