public ModuleResult HandleRequest(IHttpContext context) { try { if (string.IsNullOrEmpty(context.Request.Uri.AbsolutePath) || context.Request.Uri.AbsolutePath == "/") { string str = context.Request.Uri.Scheme + "://" + context.Request.Uri.Host; if (context.Request.Uri.Port != 80) { str = str + (object)":" + context.Request.Uri.Port; } string uriString = str + context.Request.Uri.AbsolutePath + "index.html"; if (!string.IsNullOrEmpty(context.Request.Uri.Query)) { uriString = uriString + "?" + context.Request.Uri.Query; } context.Request.Uri = new Uri(uriString); } if (context.Request.Uri.AbsolutePath.StartsWith("/thumb/large")) { string requestFile = Path.GetFileName(context.Request.Uri.AbsolutePath.Replace("/", "\\")); foreach (FileItem item in ServiceProvider.Settings.DefaultSession.Files) { if (Path.GetFileName(item.LargeThumb) == requestFile || item.Name == requestFile) { SendFile(context, !File.Exists(item.LargeThumb) ? Path.Combine(Settings.WebServerFolder, "logo.png") : item.LargeThumb); SendFile(context, item.LargeThumb); return(ModuleResult.Continue); } } } if (context.Request.Uri.AbsolutePath.StartsWith("/thumb/small")) { string requestFile = Path.GetFileName(context.Request.Uri.AbsolutePath.Replace("/", "\\")); foreach (FileItem item in ServiceProvider.Settings.DefaultSession.Files) { if (Path.GetFileName(item.SmallThumb) == requestFile || item.Name == requestFile) { SendFile(context, !File.Exists(item.SmallThumb) ? Path.Combine(Settings.WebServerFolder, "logo.png") : item.SmallThumb); return(ModuleResult.Continue); } } } if (context.Request.Uri.AbsolutePath.StartsWith("/preview.jpg")) { SendFile(context, ServiceProvider.Settings.SelectedBitmap.FileItem.LargeThumb); } if (context.Request.Uri.AbsolutePath.StartsWith("/session.json")) { var s = JsonConvert.SerializeObject(ServiceProvider.Settings.DefaultSession, Formatting.Indented); SendData(context, Encoding.ASCII.GetBytes(s)); } if (context.Request.Uri.AbsolutePath.StartsWith("/settings.json")) { var s = JsonConvert.SerializeObject(ServiceProvider.Settings, Formatting.Indented); SendData(context, Encoding.ASCII.GetBytes(s)); } if (context.Request.Uri.AbsolutePath.StartsWith("/liveview.jpg") && ServiceProvider.DeviceManager.SelectedCameraDevice != null && ServiceProvider.DeviceManager.LiveViewImage.ContainsKey( ServiceProvider.DeviceManager.SelectedCameraDevice)) { SendDataFile(context, ServiceProvider.DeviceManager.LiveViewImage[ServiceProvider.DeviceManager.SelectedCameraDevice], MimeTypeProvider.Instance.Get("liveview.jpg")); } if (context.Request.Uri.AbsolutePath.StartsWith("/liveviewwebcam.jpg") && ServiceProvider.DeviceManager.SelectedCameraDevice != null) { if (_liveViewFirstRun) { ServiceProvider.WindowsManager.ExecuteCommand(WindowsCmdConsts.LiveViewWnd_Show); Thread.Sleep(500); ServiceProvider.WindowsManager.ExecuteCommand(CmdConsts.All_Minimize); ServiceProvider.WindowsManager.ExecuteCommand(CmdConsts.LiveView_NoProcess); _liveViewFirstRun = false; } if (ServiceProvider.DeviceManager.LiveViewImage.ContainsKey( ServiceProvider.DeviceManager.SelectedCameraDevice)) { SendDataFile(context, ServiceProvider.DeviceManager.LiveViewImage[ ServiceProvider.DeviceManager.SelectedCameraDevice], MimeTypeProvider.Instance.Get("liveview.jpg")); } } if (context.Request.Uri.AbsolutePath.StartsWith("/image/")) { foreach (FileItem item in ServiceProvider.Settings.DefaultSession.Files) { if (Path.GetFileName(item.FileName) == Path.GetFileName(context.Request.Uri.AbsolutePath.Replace("/", "\\"))) { SendFile(context, item.FileName); return(ModuleResult.Continue); } } } var slc = context.Request.QueryString["slc"]; if (ServiceProvider.Settings.AllowWebserverActions && !string.IsNullOrEmpty(slc)) { string response = ""; try { var processor = new CommandLineProcessor(); processor.SetCamera(context.Request.QueryString["camera"]); var resp = processor.Pharse(new[] { context.Request.QueryString["slc"], context.Request.QueryString["param1"], context.Request.QueryString["param2"] }); var list = resp as IEnumerable <string>; if (list != null) { foreach (var o in list) { response += o + "\n"; } } else { if (resp != null) { response = resp.ToString(); } } } catch (Exception ex) { response = ex.Message; } if (string.IsNullOrEmpty(response)) { response = "OK"; } byte[] buffer = Encoding.UTF8.GetBytes(response); //response.ContentLength64 = buffer.Length; context.Response.AddHeader("Content-Length", buffer.Length.ToString()); context.Response.ContentType = "text/html"; context.Response.Body = new MemoryStream(); context.Response.Body.Write(buffer, 0, buffer.Length); context.Response.Body.Position = 0; return(ModuleResult.Continue); } string fullpath = GetFullPath(context.Request.Uri); if (!string.IsNullOrEmpty(fullpath) && File.Exists(fullpath)) { if (Path.GetFileName(fullpath) == "slide.html") { string template = Path.Combine(Settings.WebServerFolder, "template.txt"); if (File.Exists(template)) { _lineFormat = File.ReadAllText(template); } string file = File.ReadAllText(fullpath); StringBuilder builder = new StringBuilder(); foreach (FileItem item in ServiceProvider.Settings.DefaultSession.Files) { string tempStr = _lineFormat.Replace("@image@", "/thumb/large/" + Path.GetFileName(item.LargeThumb)); tempStr = tempStr.Replace("@image_thumb@", "/thumb/small/" + Path.GetFileName(item.SmallThumb)); tempStr = tempStr.Replace("@image_url@", "/image/" + Path.GetFileName(item.FileName)); tempStr = tempStr.Replace("@title@", item.Name); tempStr = tempStr.Replace("@desc@", item.FileInfo != null ? (item.FileInfo.InfoLabel ?? "") : ""); builder.AppendLine(tempStr); } file = file.Replace("@@image_list@@", builder.ToString()); byte[] buffer = Encoding.UTF8.GetBytes(file); //response.ContentLength64 = buffer.Length; context.Response.AddHeader("Content-Length", buffer.Length.ToString()); context.Response.Body = new MemoryStream(); context.Response.Body.Write(buffer, 0, buffer.Length); context.Response.Body.Position = 0; } else { SendFile(context, fullpath); } } string cmd = context.Request.QueryString["CMD"]; string param = context.Request.QueryString["PARAM"]; if (ServiceProvider.Settings.AllowWebserverActions && !string.IsNullOrEmpty(cmd)) { ServiceProvider.WindowsManager.ExecuteCommand(cmd, param); } } catch (Exception ex) { Log.Error("Web server error", ex); } return(ModuleResult.Continue); }