source: binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Web/StaticHandler.cs@ 142

Last change on this file since 142 was 138, checked in by alloc, 10 years ago

Fixes

File size: 2.0 KB
RevLine 
[133]1using System;
2using System.Collections.Generic;
3using System.IO;
4using System.Net;
[134]5using System.Threading;
[133]6
7namespace AllocsFixes.NetConnections.Servers.Web
8{
9 public class StaticHandler : PathHandler
10 {
11 private string datapath;
12 private string staticPart;
13 private bool cache;
[134]14 private bool logMissingFiles;
[133]15 private Dictionary<string, byte[]> fileCache = new Dictionary<string, byte[]> ();
16
[134]17 public StaticHandler (string staticPart, string filePath, bool cache, bool logMissingFiles)
[133]18 {
19 this.staticPart = staticPart;
20 this.datapath = filePath;
21 this.cache = cache;
[134]22 this.logMissingFiles = logMissingFiles;
[133]23 }
24
[134]25 public override void HandleRequest (HttpListenerRequest req, HttpListenerResponse resp, HttpListenerBasicIdentity user)
[133]26 {
27 try {
28 string fn = req.Url.AbsolutePath.Remove (0, staticPart.Length);
29
30 byte[] content;
31 if (cache) {
[134]32 Monitor.Enter (fileCache);
33 try {
34 if (!fileCache.ContainsKey (fn)) {
35 if (!File.Exists (datapath + "/" + fn)) {
36 resp.StatusCode = (int)HttpStatusCode.NotFound;
37 if (logMissingFiles)
[138]38 Log.Out ("Web:Static:FileNotFound: \"" + req.Url.AbsolutePath + "\" @ \"" + datapath + "/" + fn + "\"");
[134]39 return;
40 }
41
42 fileCache.Add (fn, File.ReadAllBytes (datapath + "/" + fn));
[133]43 }
44
[134]45 content = fileCache [fn];
46 } finally {
47 Monitor.Exit (fileCache);
[133]48 }
49 } else {
50 if (!File.Exists (datapath + "/" + fn)) {
51 resp.StatusCode = (int)HttpStatusCode.NotFound;
[134]52 if (logMissingFiles)
[138]53 Log.Out ("Web:Static:FileNotFound: \"" + req.Url.AbsolutePath + "\" @ \"" + datapath + "/" + fn + "\"");
[133]54 return;
55 }
56
57 content = File.ReadAllBytes (datapath + "/" + fn);
58 }
59
60 resp.ContentType = MimeType.GetMimeType (Path.GetExtension (fn));
61 resp.ContentLength64 = content.Length;
62 resp.OutputStream.Write (content, 0, content.Length);
63 } catch (Exception e) {
64 Log.Out ("Error in StaticHandler.HandleRequest: " + e);
65 }
66 }
67 }
68}
69
Note: See TracBrowser for help on using the repository browser.