Ejemplo n.º 1
0
 internal void HandleRequest(HttpRequest request)
 {
     if (!request.IsResponseSent)
     {
         HttpRequest.SetCurrentRequest(request);
         Logger.LogMessage(DiagnosticsLevels.TRACE, "Attempting to process connection request.");
         if (request.URL.AbsolutePath == "/jquery.js")
         {
             request.ResponseStatus = HttpStatusCodes.OK;
             request.ResponseHeaders.ContentType = "text/javascript";
             request.ResponseWriter.Write(Utility.ReadEmbeddedResource("Org.Reddragonit.EmbeddedWebServer.resources.jquery.min.js"));
             request.SendResponse();
         }
         else if (request.URL.AbsolutePath == "/json.js")
         {
             request.ResponseStatus = HttpStatusCodes.OK;
             request.ResponseHeaders.ContentType = "text/javascript";
             request.ResponseWriter.Write(Utility.ReadEmbeddedResource("Org.Reddragonit.EmbeddedWebServer.resources.json2.min.js"));
             request.SendResponse();
         }
         else
         {
             DateTime start = DateTime.Now;
             Site site = null;
             if (_sites.Count > 1)
             {
                 foreach (Site s in _sites)
                 {
                     if ((s.ServerName != null) && (s.ServerName == request.URL.Host))
                     {
                         site = s;
                         break;
                     }
                 }
                 if (site==null)
                 {
                     foreach (Site s in _sites)
                     {
                         if (s.Aliases != null)
                         {
                             foreach (string str in s.Aliases)
                             {
                                 if (str == request.URL.Host)
                                 {
                                     site = s;
                                     break;
                                 }
                             }
                         }
                     }
                 }
                 if (site==null)
                 {
                     foreach (Site s in _sites)
                     {
                         foreach (sIPPortPair ipp in s.ListenOn)
                         {
                             if ((ipp.Address != IPAddress.Any) && (request.Connection.LocalEndPoint == new IPEndPoint(ipp.Address, ipp.Port)))
                             {
                                 site = s;
                                 break;
                             }
                         }
                     }
                 }
             }
             if (site == null)
                 site = _defaultSite;
             Logger.LogMessage(DiagnosticsLevels.DEBUG, "Total time to find site: " + DateTime.Now.Subtract(start).TotalMilliseconds.ToString() + "ms");
             if ((!site.AllowGET && request.Method.ToUpper() == "GET") ||
                 (!site.AllowPOST && request.Method.ToUpper() == "POST"))
             {
                 request.ResponseStatus = HttpStatusCodes.Method_Not_Allowed;
                 request.SendResponse();
             }
             else
             {
                 request.SetTimeout(site);
                 try
                 {
                     if (request.URL.AbsolutePath == "/")
                         request.UseDefaultPath(site);
                     site.ProcessRequest(request);
                 }
                 catch (ThreadAbortException tae)
                 {
                     if (!request.IsResponseSent)
                     {
                         request.ResponseStatus = HttpStatusCodes.Request_Timeout;
                         request.ClearResponse();
                         request.ResponseWriter.WriteLine("The server timed out processing the request.");
                         request.SendResponse();
                     }
                 }
                 catch (Exception e)
                 {
                     Logger.LogError(e);
                     if (!request.IsResponseSent)
                     {
                         request.ResponseStatus = HttpStatusCodes.Internal_Server_Error;
                         request.ClearResponse();
                         request.ResponseWriter.Write(e.Message);
                         request.SendResponse();
                     }
                 }
                 Logger.LogMessage(DiagnosticsLevels.DEBUG, "Total time to process request to URL " + request.URL.AbsolutePath + " = " + DateTime.Now.Subtract(start).TotalMilliseconds.ToString() + "ms");
             }
         }
     }
     else
         Logger.LogMessage(DiagnosticsLevels.TRACE, "Response sent prior to processing, error in request.");
 }
