/// <summary> /// Run /// </summary> public static void Run() { try { if (Configuration.CurrentPlatform == Core.Platform.Windowsx64 ||Configuration.CurrentPlatform == Core.Platform.Windowsx86 || Configuration.CurrentPlatform == Core.Platform.Linuxx64 || Configuration.CurrentPlatform == Core.Platform.Linuxx86) { if (Configuration.Kernel.CheckUpdate) { Core.Ringlog("UPTH: Checking for updates..."); temporarydir = System.IO.Path.GetTempPath() + "pidgeon" + DateTime.Now.ToBinary().ToString(); if (System.IO.Directory.Exists(temporarydir)) { return; } System.IO.Directory.CreateDirectory(temporarydir); if (Download(Configuration.Kernel.UpdaterUrl + "&type=" + System.Web.HttpUtility.UrlEncode(Configuration.CurrentPlatform.ToString()), temporarydir + System.IO.Path.DirectorySeparatorChar + "pidgeon.dat")) { info = System.IO.File.ReadAllText(temporarydir + System.IO.Path.DirectorySeparatorChar + "pidgeon.dat"); if (info.Contains("[update-need]")) { Core.Ringlog("UPTH: update is needed"); string vr = info.Substring(info.IndexOf("version:", StringComparison.Ordinal) + "version:".Length); vr = vr.Substring(0, vr.IndexOf("^", StringComparison.Ordinal)); Updater updater = new Updater(); if (info.Contains("message|")) { string[]lines = System.IO.File.ReadAllLines(temporarydir + System.IO.Path.DirectorySeparatorChar + "pidgeon.dat"); foreach (string line in lines) { if (line.StartsWith("link|", StringComparison.Ordinal)) { link = line.Substring(5); continue; } if (line.StartsWith("message|", StringComparison.Ordinal)) { message = line.Substring(8); continue; } } if (message != null && link != null) { updater.update.Text = messages.get("update-update"); updater.lStatus.Text = "New version of pidgeon: " + vr + " is available! " + message; updater.update.Enabled = false; updater.lUpdateLink.Text = link; updater.lUpdateLink.Visible = true; System.Windows.Forms.Application.Run(updater); return; } } updater.update.Text = messages.get("update-update"); updater.lStatus.Text = messages.get("update1", Core.SelectedLanguage, new List<string> { vr }); System.Windows.Forms.Application.Run(updater); return; } Core.Ringlog("UPTH: No update is needed"); } System.IO.Directory.Delete(temporarydir, true); } else { Core.Ringlog("UPTH: Updater is not enabled, shutting down"); } } } catch (Exception _t) { Core.handleException(_t); } }
/// <summary> /// This is a first function that should be called after application start /// </summary> /// <returns></returns> public static bool Load() { if (Status.Loading != _Status) { throw new Core.PidgeonException("You can't load core multiple times"); } try { KernelThread = Thread.CurrentThread; LoadTime = DateTime.Now; // turn on debugging until we load the config Configuration.Kernel.Debugging = true; SystemRoot = Application.StartupPath + Path.DirectorySeparatorChar; if (Root == null && Application.LocalUserAppDataPath.EndsWith(Application.ProductVersion, StringComparison.Ordinal)) { Root = Application.LocalUserAppDataPath.Substring(0, Application.LocalUserAppDataPath.Length - Application.ProductVersion.Length); ConfigFile = Root + "configuration.dat"; } else if (Root == null) { Root = System.Windows.Forms.Application.LocalUserAppDataPath + Path.DirectorySeparatorChar; ConfigFile = Root + "configuration.dat"; } Ringlog("Pidgeon " + Application.ProductVersion.ToString() + " loading core"); KernelProc = Process.GetCurrentProcess(); if (Configuration.Kernel.Safe) { Ringlog("Running in safe mode"); } foreach (string data in Program.Parameters) { startupParams.Add(data); } Configuration.Logs.logs_dir = Root + "logs"; Ringlog("Root path is " + Root); Ringlog("Config file: " + ConfigFile); Configuration.irc.CertificateDCC = Root + "certificate.p12"; string is64 = " which is a 32 bit system"; if (Environment.Is64BitOperatingSystem) { is64 = " which is a 64 bit system"; } Ringlog("This pidgeon is compiled for " + Configuration.CurrentPlatform.ToString() + " and running on " + Environment.OSVersion.ToString() + is64); DebugLog("Loading messages"); messages.Read(Configuration.Kernel.Safe); trafficscanner = new Forms.TrafficScanner(); if (!System.IO.File.Exists(Application.StartupPath + System.IO.Path.DirectorySeparatorChar + "pidgeon.dat")) { LoadSkin(); DebugLog("Loading configuration file"); Configuration.Kernel.Debugging = false; Core._Configuration.ConfigurationLoad(); if (!Directory.Exists(PermanentTemp)) { Directory.CreateDirectory(PermanentTemp); } if (Configuration.Kernel.Safe) { DebugLog("Not running updater in safe mode"); } else { DebugLog("Running updater"); ThUp = new Thread(Updater.Run); ThUp.Name = "pidgeon service"; ThUp.Start(); SystemThreads.Add(ThUp); } DebugLog("Loading log writer thread"); Thread_logs = new Thread(IO.Load); Thread_logs.Name = "Logs"; SystemThreads.Add(Thread_logs); Thread_logs.Start(); DebugLog("Loading commands"); Commands.Initialise(); notification = new Forms.Notification(); //DebugLog("Loading scripting core"); //ScriptingCore.Load(); if (Configuration.Kernel.Safe) { DebugLog("Skipping load of extensions"); } else { DebugLog("Loading extensions"); Extension.Init(); if (Directory.Exists(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + Path.DirectorySeparatorChar + "modules")) { foreach (string dll in Directory.GetFiles(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + Path.DirectorySeparatorChar + "modules", "*.pmod")) { DebugLog("Registering plugin " + dll); RegisterPlugin(dll); } } } DebugLog("Loading http"); Hyperlink.Initialize(); if (!File.Exists(ConfigFile)) { Commands.RegisterAlias("j", "join", false); if (Configuration.CurrentPlatform == Platform.Linuxx86 || Configuration.CurrentPlatform == Platform.Linuxx64) { Commands.RegisterAlias("grep", "pidgeon.term grep", false); Commands.RegisterAlias("shell", "pidgeon.term2in", false); } Network.Highlighter simple = new Network.Highlighter(); simple.enabled = true; simple.text = "$nick"; Configuration.HighlighterList.Add(simple); } ResetMainActivityTimer(); Hooks._Sys.AfterCore(); _Status = Status.Running; return true; } Updater _finalisingupdater = new Updater(); _finalisingupdater.update.Visible = false; _finalisingupdater.finalize = true; _finalisingupdater.lStatus.Text = messages.get("update2"); _Status = Status.Killed; System.Windows.Forms.Application.Run(_finalisingupdater); } catch (Exception panic) { Core.DebugLog("Failed to Core.Load: " + panic.Message + panic.StackTrace); Core.handleException(panic, true); } return false; }