diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Application/OpenSim.cs | 326 |
1 files changed, 61 insertions, 265 deletions
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index 6255515..08e4023 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs | |||
@@ -35,6 +35,7 @@ using System.Text; | |||
35 | using System.Text.RegularExpressions; | 35 | using System.Text.RegularExpressions; |
36 | using System.Timers; | 36 | using System.Timers; |
37 | using log4net; | 37 | using log4net; |
38 | using NDesk.Options; | ||
38 | using Nini.Config; | 39 | using Nini.Config; |
39 | using OpenMetaverse; | 40 | using OpenMetaverse; |
40 | using OpenSim.Framework; | 41 | using OpenSim.Framework; |
@@ -81,8 +82,8 @@ namespace OpenSim | |||
81 | { | 82 | { |
82 | base.ReadExtraConfigSettings(); | 83 | base.ReadExtraConfigSettings(); |
83 | 84 | ||
84 | IConfig startupConfig = m_config.Source.Configs["Startup"]; | 85 | IConfig startupConfig = Config.Configs["Startup"]; |
85 | IConfig networkConfig = m_config.Source.Configs["Network"]; | 86 | IConfig networkConfig = Config.Configs["Network"]; |
86 | 87 | ||
87 | int stpMaxThreads = 15; | 88 | int stpMaxThreads = 15; |
88 | 89 | ||
@@ -105,22 +106,6 @@ namespace OpenSim | |||
105 | m_timeInterval = startupConfig.GetInt("timer_Interval", 1200); | 106 | m_timeInterval = startupConfig.GetInt("timer_Interval", 1200); |
106 | } | 107 | } |
107 | 108 | ||
108 | if (m_logFileAppender != null) | ||
109 | { | ||
110 | if (m_logFileAppender is log4net.Appender.FileAppender) | ||
111 | { | ||
112 | log4net.Appender.FileAppender appender = | ||
113 | (log4net.Appender.FileAppender)m_logFileAppender; | ||
114 | string fileName = startupConfig.GetString("LogFile", String.Empty); | ||
115 | if (fileName != String.Empty) | ||
116 | { | ||
117 | appender.File = fileName; | ||
118 | appender.ActivateOptions(); | ||
119 | } | ||
120 | m_log.InfoFormat("[LOGGING]: Logging started to file {0}", appender.File); | ||
121 | } | ||
122 | } | ||
123 | |||
124 | string asyncCallMethodStr = startupConfig.GetString("async_call_method", String.Empty); | 109 | string asyncCallMethodStr = startupConfig.GetString("async_call_method", String.Empty); |
125 | FireAndForgetMethod asyncCallMethod; | 110 | FireAndForgetMethod asyncCallMethod; |
126 | if (!String.IsNullOrEmpty(asyncCallMethodStr) && Utils.EnumTryParse<FireAndForgetMethod>(asyncCallMethodStr, out asyncCallMethod)) | 111 | if (!String.IsNullOrEmpty(asyncCallMethodStr) && Utils.EnumTryParse<FireAndForgetMethod>(asyncCallMethodStr, out asyncCallMethod)) |
@@ -163,7 +148,7 @@ namespace OpenSim | |||
163 | break; | 148 | break; |
164 | case "rest": | 149 | case "rest": |
165 | m_console = new RemoteConsole("Region"); | 150 | m_console = new RemoteConsole("Region"); |
166 | ((RemoteConsole)m_console).ReadConfig(m_config.Source); | 151 | ((RemoteConsole)m_console).ReadConfig(Config); |
167 | break; | 152 | break; |
168 | default: | 153 | default: |
169 | m_console = new LocalConsole("Region"); | 154 | m_console = new LocalConsole("Region"); |
@@ -173,6 +158,7 @@ namespace OpenSim | |||
173 | 158 | ||
174 | MainConsole.Instance = m_console; | 159 | MainConsole.Instance = m_console; |
175 | 160 | ||
161 | RegisterCommonAppenders(Config.Configs["Startup"]); | ||
176 | RegisterConsoleCommands(); | 162 | RegisterConsoleCommands(); |
177 | 163 | ||
178 | base.StartupSpecific(); | 164 | base.StartupSpecific(); |
@@ -253,8 +239,14 @@ namespace OpenSim | |||
253 | m_console.Commands.AddCommand("Debug", false, "debug teleport", "debug teleport", "Toggle teleport route debugging", Debug); | 239 | m_console.Commands.AddCommand("Debug", false, "debug teleport", "debug teleport", "Toggle teleport route debugging", Debug); |
254 | 240 | ||
255 | m_console.Commands.AddCommand("Debug", false, "debug scene", | 241 | m_console.Commands.AddCommand("Debug", false, "debug scene", |
256 | "debug scene <scripting> <collisions> <physics>", | 242 | "debug scene active|collisions|physics|scripting|teleport true|false", |
257 | "Turn on scene debugging", Debug); | 243 | "Turn on scene debugging.", |
244 | "If active is false then main scene update and maintenance loops are suspended.\n" | ||
245 | + "If collisions is false then collisions with other objects are turned off.\n" | ||
246 | + "If physics is false then all physics objects are non-physical.\n" | ||
247 | + "If scripting is false then no scripting operations happen.\n" | ||
248 | + "If teleport is true then some extra teleport debug information is logged.", | ||
249 | Debug); | ||
258 | 250 | ||
259 | m_console.Commands.AddCommand("General", false, "change region", | 251 | m_console.Commands.AddCommand("General", false, "change region", |
260 | "change region <region name>", | 252 | "change region <region name>", |
@@ -291,7 +283,7 @@ namespace OpenSim | |||
291 | 283 | ||
292 | m_console.Commands.AddCommand("Archiving", false, "save oar", | 284 | m_console.Commands.AddCommand("Archiving", false, "save oar", |
293 | //"save oar [-v|--version=<N>] [-p|--profile=<url>] [<OAR path>]", | 285 | //"save oar [-v|--version=<N>] [-p|--profile=<url>] [<OAR path>]", |
294 | "save oar [-h|--home=<url>] [--noassets] [--publish] [--perm=<permissions>] [<OAR path>]", | 286 | "save oar [-h|--home=<url>] [--noassets] [--publish] [--perm=<permissions>] [--all] [<OAR path>]", |
295 | "Save a region's data to an OAR archive.", | 287 | "Save a region's data to an OAR archive.", |
296 | // "-v|--version=<N> generates scene objects as per older versions of the serialization (e.g. -v=0)" + Environment.NewLine | 288 | // "-v|--version=<N> generates scene objects as per older versions of the serialization (e.g. -v=0)" + Environment.NewLine |
297 | "-h|--home=<url> adds the url of the profile service to the saved user information.\n" | 289 | "-h|--home=<url> adds the url of the profile service to the saved user information.\n" |
@@ -301,6 +293,7 @@ namespace OpenSim | |||
301 | + " this is useful if you're making oars generally available that might be reloaded to the same grid from which you published\n" | 293 | + " this is useful if you're making oars generally available that might be reloaded to the same grid from which you published\n" |
302 | + "--perm=<permissions> stops objects with insufficient permissions from being saved to the OAR.\n" | 294 | + "--perm=<permissions> stops objects with insufficient permissions from being saved to the OAR.\n" |
303 | + " <permissions> can contain one or more of these characters: \"C\" = Copy, \"T\" = Transfer\n" | 295 | + " <permissions> can contain one or more of these characters: \"C\" = Copy, \"T\" = Transfer\n" |
296 | + "--all saves all the regions in the simulator, instead of just the current region.\n" | ||
304 | + "The OAR path must be a filesystem path." | 297 | + "The OAR path must be a filesystem path." |
305 | + " If this is not given then the oar is saved to region.oar in the current directory.", | 298 | + " If this is not given then the oar is saved to region.oar in the current directory.", |
306 | SaveOar); | 299 | SaveOar); |
@@ -310,8 +303,11 @@ namespace OpenSim | |||
310 | "Change the scale of a named prim", HandleEditScale); | 303 | "Change the scale of a named prim", HandleEditScale); |
311 | 304 | ||
312 | m_console.Commands.AddCommand("Users", false, "kick user", | 305 | m_console.Commands.AddCommand("Users", false, "kick user", |
313 | "kick user <first> <last> [message]", | 306 | "kick user <first> <last> [--force] [message]", |
314 | "Kick a user off the simulator", KickUserCommand); | 307 | "Kick a user off the simulator", |
308 | "The --force option will kick the user without any checks to see whether it's already in the process of closing\n" | ||
309 | + "Only use this option if you are sure the avatar is inactive and a normal kick user operation does not removed them", | ||
310 | KickUserCommand); | ||
315 | 311 | ||
316 | m_console.Commands.AddCommand("Users", false, "show users", | 312 | m_console.Commands.AddCommand("Users", false, "show users", |
317 | "show users [full]", | 313 | "show users [full]", |
@@ -328,10 +324,6 @@ namespace OpenSim | |||
328 | "show circuits", | 324 | "show circuits", |
329 | "Show agent circuit data", HandleShow); | 325 | "Show agent circuit data", HandleShow); |
330 | 326 | ||
331 | m_console.Commands.AddCommand("Comms", false, "show http-handlers", | ||
332 | "show http-handlers", | ||
333 | "Show all registered http handlers", HandleShow); | ||
334 | |||
335 | m_console.Commands.AddCommand("Comms", false, "show pending-objects", | 327 | m_console.Commands.AddCommand("Comms", false, "show pending-objects", |
336 | "show pending-objects", | 328 | "show pending-objects", |
337 | "Show # of objects on the pending queues of all scene viewers", HandleShow); | 329 | "Show # of objects on the pending queues of all scene viewers", HandleShow); |
@@ -365,26 +357,6 @@ namespace OpenSim | |||
365 | "restart", | 357 | "restart", |
366 | "Restart all sims in this instance", RunCommand); | 358 | "Restart all sims in this instance", RunCommand); |
367 | 359 | ||
368 | m_console.Commands.AddCommand("General", false, "config set", | ||
369 | "config set <section> <key> <value>", | ||
370 | "Set a config option. In most cases this is not useful since changed parameters are not dynamically reloaded. Neither do changed parameters persist - you will have to change a config file manually and restart.", HandleConfig); | ||
371 | |||
372 | m_console.Commands.AddCommand("General", false, "config get", | ||
373 | "config get [<section>] [<key>]", | ||
374 | "Synonym for config show", | ||
375 | HandleConfig); | ||
376 | |||
377 | m_console.Commands.AddCommand("General", false, "config show", | ||
378 | "config show [<section>] [<key>]", | ||
379 | "Show config information", | ||
380 | "If neither section nor field are specified, then the whole current configuration is printed." + Environment.NewLine | ||
381 | + "If a section is given but not a field, then all fields in that section are printed.", | ||
382 | HandleConfig); | ||
383 | |||
384 | m_console.Commands.AddCommand("General", false, "config save", | ||
385 | "config save <path>", | ||
386 | "Save current configuration to a file at the given path", HandleConfig); | ||
387 | |||
388 | m_console.Commands.AddCommand("General", false, "command-script", | 360 | m_console.Commands.AddCommand("General", false, "command-script", |
389 | "command-script <script>", | 361 | "command-script <script>", |
390 | "Run a command script from file", RunCommand); | 362 | "Run a command script from file", RunCommand); |
@@ -416,6 +388,7 @@ namespace OpenSim | |||
416 | { | 388 | { |
417 | RunCommandScript(m_shutdownCommandsFile); | 389 | RunCommandScript(m_shutdownCommandsFile); |
418 | } | 390 | } |
391 | |||
419 | base.ShutdownSpecific(); | 392 | base.ShutdownSpecific(); |
420 | } | 393 | } |
421 | 394 | ||
@@ -453,11 +426,17 @@ namespace OpenSim | |||
453 | /// <param name="cmdparams">name of avatar to kick</param> | 426 | /// <param name="cmdparams">name of avatar to kick</param> |
454 | private void KickUserCommand(string module, string[] cmdparams) | 427 | private void KickUserCommand(string module, string[] cmdparams) |
455 | { | 428 | { |
456 | if (cmdparams.Length < 4) | 429 | bool force = false; |
430 | |||
431 | OptionSet options = new OptionSet().Add("f|force", delegate (string v) { force = v != null; }); | ||
432 | |||
433 | List<string> mainParams = options.Parse(cmdparams); | ||
434 | |||
435 | if (mainParams.Count < 4) | ||
457 | return; | 436 | return; |
458 | 437 | ||
459 | string alert = null; | 438 | string alert = null; |
460 | if (cmdparams.Length > 4) | 439 | if (mainParams.Count > 4) |
461 | alert = String.Format("\n{0}\n", String.Join(" ", cmdparams, 4, cmdparams.Length - 4)); | 440 | alert = String.Format("\n{0}\n", String.Join(" ", cmdparams, 4, cmdparams.Length - 4)); |
462 | 441 | ||
463 | IList agents = SceneManager.GetCurrentSceneAvatars(); | 442 | IList agents = SceneManager.GetCurrentSceneAvatars(); |
@@ -466,8 +445,8 @@ namespace OpenSim | |||
466 | { | 445 | { |
467 | RegionInfo regionInfo = presence.Scene.RegionInfo; | 446 | RegionInfo regionInfo = presence.Scene.RegionInfo; |
468 | 447 | ||
469 | if (presence.Firstname.ToLower().Contains(cmdparams[2].ToLower()) && | 448 | if (presence.Firstname.ToLower().Contains(mainParams[2].ToLower()) && |
470 | presence.Lastname.ToLower().Contains(cmdparams[3].ToLower())) | 449 | presence.Lastname.ToLower().Contains(mainParams[3].ToLower())) |
471 | { | 450 | { |
472 | MainConsole.Instance.Output( | 451 | MainConsole.Instance.Output( |
473 | String.Format( | 452 | String.Format( |
@@ -480,7 +459,7 @@ namespace OpenSim | |||
480 | else | 459 | else |
481 | presence.ControllingClient.Kick("\nYou have been logged out by an administrator.\n"); | 460 | presence.ControllingClient.Kick("\nYou have been logged out by an administrator.\n"); |
482 | 461 | ||
483 | presence.Scene.IncomingCloseAgent(presence.UUID); | 462 | presence.Scene.IncomingCloseAgent(presence.UUID, force); |
484 | } | 463 | } |
485 | } | 464 | } |
486 | 465 | ||
@@ -488,35 +467,6 @@ namespace OpenSim | |||
488 | } | 467 | } |
489 | 468 | ||
490 | /// <summary> | 469 | /// <summary> |
491 | /// Run an optional startup list of commands | ||
492 | /// </summary> | ||
493 | /// <param name="fileName"></param> | ||
494 | private void RunCommandScript(string fileName) | ||
495 | { | ||
496 | if (File.Exists(fileName)) | ||
497 | { | ||
498 | m_log.Info("[COMMANDFILE]: Running " + fileName); | ||
499 | |||
500 | using (StreamReader readFile = File.OpenText(fileName)) | ||
501 | { | ||
502 | string currentCommand; | ||
503 | while ((currentCommand = readFile.ReadLine()) != null) | ||
504 | { | ||
505 | currentCommand = currentCommand.Trim(); | ||
506 | if (!(currentCommand == "" | ||
507 | || currentCommand.StartsWith(";") | ||
508 | || currentCommand.StartsWith("//") | ||
509 | || currentCommand.StartsWith("#"))) | ||
510 | { | ||
511 | m_log.Info("[COMMANDFILE]: Running '" + currentCommand + "'"); | ||
512 | m_console.RunCommand(currentCommand); | ||
513 | } | ||
514 | } | ||
515 | } | ||
516 | } | ||
517 | } | ||
518 | |||
519 | /// <summary> | ||
520 | /// Opens a file and uses it as input to the console command parser. | 470 | /// Opens a file and uses it as input to the console command parser. |
521 | /// </summary> | 471 | /// </summary> |
522 | /// <param name="fileName">name of file to use as input to the console</param> | 472 | /// <param name="fileName">name of file to use as input to the console</param> |
@@ -620,111 +570,9 @@ namespace OpenSim | |||
620 | bool changed = PopulateRegionEstateInfo(regInfo); | 570 | bool changed = PopulateRegionEstateInfo(regInfo); |
621 | IScene scene; | 571 | IScene scene; |
622 | CreateRegion(regInfo, true, out scene); | 572 | CreateRegion(regInfo, true, out scene); |
623 | if (changed) | ||
624 | regInfo.EstateSettings.Save(); | ||
625 | } | ||
626 | |||
627 | /// <summary> | ||
628 | /// Change and load configuration file data. | ||
629 | /// </summary> | ||
630 | /// <param name="module"></param> | ||
631 | /// <param name="cmd"></param> | ||
632 | private void HandleConfig(string module, string[] cmd) | ||
633 | { | ||
634 | List<string> args = new List<string>(cmd); | ||
635 | args.RemoveAt(0); | ||
636 | string[] cmdparams = args.ToArray(); | ||
637 | |||
638 | if (cmdparams.Length > 0) | ||
639 | { | ||
640 | string firstParam = cmdparams[0].ToLower(); | ||
641 | |||
642 | switch (firstParam) | ||
643 | { | ||
644 | case "set": | ||
645 | if (cmdparams.Length < 4) | ||
646 | { | ||
647 | Notice("Syntax: config set <section> <key> <value>"); | ||
648 | Notice("Example: config set ScriptEngine.DotNetEngine NumberOfScriptThreads 5"); | ||
649 | } | ||
650 | else | ||
651 | { | ||
652 | IConfig c; | ||
653 | IConfigSource source = new IniConfigSource(); | ||
654 | c = source.AddConfig(cmdparams[1]); | ||
655 | if (c != null) | ||
656 | { | ||
657 | string _value = String.Join(" ", cmdparams, 3, cmdparams.Length - 3); | ||
658 | c.Set(cmdparams[2], _value); | ||
659 | m_config.Source.Merge(source); | ||
660 | 573 | ||
661 | Notice("In section [{0}], set {1} = {2}", c.Name, cmdparams[2], _value); | 574 | if (changed) |
662 | } | 575 | regInfo.EstateSettings.Save(); |
663 | } | ||
664 | break; | ||
665 | |||
666 | case "get": | ||
667 | case "show": | ||
668 | if (cmdparams.Length == 1) | ||
669 | { | ||
670 | foreach (IConfig config in m_config.Source.Configs) | ||
671 | { | ||
672 | Notice("[{0}]", config.Name); | ||
673 | string[] keys = config.GetKeys(); | ||
674 | foreach (string key in keys) | ||
675 | Notice(" {0} = {1}", key, config.GetString(key)); | ||
676 | } | ||
677 | } | ||
678 | else if (cmdparams.Length == 2 || cmdparams.Length == 3) | ||
679 | { | ||
680 | IConfig config = m_config.Source.Configs[cmdparams[1]]; | ||
681 | if (config == null) | ||
682 | { | ||
683 | Notice("Section \"{0}\" does not exist.",cmdparams[1]); | ||
684 | break; | ||
685 | } | ||
686 | else | ||
687 | { | ||
688 | if (cmdparams.Length == 2) | ||
689 | { | ||
690 | Notice("[{0}]", config.Name); | ||
691 | foreach (string key in config.GetKeys()) | ||
692 | Notice(" {0} = {1}", key, config.GetString(key)); | ||
693 | } | ||
694 | else | ||
695 | { | ||
696 | Notice( | ||
697 | "config get {0} {1} : {2}", | ||
698 | cmdparams[1], cmdparams[2], config.GetString(cmdparams[2])); | ||
699 | } | ||
700 | } | ||
701 | } | ||
702 | else | ||
703 | { | ||
704 | Notice("Syntax: config {0} [<section>] [<key>]", firstParam); | ||
705 | Notice("Example: config {0} ScriptEngine.DotNetEngine NumberOfScriptThreads", firstParam); | ||
706 | } | ||
707 | |||
708 | break; | ||
709 | |||
710 | case "save": | ||
711 | if (cmdparams.Length < 2) | ||
712 | { | ||
713 | Notice("Syntax: config save <path>"); | ||
714 | return; | ||
715 | } | ||
716 | |||
717 | if (Application.iniFilePath == cmdparams[1]) | ||
718 | { | ||
719 | Notice("Path can not be " + Application.iniFilePath); | ||
720 | return; | ||
721 | } | ||
722 | |||
723 | Notice("Saving configuration file: " + cmdparams[1]); | ||
724 | m_config.Save(cmdparams[1]); | ||
725 | break; | ||
726 | } | ||
727 | } | ||
728 | } | 576 | } |
729 | 577 | ||
730 | /// <summary> | 578 | /// <summary> |
@@ -743,33 +591,13 @@ namespace OpenSim | |||
743 | switch (cmdparams[0].ToLower()) | 591 | switch (cmdparams[0].ToLower()) |
744 | { | 592 | { |
745 | case "list": | 593 | case "list": |
746 | foreach (IRegionModule irm in m_moduleLoader.GetLoadedSharedModules) | 594 | //TODO: Convert to new region modules |
747 | { | ||
748 | MainConsole.Instance.Output(String.Format("Shared region module: {0}", irm.Name)); | ||
749 | } | ||
750 | break; | 595 | break; |
751 | case "unload": | 596 | case "unload": |
752 | if (cmdparams.Length > 1) | 597 | //TODO: Convert to new region modules |
753 | { | ||
754 | foreach (IRegionModule rm in new ArrayList(m_moduleLoader.GetLoadedSharedModules)) | ||
755 | { | ||
756 | if (rm.Name.ToLower() == cmdparams[1].ToLower()) | ||
757 | { | ||
758 | MainConsole.Instance.Output(String.Format("Unloading module: {0}", rm.Name)); | ||
759 | m_moduleLoader.UnloadModule(rm); | ||
760 | } | ||
761 | } | ||
762 | } | ||
763 | break; | 598 | break; |
764 | case "load": | 599 | case "load": |
765 | if (cmdparams.Length > 1) | 600 | //TODO: Convert to new region modules |
766 | { | ||
767 | foreach (Scene s in new ArrayList(SceneManager.Scenes)) | ||
768 | { | ||
769 | MainConsole.Instance.Output(String.Format("Loading module: {0}", cmdparams[1])); | ||
770 | m_moduleLoader.LoadRegionModules(cmdparams[1], s); | ||
771 | } | ||
772 | } | ||
773 | break; | 601 | break; |
774 | } | 602 | } |
775 | } | 603 | } |
@@ -793,13 +621,6 @@ namespace OpenSim | |||
793 | 621 | ||
794 | switch (command) | 622 | switch (command) |
795 | { | 623 | { |
796 | case "command-script": | ||
797 | if (cmdparams.Length > 0) | ||
798 | { | ||
799 | RunCommandScript(cmdparams[0]); | ||
800 | } | ||
801 | break; | ||
802 | |||
803 | case "backup": | 624 | case "backup": |
804 | MainConsole.Instance.Output("Triggering save of pending object updates to persistent store"); | 625 | MainConsole.Instance.Output("Triggering save of pending object updates to persistent store"); |
805 | SceneManager.BackupCurrentScene(); | 626 | SceneManager.BackupCurrentScene(); |
@@ -843,12 +664,20 @@ namespace OpenSim | |||
843 | 664 | ||
844 | if (!SceneManager.TrySetCurrentScene(newRegionName)) | 665 | if (!SceneManager.TrySetCurrentScene(newRegionName)) |
845 | MainConsole.Instance.Output(String.Format("Couldn't select region {0}", newRegionName)); | 666 | MainConsole.Instance.Output(String.Format("Couldn't select region {0}", newRegionName)); |
667 | else | ||
668 | RefreshPrompt(); | ||
846 | } | 669 | } |
847 | else | 670 | else |
848 | { | 671 | { |
849 | MainConsole.Instance.Output("Usage: change region <region name>"); | 672 | MainConsole.Instance.Output("Usage: change region <region name>"); |
850 | } | 673 | } |
674 | } | ||
851 | 675 | ||
676 | /// <summary> | ||
677 | /// Refreshs prompt with the current selection details. | ||
678 | /// </summary> | ||
679 | private void RefreshPrompt() | ||
680 | { | ||
852 | string regionName = (SceneManager.CurrentScene == null ? "root" : SceneManager.CurrentScene.RegionInfo.RegionName); | 681 | string regionName = (SceneManager.CurrentScene == null ? "root" : SceneManager.CurrentScene.RegionInfo.RegionName); |
853 | MainConsole.Instance.Output(String.Format("Currently selected region is {0}", regionName)); | 682 | MainConsole.Instance.Output(String.Format("Currently selected region is {0}", regionName)); |
854 | 683 | ||
@@ -870,6 +699,18 @@ namespace OpenSim | |||
870 | m_console.ConsoleScene = SceneManager.CurrentScene; | 699 | m_console.ConsoleScene = SceneManager.CurrentScene; |
871 | } | 700 | } |
872 | 701 | ||
702 | protected override void HandleRestartRegion(RegionInfo whichRegion) | ||
703 | { | ||
704 | base.HandleRestartRegion(whichRegion); | ||
705 | |||
706 | // Where we are restarting multiple scenes at once, a previous call to RefreshPrompt may have set the | ||
707 | // m_console.ConsoleScene to null (indicating all scenes). | ||
708 | if (m_console.ConsoleScene != null && whichRegion.RegionName == ((Scene)m_console.ConsoleScene).Name) | ||
709 | SceneManager.TrySetCurrentScene(whichRegion.RegionName); | ||
710 | |||
711 | RefreshPrompt(); | ||
712 | } | ||
713 | |||
873 | /// <summary> | 714 | /// <summary> |
874 | /// Turn on some debugging values for OpenSim. | 715 | /// Turn on some debugging values for OpenSim. |
875 | /// </summary> | 716 | /// </summary> |
@@ -922,7 +763,8 @@ namespace OpenSim | |||
922 | } | 763 | } |
923 | else | 764 | else |
924 | { | 765 | { |
925 | MainConsole.Instance.Output("Usage: debug scene scripting|collisions|physics|teleport true|false"); | 766 | MainConsole.Instance.Output( |
767 | "Usage: debug scene active|scripting|collisions|physics|teleport true|false"); | ||
926 | } | 768 | } |
927 | 769 | ||
928 | break; | 770 | break; |
@@ -1002,56 +844,10 @@ namespace OpenSim | |||
1002 | HandleShowCircuits(); | 844 | HandleShowCircuits(); |
1003 | break; | 845 | break; |
1004 | 846 | ||
1005 | case "http-handlers": | ||
1006 | System.Text.StringBuilder handlers = new System.Text.StringBuilder("Registered HTTP Handlers:\n"); | ||
1007 | |||
1008 | handlers.AppendFormat("* XMLRPC:\n"); | ||
1009 | foreach (String s in HttpServer.GetXmlRpcHandlerKeys()) | ||
1010 | handlers.AppendFormat("\t{0}\n", s); | ||
1011 | |||
1012 | handlers.AppendFormat("* HTTP:\n"); | ||
1013 | List<String> poll = HttpServer.GetPollServiceHandlerKeys(); | ||
1014 | foreach (String s in HttpServer.GetHTTPHandlerKeys()) | ||
1015 | handlers.AppendFormat("\t{0} {1}\n", s, (poll.Contains(s) ? "(poll service)" : string.Empty)); | ||
1016 | |||
1017 | handlers.AppendFormat("* Agent:\n"); | ||
1018 | foreach (String s in HttpServer.GetAgentHandlerKeys()) | ||
1019 | handlers.AppendFormat("\t{0}\n", s); | ||
1020 | |||
1021 | handlers.AppendFormat("* LLSD:\n"); | ||
1022 | foreach (String s in HttpServer.GetLLSDHandlerKeys()) | ||
1023 | handlers.AppendFormat("\t{0}\n", s); | ||
1024 | |||
1025 | handlers.AppendFormat("* StreamHandlers ({0}):\n", HttpServer.GetStreamHandlerKeys().Count); | ||
1026 | foreach (String s in HttpServer.GetStreamHandlerKeys()) | ||
1027 | handlers.AppendFormat("\t{0}\n", s); | ||
1028 | |||
1029 | MainConsole.Instance.Output(handlers.ToString()); | ||
1030 | break; | ||
1031 | |||
1032 | case "modules": | 847 | case "modules": |
1033 | MainConsole.Instance.Output("The currently loaded shared modules are:"); | ||
1034 | foreach (IRegionModule module in m_moduleLoader.GetLoadedSharedModules) | ||
1035 | { | ||
1036 | MainConsole.Instance.Output("Shared Module: " + module.Name); | ||
1037 | } | ||
1038 | |||
1039 | SceneManager.ForEachScene( | ||
1040 | delegate(Scene scene) { | ||
1041 | m_log.Error("The currently loaded modules in " + scene.RegionInfo.RegionName + " are:"); | ||
1042 | foreach (IRegionModule module in scene.Modules.Values) | ||
1043 | { | ||
1044 | if (!module.IsSharedModule) | ||
1045 | { | ||
1046 | m_log.Error("Region Module: " + module.Name); | ||
1047 | } | ||
1048 | } | ||
1049 | } | ||
1050 | ); | ||
1051 | |||
1052 | SceneManager.ForEachScene( | 848 | SceneManager.ForEachScene( |
1053 | delegate(Scene scene) { | 849 | delegate(Scene scene) { |
1054 | MainConsole.Instance.Output("Loaded new region modules in" + scene.RegionInfo.RegionName + " are:"); | 850 | MainConsole.Instance.Output("Loaded region modules in" + scene.RegionInfo.RegionName + " are:"); |
1055 | foreach (IRegionModuleBase module in scene.RegionModules.Values) | 851 | foreach (IRegionModuleBase module in scene.RegionModules.Values) |
1056 | { | 852 | { |
1057 | Type type = module.GetType().GetInterface("ISharedRegionModule"); | 853 | Type type = module.GetType().GetInterface("ISharedRegionModule"); |
@@ -1123,7 +919,7 @@ namespace OpenSim | |||
1123 | aCircuit.Name, | 919 | aCircuit.Name, |
1124 | aCircuit.child ? "child" : "root", | 920 | aCircuit.child ? "child" : "root", |
1125 | aCircuit.circuitcode.ToString(), | 921 | aCircuit.circuitcode.ToString(), |
1126 | aCircuit.IPAddress.ToString(), | 922 | aCircuit.IPAddress != null ? aCircuit.IPAddress.ToString() : "not set", |
1127 | aCircuit.Viewer); | 923 | aCircuit.Viewer); |
1128 | }); | 924 | }); |
1129 | 925 | ||