Exemplo n.º 1
0
 /// <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);
     }
 }
Exemplo n.º 2
0
 /// <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;
 }