using System; using System.Collections.Generic; using System.Linq; using System.Text; using Nini.Config; using SafeMobileLib; using System.Net; using System.Security.Cryptography.X509Certificates; using System.Net.Security; using System.IO; namespace AppServer { public class Config { private IConfigSource source = null; private string CFG_FILE = "appConfig.ini"; public string DB_IP, DB_schema, DB_user, DB_passwd, DB_port; public string smtpServer = ""; public string pop3Server = ""; public Int32 pop3Port = 995; public Int32 smtpPort = 465; public bool popSSLState = true; public bool smtpSSLState = true; public bool enableEmailService = false; public string emailAddress, emailPassword; public Int64 lastEmailTime = 0; public bool autoupdate = true; public bool isDevelop = false; public int regPort; public int RecordingsPort; public int RecordingsAudioPort; public string msgBusIP; public int msgBusPort; public bool watchdog = false; public bool enableRestarting = false; public string gatewayType = ""; public int websocketTimer; public string websocketUrl; public string websocketUser; public string websocketPass; private Int32 _VoicePort = 17234; public string LocalIPAddress { get; private set; } = null; private void LoadConfig() { try { if (!File.Exists(CFG_FILE)) { Utils.WriteLine("Config file didn't exist. Creating it...", ConsoleColor.Yellow); try { using (FileStream fs = File.Create(CFG_FILE)) { } } catch (Exception) { Utils.WriteLine("Application ended!!!! " + CFG_FILE + " could not be created"); Console.WriteLine("Press any key to exit..."); Console.ReadKey(); System.Environment.Exit(0); } } source = new IniConfigSource(CFG_FILE); if (source.Configs["Registration"] == null) source.Configs.Add("Registration"); regPort = GetInt32Value("Registration", "port", 5680); // Convert.ToInt32(source.Configs["Registration"].Get("port")); if (source.Configs["RecordingsServer"] == null) source.Configs.Add("RecordingsServer"); RecordingsPort = GetInt32Value("RecordingsServer", "port", 5678); // Convert.ToInt32(source.Configs["RecordingsServer"].Get("port")); RecordingsAudioPort = GetInt32Value("RecordingsServer", "portAudio", 15679); // Convert.ToInt32(source.Configs["RecordingsServer"].Get("portAudio")); if (source.Configs["Database"] == null) source.Configs.Add("Database"); DB_IP = GetStringValue("Database", "IP", "127.0.0.1");// source.Configs["Database"].Get("IP"); DB_schema = GetStringValue("Database", "Schema", "safedispatchdb"); // source.Configs["Database"].Get("Schema"); DB_user = GetStringValue("Database", "User", "postgres"); // source.Configs["Database"].Get("User"); DB_passwd = GetStringValue("Database", "Passwd", "wizdemo26"); //source.Configs["Database"].Get("Passwd"); DB_port = GetStringValue("Database", "Port", "5432"); // source.Configs["Database"].Get("Port"); if (source.Configs["MessageBus"] == null) source.Configs.Add("MessageBus"); msgBusIP = GetStringValue("MessageBus", "ip", "224.30.0.1"); // source.Configs["MessageBus"].Get("ip"); msgBusPort = GetInt32Value("MessageBus", "port", 17233); // Convert.ToInt32(source.Configs["MessageBus"].Get("port")); if (source.Configs["VoiceMessageBus"] == null) source.Configs.Add("VoiceMessageBus"); VoicePort = GetInt32Value("VoiceMessageBus", "port", 17234); //Int32.Parse(source.Configs["VoiceMessageBus"].Get("port")); LocalIPAddress = GetStringValue("MessageBus", "localIP", ""); if (source.Configs["Update"] == null) source.Configs.Add("Update"); autoupdate = GetBooleanValue("Update", "autoupdate", true); if (source.Configs["Update"].Contains("develop")) isDevelop = source.Configs["Update"].GetBoolean("develop"); GetStringValue("Update", "Version", "1.0.0.2"); GetBooleanValue("Update", "Enable", true); if (source.Configs["Config"] == null) source.Configs.Add("Config"); watchdog = GetBooleanValue("Config", "watchdog", false); enableRestarting = GetBooleanValue("Config", "enableRestarting", false); gatewayType = GetStringValue("Config", "Gateway", ""); if (source.Configs["Websocket"] == null) source.Configs.Add("Websocket"); websocketTimer = GetInt32Value("Websocket", "WebsocketTimer_ms", 5000); websocketUrl = GetStringValue("Websocket", "WebsocketUrl", ""); websocketUser = GetStringValue("Websocket", "WebsocketUser", ""); websocketPass = GetStringValue("Websocket", "WebsocketPassword", ""); DBemailServiceManager DB = new DBemailServiceManager(DB_IP, DB_schema, DB_user, DB_passwd, DB_port); ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; }; EmailService es = DB.GetEmailServiceSettings(); if (es != null) { enableEmailService = es.Enable; emailAddress = es.EmailAddress; emailPassword = es.Pass; lastEmailTime = es.LastEmailTime; pop3Server = es.PopServer; smtpServer = es.SmtpServer; pop3Port = es.PopPort; smtpPort = es.SmtpPort; popSSLState = es.IsPopSSL; smtpSSLState = es.IsSmtpSSL; } if (enableEmailService) SM.Debug("EmailService\n emailAddress=" + emailAddress + "\n " + pop3Server+":" + pop3Port + "\n " + smtpServer+":"+smtpPort); else SM.Debug("Email Service is not enabled"); MainForm.SendPOLLafterSMS = DB.GetPollSMSServiceSettings(); // Save the INI file source.Save(); } catch (Exception ex) { SM.Debug("LoadSetup() Exception: " + ex.Message); } SM.Debug("LoadSetup file OK !"); } public Config() { LoadConfig(); } public int VoicePort { get { return _VoicePort; } private set { _VoicePort = value; } } private void SaveCFGFile(string file) { try { source = new IniConfigSource(CFG_FILE); //DataBase source.Configs["Database"].Set("IP", DB_IP); source.Configs["Database"].Set("Schema", DB_schema); source.Configs["Database"].Set("User", DB_user); source.Configs["Database"].Set("Passwd", DB_passwd); source.Configs["Database"].Set("Port", DB_port); // Save the INI file source.Save(); //UpdateFields(); } catch (Exception ex) { SM.Debug("SaveCFGFile() Exception: " + ex.Message); } } /// /// Get an int value from the configuration file. The desired value is identifiec by /// the key and the header under which is placed is pointed by the header. Also a default /// value can be set in case the value doesn't exist and needs to be created before /// beeing returned /// /// Header unde which the desired config parameter is placed /// The Key that designates the desired config parameter /// A default value that will be used and returned in case the /// config file doesn't have a value for the parameter /// Parameter value from the config file, or the default value in case it doesn't /// exist private Int32 GetInt32Value(String header, String key, Int32 defaultValue) { if (!source.Configs[header].Contains(key)) source.Configs[header].Set(key, defaultValue); return source.Configs[header].GetInt(key); } /// /// Get a string value from the configuration file. The desired value is identifiec by /// the key and the header under which is placed is pointed by the header. Also a default /// value can be set in case the value doesn't exist and needs to be created before /// beeing returned /// /// Header unde which the desired config parameter is placed /// The Key that designates the desired config parameter /// A default value that will be used and returned in case the /// config file doesn't have a value for the parameter /// Parameter value from the config file, or the default value in case it doesn't /// exist private String GetStringValue(String header, String key, String defaultValue) { if (!source.Configs[header].Contains(key)) source.Configs[header].Set(key, defaultValue); return source.Configs[header].GetString(key); } /// /// Get a boolean value from the configuration file. The desired value is identifiec by /// the key and the header under which is placed is pointed by the header. Also a default /// value can be set in case the value doesn't exist and needs to be created before /// beeing returned /// /// Header unde which the desired config parameter is placed /// The Key that designates the desired config parameter /// A default value that will be used and returned in case the /// config file doesn't have a value for the parameter /// Parameter value from the config file, or the default value in case it doesn't /// exist private Boolean GetBooleanValue(String header, String key, Boolean defaultValue) { if (!source.Configs[header].Contains(key)) source.Configs[header].Set(key, defaultValue); return source.Configs[header].GetBoolean(key); } } }