aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Application
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Application')
-rw-r--r--OpenSim/Region/Application/Application.cs42
-rw-r--r--OpenSim/Region/Application/ConfigurationLoader.cs5
-rw-r--r--OpenSim/Region/Application/OpenSim.cs109
-rw-r--r--OpenSim/Region/Application/OpenSimBase.cs90
4 files changed, 69 insertions, 177 deletions
diff --git a/OpenSim/Region/Application/Application.cs b/OpenSim/Region/Application/Application.cs
index c3e7ec2..3a4e5df 100644
--- a/OpenSim/Region/Application/Application.cs
+++ b/OpenSim/Region/Application/Application.cs
@@ -103,48 +103,63 @@ namespace OpenSim
103 "[OPENSIM MAIN]: Environment variable MONO_THREADS_PER_CPU is {0}", monoThreadsPerCpu ?? "unset"); 103 "[OPENSIM MAIN]: Environment variable MONO_THREADS_PER_CPU is {0}", monoThreadsPerCpu ?? "unset");
104 104
105 // Verify the Threadpool allocates or uses enough worker and IO completion threads 105 // Verify the Threadpool allocates or uses enough worker and IO completion threads
106 // .NET 2.0 workerthreads default to 50 * numcores 106 // .NET 2.0, workerthreads default to 50 * numcores
107 // .NET 3.0 workerthreads defaults to 250 * numcores 107 // .NET 3.0, workerthreads defaults to 250 * numcores
108 // .NET 4.0 workerthreads are dynamic based on bitness and OS resources 108 // .NET 4.0, workerthreads are dynamic based on bitness and OS resources
109 // Max IO Completion threads are 1000 on all 3 CLRs. 109 // Max IO Completion threads are 1000 on all 3 CLRs
110 //
111 // Mono 2.10.9 to at least Mono 3.1, workerthreads default to 100 * numcores, iocp threads to 4 * numcores
110 int workerThreadsMin = 500; 112 int workerThreadsMin = 500;
111 int workerThreadsMax = 1000; // may need further adjustment to match other CLR 113 int workerThreadsMax = 1000; // may need further adjustment to match other CLR
112 int iocpThreadsMin = 1000; 114 int iocpThreadsMin = 1000;
113 int iocpThreadsMax = 2000; // may need further adjustment to match other CLR 115 int iocpThreadsMax = 2000; // may need further adjustment to match other CLR
116
117 {
118 int currentMinWorkerThreads, currentMinIocpThreads;
119 System.Threading.ThreadPool.GetMinThreads(out currentMinWorkerThreads, out currentMinIocpThreads);
120 m_log.InfoFormat(
121 "[OPENSIM MAIN]: Runtime gave us {0} min worker threads and {1} min IOCP threads",
122 currentMinWorkerThreads, currentMinIocpThreads);
123 }
124
114 int workerThreads, iocpThreads; 125 int workerThreads, iocpThreads;
115 System.Threading.ThreadPool.GetMaxThreads(out workerThreads, out iocpThreads); 126 System.Threading.ThreadPool.GetMaxThreads(out workerThreads, out iocpThreads);
116 m_log.InfoFormat("[OPENSIM MAIN]: Runtime gave us {0} worker threads and {1} IOCP threads", workerThreads, iocpThreads); 127 m_log.InfoFormat("[OPENSIM MAIN]: Runtime gave us {0} max worker threads and {1} max IOCP threads", workerThreads, iocpThreads);
128
117 if (workerThreads < workerThreadsMin) 129 if (workerThreads < workerThreadsMin)
118 { 130 {
119 workerThreads = workerThreadsMin; 131 workerThreads = workerThreadsMin;
120 m_log.InfoFormat("[OPENSIM MAIN]: Bumping up to worker threads to {0}",workerThreads); 132 m_log.InfoFormat("[OPENSIM MAIN]: Bumping up to max worker threads to {0}",workerThreads);
121 } 133 }
122 if (workerThreads > workerThreadsMax) 134 if (workerThreads > workerThreadsMax)
123 { 135 {
124 workerThreads = workerThreadsMax; 136 workerThreads = workerThreadsMax;
125 m_log.InfoFormat("[OPENSIM MAIN]: Limiting worker threads to {0}",workerThreads); 137 m_log.InfoFormat("[OPENSIM MAIN]: Limiting max worker threads to {0}",workerThreads);
126 } 138 }
139
127 // Increase the number of IOCP threads available. 140 // Increase the number of IOCP threads available.
128 // Mono defaults to a tragically low number (24 on 6-core / 8GB Fedora 17) 141 // Mono defaults to a tragically low number (24 on 6-core / 8GB Fedora 17)
129 if (iocpThreads < iocpThreadsMin) 142 if (iocpThreads < iocpThreadsMin)
130 { 143 {
131 iocpThreads = iocpThreadsMin; 144 iocpThreads = iocpThreadsMin;
132 m_log.InfoFormat("[OPENSIM MAIN]: Bumping up IO completion threads to {0}",iocpThreads); 145 m_log.InfoFormat("[OPENSIM MAIN]: Bumping up max IOCP threads to {0}",iocpThreads);
133 } 146 }
134 // Make sure we don't overallocate IOCP threads and thrash system resources 147 // Make sure we don't overallocate IOCP threads and thrash system resources
135 if ( iocpThreads > iocpThreadsMax ) 148 if ( iocpThreads > iocpThreadsMax )
136 { 149 {
137 iocpThreads = iocpThreadsMax; 150 iocpThreads = iocpThreadsMax;
138 m_log.InfoFormat("[OPENSIM MAIN]: Limiting IO completion threads to {0}",iocpThreads); 151 m_log.InfoFormat("[OPENSIM MAIN]: Limiting max IOCP completion threads to {0}",iocpThreads);
139 } 152 }
140 // set the resulting worker and IO completion thread counts back to ThreadPool 153 // set the resulting worker and IO completion thread counts back to ThreadPool
141 if ( System.Threading.ThreadPool.SetMaxThreads(workerThreads, iocpThreads) ) 154 if ( System.Threading.ThreadPool.SetMaxThreads(workerThreads, iocpThreads) )
142 { 155 {
143 m_log.InfoFormat("[OPENSIM MAIN]: Threadpool set to {0} worker threads and {1} IO completion threads", workerThreads, iocpThreads); 156 m_log.InfoFormat(
157 "[OPENSIM MAIN]: Threadpool set to {0} max worker threads and {1} max IOCP threads",
158 workerThreads, iocpThreads);
144 } 159 }
145 else 160 else
146 { 161 {
147 m_log.Info("[OPENSIM MAIN]: Threadpool reconfiguration failed, runtime defaults still in effect."); 162 m_log.Warn("[OPENSIM MAIN]: Threadpool reconfiguration failed, runtime defaults still in effect.");
148 } 163 }
149 164
150 // Check if the system is compatible with OpenSimulator. 165 // Check if the system is compatible with OpenSimulator.
@@ -152,17 +167,16 @@ namespace OpenSim
152 string supported = String.Empty; 167 string supported = String.Empty;
153 if (Util.IsEnvironmentSupported(ref supported)) 168 if (Util.IsEnvironmentSupported(ref supported))
154 { 169 {
155 m_log.Info("Environment is compatible.\n"); 170 m_log.Info("[OPENSIM MAIN]: Environment is supported by OpenSimulator.");
156 } 171 }
157 else 172 else
158 { 173 {
159 m_log.Warn("Environment is unsupported (" + supported + ")\n"); 174 m_log.Warn("[OPENSIM MAIN]: Environment is not supported by OpenSimulator (" + supported + ")\n");
160 } 175 }
161 176
162 // Configure nIni aliases and localles 177 // Configure nIni aliases and localles
163 Culture.SetCurrentCulture(); 178 Culture.SetCurrentCulture();
164 179
165
166 // Validate that the user has the most basic configuration done 180 // Validate that the user has the most basic configuration done
167 // If not, offer to do the most basic configuration for them warning them along the way of the importance of 181 // If not, offer to do the most basic configuration for them warning them along the way of the importance of
168 // reading these files. 182 // reading these files.
diff --git a/OpenSim/Region/Application/ConfigurationLoader.cs b/OpenSim/Region/Application/ConfigurationLoader.cs
index fc3999f..bc7ecb7 100644
--- a/OpenSim/Region/Application/ConfigurationLoader.cs
+++ b/OpenSim/Region/Application/ConfigurationLoader.cs
@@ -201,11 +201,11 @@ namespace OpenSim
201 201
202 envConfigSource.LoadEnv(); 202 envConfigSource.LoadEnv();
203 m_config.Source.Merge(envConfigSource); 203 m_config.Source.Merge(envConfigSource);
204 m_config.Source.ExpandKeyValues();
205 } 204 }
206 205
207
208 ReadConfigSettings(); 206 ReadConfigSettings();
207
208 m_config.Source.ExpandKeyValues();
209 209
210 return m_config; 210 return m_config;
211 } 211 }
@@ -337,7 +337,6 @@ namespace OpenSim
337 config.Set("physics", "OpenDynamicsEngine"); 337 config.Set("physics", "OpenDynamicsEngine");
338 config.Set("meshing", "Meshmerizer"); 338 config.Set("meshing", "Meshmerizer");
339 config.Set("physical_prim", true); 339 config.Set("physical_prim", true);
340 config.Set("see_into_this_sim_from_neighbor", true);
341 config.Set("serverside_object_permissions", true); 340 config.Set("serverside_object_permissions", true);
342 config.Set("storage_plugin", "OpenSim.Data.SQLite.dll"); 341 config.Set("storage_plugin", "OpenSim.Data.SQLite.dll");
343 config.Set("storage_connection_string", "URI=file:OpenSim.db,version=3"); 342 config.Set("storage_connection_string", "URI=file:OpenSim.db,version=3");
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs
index a7e7d03..a18a6fe 100644
--- a/OpenSim/Region/Application/OpenSim.cs
+++ b/OpenSim/Region/Application/OpenSim.cs
@@ -86,6 +86,7 @@ namespace OpenSim
86 IConfig startupConfig = Config.Configs["Startup"]; 86 IConfig startupConfig = Config.Configs["Startup"];
87 IConfig networkConfig = Config.Configs["Network"]; 87 IConfig networkConfig = Config.Configs["Network"];
88 88
89 int stpMinThreads = 2;
89 int stpMaxThreads = 15; 90 int stpMaxThreads = 15;
90 91
91 if (startupConfig != null) 92 if (startupConfig != null)
@@ -112,12 +113,13 @@ namespace OpenSim
112 if (!String.IsNullOrEmpty(asyncCallMethodStr) && Utils.EnumTryParse<FireAndForgetMethod>(asyncCallMethodStr, out asyncCallMethod)) 113 if (!String.IsNullOrEmpty(asyncCallMethodStr) && Utils.EnumTryParse<FireAndForgetMethod>(asyncCallMethodStr, out asyncCallMethod))
113 Util.FireAndForgetMethod = asyncCallMethod; 114 Util.FireAndForgetMethod = asyncCallMethod;
114 115
116 stpMinThreads = startupConfig.GetInt("MinPoolThreads", 15);
115 stpMaxThreads = startupConfig.GetInt("MaxPoolThreads", 15); 117 stpMaxThreads = startupConfig.GetInt("MaxPoolThreads", 15);
116 m_consolePrompt = startupConfig.GetString("ConsolePrompt", @"Region (\R) "); 118 m_consolePrompt = startupConfig.GetString("ConsolePrompt", @"Region (\R) ");
117 } 119 }
118 120
119 if (Util.FireAndForgetMethod == FireAndForgetMethod.SmartThreadPool) 121 if (Util.FireAndForgetMethod == FireAndForgetMethod.SmartThreadPool)
120 Util.InitThreadPool(stpMaxThreads); 122 Util.InitThreadPool(stpMinThreads, stpMaxThreads);
121 123
122 m_log.Info("[OPENSIM MAIN]: Using async_call_method " + Util.FireAndForgetMethod); 124 m_log.Info("[OPENSIM MAIN]: Using async_call_method " + Util.FireAndForgetMethod);
123 } 125 }
@@ -170,6 +172,13 @@ namespace OpenSim
170 if (userStatsURI != String.Empty) 172 if (userStatsURI != String.Empty)
171 MainServer.Instance.AddStreamHandler(new OpenSim.UXSimStatusHandler(this)); 173 MainServer.Instance.AddStreamHandler(new OpenSim.UXSimStatusHandler(this));
172 174
175 if (managedStatsURI != String.Empty)
176 {
177 string urlBase = String.Format("/{0}/", managedStatsURI);
178 MainServer.Instance.AddHTTPHandler(urlBase, StatsManager.HandleStatsRequest);
179 m_log.InfoFormat("[OPENSIM] Enabling remote managed stats fetch. URL = {0}", urlBase);
180 }
181
173 if (m_console is RemoteConsole) 182 if (m_console is RemoteConsole)
174 { 183 {
175 if (m_consolePort == 0) 184 if (m_consolePort == 0)
@@ -226,18 +235,6 @@ namespace OpenSim
226 "Force the update of all objects on clients", 235 "Force the update of all objects on clients",
227 HandleForceUpdate); 236 HandleForceUpdate);
228 237
229 m_console.Commands.AddCommand("Debug", false, "debug packet",
230 "debug packet <level> [<avatar-first-name> <avatar-last-name>]",
231 "Turn on packet debugging",
232 "If level > 255 then all incoming and outgoing packets are logged.\n"
233 + "If level <= 255 then incoming AgentUpdate and outgoing SimStats and SimulatorViewerTimeMessage packets are not logged.\n"
234 + "If level <= 200 then incoming RequestImage and outgoing ImagePacket, ImageData, LayerData and CoarseLocationUpdate packets are not logged.\n"
235 + "If level <= 100 then incoming ViewerEffect and AgentAnimation and outgoing ViewerEffect and AvatarAnimation packets are not logged.\n"
236 + "If level <= 50 then outgoing ImprovedTerseObjectUpdate packets are not logged.\n"
237 + "If level <= 0 then no packets are logged.\n"
238 + "If an avatar name is given then only packets from that avatar are logged",
239 Debug);
240
241 m_console.Commands.AddCommand("General", false, "change region", 238 m_console.Commands.AddCommand("General", false, "change region",
242 "change region <region name>", 239 "change region <region name>",
243 "Change current console region", ChangeSelectedRegion); 240 "Change current console region", ChangeSelectedRegion);
@@ -358,21 +355,9 @@ namespace OpenSim
358 m_console.Commands.AddCommand("Regions", false, "delete-region", 355 m_console.Commands.AddCommand("Regions", false, "delete-region",
359 "delete-region <name>", 356 "delete-region <name>",
360 "Delete a region from disk", RunCommand); 357 "Delete a region from disk", RunCommand);
361
362 m_console.Commands.AddCommand("General", false, "modules list",
363 "modules list",
364 "List modules", HandleModules);
365
366 m_console.Commands.AddCommand("General", false, "modules load",
367 "modules load <name>",
368 "Load a module", HandleModules);
369
370 m_console.Commands.AddCommand("General", false, "modules unload",
371 "modules unload <name>",
372 "Unload a module", HandleModules);
373 } 358 }
374 359
375 public override void ShutdownSpecific() 360 protected override void ShutdownSpecific()
376 { 361 {
377 if (m_shutdownCommandsFile != String.Empty) 362 if (m_shutdownCommandsFile != String.Empty)
378 { 363 {
@@ -435,8 +420,8 @@ namespace OpenSim
435 { 420 {
436 RegionInfo regionInfo = presence.Scene.RegionInfo; 421 RegionInfo regionInfo = presence.Scene.RegionInfo;
437 422
438 if (presence.Firstname.ToLower().Contains(mainParams[2].ToLower()) && 423 if (presence.Firstname.ToLower().Equals(mainParams[2].ToLower()) &&
439 presence.Lastname.ToLower().Contains(mainParams[3].ToLower())) 424 presence.Lastname.ToLower().Equals(mainParams[3].ToLower()))
440 { 425 {
441 MainConsole.Instance.Output( 426 MainConsole.Instance.Output(
442 String.Format( 427 String.Format(
@@ -450,6 +435,7 @@ namespace OpenSim
450 presence.ControllingClient.Kick("\nYou have been logged out by an administrator.\n"); 435 presence.ControllingClient.Kick("\nYou have been logged out by an administrator.\n");
451 436
452 presence.Scene.IncomingCloseAgent(presence.UUID, force); 437 presence.Scene.IncomingCloseAgent(presence.UUID, force);
438 break;
453 } 439 }
454 } 440 }
455 441
@@ -566,34 +552,6 @@ namespace OpenSim
566 } 552 }
567 553
568 /// <summary> 554 /// <summary>
569 /// Load, Unload, and list Region modules in use
570 /// </summary>
571 /// <param name="module"></param>
572 /// <param name="cmd"></param>
573 private void HandleModules(string module, string[] cmd)
574 {
575 List<string> args = new List<string>(cmd);
576 args.RemoveAt(0);
577 string[] cmdparams = args.ToArray();
578
579 if (cmdparams.Length > 0)
580 {
581 switch (cmdparams[0].ToLower())
582 {
583 case "list":
584 //TODO: Convert to new region modules
585 break;
586 case "unload":
587 //TODO: Convert to new region modules
588 break;
589 case "load":
590 //TODO: Convert to new region modules
591 break;
592 }
593 }
594 }
595
596 /// <summary>
597 /// Runs commands issued by the server console from the operator 555 /// Runs commands issued by the server console from the operator
598 /// </summary> 556 /// </summary>
599 /// <param name="command">The first argument of the parameter (the command)</param> 557 /// <param name="command">The first argument of the parameter (the command)</param>
@@ -701,45 +659,6 @@ namespace OpenSim
701 RefreshPrompt(); 659 RefreshPrompt();
702 } 660 }
703 661
704 /// <summary>
705 /// Turn on some debugging values for OpenSim.
706 /// </summary>
707 /// <param name="args"></param>
708 protected void Debug(string module, string[] args)
709 {
710 if (args.Length == 1)
711 return;
712
713 switch (args[1])
714 {
715 case "packet":
716 string name = null;
717 if (args.Length == 5)
718 name = string.Format("{0} {1}", args[3], args[4]);
719
720 if (args.Length > 2)
721 {
722 int newDebug;
723 if (int.TryParse(args[2], out newDebug))
724 {
725 SceneManager.SetDebugPacketLevelOnCurrentScene(newDebug, name);
726 // We provide user information elsewhere if any clients had their debug level set.
727// MainConsole.Instance.OutputFormat("Debug packet level set to {0}", newDebug);
728 }
729 else
730 {
731 MainConsole.Instance.Output("Usage: debug packet 0..255");
732 }
733 }
734
735 break;
736
737 default:
738 MainConsole.Instance.Output("Unknown debug command");
739 break;
740 }
741 }
742
743 // see BaseOpenSimServer 662 // see BaseOpenSimServer
744 /// <summary> 663 /// <summary>
745 /// Many commands list objects for debugging. Some of the types are listed here 664 /// Many commands list objects for debugging. Some of the types are listed here
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index 88bd869..4891c1a 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -75,6 +75,7 @@ namespace OpenSim
75 protected int proxyOffset = 0; 75 protected int proxyOffset = 0;
76 76
77 public string userStatsURI = String.Empty; 77 public string userStatsURI = String.Empty;
78 public string managedStatsURI = String.Empty;
78 79
79 protected bool m_autoCreateClientStack = true; 80 protected bool m_autoCreateClientStack = true;
80 81
@@ -199,6 +200,8 @@ namespace OpenSim
199 new string[] { "Startup", "Permissions" }, "DefaultPermissionsModule"); 200 new string[] { "Startup", "Permissions" }, "DefaultPermissionsModule");
200 201
201 m_permsModules = new List<string>(permissionModules.Split(',')); 202 m_permsModules = new List<string>(permissionModules.Split(','));
203
204 managedStatsURI = startupConfig.GetString("ManagedStatsRemoteFetchURI", String.Empty);
202 } 205 }
203 206
204 // Load the simulation data service 207 // Load the simulation data service
@@ -248,10 +251,7 @@ namespace OpenSim
248 } 251 }
249 252
250 if (m_console != null) 253 if (m_console != null)
251 {
252 StatsManager.RegisterConsoleCommands(m_console);
253 AddPluginCommands(m_console); 254 AddPluginCommands(m_console);
254 }
255 } 255 }
256 256
257 protected virtual void AddPluginCommands(ICommandConsole console) 257 protected virtual void AddPluginCommands(ICommandConsole console)
@@ -496,9 +496,6 @@ namespace OpenSim
496 scene.SnmpService.LinkUp(scene); 496 scene.SnmpService.LinkUp(scene);
497 } 497 }
498 498
499 scene.Start();
500 scene.StartScripts();
501
502 return clientServers; 499 return clientServers;
503 } 500 }
504 501
@@ -813,7 +810,7 @@ namespace OpenSim
813 810
814 if (foundClientServer) 811 if (foundClientServer)
815 { 812 {
816 m_clientServers[clientServerElement].NetworkStop(); 813 m_clientServers[clientServerElement].Stop();
817 m_clientServers.RemoveAt(clientServerElement); 814 m_clientServers.RemoveAt(clientServerElement);
818 } 815 }
819 } 816 }
@@ -827,6 +824,7 @@ namespace OpenSim
827 ShutdownClientServer(whichRegion); 824 ShutdownClientServer(whichRegion);
828 IScene scene; 825 IScene scene;
829 CreateRegion(whichRegion, true, out scene); 826 CreateRegion(whichRegion, true, out scene);
827 scene.Start();
830 } 828 }
831 829
832 # region Setup methods 830 # region Setup methods
@@ -840,73 +838,49 @@ namespace OpenSim
840 /// <summary> 838 /// <summary>
841 /// Handler to supply the current status of this sim 839 /// Handler to supply the current status of this sim
842 /// </summary> 840 /// </summary>
841 /// <remarks>
843 /// Currently this is always OK if the simulator is still listening for connections on its HTTP service 842 /// Currently this is always OK if the simulator is still listening for connections on its HTTP service
844 public class SimStatusHandler : IStreamedRequestHandler 843 /// </remarks>
844 public class SimStatusHandler : BaseStreamHandler
845 { 845 {
846 public byte[] Handle(string path, Stream request, 846 public SimStatusHandler() : base("GET", "/simstatus", "SimStatus", "Simulator Status") {}
847
848 protected override byte[] ProcessRequest(string path, Stream request,
847 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) 849 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
848 { 850 {
849 return Util.UTF8.GetBytes("OK"); 851 return Util.UTF8.GetBytes("OK");
850 } 852 }
851 853
852 public string Name { get { return "SimStatus"; } } 854 public override string ContentType
853 public string Description { get { return "Simulator Status"; } }
854
855 public string ContentType
856 { 855 {
857 get { return "text/plain"; } 856 get { return "text/plain"; }
858 } 857 }
859
860 public string HttpMethod
861 {
862 get { return "GET"; }
863 }
864
865 public string Path
866 {
867 get { return "/simstatus"; }
868 }
869 } 858 }
870 859
871 /// <summary> 860 /// <summary>
872 /// Handler to supply the current extended status of this sim 861 /// Handler to supply the current extended status of this sim
873 /// Sends the statistical data in a json serialization 862 /// Sends the statistical data in a json serialization
874 /// </summary> 863 /// </summary>
875 public class XSimStatusHandler : IStreamedRequestHandler 864 public class XSimStatusHandler : BaseStreamHandler
876 { 865 {
877 OpenSimBase m_opensim; 866 OpenSimBase m_opensim;
878 string osXStatsURI = String.Empty;
879
880 public string Name { get { return "XSimStatus"; } }
881 public string Description { get { return "Simulator XStatus"; } }
882 867
883 public XSimStatusHandler(OpenSimBase sim) 868 public XSimStatusHandler(OpenSimBase sim)
869 : base("GET", "/" + Util.SHA1Hash(sim.osSecret), "XSimStatus", "Simulator XStatus")
884 { 870 {
885 m_opensim = sim; 871 m_opensim = sim;
886 osXStatsURI = Util.SHA1Hash(sim.osSecret);
887 } 872 }
888 873
889 public byte[] Handle(string path, Stream request, 874 protected override byte[] ProcessRequest(string path, Stream request,
890 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) 875 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
891 { 876 {
892 return Util.UTF8.GetBytes(m_opensim.StatReport(httpRequest)); 877 return Util.UTF8.GetBytes(m_opensim.StatReport(httpRequest));
893 } 878 }
894 879
895 public string ContentType 880 public override string ContentType
896 { 881 {
897 get { return "text/plain"; } 882 get { return "text/plain"; }
898 } 883 }
899
900 public string HttpMethod
901 {
902 get { return "GET"; }
903 }
904
905 public string Path
906 {
907 // This is for the OpenSimulator instance and is the osSecret hashed
908 get { return "/" + osXStatsURI; }
909 }
910 } 884 }
911 885
912 /// <summary> 886 /// <summary>
@@ -915,42 +889,26 @@ namespace OpenSim
915 /// If the request contains a key, "callback" the response will be wrappend in the 889 /// If the request contains a key, "callback" the response will be wrappend in the
916 /// associated value for jsonp used with ajax/javascript 890 /// associated value for jsonp used with ajax/javascript
917 /// </summary> 891 /// </summary>
918 public class UXSimStatusHandler : IStreamedRequestHandler 892 protected class UXSimStatusHandler : BaseStreamHandler
919 { 893 {
920 OpenSimBase m_opensim; 894 OpenSimBase m_opensim;
921 string osUXStatsURI = String.Empty;
922
923 public string Name { get { return "UXSimStatus"; } }
924 public string Description { get { return "Simulator UXStatus"; } }
925 895
926 public UXSimStatusHandler(OpenSimBase sim) 896 public UXSimStatusHandler(OpenSimBase sim)
897 : base("GET", "/" + sim.userStatsURI, "UXSimStatus", "Simulator UXStatus")
927 { 898 {
928 m_opensim = sim; 899 m_opensim = sim;
929 osUXStatsURI = sim.userStatsURI;
930
931 } 900 }
932 901
933 public byte[] Handle(string path, Stream request, 902 protected override byte[] ProcessRequest(string path, Stream request,
934 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) 903 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
935 { 904 {
936 return Util.UTF8.GetBytes(m_opensim.StatReport(httpRequest)); 905 return Util.UTF8.GetBytes(m_opensim.StatReport(httpRequest));
937 } 906 }
938 907
939 public string ContentType 908 public override string ContentType
940 { 909 {
941 get { return "text/plain"; } 910 get { return "text/plain"; }
942 } 911 }
943
944 public string HttpMethod
945 {
946 get { return "GET"; }
947 }
948
949 public string Path
950 {
951 // This is for the OpenSimulator instance and is the user provided URI
952 get { return "/" + osUXStatsURI; }
953 }
954 } 912 }
955 913
956 #endregion 914 #endregion
@@ -958,7 +916,7 @@ namespace OpenSim
958 /// <summary> 916 /// <summary>
959 /// Performs any last-minute sanity checking and shuts down the region server 917 /// Performs any last-minute sanity checking and shuts down the region server
960 /// </summary> 918 /// </summary>
961 public override void ShutdownSpecific() 919 protected override void ShutdownSpecific()
962 { 920 {
963 if (proxyUrl.Length > 0) 921 if (proxyUrl.Length > 0)
964 { 922 {
@@ -978,6 +936,8 @@ namespace OpenSim
978 { 936 {
979 m_log.Error("[SHUTDOWN]: Ignoring failure during shutdown - ", e); 937 m_log.Error("[SHUTDOWN]: Ignoring failure during shutdown - ", e);
980 } 938 }
939
940 base.ShutdownSpecific();
981 } 941 }
982 942
983 /// <summary> 943 /// <summary>