Ejemplo n.º 2
0
        public void ProcessRequest(HttpRequest request, Org.Reddragonit.EmbeddedWebServer.Interfaces.Site site)
        {
            request.SetTimeout(20 * 60 * 1000);
            if (request.Parameters["FileType"] == "Backup")
            {
                string fileName = DateTime.Now.ToString("yyyy_MM_dd_HH_mm") + "_";
                switch (request.Parameters["Level"])
                {
                    case "Database":
                        fileName += "database";
                        break;
                    case "Voicemail":
                        fileName += "voicemail";
                        break;
                    case "Recordings":
                        fileName += "recordings";
                        break;
                    case "Sounds":
                        fileName += "sounds";
                        break;
                    case "Script":
                        fileName += "scripts";
                        break;
                    default:
                        fileName += "complete";
                        break;

                }
                request.ResponseHeaders.ContentType = "application/octet-stream";
                request.ResponseHeaders["content-disposition"] = "attachment; filename=" + fileName + ".fscbak";
                ZipFile zf = new ZipFile(fileName);
                DirectoryInfo di;
                byte[] tmp;
                if ((request.Parameters["Level"] == "Database") || (request.Parameters["Level"] == "Complete"))
                {
                    Stream ms = new MemoryStream();
                    Org.Reddragonit.Dbpro.Backup.BackupManager.BackupDataToStream(Org.Reddragonit.Dbpro.Connections.ConnectionPoolManager.GetPool(typeof(Org.Reddragonit.FreeSwitchConfig.DataCore.DB.Phones.Extension)), ref ms);
                    zf.AddFile("database.rdpbk", ((MemoryStream)ms).ToArray());
                }
                //backup voicemail
                if ((request.Parameters["Level"] == "Voicemail") || (request.Parameters["Level"] == "Complete"))
                {
                    di = new DirectoryInfo(Settings.Current[Constants.BASE_PATH_NAME].ToString() + Path.DirectorySeparatorChar + Constants.DEFAULT_VOICEMAIL_PATH);
                    ImportZipDirectory("voicemail", zf, di);
                    Log.Trace("Issueing voicemail backup command...");
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine("DELETE FROM voicemail_msgs;");
                    foreach (Dictionary<string, string> row in Utility.SelectFromFreeswitchDB(VM_DB, VM_SELECT_QUERY))
                    {
                        sb.Append("INSERT INTO voicemail_msgs VALUES(");
                        sb.Append("'" + row["created_epoch"] + "',");
                        sb.Append("'" + row["read_epoch"] + "',");
                        sb.Append("'" + row["username"] + "',");
                        sb.Append("'" + row["domain"] + "',");
                        sb.Append("'" + row["uuid"] + "',");
                        sb.Append("'" + row["cid_name"] + "',");
                        sb.Append("'" + row["cid_number"] + "',");
                        sb.Append("'" + row["in_folder"] + "',");
                        sb.Append("'" + row["file_path"] + "',");
                        sb.Append("'" + row["message_len"] + "',");
                        sb.Append("'" + row["flags"] + "',");
                        if (row.ContainsKey("read_flags") && row["read_flags"] != null)
                            sb.Append("'" + row["read_flags"] + "',");
                        else
                            sb.Append("null,");
                        if (row.ContainsKey("forwarded_by") && row["forwarded_by"] != null)
                            sb.Append("'" + row["forwarded_by"] + "'");
                        else
                            sb.Append("null");
                        sb.AppendLine(");");
                    }
                    zf.AddFile("voicemail_restore.sql", ASCIIEncoding.ASCII.GetBytes(sb.ToString()));
                }
                //backup scripts
                if ((request.Parameters["Level"] == "Script") || (request.Parameters["Level"] == "Complete"))
                {
                    di = new DirectoryInfo(Settings.Current[Constants.BASE_PATH_NAME].ToString() + Path.DirectorySeparatorChar + Constants.DEFAULT_SCRIPTS_DIRECTORY);
                    ImportZipDirectory("scripts", zf, di);
                }
                //backup sounds
                if ((request.Parameters["Level"] == "Sounds") || (request.Parameters["Level"] == "Complete"))
                {
                    di = new DirectoryInfo(Settings.Current[Constants.BASE_PATH_NAME].ToString() + Path.DirectorySeparatorChar + Constants.DEFAULT_SOUNDS_DIRECTORY);
                    ImportZipDirectory("sounds", zf, di);
                }
                //backup recordings
                if ((request.Parameters["Level"] == "Recordings") || (request.Parameters["Level"] == "Complete"))
                {
                    di = new DirectoryInfo(Settings.Current[Constants.BASE_PATH_NAME].ToString() + Path.DirectorySeparatorChar+ Constants.DEFAULT_RECORDINGS_DIRECTORY);
                    ImportZipDirectory("recordings", zf, di);
                }

                //flush and close the final zip stream
                request.UseResponseStream(zf.ToStream());
            }
            else if (request.Parameters["clazz"] != null)
            {
                Type t = Org.Reddragonit.FreeSwitchConfig.DataCore.Utility.LocateType(request.Parameters["clazz"]);
                if (t != null)
                {
                    System.Reflection.MethodInfo mi = null;
                    foreach (System.Reflection.MethodInfo m in t.GetMethods(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static))
                    {
                        if (m.Name == request.Parameters["MethodName"] && m.GetParameters().Length == 0)
                        {
                            mi = m;
                            break;
                        }
                    }
                    if (mi == null)
                    {
                        request.ResponseStatus = HttpStatusCodes.Not_Found;
                        request.ResponseWriter.Write("Unable to locate static public method " + request.Parameters["MethodName"] + " in class type " + request.Parameters["clazz"]);
                    }
                    else
                    {
                        mi.Invoke(null, new object[0]);
                    }
                }
                else
                {
                    request.ResponseStatus = HttpStatusCodes.Not_Found;
                    request.ResponseWriter.Write("Unable to locate clazz type " + request.Parameters["clazz"]);
                }
            }
            else
            {
                request.ResponseStatus = HttpStatusCodes.Not_Found;
            }
        }