Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class LocalServer
- {
- public bool runListener = true;
- private string prefix;
- private string baseDirectory = "M:/ftp backup/";
- public LocalServer(int port)
- {
- prefix = string.Format("http://+:{0}/", port);
- Thread listenerThread = new Thread(LocalServerThread);
- listenerThread.Start();
- }
- public void LocalServerThread()
- {
- HttpListener listener = new HttpListener();
- listener.Prefixes.Add(prefix);
- listener.Start();
- Debug.Log(DateTime.Now.ToString(SimpleHTTPServer.dateFormat) + "<color=green>Started local web server</color>");
- while (runListener)
- {
- IAsyncResult result = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);
- result.AsyncWaitHandle.WaitOne();
- }
- listener.Close();
- Debug.Log(DateTime.Now.ToString(SimpleHTTPServer.dateFormat) + "<color=green>Stopped local web server</color>");
- }
- public void ListenerCallback(IAsyncResult result)
- {
- HttpListener listener = (HttpListener)result.AsyncState;
- HttpListenerContext context = listener.EndGetContext(result);
- string fileNameComplete = context.Request.Url.AbsolutePath.Substring(1).Replace("%20", " "); //removing the first slash and replacing the %20 web prefix by space
- string pathComplete = baseDirectory + fileNameComplete;
- Debug.Log(DateTime.Now.ToString(SimpleHTTPServer.dateFormat) + pathComplete + " requested to LocalServer");
- using (Stream fileStream = new FileStream(pathComplete, FileMode.Open))
- {
- byte[] buffer = new byte[fileStream.Length];
- fileStream.Read(buffer, 0, (int)fileStream.Length);
- context.Response.ContentLength64 = fileStream.Length;
- context.Response.ContentType = SimpleHTTPServer.GetMimeType(fileNameComplete);
- //personal headers
- context.Response.StatusCode = (int)HttpStatusCode.OK;
- ////apache headers
- //context.Response.StatusDescription = "OK";
- //context.Response.ProtocolVersion = new Version("1.1");
- //context.Response.SendChunked = false;
- //context.Response.KeepAlive = true;
- //context.Response.AddHeader("Accept-Ranges", "bytes");
- //context.Response.AddHeader("ETag", BinarySocket.RandomString(20));
- //context.Response.AddHeader("Connection", "Keep-Alive");
- //context.Response.AddHeader("Keep-Alive", "timeout=5, max=100");
- ////CORS
- //context.Response.AddHeader("Access-Control-Allow-Origin", "*");
- //context.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
- //context.Response.AddHeader("Access-Control-Allow-Headers", "X-Requested-With");
- //context.Response.AddHeader("Access-Control-Max-Age", "86400");
- context.Response.OutputStream.Write(buffer, 0, buffer.Length);
- context.Response.Close();
- }
- }
- }
Add Comment
Please, Sign In to add comment