diff options
Diffstat (limited to 'OpenSim/Region/Application/OpenSimBase.cs')
-rw-r--r-- | OpenSim/Region/Application/OpenSimBase.cs | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index 4f1b439..b410a0e 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs | |||
@@ -97,6 +97,10 @@ namespace OpenSim | |||
97 | 97 | ||
98 | protected List<IApplicationPlugin> m_plugins = new List<IApplicationPlugin>(); | 98 | protected List<IApplicationPlugin> m_plugins = new List<IApplicationPlugin>(); |
99 | 99 | ||
100 | private List<string> m_permsModules; | ||
101 | |||
102 | private bool m_securePermissionsLoading = true; | ||
103 | |||
100 | /// <value> | 104 | /// <value> |
101 | /// The config information passed into the OpenSimulator region server. | 105 | /// The config information passed into the OpenSimulator region server. |
102 | /// </value> | 106 | /// </value> |
@@ -201,6 +205,11 @@ namespace OpenSim | |||
201 | CreatePIDFile(pidFile); | 205 | CreatePIDFile(pidFile); |
202 | 206 | ||
203 | userStatsURI = startupConfig.GetString("Stats_URI", String.Empty); | 207 | userStatsURI = startupConfig.GetString("Stats_URI", String.Empty); |
208 | |||
209 | m_securePermissionsLoading = startupConfig.GetBoolean("SecurePermissionsLoading", true); | ||
210 | |||
211 | string permissionModules = startupConfig.GetString("permissionmodules", "DefaultPermissionsModule"); | ||
212 | m_permsModules = new List<string>(permissionModules.Split(',')); | ||
204 | } | 213 | } |
205 | 214 | ||
206 | // Load the simulation data service | 215 | // Load the simulation data service |
@@ -227,6 +236,12 @@ namespace OpenSim | |||
227 | m_moduleLoader = new ModuleLoader(m_config.Source); | 236 | m_moduleLoader = new ModuleLoader(m_config.Source); |
228 | 237 | ||
229 | LoadPlugins(); | 238 | LoadPlugins(); |
239 | |||
240 | if (m_plugins.Count == 0) // We failed to load any modules. Mono Addins glitch! | ||
241 | { | ||
242 | Environment.Exit(1); | ||
243 | } | ||
244 | |||
230 | foreach (IApplicationPlugin plugin in m_plugins) | 245 | foreach (IApplicationPlugin plugin in m_plugins) |
231 | { | 246 | { |
232 | plugin.PostInitialise(); | 247 | plugin.PostInitialise(); |
@@ -385,7 +400,41 @@ namespace OpenSim | |||
385 | } | 400 | } |
386 | else m_log.Error("[REGIONMODULES]: The new RegionModulesController is missing..."); | 401 | else m_log.Error("[REGIONMODULES]: The new RegionModulesController is missing..."); |
387 | 402 | ||
403 | if (m_securePermissionsLoading) | ||
404 | { | ||
405 | foreach (string s in m_permsModules) | ||
406 | { | ||
407 | if (!scene.RegionModules.ContainsKey(s)) | ||
408 | { | ||
409 | bool found = false; | ||
410 | foreach (IRegionModule m in modules) | ||
411 | { | ||
412 | if (m.Name == s) | ||
413 | { | ||
414 | found = true; | ||
415 | } | ||
416 | } | ||
417 | if (!found) | ||
418 | { | ||
419 | m_log.Fatal("[MODULES]: Required module " + s + " not found."); | ||
420 | Environment.Exit(0); | ||
421 | } | ||
422 | } | ||
423 | } | ||
424 | } | ||
425 | |||
388 | scene.SetModuleInterfaces(); | 426 | scene.SetModuleInterfaces(); |
427 | // First Step of bootreport sequence | ||
428 | if (scene.SnmpService != null) | ||
429 | { | ||
430 | scene.SnmpService.ColdStart(1,scene); | ||
431 | scene.SnmpService.LinkDown(scene); | ||
432 | } | ||
433 | |||
434 | if (scene.SnmpService != null) | ||
435 | { | ||
436 | scene.SnmpService.BootInfo("Loading prins", scene); | ||
437 | } | ||
389 | 438 | ||
390 | while (regionInfo.EstateSettings.EstateOwner == UUID.Zero && MainConsole.Instance != null) | 439 | while (regionInfo.EstateSettings.EstateOwner == UUID.Zero && MainConsole.Instance != null) |
391 | SetUpEstateOwner(scene); | 440 | SetUpEstateOwner(scene); |
@@ -399,6 +448,11 @@ namespace OpenSim | |||
399 | scene.loadAllLandObjectsFromStorage(regionInfo.originRegionID); | 448 | scene.loadAllLandObjectsFromStorage(regionInfo.originRegionID); |
400 | scene.EventManager.TriggerParcelPrimCountUpdate(); | 449 | scene.EventManager.TriggerParcelPrimCountUpdate(); |
401 | 450 | ||
451 | if (scene.SnmpService != null) | ||
452 | { | ||
453 | scene.SnmpService.BootInfo("Grid Registration in progress", scene); | ||
454 | } | ||
455 | |||
402 | try | 456 | try |
403 | { | 457 | { |
404 | scene.RegisterRegionWithGrid(); | 458 | scene.RegisterRegionWithGrid(); |
@@ -409,15 +463,29 @@ namespace OpenSim | |||
409 | "[STARTUP]: Registration of region with grid failed, aborting startup due to {0} {1}", | 463 | "[STARTUP]: Registration of region with grid failed, aborting startup due to {0} {1}", |
410 | e.Message, e.StackTrace); | 464 | e.Message, e.StackTrace); |
411 | 465 | ||
466 | if (scene.SnmpService != null) | ||
467 | { | ||
468 | scene.SnmpService.Critical("Grid registration failed. Startup aborted.", scene); | ||
469 | } | ||
412 | // Carrying on now causes a lot of confusion down the | 470 | // Carrying on now causes a lot of confusion down the |
413 | // line - we need to get the user's attention | 471 | // line - we need to get the user's attention |
414 | Environment.Exit(1); | 472 | Environment.Exit(1); |
415 | } | 473 | } |
416 | 474 | ||
475 | if (scene.SnmpService != null) | ||
476 | { | ||
477 | scene.SnmpService.BootInfo("Grid Registration done", scene); | ||
478 | } | ||
479 | |||
417 | // We need to do this after we've initialized the | 480 | // We need to do this after we've initialized the |
418 | // scripting engines. | 481 | // scripting engines. |
419 | scene.CreateScriptInstances(); | 482 | scene.CreateScriptInstances(); |
420 | 483 | ||
484 | if (scene.SnmpService != null) | ||
485 | { | ||
486 | scene.SnmpService.BootInfo("ScriptEngine started", scene); | ||
487 | } | ||
488 | |||
421 | SceneManager.Add(scene); | 489 | SceneManager.Add(scene); |
422 | 490 | ||
423 | if (m_autoCreateClientStack) | 491 | if (m_autoCreateClientStack) |
@@ -426,6 +494,10 @@ namespace OpenSim | |||
426 | clientServer.Start(); | 494 | clientServer.Start(); |
427 | } | 495 | } |
428 | 496 | ||
497 | if (scene.SnmpService != null) | ||
498 | { | ||
499 | scene.SnmpService.BootInfo("Initializing region modules", scene); | ||
500 | } | ||
429 | if (do_post_init) | 501 | if (do_post_init) |
430 | { | 502 | { |
431 | foreach (IRegionModule module in modules) | 503 | foreach (IRegionModule module in modules) |
@@ -437,6 +509,12 @@ namespace OpenSim | |||
437 | 509 | ||
438 | mscene = scene; | 510 | mscene = scene; |
439 | 511 | ||
512 | if (scene.SnmpService != null) | ||
513 | { | ||
514 | scene.SnmpService.BootInfo("The region is operational", scene); | ||
515 | scene.SnmpService.LinkUp(scene); | ||
516 | } | ||
517 | |||
440 | scene.Start(); | 518 | scene.Start(); |
441 | scene.StartScripts(); | 519 | scene.StartScripts(); |
442 | 520 | ||
@@ -555,6 +633,11 @@ namespace OpenSim | |||
555 | private void ShutdownRegion(Scene scene) | 633 | private void ShutdownRegion(Scene scene) |
556 | { | 634 | { |
557 | m_log.DebugFormat("[SHUTDOWN]: Shutting down region {0}", scene.RegionInfo.RegionName); | 635 | m_log.DebugFormat("[SHUTDOWN]: Shutting down region {0}", scene.RegionInfo.RegionName); |
636 | if (scene.SnmpService != null) | ||
637 | { | ||
638 | scene.SnmpService.BootInfo("The region is shutting down", scene); | ||
639 | scene.SnmpService.LinkDown(scene); | ||
640 | } | ||
558 | IRegionModulesController controller; | 641 | IRegionModulesController controller; |
559 | if (ApplicationRegistry.TryGet<IRegionModulesController>(out controller)) | 642 | if (ApplicationRegistry.TryGet<IRegionModulesController>(out controller)) |
560 | { | 643 | { |