Пример #1
0
        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);
        }