aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Server/Base
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Server/Base/HttpServerBase.cs39
-rw-r--r--OpenSim/Server/Base/Properties/AssemblyInfo.cs4
-rw-r--r--OpenSim/Server/Base/ProtocolVersions.cs8
-rw-r--r--OpenSim/Server/Base/ServerUtils.cs53
-rw-r--r--OpenSim/Server/Base/ServicesServerBase.cs74
5 files changed, 87 insertions, 91 deletions
diff --git a/OpenSim/Server/Base/HttpServerBase.cs b/OpenSim/Server/Base/HttpServerBase.cs
index 954783c..44ef124 100644
--- a/OpenSim/Server/Base/HttpServerBase.cs
+++ b/OpenSim/Server/Base/HttpServerBase.cs
@@ -56,15 +56,16 @@ namespace OpenSim.Server.Base
56 56
57 if (networkConfig == null) 57 if (networkConfig == null)
58 { 58 {
59 System.Console.WriteLine("Section 'Network' not found, server can't start"); 59 System.Console.WriteLine("ERROR: Section [Network] not found, server can't start");
60 Thread.CurrentThread.Abort(); 60 Environment.Exit(1);
61 } 61 }
62 62
63 uint port = (uint)networkConfig.GetInt("port", 0); 63 uint port = (uint)networkConfig.GetInt("port", 0);
64 64
65 if (port == 0) 65 if (port == 0)
66 { 66 {
67 Thread.CurrentThread.Abort(); 67 System.Console.WriteLine("ERROR: No 'port' entry found in [Network]. Server can't start");
68 Environment.Exit(1);
68 } 69 }
69 70
70 bool ssl_main = networkConfig.GetBoolean("https_main",false); 71 bool ssl_main = networkConfig.GetBoolean("https_main",false);
@@ -83,23 +84,24 @@ namespace OpenSim.Server.Base
83 // Then, check for https settings and ADD a server to 84 // Then, check for https settings and ADD a server to
84 // m_Servers 85 // m_Servers
85 // 86 //
86 if ( !ssl_main ) 87 if (!ssl_main)
87 { 88 {
88 httpServer = new BaseHttpServer(port); 89 httpServer = new BaseHttpServer(port);
89 } 90 }
90 else 91 else
91 { 92 {
92 string cert_path = networkConfig.GetString("cert_path",String.Empty); 93 string cert_path = networkConfig.GetString("cert_path",String.Empty);
93 if ( cert_path == String.Empty ) 94 if (cert_path == String.Empty)
94 { 95 {
95 System.Console.WriteLine("Path to X509 certificate is missing, server can't start."); 96 System.Console.WriteLine("ERROR: Path to X509 certificate is missing, server can't start.");
96 Thread.CurrentThread.Abort(); 97 Environment.Exit(1);
97 } 98 }
99
98 string cert_pass = networkConfig.GetString("cert_pass",String.Empty); 100 string cert_pass = networkConfig.GetString("cert_pass",String.Empty);
99 if ( cert_pass == String.Empty ) 101 if (cert_pass == String.Empty)
100 { 102 {
101 System.Console.WriteLine("Password for X509 certificate is missing, server can't start."); 103 System.Console.WriteLine("ERROR: Password for X509 certificate is missing, server can't start.");
102 Thread.CurrentThread.Abort(); 104 Environment.Exit(1);
103 } 105 }
104 106
105 httpServer = new BaseHttpServer(port, ssl_main, cert_path, cert_pass); 107 httpServer = new BaseHttpServer(port, ssl_main, cert_path, cert_pass);
@@ -109,21 +111,22 @@ namespace OpenSim.Server.Base
109 MainServer.Instance = httpServer; 111 MainServer.Instance = httpServer;
110 112
111 // If https_listener = true, then add an ssl listener on the https_port... 113 // If https_listener = true, then add an ssl listener on the https_port...
112 if ( ssl_listener == true ) { 114 if (ssl_listener == true)
113 115 {
114 uint https_port = (uint)networkConfig.GetInt("https_port", 0); 116 uint https_port = (uint)networkConfig.GetInt("https_port", 0);
115 117
116 string cert_path = networkConfig.GetString("cert_path",String.Empty); 118 string cert_path = networkConfig.GetString("cert_path",String.Empty);
117 if ( cert_path == String.Empty ) 119 if (cert_path == String.Empty)
118 { 120 {
119 System.Console.WriteLine("Path to X509 certificate is missing, server can't start."); 121 System.Console.WriteLine("ERROR: Path to X509 certificate is missing, server can't start.");
120 Thread.CurrentThread.Abort(); 122 Environment.Exit(1);
121 } 123 }
124
122 string cert_pass = networkConfig.GetString("cert_pass",String.Empty); 125 string cert_pass = networkConfig.GetString("cert_pass",String.Empty);
123 if ( cert_pass == String.Empty ) 126 if (cert_pass == String.Empty)
124 { 127 {
125 System.Console.WriteLine("Password for X509 certificate is missing, server can't start."); 128 System.Console.WriteLine("ERROR: Password for X509 certificate is missing, server can't start.");
126 Thread.CurrentThread.Abort(); 129 Environment.Exit(1);
127 } 130 }
128 131
129 MainServer.AddHttpServer(new BaseHttpServer(https_port, ssl_listener, cert_path, cert_pass)); 132 MainServer.AddHttpServer(new BaseHttpServer(https_port, ssl_listener, cert_path, cert_pass));
diff --git a/OpenSim/Server/Base/Properties/AssemblyInfo.cs b/OpenSim/Server/Base/Properties/AssemblyInfo.cs
index 4bbe358..3c634a7 100644
--- a/OpenSim/Server/Base/Properties/AssemblyInfo.cs
+++ b/OpenSim/Server/Base/Properties/AssemblyInfo.cs
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
29// Build Number 29// Build Number
30// Revision 30// Revision
31// 31//
32[assembly: AssemblyVersion("0.7.5.*")] 32[assembly: AssemblyVersion("0.8.3.*")]
33[assembly: AssemblyFileVersion("1.0.0.0")] 33
diff --git a/OpenSim/Server/Base/ProtocolVersions.cs b/OpenSim/Server/Base/ProtocolVersions.cs
index 8db5bb6..5c2278c 100644
--- a/OpenSim/Server/Base/ProtocolVersions.cs
+++ b/OpenSim/Server/Base/ProtocolVersions.cs
@@ -46,11 +46,11 @@ namespace OpenSim.Server.Base
46 /// </value> 46 /// </value>
47 47
48 // The range of acceptable servers for client-side connectors 48 // The range of acceptable servers for client-side connectors
49 public readonly static int ClientProtocolVersionMin = 0; 49 public readonly static int ClientProtocolVersionMin = 1;
50 public readonly static int ClientProtocolVersionMax = 0; 50 public readonly static int ClientProtocolVersionMax = 1;
51 51
52 // The range of acceptable clients in server-side handlers 52 // The range of acceptable clients in server-side handlers
53 public readonly static int ServerProtocolVersionMin = 0; 53 public readonly static int ServerProtocolVersionMin = 1;
54 public readonly static int ServerProtocolVersionMax = 0; 54 public readonly static int ServerProtocolVersionMax = 1;
55 } 55 }
56} 56}
diff --git a/OpenSim/Server/Base/ServerUtils.cs b/OpenSim/Server/Base/ServerUtils.cs
index 2e6d279..18a4266 100644
--- a/OpenSim/Server/Base/ServerUtils.cs
+++ b/OpenSim/Server/Base/ServerUtils.cs
@@ -41,7 +41,7 @@ using OpenSim.Framework.Servers.HttpServer;
41using OpenSim.Framework.Servers; 41using OpenSim.Framework.Servers;
42 42
43 43
44[assembly:AddinRoot("Robust", "0.1")] 44[assembly:AddinRoot("Robust", OpenSim.VersionInfo.VersionNumber)]
45namespace OpenSim.Server.Base 45namespace OpenSim.Server.Base
46{ 46{
47 [TypeExtensionPoint(Path="/Robust/Connector", Name="RobustConnector")] 47 [TypeExtensionPoint(Path="/Robust/Connector", Name="RobustConnector")]
@@ -89,9 +89,9 @@ namespace OpenSim.Server.Base
89 Config = config; 89 Config = config;
90 90
91 Registry = new AddinRegistry(registryPath, "."); 91 Registry = new AddinRegistry(registryPath, ".");
92 suppress_console_output_(true); 92 //suppress_console_output_(true);
93 AddinManager.Initialize(registryPath); 93 AddinManager.Initialize(registryPath);
94 suppress_console_output_(false); 94 //suppress_console_output_(false);
95 AddinManager.Registry.Update(); 95 AddinManager.Registry.Update();
96 CommandManager commandmanager = new CommandManager(Registry); 96 CommandManager commandmanager = new CommandManager(Registry);
97 AddinManager.AddExtensionNodeHandler("/Robust/Connector", OnExtensionChanged); 97 AddinManager.AddExtensionNodeHandler("/Robust/Connector", OnExtensionChanged);
@@ -138,17 +138,17 @@ namespace OpenSim.Server.Base
138 case ExtensionChange.Add: 138 case ExtensionChange.Add:
139 if (a.AddinFile.Contains(Registry.DefaultAddinsFolder)) 139 if (a.AddinFile.Contains(Registry.DefaultAddinsFolder))
140 { 140 {
141 m_log.InfoFormat("[SERVER]: Adding {0} from registry", a.Name); 141 m_log.InfoFormat("[SERVER UTILS]: Adding {0} from registry", a.Name);
142 connector.PluginPath = System.IO.Path.Combine(Registry.DefaultAddinsFolder,a.Name.Replace(',', '.')); } 142 connector.PluginPath = System.IO.Path.Combine(Registry.DefaultAddinsFolder,a.Name.Replace(',', '.')); }
143 else 143 else
144 { 144 {
145 m_log.InfoFormat("[SERVER]: Adding {0} from ./bin", a.Name); 145 m_log.InfoFormat("[SERVER UTILS]: Adding {0} from ./bin", a.Name);
146 connector.PluginPath = a.AddinFile; 146 connector.PluginPath = a.AddinFile;
147 } 147 }
148 LoadPlugin(connector); 148 LoadPlugin(connector);
149 break; 149 break;
150 case ExtensionChange.Remove: 150 case ExtensionChange.Remove:
151 m_log.InfoFormat("[SERVER]: Removing {0}", a.Name); 151 m_log.InfoFormat("[SERVER UTILS]: Removing {0}", a.Name);
152 UnloadPlugin(connector); 152 UnloadPlugin(connector);
153 break; 153 break;
154 } 154 }
@@ -166,13 +166,13 @@ namespace OpenSim.Server.Base
166 } 166 }
167 else 167 else
168 { 168 {
169 m_log.InfoFormat("[SERVER]: {0} Disabled.", connector.ConfigName); 169 m_log.InfoFormat("[SERVER UTILS]: {0} Disabled.", connector.ConfigName);
170 } 170 }
171 } 171 }
172 172
173 private void UnloadPlugin(IRobustConnector connector) 173 private void UnloadPlugin(IRobustConnector connector)
174 { 174 {
175 m_log.InfoFormat("[Server]: Unloading {0}", connector.ConfigName); 175 m_log.InfoFormat("[SERVER UTILS]: Unloading {0}", connector.ConfigName);
176 176
177 connector.Unload(); 177 connector.Unload();
178 } 178 }
@@ -196,17 +196,19 @@ namespace OpenSim.Server.Base
196 196
197 public static byte[] SerializeResult(XmlSerializer xs, object data) 197 public static byte[] SerializeResult(XmlSerializer xs, object data)
198 { 198 {
199 MemoryStream ms = new MemoryStream(); 199 using (MemoryStream ms = new MemoryStream())
200 XmlTextWriter xw = new XmlTextWriter(ms, Util.UTF8); 200 using (XmlTextWriter xw = new XmlTextWriter(ms, Util.UTF8))
201 xw.Formatting = Formatting.Indented; 201 {
202 xs.Serialize(xw, data); 202 xw.Formatting = Formatting.Indented;
203 xw.Flush(); 203 xs.Serialize(xw, data);
204 xw.Flush();
204 205
205 ms.Seek(0, SeekOrigin.Begin); 206 ms.Seek(0, SeekOrigin.Begin);
206 byte[] ret = ms.GetBuffer(); 207 byte[] ret = ms.GetBuffer();
207 Array.Resize(ref ret, (int)ms.Length); 208 Array.Resize(ref ret, (int)ms.Length);
208 209
209 return ret; 210 return ret;
211 }
210 } 212 }
211 213
212 /// <summary> 214 /// <summary>
@@ -266,7 +268,7 @@ namespace OpenSim.Server.Base
266 && pluginType.ToString() != pluginType.Namespace + "." + className) 268 && pluginType.ToString() != pluginType.Namespace + "." + className)
267 continue; 269 continue;
268 270
269 Type typeInterface = pluginType.GetInterface(interfaceName, true); 271 Type typeInterface = pluginType.GetInterface(interfaceName);
270 272
271 if (typeInterface != null) 273 if (typeInterface != null)
272 { 274 {
@@ -280,12 +282,13 @@ namespace OpenSim.Server.Base
280 { 282 {
281 if (!(e is System.MissingMethodException)) 283 if (!(e is System.MissingMethodException))
282 { 284 {
283 m_log.ErrorFormat("Error loading plugin {0} from {1}. Exception: {2}, {3}", 285 m_log.Error(string.Format("[SERVER UTILS]: Error loading plugin {0} from {1}. Exception: {2}",
284 interfaceName, 286 interfaceName,
285 dllName, 287 dllName,
286 e.InnerException == null ? e.Message : e.InnerException.Message, 288 e.InnerException == null ? e.Message : e.InnerException.Message),
287 e.StackTrace); 289 e);
288 } 290 }
291 m_log.ErrorFormat("[SERVER UTILS]: Error loading plugin {0}: {1} args.Length {2}", dllName, e.Message, args.Length);
289 return null; 292 return null;
290 } 293 }
291 294
@@ -298,14 +301,14 @@ namespace OpenSim.Server.Base
298 } 301 }
299 catch (ReflectionTypeLoadException rtle) 302 catch (ReflectionTypeLoadException rtle)
300 { 303 {
301 m_log.Error(string.Format("Error loading plugin from {0}:\n{1}", dllName, 304 m_log.Error(string.Format("[SERVER UTILS]: Error loading plugin from {0}:\n{1}", dllName,
302 String.Join("\n", Array.ConvertAll(rtle.LoaderExceptions, e => e.ToString()))), 305 String.Join("\n", Array.ConvertAll(rtle.LoaderExceptions, e => e.ToString()))),
303 rtle); 306 rtle);
304 return null; 307 return null;
305 } 308 }
306 catch (Exception e) 309 catch (Exception e)
307 { 310 {
308 m_log.Error(string.Format("Error loading plugin from {0}", dllName), e); 311 m_log.Error(string.Format("[SERVER UTILS]: Error loading plugin from {0}", dllName), e);
309 return null; 312 return null;
310 } 313 }
311 } 314 }
@@ -517,7 +520,7 @@ namespace OpenSim.Server.Base
517 public static IConfigSource LoadInitialConfig(string url) 520 public static IConfigSource LoadInitialConfig(string url)
518 { 521 {
519 IConfigSource source = new XmlConfigSource(); 522 IConfigSource source = new XmlConfigSource();
520 m_log.InfoFormat("[CONFIG]: {0} is a http:// URI, fetching ...", url); 523 m_log.InfoFormat("[SERVER UTILS]: {0} is a http:// URI, fetching ...", url);
521 524
522 // The ini file path is a http URI 525 // The ini file path is a http URI
523 // Try to read it 526 // Try to read it
@@ -529,7 +532,7 @@ namespace OpenSim.Server.Base
529 } 532 }
530 catch (Exception e) 533 catch (Exception e)
531 { 534 {
532 m_log.FatalFormat("[CONFIG]: Exception reading config from URI {0}\n" + e.ToString(), url); 535 m_log.FatalFormat("[SERVER UTILS]: Exception reading config from URI {0}\n" + e.ToString(), url);
533 Environment.Exit(1); 536 Environment.Exit(1);
534 } 537 }
535 538
diff --git a/OpenSim/Server/Base/ServicesServerBase.cs b/OpenSim/Server/Base/ServicesServerBase.cs
index ecd69b0..1f2c54d 100644
--- a/OpenSim/Server/Base/ServicesServerBase.cs
+++ b/OpenSim/Server/Base/ServicesServerBase.cs
@@ -34,6 +34,7 @@ using System.Text;
34using System.Xml; 34using System.Xml;
35using OpenSim.Framework; 35using OpenSim.Framework;
36using OpenSim.Framework.Console; 36using OpenSim.Framework.Console;
37using OpenSim.Framework.Monitoring;
37using OpenSim.Framework.Servers; 38using OpenSim.Framework.Servers;
38using log4net; 39using log4net;
39using log4net.Config; 40using log4net.Config;
@@ -48,9 +49,7 @@ namespace OpenSim.Server.Base
48 { 49 {
49 // Logger 50 // Logger
50 // 51 //
51 private static readonly ILog m_log = 52 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
52 LogManager.GetLogger(
53 MethodBase.GetCurrentMethod().DeclaringType);
54 53
55 // Command line args 54 // Command line args
56 // 55 //
@@ -71,11 +70,9 @@ namespace OpenSim.Server.Base
71 public ServicesServerBase(string prompt, string[] args) : base() 70 public ServicesServerBase(string prompt, string[] args) : base()
72 { 71 {
73 // Save raw arguments 72 // Save raw arguments
74 //
75 m_Arguments = args; 73 m_Arguments = args;
76 74
77 // Read command line 75 // Read command line
78 //
79 ArgvConfigSource argvConfig = new ArgvConfigSource(args); 76 ArgvConfigSource argvConfig = new ArgvConfigSource(args);
80 77
81 argvConfig.AddSwitch("Startup", "console", "c"); 78 argvConfig.AddSwitch("Startup", "console", "c");
@@ -85,8 +82,9 @@ namespace OpenSim.Server.Base
85 argvConfig.AddSwitch("Startup", "logconfig", "g"); 82 argvConfig.AddSwitch("Startup", "logconfig", "g");
86 83
87 // Automagically create the ini file name 84 // Automagically create the ini file name
88 // 85 string fileName = "";
89 string fileName = Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().Location); 86 if (Assembly.GetEntryAssembly() != null)
87 fileName = Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().Location);
90 string iniFile = fileName + ".ini"; 88 string iniFile = fileName + ".ini";
91 string logConfig = null; 89 string logConfig = null;
92 90
@@ -94,19 +92,17 @@ namespace OpenSim.Server.Base
94 if (startupConfig != null) 92 if (startupConfig != null)
95 { 93 {
96 // Check if a file name was given on the command line 94 // Check if a file name was given on the command line
97 //
98 iniFile = startupConfig.GetString("inifile", iniFile); 95 iniFile = startupConfig.GetString("inifile", iniFile);
99 // 96
100 // Check if a prompt was given on the command line 97 // Check if a prompt was given on the command line
101 prompt = startupConfig.GetString("prompt", prompt); 98 prompt = startupConfig.GetString("prompt", prompt);
102 // 99
103 // Check for a Log4Net config file on the command line 100 // Check for a Log4Net config file on the command line
104 logConfig =startupConfig.GetString("logconfig",logConfig); 101 logConfig =startupConfig.GetString("logconfig", logConfig);
105 } 102 }
106 103
107 // Find out of the file name is a URI and remote load it 104 // Find out of the file name is a URI and remote load it if possible.
108 // if it's possible. Load it as a local file otherwise. 105 // Load it as a local file otherwise.
109 //
110 Uri configUri; 106 Uri configUri;
111 107
112 try 108 try
@@ -128,13 +124,16 @@ namespace OpenSim.Server.Base
128 Environment.Exit(1); 124 Environment.Exit(1);
129 } 125 }
130 126
131 // Merge the configuration from the command line into the 127 // Merge OpSys env vars
132 // loaded file 128 m_log.Info("[CONFIG]: Loading environment variables for Config");
133 // 129 Util.MergeEnvironmentToConfig(Config);
130
131 // Merge the configuration from the command line into the loaded file
134 Config.Merge(argvConfig); 132 Config.Merge(argvConfig);
135 133
134 Config.ReplaceKeyValues();
135
136 // Refresh the startupConfig post merge 136 // Refresh the startupConfig post merge
137 //
138 if (Config.Configs["Startup"] != null) 137 if (Config.Configs["Startup"] != null)
139 { 138 {
140 startupConfig = Config.Configs["Startup"]; 139 startupConfig = Config.Configs["Startup"];
@@ -144,13 +143,10 @@ namespace OpenSim.Server.Base
144 143
145 prompt = startupConfig.GetString("Prompt", prompt); 144 prompt = startupConfig.GetString("Prompt", prompt);
146 145
147 // Allow derived classes to load config before the console is 146 // Allow derived classes to load config before the console is opened.
148 // opened.
149 //
150 ReadConfig(); 147 ReadConfig();
151 148
152 // Create main console 149 // Create main console
153 //
154 string consoleType = "local"; 150 string consoleType = "local";
155 if (startupConfig != null) 151 if (startupConfig != null)
156 consoleType = startupConfig.GetString("console", consoleType); 152 consoleType = startupConfig.GetString("console", consoleType);
@@ -164,18 +160,17 @@ namespace OpenSim.Server.Base
164 MainConsole.Instance = new RemoteConsole(prompt); 160 MainConsole.Instance = new RemoteConsole(prompt);
165 ((RemoteConsole)MainConsole.Instance).ReadConfig(Config); 161 ((RemoteConsole)MainConsole.Instance).ReadConfig(Config);
166 } 162 }
167 else 163 else if (consoleType == "mock")
164 {
165 MainConsole.Instance = new MockConsole();
166 }
167 else if (consoleType == "local")
168 { 168 {
169 MainConsole.Instance = new LocalConsole(prompt); 169 MainConsole.Instance = new LocalConsole(prompt, startupConfig);
170 } 170 }
171 171
172 m_console = MainConsole.Instance; 172 m_console = MainConsole.Instance;
173 173
174 // Configure the appenders for log4net
175 //
176 OpenSimAppender consoleAppender = null;
177 FileAppender fileAppender = null;
178
179 if (logConfig != null) 174 if (logConfig != null)
180 { 175 {
181 FileInfo cfg = new FileInfo(logConfig); 176 FileInfo cfg = new FileInfo(logConfig);
@@ -186,6 +181,7 @@ namespace OpenSim.Server.Base
186 XmlConfigurator.Configure(); 181 XmlConfigurator.Configure();
187 } 182 }
188 183
184 LogEnvironmentInformation();
189 RegisterCommonAppenders(startupConfig); 185 RegisterCommonAppenders(startupConfig);
190 186
191 if (startupConfig.GetString("PIDFile", String.Empty) != String.Empty) 187 if (startupConfig.GetString("PIDFile", String.Empty) != String.Empty)
@@ -194,20 +190,10 @@ namespace OpenSim.Server.Base
194 } 190 }
195 191
196 RegisterCommonCommands(); 192 RegisterCommonCommands();
197 193 RegisterCommonComponents(Config);
198 // Register the quit command
199 //
200 MainConsole.Instance.Commands.AddCommand("General", false, "quit",
201 "quit",
202 "Quit the application", HandleQuit);
203
204 MainConsole.Instance.Commands.AddCommand("General", false, "shutdown",
205 "shutdown",
206 "Quit the application", HandleQuit);
207 194
208 // Allow derived classes to perform initialization that 195 // Allow derived classes to perform initialization that
209 // needs to be done after the console has opened 196 // needs to be done after the console has opened
210 //
211 Initialise(); 197 Initialise();
212 } 198 }
213 199
@@ -218,6 +204,9 @@ namespace OpenSim.Server.Base
218 204
219 public virtual int Run() 205 public virtual int Run()
220 { 206 {
207 Watchdog.Enabled = true;
208 MemoryWatchdog.Enabled = true;
209
221 while (m_Running) 210 while (m_Running)
222 { 211 {
223 try 212 try
@@ -235,11 +224,12 @@ namespace OpenSim.Server.Base
235 return 0; 224 return 0;
236 } 225 }
237 226
238 protected virtual void HandleQuit(string module, string[] args) 227 protected override void ShutdownSpecific()
239 { 228 {
240 m_Running = false; 229 m_Running = false;
241 m_log.Info("[CONSOLE] Quitting"); 230 m_log.Info("[CONSOLE] Quitting");
242 231
232 base.ShutdownSpecific();
243 } 233 }
244 234
245 protected virtual void ReadConfig() 235 protected virtual void ReadConfig()
@@ -250,4 +240,4 @@ namespace OpenSim.Server.Base
250 { 240 {
251 } 241 }
252 } 242 }
253} 243} \ No newline at end of file