diff options
author | Melanie Thielker | 2009-02-07 12:25:39 +0000 |
---|---|---|
committer | Melanie Thielker | 2009-02-07 12:25:39 +0000 |
commit | 54c6a920baa0ef02a9ea09e08cc1effcef3b0a3a (patch) | |
tree | f606cbdbc383ec21fee28f0a1454140a1c714278 /OpenSim | |
parent | Thank you dslake for a patch that: (diff) | |
download | opensim-SC-54c6a920baa0ef02a9ea09e08cc1effcef3b0a3a.zip opensim-SC-54c6a920baa0ef02a9ea09e08cc1effcef3b0a3a.tar.gz opensim-SC-54c6a920baa0ef02a9ea09e08cc1effcef3b0a3a.tar.bz2 opensim-SC-54c6a920baa0ef02a9ea09e08cc1effcef3b0a3a.tar.xz |
Replace the console for all OpenSim apps with a new console featuring command
line editing, context sensitive help (press ? at any time), command line
history, a new plugin command system and new appender features thet let you
type while the console is scrolling. Seamlessly integrates the ICommander
interfaces.
Diffstat (limited to '')
23 files changed, 1471 insertions, 1035 deletions
diff --git a/OpenSim/Framework/Console/ConsoleBase.cs b/OpenSim/Framework/Console/ConsoleBase.cs index 30af23a..f990748 100644 --- a/OpenSim/Framework/Console/ConsoleBase.cs +++ b/OpenSim/Framework/Console/ConsoleBase.cs | |||
@@ -26,22 +26,250 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | 29 | using System.Text; |
30 | using System.Diagnostics; | ||
31 | using System.Net; | ||
32 | using System.Reflection; | 30 | using System.Reflection; |
33 | using System.Text.RegularExpressions; | 31 | using System.Diagnostics; |
32 | using System.Collections.Generic; | ||
34 | using log4net; | 33 | using log4net; |
35 | 34 | ||
36 | namespace OpenSim.Framework.Console | 35 | namespace OpenSim.Framework.Console |
37 | { | 36 | { |
37 | public delegate void CommandDelegate(string module, string[] cmd); | ||
38 | |||
39 | public class Commands | ||
40 | { | ||
41 | private class CommandInfo | ||
42 | { | ||
43 | public string module; | ||
44 | public string help_text; | ||
45 | public string long_help; | ||
46 | public CommandDelegate fn; | ||
47 | } | ||
48 | |||
49 | private Dictionary<string, Object> tree = | ||
50 | new Dictionary<string, Object>(); | ||
51 | |||
52 | public List<string> GetHelp() | ||
53 | { | ||
54 | List<string> help = new List<string>(); | ||
55 | |||
56 | help.AddRange(CollectHelp(tree)); | ||
57 | |||
58 | help.Sort(); | ||
59 | |||
60 | return help; | ||
61 | } | ||
62 | |||
63 | private List<string> CollectHelp(Dictionary<string, Object> dict) | ||
64 | { | ||
65 | List<string> result = new List<string>(); | ||
66 | |||
67 | foreach (KeyValuePair<string, object> kvp in dict) | ||
68 | { | ||
69 | if (kvp.Value is Dictionary<string, Object>) | ||
70 | { | ||
71 | result.AddRange(CollectHelp((Dictionary<string, Object>)kvp.Value)); | ||
72 | } | ||
73 | else | ||
74 | { | ||
75 | if (((CommandInfo)kvp.Value).long_help != String.Empty) | ||
76 | result.Add(((CommandInfo)kvp.Value).help_text+" - "+ | ||
77 | ((CommandInfo)kvp.Value).long_help); | ||
78 | } | ||
79 | } | ||
80 | return result; | ||
81 | } | ||
82 | |||
83 | public void AddCommand(string module, string command, string help, string longhelp, CommandDelegate fn) | ||
84 | { | ||
85 | string[] parts = Parser.Parse(command); | ||
86 | |||
87 | Dictionary<string, Object> current = tree; | ||
88 | foreach (string s in parts) | ||
89 | { | ||
90 | if (current.ContainsKey(s)) | ||
91 | { | ||
92 | if (current[s] is Dictionary<string, Object>) | ||
93 | { | ||
94 | current = (Dictionary<string, Object>)current[s]; | ||
95 | } | ||
96 | else | ||
97 | return; | ||
98 | } | ||
99 | else | ||
100 | { | ||
101 | current[s] = new Dictionary<string, Object>(); | ||
102 | current = (Dictionary<string, Object>)current[s]; | ||
103 | } | ||
104 | } | ||
105 | |||
106 | if (current.ContainsKey(String.Empty)) | ||
107 | return; | ||
108 | CommandInfo info = new CommandInfo(); | ||
109 | info.module = module; | ||
110 | info.help_text = help; | ||
111 | info.long_help = longhelp; | ||
112 | info.fn = fn; | ||
113 | current[String.Empty] = info; | ||
114 | } | ||
115 | |||
116 | public string[] FindNextOption(string[] cmd, bool term) | ||
117 | { | ||
118 | Dictionary<string, object> current = tree; | ||
119 | |||
120 | int remaining = cmd.Length; | ||
121 | |||
122 | foreach (string s in cmd) | ||
123 | { | ||
124 | remaining--; | ||
125 | |||
126 | List<string> found = new List<string>(); | ||
127 | |||
128 | foreach (string opt in current.Keys) | ||
129 | { | ||
130 | if (opt.StartsWith(s)) | ||
131 | { | ||
132 | found.Add(opt); | ||
133 | } | ||
134 | } | ||
135 | |||
136 | if (found.Count == 1 && (remaining != 0 || term)) | ||
137 | { | ||
138 | current = (Dictionary<string, object>)current[found[0]]; | ||
139 | } | ||
140 | else if (found.Count > 0) | ||
141 | { | ||
142 | return found.ToArray(); | ||
143 | } | ||
144 | else | ||
145 | { | ||
146 | break; | ||
147 | // return new string[] {"<cr>"}; | ||
148 | } | ||
149 | } | ||
150 | |||
151 | if (current.Count > 1) | ||
152 | { | ||
153 | List<string> choices = new List<string>(); | ||
154 | |||
155 | bool addcr = false; | ||
156 | foreach (string s in current.Keys) | ||
157 | { | ||
158 | if (s == String.Empty) | ||
159 | { | ||
160 | CommandInfo ci = (CommandInfo)current[String.Empty]; | ||
161 | if (ci.fn != null) | ||
162 | addcr = true; | ||
163 | } | ||
164 | else | ||
165 | choices.Add(s); | ||
166 | } | ||
167 | if (addcr) | ||
168 | choices.Add("<cr>"); | ||
169 | return choices.ToArray(); | ||
170 | } | ||
171 | |||
172 | if (current.ContainsKey(String.Empty)) | ||
173 | return new string[] { "Command help: "+((CommandInfo)current[String.Empty]).help_text}; | ||
174 | |||
175 | return new string[] { new List<string>(current.Keys)[0] }; | ||
176 | } | ||
177 | |||
178 | public string[] Resolve(string[] cmd) | ||
179 | { | ||
180 | string[] result = cmd; | ||
181 | int index = -1; | ||
182 | |||
183 | Dictionary<string, object> current = tree; | ||
184 | |||
185 | foreach (string s in cmd) | ||
186 | { | ||
187 | index++; | ||
188 | |||
189 | List<string> found = new List<string>(); | ||
190 | |||
191 | foreach (string opt in current.Keys) | ||
192 | { | ||
193 | if (opt.StartsWith(s)) | ||
194 | { | ||
195 | found.Add(opt); | ||
196 | } | ||
197 | } | ||
198 | |||
199 | if (found.Count == 1) | ||
200 | { | ||
201 | result[index] = found[0]; | ||
202 | current = (Dictionary<string, object>)current[found[0]]; | ||
203 | } | ||
204 | else if (found.Count > 0) | ||
205 | { | ||
206 | return new string[0]; | ||
207 | } | ||
208 | else | ||
209 | { | ||
210 | break; | ||
211 | } | ||
212 | } | ||
213 | |||
214 | if (current.ContainsKey(String.Empty)) | ||
215 | { | ||
216 | CommandInfo ci = (CommandInfo)current[String.Empty]; | ||
217 | if (ci.fn == null) | ||
218 | return new string[0]; | ||
219 | ci.fn(ci.module, result); | ||
220 | return result; | ||
221 | } | ||
222 | return new string[0]; | ||
223 | } | ||
224 | } | ||
225 | |||
226 | public class Parser | ||
227 | { | ||
228 | public static string[] Parse(string text) | ||
229 | { | ||
230 | List<string> result = new List<string>(); | ||
231 | |||
232 | int index; | ||
233 | |||
234 | string[] unquoted = text.Split(new char[] {'"'}); | ||
235 | |||
236 | for (index = 0 ; index < unquoted.Length ; index++) | ||
237 | { | ||
238 | if (index % 2 == 0) | ||
239 | { | ||
240 | string[] words = unquoted[index].Split(new char[] {' '}); | ||
241 | foreach (string w in words) | ||
242 | { | ||
243 | if (w != String.Empty) | ||
244 | result.Add(w); | ||
245 | } | ||
246 | } | ||
247 | else | ||
248 | { | ||
249 | result.Add(unquoted[index]); | ||
250 | } | ||
251 | } | ||
252 | |||
253 | return result.ToArray(); | ||
254 | } | ||
255 | } | ||
256 | |||
38 | public class ConsoleBase | 257 | public class ConsoleBase |
39 | { | 258 | { |
40 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 259 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
41 | 260 | ||
42 | private readonly object m_syncRoot = new object(); | 261 | private readonly object m_syncRoot = new object(); |
43 | 262 | ||
44 | public conscmd_callback m_cmdParser; | 263 | private int y = -1; |
264 | private int cp = 0; | ||
265 | private int h = 1; | ||
266 | private string prompt = "# "; | ||
267 | private StringBuilder cmdline = new StringBuilder(); | ||
268 | public Commands Commands = new Commands(); | ||
269 | private bool echo = true; | ||
270 | private List<string> history = new List<string>(); | ||
271 | |||
272 | public object ConsoleScene = null; | ||
45 | 273 | ||
46 | /// <summary> | 274 | /// <summary> |
47 | /// The default prompt text. | 275 | /// The default prompt text. |
@@ -53,15 +281,19 @@ namespace OpenSim.Framework.Console | |||
53 | } | 281 | } |
54 | protected string m_defaultPrompt; | 282 | protected string m_defaultPrompt; |
55 | 283 | ||
56 | /// <summary> | 284 | public ConsoleBase(string defaultPrompt) |
57 | /// Constructor. | ||
58 | /// </summary> | ||
59 | /// <param name="defaultPrompt"></param> | ||
60 | /// <param name="cmdparser"></param> | ||
61 | public ConsoleBase(string defaultPrompt, conscmd_callback cmdparser) | ||
62 | { | 285 | { |
63 | DefaultPrompt = defaultPrompt; | 286 | DefaultPrompt = defaultPrompt; |
64 | m_cmdParser = cmdparser; | 287 | |
288 | Commands.AddCommand("console", "help", "help", "Get command list", Help); | ||
289 | } | ||
290 | |||
291 | private void AddToHistory(string text) | ||
292 | { | ||
293 | while (history.Count >= 100) | ||
294 | history.RemoveAt(0); | ||
295 | |||
296 | history.Add(text); | ||
65 | } | 297 | } |
66 | 298 | ||
67 | /// <summary> | 299 | /// <summary> |
@@ -95,8 +327,7 @@ namespace OpenSim.Framework.Console | |||
95 | /// <param name="args">WriteLine-style message arguments</param> | 327 | /// <param name="args">WriteLine-style message arguments</param> |
96 | public void Warn(string sender, string format, params object[] args) | 328 | public void Warn(string sender, string format, params object[] args) |
97 | { | 329 | { |
98 | WritePrefixLine(DeriveColor(sender), sender); | 330 | WriteNewLine(DeriveColor(sender), sender, ConsoleColor.Yellow, format, args); |
99 | WriteNewLine(ConsoleColor.Yellow, format, args); | ||
100 | } | 331 | } |
101 | 332 | ||
102 | /// <summary> | 333 | /// <summary> |
@@ -117,10 +348,8 @@ namespace OpenSim.Framework.Console | |||
117 | /// <param name="args">WriteLine-style message arguments</param> | 348 | /// <param name="args">WriteLine-style message arguments</param> |
118 | public void Notice(string sender, string format, params object[] args) | 349 | public void Notice(string sender, string format, params object[] args) |
119 | { | 350 | { |
120 | WritePrefixLine(DeriveColor(sender), sender); | 351 | WriteNewLine(DeriveColor(sender), sender, ConsoleColor.White, format, args); |
121 | WriteNewLine(ConsoleColor.White, format, args); | ||
122 | } | 352 | } |
123 | |||
124 | /// <summary> | 353 | /// <summary> |
125 | /// Sends an error to the current console output | 354 | /// Sends an error to the current console output |
126 | /// </summary> | 355 | /// </summary> |
@@ -139,8 +368,7 @@ namespace OpenSim.Framework.Console | |||
139 | /// <param name="args">WriteLine-style message arguments</param> | 368 | /// <param name="args">WriteLine-style message arguments</param> |
140 | public void Error(string sender, string format, params object[] args) | 369 | public void Error(string sender, string format, params object[] args) |
141 | { | 370 | { |
142 | WritePrefixLine(DeriveColor(sender), sender); | 371 | WriteNewLine(DeriveColor(sender), sender, ConsoleColor.Red, format, args); |
143 | Error(format, args); | ||
144 | } | 372 | } |
145 | 373 | ||
146 | /// <summary> | 374 | /// <summary> |
@@ -161,8 +389,7 @@ namespace OpenSim.Framework.Console | |||
161 | /// <param name="args">WriteLine-style message arguments</param> | 389 | /// <param name="args">WriteLine-style message arguments</param> |
162 | public void Status(string sender, string format, params object[] args) | 390 | public void Status(string sender, string format, params object[] args) |
163 | { | 391 | { |
164 | WritePrefixLine(DeriveColor(sender), sender); | 392 | WriteNewLine(DeriveColor(sender), sender, ConsoleColor.Blue, format, args); |
165 | WriteNewLine(ConsoleColor.Blue, format, args); | ||
166 | } | 393 | } |
167 | 394 | ||
168 | [Conditional("DEBUG")] | 395 | [Conditional("DEBUG")] |
@@ -174,12 +401,60 @@ namespace OpenSim.Framework.Console | |||
174 | [Conditional("DEBUG")] | 401 | [Conditional("DEBUG")] |
175 | public void Debug(string sender, string format, params object[] args) | 402 | public void Debug(string sender, string format, params object[] args) |
176 | { | 403 | { |
177 | WritePrefixLine(DeriveColor(sender), sender); | 404 | WriteNewLine(DeriveColor(sender), sender, ConsoleColor.Gray, format, args); |
178 | WriteNewLine(ConsoleColor.Gray, format, args); | 405 | } |
406 | |||
407 | private void WriteNewLine(ConsoleColor senderColor, string sender, ConsoleColor color, string format, params object[] args) | ||
408 | { | ||
409 | lock (cmdline) | ||
410 | { | ||
411 | if (y != -1) | ||
412 | { | ||
413 | System.Console.CursorTop = y; | ||
414 | System.Console.CursorLeft = 0; | ||
415 | |||
416 | int count = cmdline.Length; | ||
417 | |||
418 | System.Console.Write(" "); | ||
419 | while (count-- > 0) | ||
420 | System.Console.Write(" "); | ||
421 | |||
422 | System.Console.CursorTop = y; | ||
423 | System.Console.CursorLeft = 0; | ||
424 | } | ||
425 | WritePrefixLine(senderColor, sender); | ||
426 | WriteConsoleLine(color, format, args); | ||
427 | if (y != -1) | ||
428 | y = System.Console.CursorTop; | ||
429 | } | ||
179 | } | 430 | } |
180 | 431 | ||
181 | private void WriteNewLine(ConsoleColor color, string format, params object[] args) | 432 | private void WriteNewLine(ConsoleColor color, string format, params object[] args) |
182 | { | 433 | { |
434 | lock (cmdline) | ||
435 | { | ||
436 | if (y != -1) | ||
437 | { | ||
438 | System.Console.CursorTop = y; | ||
439 | System.Console.CursorLeft = 0; | ||
440 | |||
441 | int count = cmdline.Length; | ||
442 | |||
443 | System.Console.Write(" "); | ||
444 | while (count-- > 0) | ||
445 | System.Console.Write(" "); | ||
446 | |||
447 | System.Console.CursorTop = y; | ||
448 | System.Console.CursorLeft = 0; | ||
449 | } | ||
450 | WriteConsoleLine(color, format, args); | ||
451 | if (y != -1) | ||
452 | y = System.Console.CursorTop; | ||
453 | } | ||
454 | } | ||
455 | |||
456 | private void WriteConsoleLine(ConsoleColor color, string format, params object[] args) | ||
457 | { | ||
183 | try | 458 | try |
184 | { | 459 | { |
185 | lock (m_syncRoot) | 460 | lock (m_syncRoot) |
@@ -240,108 +515,150 @@ namespace OpenSim.Framework.Console | |||
240 | } | 515 | } |
241 | } | 516 | } |
242 | 517 | ||
243 | public string ReadLine() | 518 | private void Help(string module, string[] cmd) |
244 | { | 519 | { |
245 | try | 520 | List<string> help = Commands.GetHelp(); |
246 | { | 521 | |
247 | string line = System.Console.ReadLine(); | 522 | foreach (string s in help) |
523 | Output(s); | ||
524 | } | ||
248 | 525 | ||
249 | while (line == null) | 526 | private void Show() |
527 | { | ||
528 | lock (cmdline) | ||
529 | { | ||
530 | if (y == -1 || System.Console.BufferWidth == 0) | ||
531 | return; | ||
532 | |||
533 | int xc = prompt.Length + cp; | ||
534 | int new_x = xc % System.Console.BufferWidth; | ||
535 | int new_y = y + xc / System.Console.BufferWidth; | ||
536 | int end_y = y + (cmdline.Length + prompt.Length) / System.Console.BufferWidth; | ||
537 | if (end_y / System.Console.BufferWidth >= h) | ||
538 | h++; | ||
539 | if (end_y >= System.Console.BufferHeight) // wrap | ||
250 | { | 540 | { |
251 | line = System.Console.ReadLine(); | 541 | y--; |
542 | new_y--; | ||
543 | System.Console.CursorLeft = 0; | ||
544 | System.Console.CursorTop = System.Console.BufferHeight-1; | ||
545 | System.Console.WriteLine(" "); | ||
252 | } | 546 | } |
253 | 547 | ||
254 | return line; | 548 | System.Console.CursorTop = y; |
255 | } | 549 | System.Console.CursorLeft = 0; |
256 | catch (Exception e) | ||
257 | { | ||
258 | m_log.Error("[Console]: System.Console.ReadLine exception " + e.ToString()); | ||
259 | return String.Empty; | ||
260 | } | ||
261 | } | ||
262 | 550 | ||
263 | public int Read() | 551 | if (echo) |
264 | { | 552 | System.Console.Write("{0}{1}", prompt, cmdline); |
265 | return System.Console.Read(); | 553 | else |
554 | System.Console.Write("{0}", prompt); | ||
555 | |||
556 | System.Console.CursorLeft = new_x; | ||
557 | System.Console.CursorTop = new_y; | ||
558 | } | ||
266 | } | 559 | } |
267 | 560 | ||
268 | public IPAddress CmdPromptIPAddress(string prompt, string defaultvalue) | 561 | public void LockOutput() |
269 | { | 562 | { |
270 | IPAddress address; | 563 | System.Threading.Monitor.Enter(cmdline); |
271 | string addressStr; | 564 | try |
272 | |||
273 | while (true) | ||
274 | { | 565 | { |
275 | addressStr = CmdPrompt(prompt, defaultvalue); | 566 | if (y != -1) |
276 | if (IPAddress.TryParse(addressStr, out address)) | ||
277 | { | 567 | { |
278 | break; | 568 | System.Console.CursorTop = y; |
279 | } | 569 | System.Console.CursorLeft = 0; |
280 | else | 570 | |
281 | { | 571 | int count = cmdline.Length + prompt.Length; |
282 | m_log.Error("Illegal address. Please re-enter."); | 572 | |
573 | while (count-- > 0) | ||
574 | System.Console.Write(" "); | ||
575 | |||
576 | System.Console.CursorTop = y; | ||
577 | System.Console.CursorLeft = 0; | ||
578 | |||
283 | } | 579 | } |
284 | } | 580 | } |
285 | 581 | catch (Exception) | |
286 | return address; | 582 | { |
583 | } | ||
287 | } | 584 | } |
288 | 585 | ||
289 | public uint CmdPromptIPPort(string prompt, string defaultvalue) | 586 | public void UnlockOutput() |
290 | { | 587 | { |
291 | uint port; | 588 | if (y != -1) |
292 | string portStr; | 589 | { |
590 | y = System.Console.CursorTop; | ||
591 | Show(); | ||
592 | } | ||
593 | System.Threading.Monitor.Exit(cmdline); | ||
594 | } | ||
293 | 595 | ||
294 | while (true) | 596 | public void Output(string text) |
597 | { | ||
598 | lock (cmdline) | ||
295 | { | 599 | { |
296 | portStr = CmdPrompt(prompt, defaultvalue); | 600 | if (y == -1) |
297 | if (uint.TryParse(portStr, out port)) | ||
298 | { | 601 | { |
299 | if (port >= IPEndPoint.MinPort && port <= IPEndPoint.MaxPort) | 602 | System.Console.WriteLine(text); |
300 | { | 603 | |
301 | break; | 604 | return; |
302 | } | ||
303 | } | 605 | } |
304 | 606 | ||
305 | m_log.Error("Illegal address. Please re-enter."); | 607 | System.Console.CursorTop = y; |
306 | } | 608 | System.Console.CursorLeft = 0; |
307 | 609 | ||
308 | return port; | 610 | int count = cmdline.Length + prompt.Length; |
309 | } | ||
310 | 611 | ||
311 | // Displays a prompt and waits for the user to enter a string, then returns that string | 612 | while (count-- > 0) |
312 | // (Done with no echo and suitable for passwords - currently disabled) | 613 | System.Console.Write(" "); |
313 | public string PasswdPrompt(string prompt) | 614 | |
314 | { | 615 | System.Console.CursorTop = y; |
315 | // FIXME: Needs to be better abstracted | 616 | System.Console.CursorLeft = 0; |
316 | System.Console.WriteLine(String.Format("{0}: ", prompt)); | 617 | |
317 | //ConsoleColor oldfg = System.Console.ForegroundColor; | 618 | System.Console.WriteLine(text); |
318 | //System.Console.ForegroundColor = System.Console.BackgroundColor; | 619 | |
319 | string temp = System.Console.ReadLine(); | 620 | y = System.Console.CursorTop; |
320 | //System.Console.ForegroundColor = oldfg; | 621 | |
321 | return temp; | 622 | Show(); |
623 | } | ||
322 | } | 624 | } |
323 | 625 | ||
324 | // Displays a command prompt and waits for the user to enter a string, then returns that string | 626 | private void ContextHelp() |
325 | public string CmdPrompt(string prompt) | ||
326 | { | 627 | { |
327 | System.Console.WriteLine(String.Format("{0}: ", prompt)); | 628 | string[] words = Parser.Parse(cmdline.ToString()); |
328 | return ReadLine(); | 629 | |
630 | string[] opts = Commands.FindNextOption(words, cmdline.ToString().EndsWith(" ")); | ||
631 | |||
632 | if (opts[0].StartsWith("Command help:")) | ||
633 | Output(opts[0]); | ||
634 | else | ||
635 | Output(String.Format("Options: {0}", String.Join(" ", opts))); | ||
329 | } | 636 | } |
330 | 637 | ||
331 | // Displays a command prompt and returns a default value if the user simply presses enter | 638 | public void Prompt() |
332 | public string CmdPrompt(string prompt, string defaultresponse) | ||
333 | { | 639 | { |
334 | string temp = CmdPrompt(String.Format("{0} [{1}]", prompt, defaultresponse)); | 640 | string line = ReadLine(m_defaultPrompt, true, true); |
335 | if (temp == String.Empty) | 641 | |
336 | { | 642 | if (line != String.Empty) |
337 | return defaultresponse; | ||
338 | } | ||
339 | else | ||
340 | { | 643 | { |
341 | return temp; | 644 | m_log.Info("Invalid command"); |
342 | } | 645 | } |
343 | } | 646 | } |
344 | 647 | ||
648 | public string CmdPrompt(string p) | ||
649 | { | ||
650 | return ReadLine(String.Format("{0}: ", p), false, true); | ||
651 | } | ||
652 | |||
653 | public string CmdPrompt(string p, string def) | ||
654 | { | ||
655 | string ret = ReadLine(String.Format("{0} [{1}]: ", p, def), false, true); | ||
656 | if (ret == String.Empty) | ||
657 | ret = def; | ||
658 | |||
659 | return ret; | ||
660 | } | ||
661 | |||
345 | // Displays a command prompt and returns a default value, user may only enter 1 of 2 options | 662 | // Displays a command prompt and returns a default value, user may only enter 1 of 2 options |
346 | public string CmdPrompt(string prompt, string defaultresponse, string OptionA, string OptionB) | 663 | public string CmdPrompt(string prompt, string defaultresponse, string OptionA, string OptionB) |
347 | { | 664 | { |
@@ -362,85 +679,137 @@ namespace OpenSim.Framework.Console | |||
362 | return temp; | 679 | return temp; |
363 | } | 680 | } |
364 | 681 | ||
365 | // Runs a command with a number of parameters | 682 | // Displays a prompt and waits for the user to enter a string, then returns that string |
366 | public Object RunCmd(string Cmd, string[] cmdparams) | 683 | // (Done with no echo and suitable for passwords) |
367 | { | 684 | public string PasswdPrompt(string p) |
368 | m_cmdParser.RunCmd(Cmd, cmdparams); | ||
369 | return null; | ||
370 | } | ||
371 | |||
372 | // Shows data about something | ||
373 | public void ShowCommands(string ShowWhat) | ||
374 | { | 685 | { |
375 | m_cmdParser.Show(new string[] { ShowWhat }); | 686 | return ReadLine(p, false, false); |
376 | } | 687 | } |
377 | 688 | ||
378 | public void Prompt() | 689 | public void RunCommand(string cmd) |
379 | { | 690 | { |
380 | string tempstr = CmdPrompt(m_defaultPrompt); | 691 | string[] parts = Parser.Parse(cmd); |
381 | RunCommand(tempstr); | 692 | Commands.Resolve(parts); |
382 | } | 693 | } |
383 | 694 | ||
384 | public void RunCommand(string cmdline) | 695 | public string ReadLine(string p, bool isCommand, bool e) |
385 | { | 696 | { |
386 | Regex Extractor = new Regex(@"(['""][^""]+['""])\s*|([^\s]+)\s*", RegexOptions.Compiled); | 697 | h = 1; |
387 | char[] delims = {' ', '"'}; | 698 | cp = 0; |
388 | MatchCollection matches = Extractor.Matches(cmdline); | 699 | prompt = p; |
389 | // Get matches | 700 | echo = e; |
701 | int historyLine = history.Count; | ||
390 | 702 | ||
391 | if (matches.Count == 0) | 703 | System.Console.CursorLeft = 0; // Needed for mono |
392 | return; | 704 | System.Console.Write(" "); // Needed for mono |
393 | 705 | ||
394 | string cmd = matches[0].Value.Trim(delims); | 706 | y = System.Console.CursorTop; |
395 | string[] cmdparams = new string[matches.Count - 1]; | 707 | cmdline = new StringBuilder(); |
396 | 708 | ||
397 | for (int i = 1; i < matches.Count; i++) | 709 | while(true) |
398 | { | 710 | { |
399 | cmdparams[i-1] = matches[i].Value.Trim(delims); | 711 | Show(); |
400 | } | ||
401 | 712 | ||
402 | try | 713 | ConsoleKeyInfo key = System.Console.ReadKey(true); |
403 | { | 714 | char c = key.KeyChar; |
404 | RunCmd(cmd, cmdparams); | ||
405 | } | ||
406 | catch (Exception e) | ||
407 | { | ||
408 | m_log.ErrorFormat("[Console]: Command [{0}] failed with exception {1}", cmdline, e.ToString()); | ||
409 | m_log.Error(e.StackTrace); | ||
410 | } | ||
411 | } | ||
412 | 715 | ||
413 | public string LineInfo | 716 | if (!Char.IsControl(c)) |
414 | { | 717 | { |
415 | get | 718 | if (cp >= 318) |
416 | { | 719 | continue; |
417 | string result = String.Empty; | ||
418 | 720 | ||
419 | string stacktrace = Environment.StackTrace; | 721 | if (c == '?' && isCommand) |
420 | List<string> lines = new List<string>(stacktrace.Split(new string[] {"at "}, StringSplitOptions.None)); | 722 | { |
723 | ContextHelp(); | ||
724 | continue; | ||
725 | } | ||
421 | 726 | ||
422 | if (lines.Count > 4) | 727 | cmdline.Insert(cp, c); |
728 | cp++; | ||
729 | } | ||
730 | else | ||
423 | { | 731 | { |
424 | lines.RemoveRange(0, 4); | 732 | switch (key.Key) |
733 | { | ||
734 | case ConsoleKey.Backspace: | ||
735 | if (cp == 0) | ||
736 | break; | ||
737 | cmdline.Remove(cp-1, 1); | ||
738 | cp--; | ||
425 | 739 | ||
426 | string tmpLine = lines[0]; | 740 | System.Console.CursorLeft = 0; |
741 | System.Console.CursorTop = y; | ||
427 | 742 | ||
428 | int inIndex = tmpLine.IndexOf(" in "); | 743 | System.Console.Write("{0}{1} ", prompt, cmdline); |
429 | 744 | ||
430 | if (inIndex > -1) | 745 | break; |
431 | { | 746 | case ConsoleKey.End: |
432 | result = tmpLine.Substring(0, inIndex); | 747 | cp = cmdline.Length; |
748 | break; | ||
749 | case ConsoleKey.Home: | ||
750 | cp = 0; | ||
751 | break; | ||
752 | case ConsoleKey.UpArrow: | ||
753 | if (historyLine < 1) | ||
754 | break; | ||
755 | historyLine--; | ||
756 | LockOutput(); | ||
757 | cmdline = new StringBuilder(history[historyLine]); | ||
758 | cp = cmdline.Length; | ||
759 | UnlockOutput(); | ||
760 | break; | ||
761 | case ConsoleKey.DownArrow: | ||
762 | if (historyLine >= history.Count) | ||
763 | break; | ||
764 | historyLine++; | ||
765 | LockOutput(); | ||
766 | if (historyLine == history.Count) | ||
767 | cmdline = new StringBuilder(); | ||
768 | else | ||
769 | cmdline = new StringBuilder(history[historyLine]); | ||
770 | cp = cmdline.Length; | ||
771 | UnlockOutput(); | ||
772 | break; | ||
773 | case ConsoleKey.LeftArrow: | ||
774 | if (cp > 0) | ||
775 | cp--; | ||
776 | break; | ||
777 | case ConsoleKey.RightArrow: | ||
778 | if (cp < cmdline.Length) | ||
779 | cp++; | ||
780 | break; | ||
781 | case ConsoleKey.Enter: | ||
782 | System.Console.CursorLeft = 0; | ||
783 | System.Console.CursorTop = y; | ||
784 | |||
785 | System.Console.WriteLine("{0}{1}", prompt, cmdline); | ||
433 | 786 | ||
434 | int lineIndex = tmpLine.IndexOf(":line "); | 787 | y = -1; |
435 | 788 | ||
436 | if (lineIndex > -1) | 789 | if (isCommand) |
437 | { | 790 | { |
438 | lineIndex += 6; | 791 | string[] cmd = Commands.Resolve(Parser.Parse(cmdline.ToString())); |
439 | result += ", line " + tmpLine.Substring(lineIndex, (tmpLine.Length - lineIndex) - 5); | 792 | |
793 | if (cmd.Length != 0) | ||
794 | { | ||
795 | int i; | ||
796 | |||
797 | for (i=0 ; i < cmd.Length ; i++) | ||
798 | { | ||
799 | if (cmd[i].Contains(" ")) | ||
800 | cmd[i] = "\"" + cmd[i] + "\""; | ||
801 | } | ||
802 | AddToHistory(String.Join(" ", cmd)); | ||
803 | return String.Empty; | ||
804 | } | ||
440 | } | 805 | } |
806 | |||
807 | AddToHistory(cmdline.ToString()); | ||
808 | return cmdline.ToString(); | ||
809 | default: | ||
810 | break; | ||
441 | } | 811 | } |
442 | } | 812 | } |
443 | return result; | ||
444 | } | 813 | } |
445 | } | 814 | } |
446 | } | 815 | } |
diff --git a/OpenSim/Framework/Console/ConsoleCallbacksBase.cs b/OpenSim/Framework/Console/ConsoleCallbacksBase.cs deleted file mode 100644 index d37c47a..0000000 --- a/OpenSim/Framework/Console/ConsoleCallbacksBase.cs +++ /dev/null | |||
@@ -1,35 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | namespace OpenSim.Framework.Console | ||
29 | { | ||
30 | public interface conscmd_callback | ||
31 | { | ||
32 | void RunCmd(string cmd, string[] cmdparams); | ||
33 | void Show(string[] showParams); | ||
34 | } | ||
35 | } | ||
diff --git a/OpenSim/Framework/Console/OpenSimAppender.cs b/OpenSim/Framework/Console/OpenSimAppender.cs index b07617f..6193bac 100644 --- a/OpenSim/Framework/Console/OpenSimAppender.cs +++ b/OpenSim/Framework/Console/OpenSimAppender.cs | |||
@@ -37,6 +37,14 @@ namespace OpenSim.Framework.Console | |||
37 | /// </summary> | 37 | /// </summary> |
38 | public class OpenSimAppender : AnsiColorTerminalAppender | 38 | public class OpenSimAppender : AnsiColorTerminalAppender |
39 | { | 39 | { |
40 | private ConsoleBase m_console = null; | ||
41 | |||
42 | public ConsoleBase Console | ||
43 | { | ||
44 | get { return m_console; } | ||
45 | set { m_console = value; } | ||
46 | } | ||
47 | |||
40 | private static readonly ConsoleColor[] Colors = { | 48 | private static readonly ConsoleColor[] Colors = { |
41 | // the dark colors don't seem to be visible on some black background terminals like putty :( | 49 | // the dark colors don't seem to be visible on some black background terminals like putty :( |
42 | //ConsoleColor.DarkBlue, | 50 | //ConsoleColor.DarkBlue, |
@@ -55,6 +63,9 @@ namespace OpenSim.Framework.Console | |||
55 | 63 | ||
56 | override protected void Append(LoggingEvent le) | 64 | override protected void Append(LoggingEvent le) |
57 | { | 65 | { |
66 | if (m_console != null) | ||
67 | m_console.LockOutput(); | ||
68 | |||
58 | try | 69 | try |
59 | { | 70 | { |
60 | string loggingMessage = RenderLoggingEvent(le); | 71 | string loggingMessage = RenderLoggingEvent(le); |
@@ -96,6 +107,11 @@ namespace OpenSim.Framework.Console | |||
96 | { | 107 | { |
97 | System.Console.WriteLine("Couldn't write out log message: {0}", e.ToString()); | 108 | System.Console.WriteLine("Couldn't write out log message: {0}", e.ToString()); |
98 | } | 109 | } |
110 | finally | ||
111 | { | ||
112 | if (m_console != null) | ||
113 | m_console.UnlockOutput(); | ||
114 | } | ||
99 | } | 115 | } |
100 | 116 | ||
101 | private void WriteColorText(ConsoleColor color, string sender) | 117 | private void WriteColorText(ConsoleColor color, string sender) |
diff --git a/OpenSim/Framework/IScene.cs b/OpenSim/Framework/IScene.cs index ce74b46..493c626 100644 --- a/OpenSim/Framework/IScene.cs +++ b/OpenSim/Framework/IScene.cs | |||
@@ -27,6 +27,7 @@ | |||
27 | 27 | ||
28 | using System.Collections.Generic; | 28 | using System.Collections.Generic; |
29 | using OpenMetaverse; | 29 | using OpenMetaverse; |
30 | using OpenSim.Framework.Console; | ||
30 | 31 | ||
31 | namespace OpenSim.Framework | 32 | namespace OpenSim.Framework |
32 | { | 33 | { |
@@ -88,5 +89,7 @@ namespace OpenSim.Framework | |||
88 | 89 | ||
89 | T RequestModuleInterface<T>(); | 90 | T RequestModuleInterface<T>(); |
90 | T[] RequestModuleInterfaces<T>(); | 91 | T[] RequestModuleInterfaces<T>(); |
92 | |||
93 | void AddCommand(string module, string command, string shorthelp, string longhelp, CommandDelegate callback); | ||
91 | } | 94 | } |
92 | } | 95 | } |
diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs index 473991a..cc75df4 100644 --- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs +++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs | |||
@@ -98,7 +98,45 @@ namespace OpenSim.Framework.Servers | |||
98 | /// <summary> | 98 | /// <summary> |
99 | /// Must be overriden by child classes for their own server specific startup behaviour. | 99 | /// Must be overriden by child classes for their own server specific startup behaviour. |
100 | /// </summary> | 100 | /// </summary> |
101 | protected abstract void StartupSpecific(); | 101 | protected virtual void StartupSpecific() |
102 | { | ||
103 | if (m_console != null) | ||
104 | { | ||
105 | SetConsoleLogLevel(new string[] { "ALL" }); | ||
106 | |||
107 | m_console.Commands.AddCommand("base", "quit", | ||
108 | "quit", | ||
109 | "Quit the application", HandleQuit); | ||
110 | |||
111 | m_console.Commands.AddCommand("base", "shutdown", | ||
112 | "shutdown", | ||
113 | "Quit the application", HandleQuit); | ||
114 | |||
115 | m_console.Commands.AddCommand("base", "set log level", | ||
116 | "set log level <level>", | ||
117 | "Set the console logging level", HandleLogLevel); | ||
118 | |||
119 | m_console.Commands.AddCommand("base", "show info", | ||
120 | "show info", | ||
121 | "Show general information", HandleShow); | ||
122 | |||
123 | m_console.Commands.AddCommand("base", "show stats", | ||
124 | "show stats", | ||
125 | "Show statistics", HandleShow); | ||
126 | |||
127 | m_console.Commands.AddCommand("base", "show threads", | ||
128 | "show threads", | ||
129 | "Show thread status", HandleShow); | ||
130 | |||
131 | m_console.Commands.AddCommand("base", "show uptime", | ||
132 | "show uptime", | ||
133 | "Show server uptime", HandleShow); | ||
134 | |||
135 | m_console.Commands.AddCommand("base", "show version", | ||
136 | "show version", | ||
137 | "Show server version", HandleShow); | ||
138 | } | ||
139 | } | ||
102 | 140 | ||
103 | /// <summary> | 141 | /// <summary> |
104 | /// Should be overriden and referenced by descendents if they need to perform extra shutdown processing | 142 | /// Should be overriden and referenced by descendents if they need to perform extra shutdown processing |
@@ -212,6 +250,8 @@ namespace OpenSim.Framework.Servers | |||
212 | return; | 250 | return; |
213 | } | 251 | } |
214 | 252 | ||
253 | consoleAppender.Console = m_console; | ||
254 | |||
215 | if (setParams.Length > 0) | 255 | if (setParams.Length > 0) |
216 | { | 256 | { |
217 | Level consoleLevel = repository.LevelMap[setParams[0]]; | 257 | Level consoleLevel = repository.LevelMap[setParams[0]]; |
@@ -261,56 +301,18 @@ namespace OpenSim.Framework.Servers | |||
261 | Environment.Exit(0); | 301 | Environment.Exit(0); |
262 | } | 302 | } |
263 | 303 | ||
264 | /// <summary> | 304 | private void HandleQuit(string module, string[] args) |
265 | /// Runs commands issued by the server console from the operator | ||
266 | /// </summary> | ||
267 | /// <param name="command">The first argument of the parameter (the command)</param> | ||
268 | /// <param name="cmdparams">Additional arguments passed to the command</param> | ||
269 | public virtual void RunCmd(string command, string[] cmdparams) | ||
270 | { | 305 | { |
271 | switch (command) | 306 | Shutdown(); |
272 | { | ||
273 | case "help": | ||
274 | ShowHelp(cmdparams); | ||
275 | Notice(""); | ||
276 | break; | ||
277 | |||
278 | case "set": | ||
279 | Set(cmdparams); | ||
280 | break; | ||
281 | |||
282 | case "show": | ||
283 | if (cmdparams.Length > 0) | ||
284 | { | ||
285 | Show(cmdparams); | ||
286 | } | ||
287 | break; | ||
288 | |||
289 | case "quit": | ||
290 | case "shutdown": | ||
291 | Shutdown(); | ||
292 | break; | ||
293 | } | ||
294 | } | 307 | } |
295 | 308 | ||
296 | /// <summary> | 309 | private void HandleLogLevel(string module, string[] cmd) |
297 | /// Set an OpenSim parameter | ||
298 | /// </summary> | ||
299 | /// <param name="setArgs"> | ||
300 | /// The arguments given to the set command. | ||
301 | /// </param> | ||
302 | public virtual void Set(string[] setArgs) | ||
303 | { | 310 | { |
304 | // Temporary while we only have one command which takes at least two parameters | 311 | if (cmd.Length > 3) |
305 | if (setArgs.Length < 2) | ||
306 | return; | ||
307 | |||
308 | if (setArgs[0] == "log" && setArgs[1] == "level") | ||
309 | { | 312 | { |
310 | string[] setParams = new string[setArgs.Length - 2]; | 313 | string level = cmd[3]; |
311 | Array.Copy(setArgs, 2, setParams, 0, setArgs.Length - 2); | ||
312 | 314 | ||
313 | SetConsoleLogLevel(setParams); | 315 | SetConsoleLogLevel(new string[] { level }); |
314 | } | 316 | } |
315 | } | 317 | } |
316 | 318 | ||
@@ -324,18 +326,6 @@ namespace OpenSim.Framework.Servers | |||
324 | 326 | ||
325 | if (helpArgs.Length == 0) | 327 | if (helpArgs.Length == 0) |
326 | { | 328 | { |
327 | List<string> helpTopics = GetHelpTopics(); | ||
328 | |||
329 | if (helpTopics.Count > 0) | ||
330 | { | ||
331 | Notice( | ||
332 | "As well as the help information below, you can also type help <topic> to get more information on the following areas:"); | ||
333 | Notice(string.Format(" {0}", string.Join(", ", helpTopics.ToArray()))); | ||
334 | Notice(""); | ||
335 | } | ||
336 | |||
337 | Notice("quit - equivalent to shutdown."); | ||
338 | |||
339 | Notice("set log level [level] - change the console logging level only. For example, off or debug."); | 329 | Notice("set log level [level] - change the console logging level only. For example, off or debug."); |
340 | Notice("show info - show server information (e.g. startup path)."); | 330 | Notice("show info - show server information (e.g. startup path)."); |
341 | 331 | ||
@@ -345,21 +335,20 @@ namespace OpenSim.Framework.Servers | |||
345 | Notice("show threads - list tracked threads"); | 335 | Notice("show threads - list tracked threads"); |
346 | Notice("show uptime - show server startup time and uptime."); | 336 | Notice("show uptime - show server startup time and uptime."); |
347 | Notice("show version - show server version."); | 337 | Notice("show version - show server version."); |
348 | Notice("shutdown - shutdown the server."); | ||
349 | Notice(""); | 338 | Notice(""); |
350 | 339 | ||
351 | return; | 340 | return; |
352 | } | 341 | } |
353 | } | 342 | } |
354 | 343 | ||
355 | /// <summary> | 344 | public virtual void HandleShow(string module, string[] cmd) |
356 | /// Outputs to the console information about the region | ||
357 | /// </summary> | ||
358 | /// <param name="showParams"> | ||
359 | /// What information to display (valid arguments are "uptime", "users", ...) | ||
360 | /// </param> | ||
361 | public virtual void Show(string[] showParams) | ||
362 | { | 345 | { |
346 | List<string> args = new List<string>(cmd); | ||
347 | |||
348 | args.RemoveAt(0); | ||
349 | |||
350 | string[] showParams = args.ToArray(); | ||
351 | |||
363 | switch (showParams[0]) | 352 | switch (showParams[0]) |
364 | { | 353 | { |
365 | case "info": | 354 | case "info": |
diff --git a/OpenSim/Grid/AssetServer/Main.cs b/OpenSim/Grid/AssetServer/Main.cs index 060c473..c71e53f 100644 --- a/OpenSim/Grid/AssetServer/Main.cs +++ b/OpenSim/Grid/AssetServer/Main.cs | |||
@@ -43,7 +43,7 @@ namespace OpenSim.Grid.AssetServer | |||
43 | /// <summary> | 43 | /// <summary> |
44 | /// An asset server | 44 | /// An asset server |
45 | /// </summary> | 45 | /// </summary> |
46 | public class OpenAsset_Main : BaseOpenSimServer, conscmd_callback | 46 | public class OpenAsset_Main : BaseOpenSimServer |
47 | { | 47 | { |
48 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 48 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
49 | 49 | ||
@@ -76,7 +76,7 @@ namespace OpenSim.Grid.AssetServer | |||
76 | 76 | ||
77 | public OpenAsset_Main() | 77 | public OpenAsset_Main() |
78 | { | 78 | { |
79 | m_console = new ConsoleBase("Asset", this); | 79 | m_console = new ConsoleBase("Asset"); |
80 | 80 | ||
81 | MainConsole.Instance = m_console; | 81 | MainConsole.Instance = m_console; |
82 | } | 82 | } |
@@ -99,6 +99,8 @@ namespace OpenSim.Grid.AssetServer | |||
99 | AddHttpHandlers(); | 99 | AddHttpHandlers(); |
100 | 100 | ||
101 | m_httpServer.Start(); | 101 | m_httpServer.Start(); |
102 | |||
103 | base.StartupSpecific(); | ||
102 | } | 104 | } |
103 | 105 | ||
104 | protected void AddHttpHandlers() | 106 | protected void AddHttpHandlers() |
diff --git a/OpenSim/Grid/GridServer/GridServerBase.cs b/OpenSim/Grid/GridServer/GridServerBase.cs index 68edbd2..3fb07b5 100644 --- a/OpenSim/Grid/GridServer/GridServerBase.cs +++ b/OpenSim/Grid/GridServer/GridServerBase.cs | |||
@@ -39,7 +39,7 @@ namespace OpenSim.Grid.GridServer | |||
39 | { | 39 | { |
40 | /// <summary> | 40 | /// <summary> |
41 | /// </summary> | 41 | /// </summary> |
42 | public class GridServerBase : BaseOpenSimServer, conscmd_callback | 42 | public class GridServerBase : BaseOpenSimServer |
43 | { | 43 | { |
44 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 44 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
45 | 45 | ||
@@ -59,43 +59,34 @@ namespace OpenSim.Grid.GridServer | |||
59 | 59 | ||
60 | public GridServerBase() | 60 | public GridServerBase() |
61 | { | 61 | { |
62 | m_console = new ConsoleBase("Grid", this); | 62 | m_console = new ConsoleBase("Grid"); |
63 | MainConsole.Instance = m_console; | 63 | MainConsole.Instance = m_console; |
64 | } | 64 | } |
65 | 65 | ||
66 | public override void RunCmd(string cmd, string[] cmdparams) | 66 | private void HandleRegistration(string module, string[] cmd) |
67 | { | 67 | { |
68 | base.RunCmd(cmd, cmdparams); | 68 | switch (cmd[0]) |
69 | |||
70 | switch (cmd) | ||
71 | { | 69 | { |
72 | case "disable-reg": | 70 | case "enable": |
73 | m_config.AllowRegionRegistration = false; | 71 | m_config.AllowRegionRegistration = true; |
74 | m_log.Info("Region registration disabled"); | 72 | m_log.Info("Region registration enabled"); |
75 | break; | 73 | break; |
76 | case "enable-reg": | 74 | case "disable": |
77 | m_config.AllowRegionRegistration = true; | 75 | m_config.AllowRegionRegistration = false; |
78 | m_log.Info("Region registration enabled"); | 76 | m_log.Info("Region registration disabled"); |
79 | break; | 77 | break; |
80 | } | 78 | } |
81 | } | 79 | } |
82 | |||
83 | public override void Show(string[] showParams) | ||
84 | { | ||
85 | base.Show(showParams); | ||
86 | 80 | ||
87 | switch (showParams[0]) | 81 | private void HandleShowStatus(string module, string[] cmd) |
82 | { | ||
83 | if (m_config.AllowRegionRegistration) | ||
88 | { | 84 | { |
89 | case "status": | 85 | m_log.Info("Region registration enabled."); |
90 | if (m_config.AllowRegionRegistration) | 86 | } |
91 | { | 87 | else |
92 | m_log.Info("Region registration enabled."); | 88 | { |
93 | } | 89 | m_log.Info("Region registration disabled."); |
94 | else | ||
95 | { | ||
96 | m_log.Info("Region registration disabled."); | ||
97 | } | ||
98 | break; | ||
99 | } | 90 | } |
100 | } | 91 | } |
101 | 92 | ||
@@ -120,6 +111,20 @@ namespace OpenSim.Grid.GridServer | |||
120 | // Timer simCheckTimer = new Timer(3600000 * 3); // 3 Hours between updates. | 111 | // Timer simCheckTimer = new Timer(3600000 * 3); // 3 Hours between updates. |
121 | // simCheckTimer.Elapsed += new ElapsedEventHandler(CheckSims); | 112 | // simCheckTimer.Elapsed += new ElapsedEventHandler(CheckSims); |
122 | // simCheckTimer.Enabled = true; | 113 | // simCheckTimer.Enabled = true; |
114 | |||
115 | base.StartupSpecific(); | ||
116 | |||
117 | m_console.Commands.AddCommand("gridserver", "enable registration", | ||
118 | "enable registration", | ||
119 | "Enable new regions to register", HandleRegistration); | ||
120 | |||
121 | m_console.Commands.AddCommand("gridserver", "disable registration", | ||
122 | "disable registration", | ||
123 | "Disable registering new regions", HandleRegistration); | ||
124 | |||
125 | m_console.Commands.AddCommand("gridserver", "show status", | ||
126 | "show status", | ||
127 | "Show registration status", HandleShowStatus); | ||
123 | } | 128 | } |
124 | 129 | ||
125 | protected void AddHttpHandlers() | 130 | protected void AddHttpHandlers() |
diff --git a/OpenSim/Grid/InventoryServer/Main.cs b/OpenSim/Grid/InventoryServer/Main.cs index 81a6a03..4727f6e 100644 --- a/OpenSim/Grid/InventoryServer/Main.cs +++ b/OpenSim/Grid/InventoryServer/Main.cs | |||
@@ -38,7 +38,7 @@ using OpenSim.Framework.Servers; | |||
38 | 38 | ||
39 | namespace OpenSim.Grid.InventoryServer | 39 | namespace OpenSim.Grid.InventoryServer |
40 | { | 40 | { |
41 | public class OpenInventory_Main : BaseOpenSimServer, conscmd_callback | 41 | public class OpenInventory_Main : BaseOpenSimServer |
42 | { | 42 | { |
43 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 43 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
44 | 44 | ||
@@ -58,7 +58,7 @@ namespace OpenSim.Grid.InventoryServer | |||
58 | 58 | ||
59 | public OpenInventory_Main() | 59 | public OpenInventory_Main() |
60 | { | 60 | { |
61 | m_console = new ConsoleBase("Inventory", this); | 61 | m_console = new ConsoleBase("Inventory"); |
62 | MainConsole.Instance = m_console; | 62 | MainConsole.Instance = m_console; |
63 | } | 63 | } |
64 | 64 | ||
@@ -77,6 +77,12 @@ namespace OpenSim.Grid.InventoryServer | |||
77 | m_httpServer.Start(); | 77 | m_httpServer.Start(); |
78 | 78 | ||
79 | m_log.Info("[" + LogName + "]: Started HTTP server"); | 79 | m_log.Info("[" + LogName + "]: Started HTTP server"); |
80 | |||
81 | base.StartupSpecific(); | ||
82 | |||
83 | m_console.Commands.AddCommand("inventoryserver", "add user", | ||
84 | "add user", | ||
85 | "Add a random user inventory", HandleAddUser); | ||
80 | } | 86 | } |
81 | 87 | ||
82 | protected void AddHttpHandlers() | 88 | protected void AddHttpHandlers() |
@@ -146,16 +152,9 @@ namespace OpenSim.Grid.InventoryServer | |||
146 | } | 152 | } |
147 | } | 153 | } |
148 | 154 | ||
149 | public override void RunCmd(string cmd, string[] cmdparams) | 155 | private void HandleAddUser(string module, string[] args) |
150 | { | 156 | { |
151 | base.RunCmd(cmd, cmdparams); | 157 | m_inventoryService.CreateUsersInventory(UUID.Random().Guid); |
152 | |||
153 | switch (cmd) | ||
154 | { | ||
155 | case "add-user": | ||
156 | m_inventoryService.CreateUsersInventory(UUID.Random().Guid); | ||
157 | break; | ||
158 | } | ||
159 | } | 158 | } |
160 | } | 159 | } |
161 | } | 160 | } |
diff --git a/OpenSim/Grid/MessagingServer/Main.cs b/OpenSim/Grid/MessagingServer/Main.cs index e83da7a..9b7e731 100644 --- a/OpenSim/Grid/MessagingServer/Main.cs +++ b/OpenSim/Grid/MessagingServer/Main.cs | |||
@@ -41,7 +41,7 @@ namespace OpenSim.Grid.MessagingServer | |||
41 | { | 41 | { |
42 | /// <summary> | 42 | /// <summary> |
43 | /// </summary> | 43 | /// </summary> |
44 | public class OpenMessage_Main : BaseOpenSimServer, conscmd_callback | 44 | public class OpenMessage_Main : BaseOpenSimServer |
45 | { | 45 | { |
46 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 46 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
47 | 47 | ||
@@ -64,7 +64,7 @@ namespace OpenSim.Grid.MessagingServer | |||
64 | 64 | ||
65 | public OpenMessage_Main() | 65 | public OpenMessage_Main() |
66 | { | 66 | { |
67 | m_console = new ConsoleBase("Messaging", this); | 67 | m_console = new ConsoleBase("Messaging"); |
68 | MainConsole.Instance = m_console; | 68 | MainConsole.Instance = m_console; |
69 | } | 69 | } |
70 | 70 | ||
@@ -124,6 +124,16 @@ namespace OpenSim.Grid.MessagingServer | |||
124 | registerWithUserServer(); | 124 | registerWithUserServer(); |
125 | 125 | ||
126 | m_log.Info("[SERVER]: Messageserver 0.5 - Startup complete"); | 126 | m_log.Info("[SERVER]: Messageserver 0.5 - Startup complete"); |
127 | |||
128 | base.StartupSpecific(); | ||
129 | |||
130 | m_console.Commands.AddCommand("messageserver", "clear cache", | ||
131 | "clear cache", | ||
132 | "Clear presence cache", HandleClearCache); | ||
133 | |||
134 | m_console.Commands.AddCommand("messageserver", "register", | ||
135 | "register", | ||
136 | "Re-register with user server(s)", HandleRegister); | ||
127 | } | 137 | } |
128 | 138 | ||
129 | public void do_create(string what) | 139 | public void do_create(string what) |
@@ -154,29 +164,17 @@ namespace OpenSim.Grid.MessagingServer | |||
154 | } | 164 | } |
155 | } | 165 | } |
156 | 166 | ||
157 | public override void RunCmd(string cmd, string[] cmdparams) | 167 | private void HandleClearCache(string module, string[] cmd) |
158 | { | 168 | { |
159 | base.RunCmd(cmd, cmdparams); | 169 | int entries = msgsvc.ClearRegionCache(); |
160 | 170 | m_console.Notice("Region cache cleared! Cleared " + | |
161 | switch (cmd) | 171 | entries.ToString() + " entries"); |
162 | { | ||
163 | case "clear-cache": | ||
164 | int entries = msgsvc.ClearRegionCache(); | ||
165 | m_console.Notice("Region cache cleared! Cleared " + entries.ToString() + " entries"); | ||
166 | break; | ||
167 | case "register": | ||
168 | deregisterFromUserServer(); | ||
169 | registerWithUserServer(); | ||
170 | break; | ||
171 | } | ||
172 | } | 172 | } |
173 | 173 | ||
174 | protected override void ShowHelp(string[] helpArgs) | 174 | private void HandleRegister(string module, string[] cmd) |
175 | { | 175 | { |
176 | base.ShowHelp(helpArgs); | 176 | deregisterFromUserServer(); |
177 | 177 | registerWithUserServer(); | |
178 | m_console.Notice("clear-cache - Clears region cache. Should be done when regions change position. The region cache gets stale after a while."); | ||
179 | m_console.Notice("register - (Re-)registers with user-server. This might be necessary if the userserver crashed/restarted"); | ||
180 | } | 178 | } |
181 | 179 | ||
182 | public override void ShutdownSpecific() | 180 | public override void ShutdownSpecific() |
diff --git a/OpenSim/Grid/UserServer/Main.cs b/OpenSim/Grid/UserServer/Main.cs index be26ab3..0b0bee1 100644 --- a/OpenSim/Grid/UserServer/Main.cs +++ b/OpenSim/Grid/UserServer/Main.cs | |||
@@ -46,7 +46,7 @@ namespace OpenSim.Grid.UserServer | |||
46 | /// <summary> | 46 | /// <summary> |
47 | /// Grid user server main class | 47 | /// Grid user server main class |
48 | /// </summary> | 48 | /// </summary> |
49 | public class OpenUser_Main : BaseOpenSimServer, conscmd_callback | 49 | public class OpenUser_Main : BaseOpenSimServer |
50 | { | 50 | { |
51 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 51 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
52 | 52 | ||
@@ -73,7 +73,7 @@ namespace OpenSim.Grid.UserServer | |||
73 | 73 | ||
74 | public OpenUser_Main() | 74 | public OpenUser_Main() |
75 | { | 75 | { |
76 | m_console = new ConsoleBase("User", this); | 76 | m_console = new ConsoleBase("User"); |
77 | MainConsole.Instance = m_console; | 77 | MainConsole.Instance = m_console; |
78 | } | 78 | } |
79 | 79 | ||
@@ -119,6 +119,37 @@ namespace OpenSim.Grid.UserServer | |||
119 | m_httpServer = new BaseHttpServer(Cfg.HttpPort); | 119 | m_httpServer = new BaseHttpServer(Cfg.HttpPort); |
120 | AddHttpHandlers(); | 120 | AddHttpHandlers(); |
121 | m_httpServer.Start(); | 121 | m_httpServer.Start(); |
122 | |||
123 | base.StartupSpecific(); | ||
124 | |||
125 | m_console.Commands.AddCommand("userserver", "create user", | ||
126 | "create user [<first> [<last> [<x> <y> [email]]]]", | ||
127 | "Create a new user account", RunCommand); | ||
128 | |||
129 | m_console.Commands.AddCommand("userserver", "reset user password", | ||
130 | "reset user password [<first> [<last> [<new password>]]]", | ||
131 | "Reset a user's password", RunCommand); | ||
132 | |||
133 | m_console.Commands.AddCommand("userserver", "login level", | ||
134 | "login level <level>", | ||
135 | "Set the minimum user level to log in", HandleLoginCommand); | ||
136 | |||
137 | m_console.Commands.AddCommand("userserver", "login reset", | ||
138 | "login reset", | ||
139 | "Reset the login level to allow all users", | ||
140 | HandleLoginCommand); | ||
141 | |||
142 | m_console.Commands.AddCommand("userserver", "login text", | ||
143 | "login text <text>", | ||
144 | "Set the text users will see on login", HandleLoginCommand); | ||
145 | |||
146 | m_console.Commands.AddCommand("userserver", "test-inventory", | ||
147 | "test-inventory", | ||
148 | "Perform a test inventory transaction", RunCommand); | ||
149 | |||
150 | m_console.Commands.AddCommand("userserver", "logoff-user", | ||
151 | "logoff-user <first> <last> <message>", | ||
152 | "Log off a named user", RunCommand); | ||
122 | } | 153 | } |
123 | 154 | ||
124 | /// <summary> | 155 | /// <summary> |
@@ -301,39 +332,54 @@ namespace OpenSim.Grid.UserServer | |||
301 | m_userManager.ResetUserPassword(firstName, lastName, newPassword); | 332 | m_userManager.ResetUserPassword(firstName, lastName, newPassword); |
302 | } | 333 | } |
303 | 334 | ||
304 | public override void RunCmd(string cmd, string[] cmdparams) | 335 | private void HandleLoginCommand(string module, string[] cmd) |
305 | { | 336 | { |
306 | base.RunCmd(cmd, cmdparams); | 337 | string subcommand = cmd[1]; |
307 | switch (cmd) | 338 | |
339 | switch (subcommand) | ||
308 | { | 340 | { |
309 | case "create": | 341 | case "level": |
310 | do_create(cmdparams); | 342 | // Set the minimal level to allow login |
311 | break; | 343 | // Useful to allow grid update without worrying about users. |
312 | 344 | // or fixing critical issues | |
313 | case "reset": | 345 | // |
314 | Reset(cmdparams); | 346 | if (cmd.Length > 2) |
315 | break; | ||
316 | |||
317 | |||
318 | case "login-level": | ||
319 | // Set the minimal level to allow login | ||
320 | // Usefull to allow grid update without worrying about users. | ||
321 | // or fixing critical issue | ||
322 | if (cmdparams.Length == 1) | ||
323 | { | 347 | { |
324 | int level = Convert.ToInt32(cmdparams[0]); | 348 | int level = Convert.ToInt32(cmd[2]); |
325 | m_loginService.setloginlevel(level); | 349 | m_loginService.setloginlevel(level); |
326 | } | 350 | } |
327 | break; | 351 | break; |
328 | case "login-reset": | 352 | case "reset": |
329 | m_loginService.setloginlevel(0); | 353 | m_loginService.setloginlevel(0); |
330 | break; | 354 | break; |
331 | case "login-text": | 355 | case "text": |
332 | if (cmdparams.Length == 1) | 356 | if (cmd.Length > 2) |
333 | { | 357 | { |
334 | m_loginService.setwelcometext(cmdparams[0]); | 358 | m_loginService.setwelcometext(cmd[2]); |
335 | } | 359 | } |
336 | break; | 360 | break; |
361 | } | ||
362 | } | ||
363 | |||
364 | public void RunCommand(string module, string[] cmd) | ||
365 | { | ||
366 | List<string> args = new List<string>(cmd); | ||
367 | string command = cmd[0]; | ||
368 | |||
369 | args.RemoveAt(0); | ||
370 | |||
371 | string[] cmdparams = args.ToArray(); | ||
372 | |||
373 | switch (command) | ||
374 | { | ||
375 | case "create": | ||
376 | do_create(cmdparams); | ||
377 | break; | ||
378 | |||
379 | case "reset": | ||
380 | Reset(cmdparams); | ||
381 | break; | ||
382 | |||
337 | 383 | ||
338 | case "test-inventory": | 384 | case "test-inventory": |
339 | // RestObjectPosterResponse<List<InventoryFolderBase>> requester = new RestObjectPosterResponse<List<InventoryFolderBase>>(); | 385 | // RestObjectPosterResponse<List<InventoryFolderBase>> requester = new RestObjectPosterResponse<List<InventoryFolderBase>>(); |
diff --git a/OpenSim/Region/Application/Application.cs b/OpenSim/Region/Application/Application.cs index a8e1499..7a427dc 100644 --- a/OpenSim/Region/Application/Application.cs +++ b/OpenSim/Region/Application/Application.cs | |||
@@ -34,6 +34,7 @@ using log4net.Config; | |||
34 | using Nini.Config; | 34 | using Nini.Config; |
35 | using OpenSim.Framework; | 35 | using OpenSim.Framework; |
36 | using OpenSim.Framework.Console; | 36 | using OpenSim.Framework.Console; |
37 | using OpenSim.Region.Framework.Scenes; | ||
37 | 38 | ||
38 | namespace OpenSim | 39 | namespace OpenSim |
39 | { | 40 | { |
@@ -46,6 +47,8 @@ namespace OpenSim | |||
46 | public static bool m_saveCrashDumps = false; | 47 | public static bool m_saveCrashDumps = false; |
47 | public static string m_crashDir = "crashes"; | 48 | public static string m_crashDir = "crashes"; |
48 | 49 | ||
50 | protected static OpenSimBase m_sim = null; | ||
51 | |||
49 | //could move our main function into OpenSimMain and kill this class | 52 | //could move our main function into OpenSimMain and kill this class |
50 | public static void Main(string[] args) | 53 | public static void Main(string[] args) |
51 | { | 54 | { |
@@ -93,18 +96,18 @@ namespace OpenSim | |||
93 | 96 | ||
94 | if (background) | 97 | if (background) |
95 | { | 98 | { |
96 | OpenSimBase sim = new OpenSimBackground(configSource); | 99 | m_sim = new OpenSimBackground(configSource); |
97 | sim.Startup(); | 100 | m_sim.Startup(); |
98 | } | 101 | } |
99 | else | 102 | else |
100 | { | 103 | { |
101 | OpenSimBase sim = null; | 104 | m_sim = null; |
102 | if (hgrid) | 105 | if (hgrid) |
103 | sim = new HGOpenSimNode(configSource); | 106 | m_sim = new HGOpenSimNode(configSource); |
104 | else | 107 | else |
105 | sim = new OpenSim(configSource); | 108 | m_sim = new OpenSim(configSource); |
106 | 109 | ||
107 | sim.Startup(); | 110 | m_sim.Startup(); |
108 | 111 | ||
109 | while (true) | 112 | while (true) |
110 | { | 113 | { |
diff --git a/OpenSim/Region/Application/HGOpenSimNode.cs b/OpenSim/Region/Application/HGOpenSimNode.cs index 4941fb4..2de9ddf 100644 --- a/OpenSim/Region/Application/HGOpenSimNode.cs +++ b/OpenSim/Region/Application/HGOpenSimNode.cs | |||
@@ -77,6 +77,9 @@ namespace OpenSim | |||
77 | m_log.Info("===================================================================="); | 77 | m_log.Info("===================================================================="); |
78 | 78 | ||
79 | base.StartupSpecific(); | 79 | base.StartupSpecific(); |
80 | |||
81 | MainConsole.Instance.Commands.AddCommand("hypergrid", "link-mapping", "link-mapping [<x> <y>] <cr>", "Set local coordinate to map HG regions to", RunCommand); | ||
82 | MainConsole.Instance.Commands.AddCommand("hypergrid", "link-region", "link-region <Xloc> <Yloc> <HostName> <HttpPort> <LocalName> <cr>", "Link a hypergrid region", RunCommand); | ||
80 | } | 83 | } |
81 | 84 | ||
82 | protected override void InitialiseStandaloneServices(LibraryRootFolder libraryRootFolder) | 85 | protected override void InitialiseStandaloneServices(LibraryRootFolder libraryRootFolder) |
@@ -143,11 +146,18 @@ namespace OpenSim | |||
143 | m_configSettings.See_into_region_from_neighbor, m_config.Source, m_version); | 146 | m_configSettings.See_into_region_from_neighbor, m_config.Source, m_version); |
144 | } | 147 | } |
145 | 148 | ||
146 | public override void RunCmd(string command, string[] cmdparams) | 149 | public void RunCommand(string module, string[] cp) |
147 | { | 150 | { |
151 | List<string> cmdparams = new List<string>(cp); | ||
152 | if (cmdparams.Count < 1) | ||
153 | return; | ||
154 | |||
155 | string command = cmdparams[0]; | ||
156 | cmdparams.RemoveAt(0); | ||
157 | |||
148 | if (command.Equals("link-mapping")) | 158 | if (command.Equals("link-mapping")) |
149 | { | 159 | { |
150 | if (cmdparams.Length == 2) | 160 | if (cmdparams.Count == 2) |
151 | { | 161 | { |
152 | try | 162 | try |
153 | { | 163 | { |
@@ -166,11 +176,11 @@ namespace OpenSim | |||
166 | else if (command.Equals("link-region")) | 176 | else if (command.Equals("link-region")) |
167 | { | 177 | { |
168 | // link-region <Xloc> <Yloc> <HostName> <HttpPort> <LocalName> | 178 | // link-region <Xloc> <Yloc> <HostName> <HttpPort> <LocalName> |
169 | if (cmdparams.Length < 4) | 179 | if (cmdparams.Count < 4) |
170 | { | 180 | { |
171 | if ((cmdparams.Length == 1) || (cmdparams.Length ==2)) | 181 | if ((cmdparams.Count == 1) || (cmdparams.Count ==2)) |
172 | { | 182 | { |
173 | LoadXmlLinkFile(cmdparams); | 183 | LoadXmlLinkFile(cmdparams.ToArray()); |
174 | } | 184 | } |
175 | else | 185 | else |
176 | { | 186 | { |
@@ -201,19 +211,16 @@ namespace OpenSim | |||
201 | 211 | ||
202 | if (TryCreateLink(xloc, yloc, externalPort, externalHostName, out regInfo)) | 212 | if (TryCreateLink(xloc, yloc, externalPort, externalHostName, out regInfo)) |
203 | { | 213 | { |
204 | if (cmdparams.Length >= 5) | 214 | if (cmdparams.Count >= 5) |
205 | { | 215 | { |
206 | regInfo.RegionName = ""; | 216 | regInfo.RegionName = ""; |
207 | for (int i = 4; i < cmdparams.Length; i++) | 217 | for (int i = 4; i < cmdparams.Count; i++) |
208 | regInfo.RegionName += cmdparams[i] + " "; | 218 | regInfo.RegionName += cmdparams[i] + " "; |
209 | } | 219 | } |
210 | } | 220 | } |
211 | 221 | ||
212 | return; | 222 | return; |
213 | } | 223 | } |
214 | |||
215 | base.RunCmd(command, cmdparams); | ||
216 | |||
217 | } | 224 | } |
218 | 225 | ||
219 | private void LoadXmlLinkFile(string[] cmdparams) | 226 | private void LoadXmlLinkFile(string[] cmdparams) |
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index af42a3d..37066c2 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs | |||
@@ -49,7 +49,7 @@ namespace OpenSim | |||
49 | /// <summary> | 49 | /// <summary> |
50 | /// Interactive OpenSim region server | 50 | /// Interactive OpenSim region server |
51 | /// </summary> | 51 | /// </summary> |
52 | public class OpenSim : OpenSimBase, conscmd_callback | 52 | public class OpenSim : OpenSimBase |
53 | { | 53 | { |
54 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 54 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
55 | 55 | ||
@@ -59,11 +59,6 @@ namespace OpenSim | |||
59 | private string m_timedScript = "disabled"; | 59 | private string m_timedScript = "disabled"; |
60 | private Timer m_scriptTimer; | 60 | private Timer m_scriptTimer; |
61 | 61 | ||
62 | /// <summary> | ||
63 | /// List of Console Plugin Commands | ||
64 | /// </summary> | ||
65 | private static List<ConsolePluginCommand> m_PluginCommandInfos = new List<ConsolePluginCommand>(); | ||
66 | |||
67 | public OpenSim(IConfigSource configSource) : base(configSource) | 62 | public OpenSim(IConfigSource configSource) : base(configSource) |
68 | { | 63 | { |
69 | } | 64 | } |
@@ -97,9 +92,189 @@ namespace OpenSim | |||
97 | //GCSettings.LatencyMode = GCLatencyMode.Batch; | 92 | //GCSettings.LatencyMode = GCLatencyMode.Batch; |
98 | //m_log.InfoFormat("[OPENSIM MAIN]: GC Latency Mode: {0}", GCSettings.LatencyMode.ToString()); | 93 | //m_log.InfoFormat("[OPENSIM MAIN]: GC Latency Mode: {0}", GCSettings.LatencyMode.ToString()); |
99 | 94 | ||
100 | m_console = new ConsoleBase("Region", this); | 95 | m_console = new ConsoleBase("Region"); |
101 | MainConsole.Instance = m_console; | 96 | MainConsole.Instance = m_console; |
102 | 97 | ||
98 | m_console.Commands.AddCommand("region", "clear assets", | ||
99 | "clear assets", | ||
100 | "Clear the asset cache", HandleClearAssets); | ||
101 | |||
102 | m_console.Commands.AddCommand("region", "force update", | ||
103 | "force update", | ||
104 | "Force the update of all objects on clients", | ||
105 | HandleForceUpdate); | ||
106 | |||
107 | m_console.Commands.AddCommand("region", "debug packet", | ||
108 | "debug packet <level>", | ||
109 | "Turn on packet debugging", Debug); | ||
110 | |||
111 | m_console.Commands.AddCommand("region", "debug scene", | ||
112 | "debug scene <cripting> <collisions> <physics>", | ||
113 | "Turn on scene debugging", Debug); | ||
114 | |||
115 | m_console.Commands.AddCommand("region", "change region", | ||
116 | "change region <region name>", | ||
117 | "Change current console region", ChangeSelectedRegion); | ||
118 | |||
119 | m_console.Commands.AddCommand("region", "save xml", | ||
120 | "save xml", | ||
121 | "Save a region's data in XML format", SaveXml); | ||
122 | |||
123 | m_console.Commands.AddCommand("region", "save xml2", | ||
124 | "save xml2", | ||
125 | "Save a region's data in XML2 format", SaveXml2); | ||
126 | |||
127 | m_console.Commands.AddCommand("region", "load xml", | ||
128 | "load xml [-newIDs [<x> <y> <z>]]", | ||
129 | "Load a region's data from XML format", LoadXml); | ||
130 | |||
131 | m_console.Commands.AddCommand("region", "load xml2", | ||
132 | "load xml2", | ||
133 | "Load a region's data from XML2 format", LoadXml2); | ||
134 | |||
135 | m_console.Commands.AddCommand("region", "save prims xml2", | ||
136 | "save prims xml2 [<prim name> <file name>]", | ||
137 | "Save named prim to XML2", SavePrimsXml2); | ||
138 | |||
139 | m_console.Commands.AddCommand("region", "load oar", | ||
140 | "load oar <oar name>", | ||
141 | "Load a region's data from OAR archive", LoadOar); | ||
142 | |||
143 | m_console.Commands.AddCommand("region", "save oar", | ||
144 | "save oar <oar name>", | ||
145 | "Save a region's data to an OAR archive", SaveOar); | ||
146 | |||
147 | m_console.Commands.AddCommand("region", "save inventory", | ||
148 | "save inventory <first> <last> <path> <file>", | ||
149 | "Save user inventory data", SaveInv); | ||
150 | |||
151 | m_console.Commands.AddCommand("region", "load inventory", | ||
152 | "load inventory <first> <last> <path> <file>", | ||
153 | "Load user inventory data", LoadInv); | ||
154 | |||
155 | m_console.Commands.AddCommand("region", "edit scale", | ||
156 | "edit scale <name> <x> <y> <z>", | ||
157 | "Change the scale of a named prim", HandleEditScale); | ||
158 | |||
159 | m_console.Commands.AddCommand("region", "kick user", | ||
160 | "kick user <first> <last>", | ||
161 | "Kick a user off the simulator", HandleEditScale); | ||
162 | |||
163 | m_console.Commands.AddCommand("region", "show assets", | ||
164 | "show assets", | ||
165 | "Show asset data", HandleShow); | ||
166 | |||
167 | m_console.Commands.AddCommand("region", "show users", | ||
168 | "show users [full]", | ||
169 | "Show user data", HandleShow); | ||
170 | |||
171 | m_console.Commands.AddCommand("region", "show users full", | ||
172 | "show users full", | ||
173 | String.Empty, HandleShow); | ||
174 | |||
175 | m_console.Commands.AddCommand("region", "show modules", | ||
176 | "show modules", | ||
177 | "Show module data", HandleShow); | ||
178 | |||
179 | m_console.Commands.AddCommand("region", "show regions", | ||
180 | "show regions", | ||
181 | "Show region data", HandleShow); | ||
182 | |||
183 | m_console.Commands.AddCommand("region", "show queues", | ||
184 | "show queues", | ||
185 | "Show queue data", HandleShow); | ||
186 | |||
187 | m_console.Commands.AddCommand("region", "alert", | ||
188 | "alert <first> <last> <message>", | ||
189 | "Send an alert to a user", RunCommand); | ||
190 | |||
191 | m_console.Commands.AddCommand("region", "alert general", | ||
192 | "alert general <message>", | ||
193 | "Send an alert everyone", RunCommand); | ||
194 | |||
195 | m_console.Commands.AddCommand("region", "backup", | ||
196 | "backup", | ||
197 | "Persist objects to the database now", RunCommand); | ||
198 | |||
199 | m_console.Commands.AddCommand("region", "create region", | ||
200 | "create region", | ||
201 | "Create a new region", HandleCreateRegion); | ||
202 | |||
203 | m_console.Commands.AddCommand("region", "login enable", | ||
204 | "login enable", | ||
205 | "Enable logins to the simulator", HandleLoginEnable); | ||
206 | |||
207 | m_console.Commands.AddCommand("region", "login disable", | ||
208 | "login disable", | ||
209 | "Disable logins to the simulator", HandleLoginDisable); | ||
210 | |||
211 | m_console.Commands.AddCommand("region", "login status", | ||
212 | "login status", | ||
213 | "Display status of logins", HandleLoginStatus); | ||
214 | |||
215 | m_console.Commands.AddCommand("region", "restart", | ||
216 | "restart", | ||
217 | "Restart all sims in this instance", RunCommand); | ||
218 | |||
219 | m_console.Commands.AddCommand("region", "config set", | ||
220 | "config set <section> <field> <value>", | ||
221 | "Set a config option", HandleConfig); | ||
222 | |||
223 | m_console.Commands.AddCommand("region", "config get", | ||
224 | "config get <section> <field>", | ||
225 | "Read a config option", HandleConfig); | ||
226 | |||
227 | m_console.Commands.AddCommand("region", "config save", | ||
228 | "config save", | ||
229 | "Save current configuration", HandleConfig); | ||
230 | |||
231 | m_console.Commands.AddCommand("region", "command-script", | ||
232 | "command-script <script>", | ||
233 | "Run a command script from file", RunCommand); | ||
234 | |||
235 | m_console.Commands.AddCommand("region", "export-map", | ||
236 | "export-map <file>", | ||
237 | "Save an image of the world map", RunCommand); | ||
238 | |||
239 | m_console.Commands.AddCommand("region", "remove-region", | ||
240 | "remove-region <name>", | ||
241 | "Remove a region from this simulator", RunCommand); | ||
242 | |||
243 | m_console.Commands.AddCommand("region", "delete-region", | ||
244 | "delete-region <name>", | ||
245 | "Delete a region from disk", RunCommand); | ||
246 | |||
247 | m_console.Commands.AddCommand("region", "predecode-j2k", | ||
248 | "predecode-j2k [<num threads>]>", | ||
249 | "Precache assets,decode j2k layerdata", RunCommand); | ||
250 | |||
251 | m_console.Commands.AddCommand("region", "modules list", | ||
252 | "modules list", | ||
253 | "List modules", HandleModules); | ||
254 | |||
255 | m_console.Commands.AddCommand("region", "modules load", | ||
256 | "modules load <name>", | ||
257 | "Load a module", HandleModules); | ||
258 | |||
259 | m_console.Commands.AddCommand("region", "modules unload", | ||
260 | "modules unload <name>", | ||
261 | "Unload a module", HandleModules); | ||
262 | |||
263 | m_console.Commands.AddCommand("region", "Add-InventoryHost", | ||
264 | "Add-InventoryHost <host>", | ||
265 | String.Empty, RunCommand); | ||
266 | |||
267 | if (ConfigurationSettings.Standalone) | ||
268 | { | ||
269 | m_console.Commands.AddCommand("region", "create user", | ||
270 | "create user [<first> [<last> [<pass> [<x> <y> [<email>]]]]]", | ||
271 | "Create a new user", HandleCreateUser); | ||
272 | |||
273 | m_console.Commands.AddCommand("region", "reset user password", | ||
274 | "reset user password [<first> [<last> [<password>]]]", | ||
275 | "Reset a user password", HandleResetUserPassword); | ||
276 | } | ||
277 | |||
103 | base.StartupSpecific(); | 278 | base.StartupSpecific(); |
104 | 279 | ||
105 | //Run Startup Commands | 280 | //Run Startup Commands |
@@ -122,11 +297,9 @@ namespace OpenSim | |||
122 | } | 297 | } |
123 | 298 | ||
124 | PrintFileToConsole("startuplogo.txt"); | 299 | PrintFileToConsole("startuplogo.txt"); |
125 | RegisterCmd("echoTest", RunEchoTest, "this echos your command args to see how they are parsed"); | ||
126 | RegisterCmd("kickuser", KickUserCommand, "kickuser [first] [last] - attempts to log off a user from any region we are serving"); | ||
127 | 300 | ||
128 | // For now, start at the 'root' level by default | 301 | // For now, start at the 'root' level by default |
129 | ChangeSelectedRegion(new string[] {"root"}); | 302 | ChangeSelectedRegion("region", new string[] {"change", "region", "root"}); |
130 | } | 303 | } |
131 | 304 | ||
132 | public override void ShutdownSpecific() | 305 | public override void ShutdownSpecific() |
@@ -148,17 +321,9 @@ namespace OpenSim | |||
148 | 321 | ||
149 | #region Console Commands | 322 | #region Console Commands |
150 | 323 | ||
151 | private void RunEchoTest(string[] cmdparams) | 324 | private void KickUserCommand(string module, string[] cmdparams) |
152 | { | 325 | { |
153 | for (int i = 0; i < cmdparams.Length; i++) | 326 | if (cmdparams.Length < 4) |
154 | { | ||
155 | m_log.Info("[EchoTest]: <arg" + i + ">"+cmdparams[i]+"</arg" + i + ">"); | ||
156 | } | ||
157 | } | ||
158 | |||
159 | private void KickUserCommand(string[] cmdparams) | ||
160 | { | ||
161 | if (cmdparams.Length < 2) | ||
162 | return; | 327 | return; |
163 | 328 | ||
164 | IList agents = m_sceneManager.GetCurrentSceneAvatars(); | 329 | IList agents = m_sceneManager.GetCurrentSceneAvatars(); |
@@ -167,7 +332,7 @@ namespace OpenSim | |||
167 | { | 332 | { |
168 | RegionInfo regionInfo = m_sceneManager.GetRegionInfo(presence.RegionHandle); | 333 | RegionInfo regionInfo = m_sceneManager.GetRegionInfo(presence.RegionHandle); |
169 | 334 | ||
170 | if (presence.Firstname.ToLower().Contains(cmdparams[0].ToLower()) && presence.Lastname.ToLower().Contains(cmdparams[1].ToLower())) | 335 | if (presence.Firstname.ToLower().Contains(cmdparams[2].ToLower()) && presence.Lastname.ToLower().Contains(cmdparams[3].ToLower())) |
171 | { | 336 | { |
172 | m_console.Notice( | 337 | m_console.Notice( |
173 | String.Format( | 338 | String.Format( |
@@ -219,302 +384,261 @@ namespace OpenSim | |||
219 | } | 384 | } |
220 | } | 385 | } |
221 | 386 | ||
222 | /// <summary> | 387 | private void HandleClearAssets(string module, string[] args) |
223 | /// Runs commands issued by the server console from the operator | ||
224 | /// </summary> | ||
225 | /// <param name="command">The first argument of the parameter (the command)</param> | ||
226 | /// <param name="cmdparams">Additional arguments passed to the command</param> | ||
227 | public override void RunCmd(string command, string[] cmdparams) | ||
228 | { | 388 | { |
229 | base.RunCmd(command, cmdparams); | 389 | m_assetCache.Clear(); |
230 | RunPluginCommands(command , cmdparams); | 390 | } |
231 | |||
232 | switch (command) | ||
233 | { | ||
234 | case "clear-assets": | ||
235 | m_assetCache.Clear(); | ||
236 | break; | ||
237 | |||
238 | case "force-update": | ||
239 | m_console.Notice("Updating all clients"); | ||
240 | m_sceneManager.ForceCurrentSceneClientUpdate(); | ||
241 | break; | ||
242 | |||
243 | case "edit-scale": | ||
244 | if (cmdparams.Length == 4) | ||
245 | { | ||
246 | m_sceneManager.HandleEditCommandOnCurrentScene(cmdparams); | ||
247 | } | ||
248 | break; | ||
249 | |||
250 | case "debug": | ||
251 | Debug(cmdparams); | ||
252 | break; | ||
253 | |||
254 | case "save-xml": | ||
255 | SaveXml(cmdparams); | ||
256 | break; | ||
257 | |||
258 | case "load-xml": | ||
259 | LoadXml(cmdparams); | ||
260 | break; | ||
261 | |||
262 | case "save-xml2": | ||
263 | SaveXml2(cmdparams); | ||
264 | break; | ||
265 | 391 | ||
266 | case "load-xml2": | 392 | private void HandleForceUpdate(string module, string[] args) |
267 | LoadXml2(cmdparams); | 393 | { |
268 | break; | 394 | m_console.Notice("Updating all clients"); |
395 | m_sceneManager.ForceCurrentSceneClientUpdate(); | ||
396 | } | ||
269 | 397 | ||
270 | case "save-prims-xml2": | 398 | private void HandleEditScale(string module, string[] args) |
271 | if (cmdparams.Length > 1) | 399 | { |
272 | { | 400 | if (args.Length == 5) |
273 | m_sceneManager.SaveNamedPrimsToXml2(cmdparams[0], cmdparams[1]); | 401 | { |
274 | } | 402 | m_sceneManager.HandleEditCommandOnCurrentScene(args); |
275 | else | 403 | } |
276 | { | 404 | else |
277 | m_sceneManager.SaveNamedPrimsToXml2("Primitive", DEFAULT_PRIM_BACKUP_FILENAME); | 405 | { |
278 | } | 406 | m_console.Notice("Argument error: edit scale <prim name> <x> <y> <z>"); |
279 | break; | 407 | } |
408 | } | ||
280 | 409 | ||
281 | case "load-oar": | 410 | private void HandleCreateRegion(string module, string[] cmd) |
282 | LoadOar(cmdparams); | 411 | { |
283 | break; | 412 | if (cmd.Length < 4) |
413 | { | ||
414 | m_console.Error("Usage: create region <region name> <region_file.xml>"); | ||
415 | return; | ||
416 | } | ||
284 | 417 | ||
285 | case "save-oar": | 418 | string regionsDir = ConfigSource.Source.Configs["Startup"].GetString("regionload_regionsdir", "Regions").Trim(); |
286 | SaveOar(cmdparams); | 419 | string regionFile = String.Format("{0}/{1}", regionsDir, cmd[3]); |
287 | break; | 420 | // Allow absolute and relative specifiers |
421 | if (cmd[3].StartsWith("/") || cmd[3].StartsWith("\\") || cmd[3].StartsWith("..")) | ||
422 | regionFile = cmd[3]; | ||
288 | 423 | ||
289 | case "save-inv": | 424 | CreateRegion(new RegionInfo(cmd[2], regionFile, false, ConfigSource.Source), true); |
290 | SaveInv(cmdparams); | 425 | } |
291 | break; | ||
292 | 426 | ||
293 | case "load-inv": | 427 | private void HandleLoginEnable(string module, string[] cmd) |
294 | LoadInv(cmdparams); | 428 | { |
295 | break; | 429 | ProcessLogin(true); |
430 | } | ||
296 | 431 | ||
297 | case "plugin": | 432 | private void HandleLoginDisable(string module, string[] cmd) |
298 | m_sceneManager.SendCommandToPluginModules(cmdparams); | 433 | { |
299 | break; | 434 | ProcessLogin(false); |
435 | } | ||
300 | 436 | ||
301 | case "command-script": | 437 | private void HandleLoginStatus(string module, string[] cmd) |
302 | if (cmdparams.Length > 0) | 438 | { |
303 | { | 439 | if (m_commsManager.GridService.RegionLoginsEnabled == false) |
304 | RunCommandScript(cmdparams[0]); | ||
305 | } | ||
306 | break; | ||
307 | 440 | ||
308 | case "backup": | 441 | m_log.Info("[ Login ] Login are disabled "); |
309 | m_sceneManager.BackupCurrentScene(); | 442 | else |
310 | break; | 443 | m_log.Info("[ Login ] Login are enabled"); |
444 | } | ||
311 | 445 | ||
312 | case "alert": | 446 | private void HandleConfig(string module, string[] cmd) |
313 | m_sceneManager.HandleAlertCommandOnCurrentScene(cmdparams); | 447 | { |
314 | break; | 448 | List<string> args = new List<string>(cmd); |
449 | args.RemoveAt(0); | ||
450 | string[] cmdparams = args.ToArray(); | ||
451 | string n = "CONFIG"; | ||
315 | 452 | ||
316 | case "create": | 453 | if (cmdparams.Length > 0) |
317 | Create(cmdparams); | 454 | { |
318 | break; | 455 | switch (cmdparams[0].ToLower()) |
456 | { | ||
457 | case "set": | ||
458 | if (cmdparams.Length < 4) | ||
459 | { | ||
460 | m_console.Error(n, "SYNTAX: " + n + " SET SECTION KEY VALUE"); | ||
461 | m_console.Error(n, "EXAMPLE: " + n + " SET ScriptEngine.DotNetEngine NumberOfScriptThreads 5"); | ||
462 | } | ||
463 | else | ||
464 | { | ||
465 | // IConfig c = DefaultConfig().Configs[cmdparams[1]]; | ||
466 | // if (c == null) | ||
467 | // c = DefaultConfig().AddConfig(cmdparams[1]); | ||
468 | IConfig c; | ||
469 | IConfigSource source = new IniConfigSource(); | ||
470 | c = source.AddConfig(cmdparams[1]); | ||
471 | if (c != null) | ||
472 | { | ||
473 | string _value = String.Join(" ", cmdparams, 3, cmdparams.Length - 3); | ||
474 | c.Set(cmdparams[2], _value); | ||
475 | m_config.Source.Merge(source); | ||
319 | 476 | ||
320 | case "login-enable": | 477 | m_console.Error(n, n + " " + n + " " + cmdparams[1] + " " + cmdparams[2] + " " + |
321 | ProcessLogin(true); | 478 | _value); |
322 | break; | 479 | } |
323 | case "login-disable": | 480 | } |
324 | ProcessLogin(false); | 481 | break; |
325 | break; | 482 | case "get": |
326 | case "login-status": | 483 | if (cmdparams.Length < 3) |
327 | if (m_commsManager.GridService.RegionLoginsEnabled == false) | 484 | { |
485 | m_console.Error(n, "SYNTAX: " + n + " GET SECTION KEY"); | ||
486 | m_console.Error(n, "EXAMPLE: " + n + " GET ScriptEngine.DotNetEngine NumberOfScriptThreads"); | ||
487 | } | ||
488 | else | ||
489 | { | ||
490 | IConfig c = m_config.Source.Configs[cmdparams[1]]; // DefaultConfig().Configs[cmdparams[1]]; | ||
491 | if (c == null) | ||
492 | { | ||
493 | m_console.Notice(n, "Section \"" + cmdparams[1] + "\" does not exist."); | ||
494 | break; | ||
495 | } | ||
496 | else | ||
497 | { | ||
498 | m_console.Notice(n + " GET " + cmdparams[1] + " " + cmdparams[2] + ": " + | ||
499 | c.GetString(cmdparams[2])); | ||
500 | } | ||
501 | } | ||
328 | 502 | ||
329 | m_log.Info("[ Login ] Login are disabled "); | ||
330 | else | ||
331 | m_log.Info("[ Login ] Login are enabled"); | ||
332 | break; | ||
333 | case "create-region": | ||
334 | if (cmdparams.Length < 2) | ||
335 | { | ||
336 | m_console.Error("Usage: create-region <region name> <region_file.xml>"); | ||
337 | break; | 503 | break; |
338 | } | 504 | case "save": |
505 | m_console.Notice("Saving configuration file: " + Application.iniFilePath); | ||
506 | m_config.Save(Application.iniFilePath); | ||
507 | break; | ||
508 | } | ||
509 | } | ||
510 | } | ||
339 | 511 | ||
340 | string regionsDir = ConfigSource.Source.Configs["Startup"].GetString("regionload_regionsdir", "Regions").Trim(); | 512 | private void HandleModules(string module, string[] cmd) |
341 | string regionFile = String.Format("{0}/{1}", regionsDir, cmdparams[1]); | 513 | { |
342 | // Allow absolute and relative specifiers | 514 | List<string> args = new List<string>(cmd); |
343 | if (cmdparams[1].StartsWith("/") || cmdparams[1].StartsWith("\\") || cmdparams[1].StartsWith("..")) | 515 | args.RemoveAt(0); |
344 | regionFile = cmdparams[1]; | 516 | string[] cmdparams = args.ToArray(); |
345 | 517 | ||
346 | CreateRegion(new RegionInfo(cmdparams[0], regionFile, false, ConfigSource.Source), true); | 518 | if (cmdparams.Length > 0) |
347 | break; | 519 | { |
520 | switch (cmdparams[0].ToLower()) | ||
521 | { | ||
522 | case "list": | ||
523 | foreach (IRegionModule irm in m_moduleLoader.GetLoadedSharedModules) | ||
524 | { | ||
525 | m_console.Notice("Shared region module: " + irm.Name); | ||
526 | } | ||
527 | break; | ||
528 | case "unload": | ||
529 | if (cmdparams.Length > 1) | ||
530 | { | ||
531 | foreach (IRegionModule rm in new ArrayList(m_moduleLoader.GetLoadedSharedModules)) | ||
532 | { | ||
533 | if (rm.Name.ToLower() == cmdparams[1].ToLower()) | ||
534 | { | ||
535 | m_console.Notice("Unloading module: " + rm.Name); | ||
536 | m_moduleLoader.UnloadModule(rm); | ||
537 | } | ||
538 | } | ||
539 | } | ||
540 | break; | ||
541 | case "load": | ||
542 | if (cmdparams.Length > 1) | ||
543 | { | ||
544 | foreach (Scene s in new ArrayList(m_sceneManager.Scenes)) | ||
545 | { | ||
348 | 546 | ||
349 | case "remove-region": | 547 | m_console.Notice("Loading module: " + cmdparams[1]); |
350 | string regRemoveName = CombineParams(cmdparams, 0); | 548 | m_moduleLoader.LoadRegionModules(cmdparams[1], s); |
549 | } | ||
550 | } | ||
551 | break; | ||
552 | } | ||
553 | } | ||
554 | } | ||
351 | 555 | ||
352 | Scene removeScene; | ||
353 | if (m_sceneManager.TryGetScene(regRemoveName, out removeScene)) | ||
354 | RemoveRegion(removeScene, false); | ||
355 | else | ||
356 | m_console.Error("no region with that name"); | ||
357 | break; | ||
358 | 556 | ||
359 | case "delete-region": | 557 | /// <summary> |
360 | string regDeleteName = CombineParams(cmdparams, 0); | 558 | /// Runs commands issued by the server console from the operator |
559 | /// </summary> | ||
560 | /// <param name="command">The first argument of the parameter (the command)</param> | ||
561 | /// <param name="cmdparams">Additional arguments passed to the command</param> | ||
562 | public void RunCommand(string module, string[] cmdparams) | ||
563 | { | ||
564 | List<string> args = new List<string>(cmdparams); | ||
565 | if (args.Count < 1) | ||
566 | return; | ||
361 | 567 | ||
362 | Scene killScene; | 568 | string command = args[0]; |
363 | if (m_sceneManager.TryGetScene(regDeleteName, out killScene)) | 569 | args.RemoveAt(0); |
364 | RemoveRegion(killScene, true); | ||
365 | else | ||
366 | m_console.Error("no region with that name"); | ||
367 | break; | ||
368 | 570 | ||
369 | case "restart": | 571 | cmdparams = args.ToArray(); |
370 | m_sceneManager.RestartCurrentScene(); | ||
371 | break; | ||
372 | 572 | ||
373 | case "change-region": | 573 | switch (command) |
374 | ChangeSelectedRegion(cmdparams); | 574 | { |
375 | break; | 575 | case "command-script": |
576 | if (cmdparams.Length > 0) | ||
577 | { | ||
578 | RunCommandScript(cmdparams[0]); | ||
579 | } | ||
580 | break; | ||
376 | 581 | ||
377 | case "export-map": | 582 | case "backup": |
378 | if (cmdparams.Length > 0) | 583 | m_sceneManager.BackupCurrentScene(); |
379 | { | 584 | break; |
380 | m_sceneManager.CurrentOrFirstScene.ExportWorldMap(cmdparams[0]); | ||
381 | } | ||
382 | else | ||
383 | { | ||
384 | m_sceneManager.CurrentOrFirstScene.ExportWorldMap("exportmap.jpg"); | ||
385 | } | ||
386 | break; | ||
387 | 585 | ||
388 | case "config": | 586 | case "alert": |
389 | string n = command.ToUpper(); | 587 | m_sceneManager.HandleAlertCommandOnCurrentScene(cmdparams); |
390 | if (cmdparams.Length > 0) | 588 | break; |
391 | { | ||
392 | switch (cmdparams[0].ToLower()) | ||
393 | { | ||
394 | case "set": | ||
395 | if (cmdparams.Length < 4) | ||
396 | { | ||
397 | m_console.Error(n, "SYNTAX: " + n + " SET SECTION KEY VALUE"); | ||
398 | m_console.Error(n, "EXAMPLE: " + n + " SET ScriptEngine.DotNetEngine NumberOfScriptThreads 5"); | ||
399 | } | ||
400 | else | ||
401 | { | ||
402 | // IConfig c = DefaultConfig().Configs[cmdparams[1]]; | ||
403 | // if (c == null) | ||
404 | // c = DefaultConfig().AddConfig(cmdparams[1]); | ||
405 | IConfig c; | ||
406 | IConfigSource source = new IniConfigSource(); | ||
407 | c = source.AddConfig(cmdparams[1]); | ||
408 | if (c != null) | ||
409 | { | ||
410 | string _value = String.Join(" ", cmdparams, 3, cmdparams.Length - 3); | ||
411 | c.Set(cmdparams[2], _value); | ||
412 | m_config.Source.Merge(source); | ||
413 | |||
414 | m_console.Error(n, n + " " + n + " " + cmdparams[1] + " " + cmdparams[2] + " " + | ||
415 | _value); | ||
416 | } | ||
417 | } | ||
418 | break; | ||
419 | case "get": | ||
420 | if (cmdparams.Length < 3) | ||
421 | { | ||
422 | m_console.Error(n, "SYNTAX: " + n + " GET SECTION KEY"); | ||
423 | m_console.Error(n, "EXAMPLE: " + n + " GET ScriptEngine.DotNetEngine NumberOfScriptThreads"); | ||
424 | } | ||
425 | else | ||
426 | { | ||
427 | IConfig c = m_config.Source.Configs[cmdparams[1]]; // DefaultConfig().Configs[cmdparams[1]]; | ||
428 | if (c == null) | ||
429 | { | ||
430 | m_console.Notice(n, "Section \"" + cmdparams[1] + "\" does not exist."); | ||
431 | break; | ||
432 | } | ||
433 | else | ||
434 | { | ||
435 | m_console.Notice(n + " GET " + cmdparams[1] + " " + cmdparams[2] + ": " + | ||
436 | c.GetString(cmdparams[2])); | ||
437 | } | ||
438 | } | ||
439 | 589 | ||
440 | break; | 590 | case "remove-region": |
441 | case "save": | 591 | string regRemoveName = CombineParams(cmdparams, 0); |
442 | m_console.Notice("Saving configuration file: " + Application.iniFilePath); | ||
443 | m_config.Save(Application.iniFilePath); | ||
444 | break; | ||
445 | } | ||
446 | } | ||
447 | break; | ||
448 | 592 | ||
449 | case "modules": | 593 | Scene removeScene; |
450 | if (cmdparams.Length > 0) | 594 | if (m_sceneManager.TryGetScene(regRemoveName, out removeScene)) |
451 | { | 595 | RemoveRegion(removeScene, false); |
452 | switch (cmdparams[0].ToLower()) | 596 | else |
453 | { | 597 | m_console.Error("no region with that name"); |
454 | case "list": | 598 | break; |
455 | foreach (IRegionModule irm in m_moduleLoader.GetLoadedSharedModules) | ||
456 | { | ||
457 | m_console.Notice("Shared region module: " + irm.Name); | ||
458 | } | ||
459 | break; | ||
460 | case "unload": | ||
461 | if (cmdparams.Length > 1) | ||
462 | { | ||
463 | foreach (IRegionModule rm in new ArrayList(m_moduleLoader.GetLoadedSharedModules)) | ||
464 | { | ||
465 | if (rm.Name.ToLower() == cmdparams[1].ToLower()) | ||
466 | { | ||
467 | m_console.Notice("Unloading module: " + rm.Name); | ||
468 | m_moduleLoader.UnloadModule(rm); | ||
469 | } | ||
470 | } | ||
471 | } | ||
472 | break; | ||
473 | case "load": | ||
474 | if (cmdparams.Length > 1) | ||
475 | { | ||
476 | foreach (Scene s in new ArrayList(m_sceneManager.Scenes)) | ||
477 | { | ||
478 | 599 | ||
479 | m_console.Notice("Loading module: " + cmdparams[1]); | 600 | case "delete-region": |
480 | m_moduleLoader.LoadRegionModules(cmdparams[1], s); | 601 | string regDeleteName = CombineParams(cmdparams, 0); |
481 | } | ||
482 | } | ||
483 | break; | ||
484 | } | ||
485 | } | ||
486 | 602 | ||
487 | break; | 603 | Scene killScene; |
604 | if (m_sceneManager.TryGetScene(regDeleteName, out killScene)) | ||
605 | RemoveRegion(killScene, true); | ||
606 | else | ||
607 | m_console.Error("no region with that name"); | ||
608 | break; | ||
488 | 609 | ||
489 | case "Add-InventoryHost": | 610 | case "restart": |
490 | if (cmdparams.Length > 0) | 611 | m_sceneManager.RestartCurrentScene(); |
491 | { | 612 | break; |
492 | m_commsManager.AddInventoryService(cmdparams[0]); | ||
493 | } | ||
494 | break; | ||
495 | 613 | ||
496 | case "reset": | 614 | case "export-map": |
497 | Reset(cmdparams); | 615 | if (cmdparams.Length > 0) |
498 | break; | 616 | { |
499 | 617 | m_sceneManager.CurrentOrFirstScene.ExportWorldMap(cmdparams[0]); | |
500 | case "predecode-j2k": | 618 | } |
501 | if (cmdparams.Length > 0) | 619 | else |
502 | { | 620 | { |
503 | m_sceneManager.CacheJ2kDecode(Convert.ToInt32(cmdparams[0])); | 621 | m_sceneManager.CurrentOrFirstScene.ExportWorldMap("exportmap.jpg"); |
504 | } | 622 | } |
505 | else | 623 | break; |
506 | { | ||
507 | m_sceneManager.CacheJ2kDecode(1); | ||
508 | } | ||
509 | break; | ||
510 | 624 | ||
511 | default: | 625 | case "Add-InventoryHost": |
512 | string[] tmpPluginArgs = new string[cmdparams.Length + 1]; | 626 | if (cmdparams.Length > 0) |
513 | cmdparams.CopyTo(tmpPluginArgs, 1); | 627 | { |
514 | tmpPluginArgs[0] = command; | 628 | m_commsManager.AddInventoryService(cmdparams[0]); |
629 | } | ||
630 | break; | ||
515 | 631 | ||
516 | m_sceneManager.SendCommandToPluginModules(tmpPluginArgs); | 632 | case "predecode-j2k": |
517 | break; | 633 | if (cmdparams.Length > 0) |
634 | { | ||
635 | m_sceneManager.CacheJ2kDecode(Convert.ToInt32(cmdparams[0])); | ||
636 | } | ||
637 | else | ||
638 | { | ||
639 | m_sceneManager.CacheJ2kDecode(1); | ||
640 | } | ||
641 | break; | ||
518 | } | 642 | } |
519 | } | 643 | } |
520 | 644 | ||
@@ -522,46 +646,39 @@ namespace OpenSim | |||
522 | /// Change the currently selected region. The selected region is that operated upon by single region commands. | 646 | /// Change the currently selected region. The selected region is that operated upon by single region commands. |
523 | /// </summary> | 647 | /// </summary> |
524 | /// <param name="cmdParams"></param> | 648 | /// <param name="cmdParams"></param> |
525 | protected void ChangeSelectedRegion(string[] cmdparams) | 649 | protected void ChangeSelectedRegion(string module, string[] cmdparams) |
526 | { | 650 | { |
527 | if (cmdparams.Length > 0) | 651 | if (cmdparams.Length > 2) |
528 | { | 652 | { |
529 | string newRegionName = CombineParams(cmdparams, 0); | 653 | string newRegionName = CombineParams(cmdparams, 2); |
530 | 654 | ||
531 | if (!m_sceneManager.TrySetCurrentScene(newRegionName)) | 655 | if (!m_sceneManager.TrySetCurrentScene(newRegionName)) |
532 | m_console.Error("Couldn't select region " + newRegionName); | 656 | m_console.Error("Couldn't select region " + newRegionName); |
533 | } | 657 | } |
534 | else | 658 | else |
535 | { | 659 | { |
536 | m_console.Error("Usage: change-region <region name>"); | 660 | m_console.Error("Usage: change region <region name>"); |
537 | } | 661 | } |
538 | 662 | ||
539 | string regionName = (m_sceneManager.CurrentScene == null ? "root" : m_sceneManager.CurrentScene.RegionInfo.RegionName); | 663 | string regionName = (m_sceneManager.CurrentScene == null ? "root" : m_sceneManager.CurrentScene.RegionInfo.RegionName); |
540 | m_console.Notice(String.Format("Currently selected region is {0}", regionName)); | 664 | m_console.Notice(String.Format("Currently selected region is {0}", regionName)); |
541 | m_console.DefaultPrompt = String.Format("Region ({0}) ", regionName); | 665 | m_console.DefaultPrompt = String.Format("Region ({0}) ", regionName); |
666 | m_console.ConsoleScene = m_sceneManager.CurrentScene; | ||
542 | } | 667 | } |
543 | 668 | ||
544 | /// <summary> | 669 | /// <summary> |
545 | /// Execute switch for some of the create commands | 670 | /// Execute switch for some of the create commands |
546 | /// </summary> | 671 | /// </summary> |
547 | /// <param name="args"></param> | 672 | /// <param name="args"></param> |
548 | protected void Create(string[] args) | 673 | private void HandleCreateUser(string module, string[] cmd) |
549 | { | 674 | { |
550 | if (args.Length == 0) | 675 | if (ConfigurationSettings.Standalone) |
551 | return; | ||
552 | |||
553 | switch (args[0]) | ||
554 | { | 676 | { |
555 | case "user": | 677 | CreateUser(cmd); |
556 | if (ConfigurationSettings.Standalone) | 678 | } |
557 | { | 679 | else |
558 | CreateUser(args); | 680 | { |
559 | } | 681 | m_console.Notice("Create user is not available in grid mode, use the user server."); |
560 | else | ||
561 | { | ||
562 | m_console.Notice("Create user is not available in grid mode, use the user server."); | ||
563 | } | ||
564 | break; | ||
565 | } | 682 | } |
566 | } | 683 | } |
567 | 684 | ||
@@ -569,30 +686,15 @@ namespace OpenSim | |||
569 | /// Execute switch for some of the reset commands | 686 | /// Execute switch for some of the reset commands |
570 | /// </summary> | 687 | /// </summary> |
571 | /// <param name="args"></param> | 688 | /// <param name="args"></param> |
572 | protected void Reset(string[] args) | 689 | protected void HandleResetUserPassword(string module, string[] cmd) |
573 | { | 690 | { |
574 | if (args.Length == 0) | 691 | if (ConfigurationSettings.Standalone) |
575 | return; | ||
576 | |||
577 | switch (args[0]) | ||
578 | { | 692 | { |
579 | case "user": | 693 | ResetUserPassword(cmd); |
580 | 694 | } | |
581 | switch (args[1]) | 695 | else |
582 | { | 696 | { |
583 | case "password": | 697 | m_console.Notice("Reset user password is not available in grid mode, use the user-server."); |
584 | if (ConfigurationSettings.Standalone) | ||
585 | { | ||
586 | ResetUserPassword(args); | ||
587 | } | ||
588 | else | ||
589 | { | ||
590 | m_console.Notice("Reset user password is not available in grid mode, use the user-server."); | ||
591 | } | ||
592 | break; | ||
593 | } | ||
594 | |||
595 | break; | ||
596 | } | 698 | } |
597 | } | 699 | } |
598 | 700 | ||
@@ -600,18 +702,18 @@ namespace OpenSim | |||
600 | /// Turn on some debugging values for OpenSim. | 702 | /// Turn on some debugging values for OpenSim. |
601 | /// </summary> | 703 | /// </summary> |
602 | /// <param name="args"></param> | 704 | /// <param name="args"></param> |
603 | protected void Debug(string[] args) | 705 | protected void Debug(string module, string[] args) |
604 | { | 706 | { |
605 | if (args.Length == 0) | 707 | if (args.Length == 1) |
606 | return; | 708 | return; |
607 | 709 | ||
608 | switch (args[0]) | 710 | switch (args[1]) |
609 | { | 711 | { |
610 | case "packet": | 712 | case "packet": |
611 | if (args.Length > 1) | 713 | if (args.Length > 2) |
612 | { | 714 | { |
613 | int newDebug; | 715 | int newDebug; |
614 | if (int.TryParse(args[1], out newDebug)) | 716 | if (int.TryParse(args[2], out newDebug)) |
615 | { | 717 | { |
616 | m_sceneManager.SetDebugPacketLevelOnCurrentScene(newDebug); | 718 | m_sceneManager.SetDebugPacketLevelOnCurrentScene(newDebug); |
617 | } | 719 | } |
@@ -625,17 +727,17 @@ namespace OpenSim | |||
625 | break; | 727 | break; |
626 | 728 | ||
627 | case "scene": | 729 | case "scene": |
628 | if (args.Length == 4) | 730 | if (args.Length == 5) |
629 | { | 731 | { |
630 | if (m_sceneManager.CurrentScene == null) | 732 | if (m_sceneManager.CurrentScene == null) |
631 | { | 733 | { |
632 | m_console.Error("CONSOLE", "Please use 'change-region <regioname>' first"); | 734 | m_console.Notice("Please use 'change region <regioname>' first"); |
633 | } | 735 | } |
634 | else | 736 | else |
635 | { | 737 | { |
636 | bool scriptingOn = !Convert.ToBoolean(args[1]); | 738 | bool scriptingOn = !Convert.ToBoolean(args[2]); |
637 | bool collisionsOn = !Convert.ToBoolean(args[2]); | 739 | bool collisionsOn = !Convert.ToBoolean(args[3]); |
638 | bool physicsOn = !Convert.ToBoolean(args[3]); | 740 | bool physicsOn = !Convert.ToBoolean(args[4]); |
639 | m_sceneManager.CurrentScene.SetSceneCoreDebug(scriptingOn, collisionsOn, physicsOn); | 741 | m_sceneManager.CurrentScene.SetSceneCoreDebug(scriptingOn, collisionsOn, physicsOn); |
640 | 742 | ||
641 | m_console.Notice( | 743 | m_console.Notice( |
@@ -658,87 +760,12 @@ namespace OpenSim | |||
658 | } | 760 | } |
659 | } | 761 | } |
660 | 762 | ||
661 | protected override void ShowHelp(string[] helpArgs) | ||
662 | { | ||
663 | base.ShowHelp(helpArgs); | ||
664 | |||
665 | if (helpArgs.Length == 0) | ||
666 | { | ||
667 | m_console.Notice("alert - send alert to a designated user or all users."); | ||
668 | m_console.Notice(" alert [First] [Last] [Message] - send an alert to a user. Case sensitive."); | ||
669 | m_console.Notice(" alert general [Message] - send an alert to all users."); | ||
670 | m_console.Notice("backup - persist simulator objects to the database ahead of the normal schedule."); | ||
671 | m_console.Notice("clear-assets - clear the asset cache"); | ||
672 | m_console.Notice("create-region <name> <regionfile.xml> - create a new region"); | ||
673 | m_console.Notice("change-region <name> - select the region that single region commands operate upon."); | ||
674 | m_console.Notice("command-script [filename] - Execute command in a file."); | ||
675 | m_console.Notice("debug - debugging commands"); | ||
676 | m_console.Notice(" debug packet 0..255 - print incoming/outgoing packets (0=off)"); | ||
677 | m_console.Notice(" debug scene [scripting] [collision] [physics] - Enable/Disable debug stuff, each can be True/False"); | ||
678 | m_console.Notice("edit-scale [prim name] [x] [y] [z] - resize given prim"); | ||
679 | m_console.Notice("export-map [filename] - save image of world map"); | ||
680 | m_console.Notice("force-update - force an update of prims in the scene"); | ||
681 | m_console.Notice("restart - disconnects all clients and restarts the sims in the instance."); | ||
682 | m_console.Notice("remove-region [name] - remove a region"); | ||
683 | m_console.Notice("delete-region [name] - delete a region and its associated region file"); | ||
684 | m_console.Notice("load-xml [filename] - load prims from XML (DEPRECATED)"); | ||
685 | m_console.Notice("save-xml [filename] - save prims to XML (DEPRECATED)"); | ||
686 | m_console.Notice("save-xml2 [filename] - save prims to XML using version 2 format"); | ||
687 | m_console.Notice("load-xml2 [filename] - load prims from XML using version 2 format"); | ||
688 | m_console.Notice("load-oar [filename] - load an OpenSimulator region archive. This replaces everything in the current region."); | ||
689 | m_console.Notice("save-oar [filename] - Save the current region to an OpenSimulator region archive."); | ||
690 | m_console.Notice("script - manually trigger scripts? or script commands?"); | ||
691 | m_console.Notice("show assets - show state of asset cache."); | ||
692 | m_console.Notice("show modules - shows info about loaded modules."); | ||
693 | m_console.Notice("show queues - show packet queues length for all clients."); | ||
694 | m_console.Notice("show regions - show running region information."); | ||
695 | m_console.Notice("show users - show info about connected users (only root agents)."); | ||
696 | m_console.Notice("show users full - show info about connected users (root and child agents)."); | ||
697 | m_console.Notice("config set section field value - set a config value"); | ||
698 | m_console.Notice("config get section field - get a config value"); | ||
699 | m_console.Notice("config save - save OpenSim.ini"); | ||
700 | m_console.Notice("login-enable - Allows login at sim level"); | ||
701 | m_console.Notice("login-disable - Disable login at sim level"); | ||
702 | m_console.Notice("login-status - Show the actual login status"); | ||
703 | m_console.Notice("predecode-j2k - Precache assets,decode j2k layerdata, First parameter is threads to use"); | ||
704 | ShowPluginCommandsHelp(CombineParams(helpArgs, 0), m_console); | ||
705 | |||
706 | if (ConfigurationSettings.Standalone) | ||
707 | { | ||
708 | m_console.Notice(""); | ||
709 | m_console.Notice("create user - adds a new user."); | ||
710 | m_console.Notice("reset user password - reset a user's password."); | ||
711 | } | ||
712 | } | ||
713 | else | ||
714 | { | ||
715 | // Messily we want to join all the help params back here | ||
716 | //string helpSubject = string.Join(" ", helpArgs); | ||
717 | |||
718 | // FIXME: Very cheap hack to get transition help working. Will disappear very shortly. | ||
719 | if (helpArgs.Length == 1) | ||
720 | { | ||
721 | ICommander moduleCommander = SceneManager.CurrentOrFirstScene.GetCommander(helpArgs[0]); | ||
722 | if (moduleCommander != null) | ||
723 | { | ||
724 | m_console.Notice(moduleCommander.Help); | ||
725 | } | ||
726 | } | ||
727 | else | ||
728 | { | ||
729 | ICommand command = SceneManager.CurrentOrFirstScene.GetCommand(helpArgs[1]); | ||
730 | if (command != null) | ||
731 | { | ||
732 | m_console.Notice(command.Help); | ||
733 | } | ||
734 | } | ||
735 | } | ||
736 | } | ||
737 | |||
738 | // see BaseOpenSimServer | 763 | // see BaseOpenSimServer |
739 | public override void Show(string[] showParams) | 764 | private void HandleShow(string mod, string[] cmd) |
740 | { | 765 | { |
741 | base.Show(showParams); | 766 | List<string> args = new List<string>(cmd); |
767 | args.RemoveAt(0); | ||
768 | string[] showParams = args.ToArray(); | ||
742 | 769 | ||
743 | switch (showParams[0]) | 770 | switch (showParams[0]) |
744 | { | 771 | { |
@@ -864,29 +891,29 @@ namespace OpenSim | |||
864 | uint regX = 1000; | 891 | uint regX = 1000; |
865 | uint regY = 1000; | 892 | uint regY = 1000; |
866 | 893 | ||
867 | if (cmdparams.Length < 2) | 894 | if (cmdparams.Length < 3) |
868 | firstName = MainConsole.Instance.CmdPrompt("First name", "Default"); | 895 | firstName = MainConsole.Instance.CmdPrompt("First name", "Default"); |
869 | else firstName = cmdparams[1]; | 896 | else firstName = cmdparams[2]; |
870 | 897 | ||
871 | if ( cmdparams.Length < 3 ) | 898 | if ( cmdparams.Length < 4 ) |
872 | lastName = MainConsole.Instance.CmdPrompt("Last name", "User"); | 899 | lastName = MainConsole.Instance.CmdPrompt("Last name", "User"); |
873 | else lastName = cmdparams[2]; | 900 | else lastName = cmdparams[3]; |
874 | 901 | ||
875 | if (cmdparams.Length < 4) | 902 | if (cmdparams.Length < 5) |
876 | password = MainConsole.Instance.PasswdPrompt("Password"); | 903 | password = MainConsole.Instance.PasswdPrompt("Password"); |
877 | else password = cmdparams[3]; | 904 | else password = cmdparams[4]; |
878 | 905 | ||
879 | if ( cmdparams.Length < 5 ) | 906 | if ( cmdparams.Length < 6 ) |
880 | regX = Convert.ToUInt32(MainConsole.Instance.CmdPrompt("Start Region X", regX.ToString())); | 907 | regX = Convert.ToUInt32(MainConsole.Instance.CmdPrompt("Start Region X", regX.ToString())); |
881 | else regX = Convert.ToUInt32(cmdparams[4]); | 908 | else regX = Convert.ToUInt32(cmdparams[5]); |
882 | 909 | ||
883 | if ( cmdparams.Length < 6 ) | 910 | if ( cmdparams.Length < 7 ) |
884 | regY = Convert.ToUInt32(MainConsole.Instance.CmdPrompt("Start Region Y", regY.ToString())); | 911 | regY = Convert.ToUInt32(MainConsole.Instance.CmdPrompt("Start Region Y", regY.ToString())); |
885 | else regY = Convert.ToUInt32(cmdparams[5]); | 912 | else regY = Convert.ToUInt32(cmdparams[6]); |
886 | 913 | ||
887 | if (cmdparams.Length < 7) | 914 | if (cmdparams.Length < 8) |
888 | email = MainConsole.Instance.CmdPrompt("Email", ""); | 915 | email = MainConsole.Instance.CmdPrompt("Email", ""); |
889 | else email = cmdparams[6]; | 916 | else email = cmdparams[7]; |
890 | 917 | ||
891 | if (null == m_commsManager.UserService.GetUserProfile(firstName, lastName)) | 918 | if (null == m_commsManager.UserService.GetUserProfile(firstName, lastName)) |
892 | { | 919 | { |
@@ -908,28 +935,40 @@ namespace OpenSim | |||
908 | string lastName; | 935 | string lastName; |
909 | string newPassword; | 936 | string newPassword; |
910 | 937 | ||
911 | if (cmdparams.Length < 3) | 938 | if (cmdparams.Length < 4) |
912 | firstName = MainConsole.Instance.CmdPrompt("First name"); | 939 | firstName = MainConsole.Instance.CmdPrompt("First name"); |
913 | else firstName = cmdparams[2]; | 940 | else firstName = cmdparams[3]; |
914 | 941 | ||
915 | if ( cmdparams.Length < 4 ) | 942 | if ( cmdparams.Length < 5 ) |
916 | lastName = MainConsole.Instance.CmdPrompt("Last name"); | 943 | lastName = MainConsole.Instance.CmdPrompt("Last name"); |
917 | else lastName = cmdparams[3]; | 944 | else lastName = cmdparams[4]; |
918 | 945 | ||
919 | if ( cmdparams.Length < 5 ) | 946 | if ( cmdparams.Length < 6 ) |
920 | newPassword = MainConsole.Instance.PasswdPrompt("New password"); | 947 | newPassword = MainConsole.Instance.PasswdPrompt("New password"); |
921 | else newPassword = cmdparams[4]; | 948 | else newPassword = cmdparams[5]; |
922 | 949 | ||
923 | m_commsManager.UserAdminService.ResetUserPassword(firstName, lastName, newPassword); | 950 | m_commsManager.UserAdminService.ResetUserPassword(firstName, lastName, newPassword); |
924 | } | 951 | } |
925 | 952 | ||
926 | protected void SaveXml(string[] cmdparams) | 953 | protected void SavePrimsXml2(string module, string[] cmdparams) |
954 | { | ||
955 | if (cmdparams.Length > 5) | ||
956 | { | ||
957 | m_sceneManager.SaveNamedPrimsToXml2(cmdparams[3], cmdparams[4]); | ||
958 | } | ||
959 | else | ||
960 | { | ||
961 | m_sceneManager.SaveNamedPrimsToXml2("Primitive", DEFAULT_PRIM_BACKUP_FILENAME); | ||
962 | } | ||
963 | } | ||
964 | |||
965 | protected void SaveXml(string module, string[] cmdparams) | ||
927 | { | 966 | { |
928 | m_log.Error("[CONSOLE]: PLEASE NOTE, save-xml is DEPRECATED and may be REMOVED soon. If you are using this and there is some reason you can't use save-xml2, please file a mantis detailing the reason."); | 967 | m_log.Error("[CONSOLE]: PLEASE NOTE, save-xml is DEPRECATED and may be REMOVED soon. If you are using this and there is some reason you can't use save-xml2, please file a mantis detailing the reason."); |
929 | 968 | ||
930 | if (cmdparams.Length > 0) | 969 | if (cmdparams.Length > 0) |
931 | { | 970 | { |
932 | m_sceneManager.SaveCurrentSceneToXml(cmdparams[0]); | 971 | m_sceneManager.SaveCurrentSceneToXml(cmdparams[2]); |
933 | } | 972 | } |
934 | else | 973 | else |
935 | { | 974 | { |
@@ -937,30 +976,30 @@ namespace OpenSim | |||
937 | } | 976 | } |
938 | } | 977 | } |
939 | 978 | ||
940 | protected void LoadXml(string[] cmdparams) | 979 | protected void LoadXml(string module, string[] cmdparams) |
941 | { | 980 | { |
942 | m_log.Error("[CONSOLE]: PLEASE NOTE, load-xml is DEPRECATED and may be REMOVED soon. If you are using this and there is some reason you can't use load-xml2, please file a mantis detailing the reason."); | 981 | m_log.Error("[CONSOLE]: PLEASE NOTE, load-xml is DEPRECATED and may be REMOVED soon. If you are using this and there is some reason you can't use load-xml2, please file a mantis detailing the reason."); |
943 | 982 | ||
944 | Vector3 loadOffset = new Vector3(0, 0, 0); | 983 | Vector3 loadOffset = new Vector3(0, 0, 0); |
945 | if (cmdparams.Length > 0) | 984 | if (cmdparams.Length > 2) |
946 | { | 985 | { |
947 | bool generateNewIDS = false; | 986 | bool generateNewIDS = false; |
948 | if (cmdparams.Length > 1) | 987 | if (cmdparams.Length > 3) |
949 | { | 988 | { |
950 | if (cmdparams[1] == "-newUID") | 989 | if (cmdparams[3] == "-newUID") |
951 | { | 990 | { |
952 | generateNewIDS = true; | 991 | generateNewIDS = true; |
953 | } | 992 | } |
954 | if (cmdparams.Length > 2) | 993 | if (cmdparams.Length > 4) |
955 | { | 994 | { |
956 | loadOffset.X = (float) Convert.ToDecimal(cmdparams[2]); | 995 | loadOffset.X = (float) Convert.ToDecimal(cmdparams[4]); |
957 | if (cmdparams.Length > 3) | 996 | if (cmdparams.Length > 5) |
958 | { | 997 | { |
959 | loadOffset.Y = (float) Convert.ToDecimal(cmdparams[3]); | 998 | loadOffset.Y = (float) Convert.ToDecimal(cmdparams[5]); |
960 | } | 999 | } |
961 | if (cmdparams.Length > 4) | 1000 | if (cmdparams.Length > 6) |
962 | { | 1001 | { |
963 | loadOffset.Z = (float) Convert.ToDecimal(cmdparams[4]); | 1002 | loadOffset.Z = (float) Convert.ToDecimal(cmdparams[6]); |
964 | } | 1003 | } |
965 | m_console.Error("loadOffsets <X,Y,Z> = <" + loadOffset.X + "," + loadOffset.Y + "," + | 1004 | m_console.Error("loadOffsets <X,Y,Z> = <" + loadOffset.X + "," + loadOffset.Y + "," + |
966 | loadOffset.Z + ">"); | 1005 | loadOffset.Z + ">"); |
@@ -981,11 +1020,11 @@ namespace OpenSim | |||
981 | } | 1020 | } |
982 | } | 1021 | } |
983 | 1022 | ||
984 | protected void SaveXml2(string[] cmdparams) | 1023 | protected void SaveXml2(string module, string[] cmdparams) |
985 | { | 1024 | { |
986 | if (cmdparams.Length > 0) | 1025 | if (cmdparams.Length > 2) |
987 | { | 1026 | { |
988 | m_sceneManager.SaveCurrentSceneToXml2(cmdparams[0]); | 1027 | m_sceneManager.SaveCurrentSceneToXml2(cmdparams[2]); |
989 | } | 1028 | } |
990 | else | 1029 | else |
991 | { | 1030 | { |
@@ -993,11 +1032,11 @@ namespace OpenSim | |||
993 | } | 1032 | } |
994 | } | 1033 | } |
995 | 1034 | ||
996 | protected void LoadXml2(string[] cmdparams) | 1035 | protected void LoadXml2(string module, string[] cmdparams) |
997 | { | 1036 | { |
998 | if (cmdparams.Length > 0) | 1037 | if (cmdparams.Length > 2) |
999 | { | 1038 | { |
1000 | m_sceneManager.LoadCurrentSceneFromXml2(cmdparams[0]); | 1039 | m_sceneManager.LoadCurrentSceneFromXml2(cmdparams[2]); |
1001 | } | 1040 | } |
1002 | else | 1041 | else |
1003 | { | 1042 | { |
@@ -1007,7 +1046,7 @@ namespace OpenSim | |||
1007 | } | 1046 | } |
1008 | catch | 1047 | catch |
1009 | { | 1048 | { |
1010 | m_console.Error("Default xml not found. Usage: load-xml2 <filename>"); | 1049 | m_console.Error("Default xml not found. Usage: load xml2 <filename>"); |
1011 | } | 1050 | } |
1012 | } | 1051 | } |
1013 | } | 1052 | } |
@@ -1016,11 +1055,11 @@ namespace OpenSim | |||
1016 | /// Load a whole region from an opensim archive. | 1055 | /// Load a whole region from an opensim archive. |
1017 | /// </summary> | 1056 | /// </summary> |
1018 | /// <param name="cmdparams"></param> | 1057 | /// <param name="cmdparams"></param> |
1019 | protected void LoadOar(string[] cmdparams) | 1058 | protected void LoadOar(string module, string[] cmdparams) |
1020 | { | 1059 | { |
1021 | if (cmdparams.Length > 0) | 1060 | if (cmdparams.Length > 2) |
1022 | { | 1061 | { |
1023 | m_sceneManager.LoadArchiveToCurrentScene(cmdparams[0]); | 1062 | m_sceneManager.LoadArchiveToCurrentScene(cmdparams[2]); |
1024 | } | 1063 | } |
1025 | else | 1064 | else |
1026 | { | 1065 | { |
@@ -1039,11 +1078,11 @@ namespace OpenSim | |||
1039 | /// Save a region to a file, including all the assets needed to restore it. | 1078 | /// Save a region to a file, including all the assets needed to restore it. |
1040 | /// </summary> | 1079 | /// </summary> |
1041 | /// <param name="cmdparams"></param> | 1080 | /// <param name="cmdparams"></param> |
1042 | protected void SaveOar(string[] cmdparams) | 1081 | protected void SaveOar(string module, string[] cmdparams) |
1043 | { | 1082 | { |
1044 | if (cmdparams.Length > 0) | 1083 | if (cmdparams.Length > 2) |
1045 | { | 1084 | { |
1046 | m_sceneManager.SaveCurrentSceneToArchive(cmdparams[0]); | 1085 | m_sceneManager.SaveCurrentSceneToArchive(cmdparams[2]); |
1047 | } | 1086 | } |
1048 | else | 1087 | else |
1049 | { | 1088 | { |
@@ -1055,19 +1094,19 @@ namespace OpenSim | |||
1055 | /// Load inventory from an inventory file archive | 1094 | /// Load inventory from an inventory file archive |
1056 | /// </summary> | 1095 | /// </summary> |
1057 | /// <param name="cmdparams"></param> | 1096 | /// <param name="cmdparams"></param> |
1058 | protected void LoadInv(string[] cmdparams) | 1097 | protected void LoadInv(string module, string[] cmdparams) |
1059 | { | 1098 | { |
1060 | m_log.Error("[CONSOLE]: This command has not yet been implemented!"); | 1099 | m_log.Error("[CONSOLE]: This command has not yet been implemented!"); |
1061 | if (cmdparams.Length < 3) | 1100 | if (cmdparams.Length < 5) |
1062 | { | 1101 | { |
1063 | m_log.Error("[CONSOLE]: usage is load-inv <first name> <last name> <inventory path> [<load file path>]"); | 1102 | m_log.Error("[CONSOLE]: usage is load-inv <first name> <last name> <inventory path> [<load file path>]"); |
1064 | return; | 1103 | return; |
1065 | } | 1104 | } |
1066 | 1105 | ||
1067 | string firstName = cmdparams[0]; | 1106 | string firstName = cmdparams[2]; |
1068 | string lastName = cmdparams[1]; | 1107 | string lastName = cmdparams[3]; |
1069 | string invPath = cmdparams[2]; | 1108 | string invPath = cmdparams[4]; |
1070 | string loadPath = (cmdparams.Length > 3 ? cmdparams[3] : DEFAULT_INV_BACKUP_FILENAME); | 1109 | string loadPath = (cmdparams.Length > 5 ? cmdparams[5] : DEFAULT_INV_BACKUP_FILENAME); |
1071 | 1110 | ||
1072 | new InventoryArchiveReadRequest( | 1111 | new InventoryArchiveReadRequest( |
1073 | m_sceneManager.CurrentOrFirstScene, m_commsManager).execute( | 1112 | m_sceneManager.CurrentOrFirstScene, m_commsManager).execute( |
@@ -1078,19 +1117,19 @@ namespace OpenSim | |||
1078 | /// Save inventory to a file archive | 1117 | /// Save inventory to a file archive |
1079 | /// </summary> | 1118 | /// </summary> |
1080 | /// <param name="cmdparams"></param> | 1119 | /// <param name="cmdparams"></param> |
1081 | protected void SaveInv(string[] cmdparams) | 1120 | protected void SaveInv(string module, string[] cmdparams) |
1082 | { | 1121 | { |
1083 | m_log.Error("[CONSOLE]: This command has not yet been implemented!"); | 1122 | m_log.Error("[CONSOLE]: This command has not yet been implemented!"); |
1084 | if (cmdparams.Length < 3) | 1123 | if (cmdparams.Length < 5) |
1085 | { | 1124 | { |
1086 | m_log.Error("[CONSOLE]: usage is save-inv <first name> <last name> <inventory path> [<save file path>]"); | 1125 | m_log.Error("[CONSOLE]: usage is save-inv <first name> <last name> <inventory path> [<save file path>]"); |
1087 | return; | 1126 | return; |
1088 | } | 1127 | } |
1089 | 1128 | ||
1090 | string firstName = cmdparams[0]; | 1129 | string firstName = cmdparams[2]; |
1091 | string lastName = cmdparams[1]; | 1130 | string lastName = cmdparams[3]; |
1092 | string invPath = cmdparams[2]; | 1131 | string invPath = cmdparams[4]; |
1093 | string savePath = (cmdparams.Length > 3 ? cmdparams[3] : DEFAULT_INV_BACKUP_FILENAME); | 1132 | string savePath = (cmdparams.Length > 5 ? cmdparams[5] : DEFAULT_INV_BACKUP_FILENAME); |
1094 | 1133 | ||
1095 | new InventoryArchiveWriteRequest( | 1134 | new InventoryArchiveWriteRequest( |
1096 | m_sceneManager.CurrentOrFirstScene,m_commsManager).execute( | 1135 | m_sceneManager.CurrentOrFirstScene,m_commsManager).execute( |
@@ -1108,62 +1147,6 @@ namespace OpenSim | |||
1108 | return result; | 1147 | return result; |
1109 | } | 1148 | } |
1110 | 1149 | ||
1111 | /// <summary> | ||
1112 | /// Runs the best matching plugin command | ||
1113 | /// </summary> | ||
1114 | /// <param name="cmd"></param> | ||
1115 | /// <param name="withParams"></param> | ||
1116 | /// <returns>true if a match was found, false otherwise</returns> | ||
1117 | public bool RunPluginCommands(string cmd, string[] withParams) | ||
1118 | { | ||
1119 | ConsolePluginCommand bestMatch = null; | ||
1120 | int bestLength = 0; | ||
1121 | String cmdWithParams = cmd + " " + String.Join(" ",withParams); | ||
1122 | |||
1123 | foreach (ConsolePluginCommand cmdinfo in m_PluginCommandInfos) | ||
1124 | { | ||
1125 | int matchLen = cmdinfo.matchLength(cmdWithParams); | ||
1126 | if (matchLen > bestLength) | ||
1127 | { | ||
1128 | bestMatch = cmdinfo; | ||
1129 | bestLength = matchLen; | ||
1130 | } | ||
1131 | } | ||
1132 | |||
1133 | if (bestMatch == null) return false; | ||
1134 | bestMatch.Run(cmd,withParams);//.Substring(bestLength)); | ||
1135 | return true; | ||
1136 | } | ||
1137 | |||
1138 | /// <summary> | ||
1139 | /// Show the matching plugins command help | ||
1140 | /// </summary> | ||
1141 | public void ShowPluginCommandsHelp(string cmdWithParams, ConsoleBase console) | ||
1142 | { | ||
1143 | foreach (ConsolePluginCommand cmdinfo in m_PluginCommandInfos) | ||
1144 | { | ||
1145 | if (cmdinfo.IsHelpfull(cmdWithParams)) | ||
1146 | { | ||
1147 | cmdinfo.ShowHelp(console); | ||
1148 | } | ||
1149 | } | ||
1150 | } | ||
1151 | |||
1152 | /// <summary> | ||
1153 | /// Registers a new console plugin command | ||
1154 | /// </summary> | ||
1155 | public static void RegisterCmd(string cmd, ConsoleCommand deligate, string help) | ||
1156 | { | ||
1157 | RegisterConsolePluginCommand(new ConsolePluginCommand(cmd, deligate, help)); | ||
1158 | } | ||
1159 | |||
1160 | /// <summary> | ||
1161 | /// Registers a new console plugin command | ||
1162 | /// </summary> | ||
1163 | public static void RegisterConsolePluginCommand(ConsolePluginCommand pluginCommand) | ||
1164 | { | ||
1165 | m_PluginCommandInfos.Add(pluginCommand); | ||
1166 | } | ||
1167 | #endregion | 1150 | #endregion |
1168 | } | 1151 | } |
1169 | } | 1152 | } |
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index a7ff0e2..4d56147 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs | |||
@@ -198,6 +198,46 @@ namespace OpenSim | |||
198 | 198 | ||
199 | // Only enable logins to the regions once we have completely finished starting up (apart from scripts) | 199 | // Only enable logins to the regions once we have completely finished starting up (apart from scripts) |
200 | m_commsManager.GridService.RegionLoginsEnabled = true; | 200 | m_commsManager.GridService.RegionLoginsEnabled = true; |
201 | |||
202 | List<string> topics = GetHelpTopics(); | ||
203 | |||
204 | foreach (string topic in topics) | ||
205 | { | ||
206 | m_console.Commands.AddCommand("plugin", "help "+topic, | ||
207 | "help "+topic, | ||
208 | "Get help on plugin command '"+topic+"'", | ||
209 | HandleCommanderHelp); | ||
210 | |||
211 | m_console.Commands.AddCommand("plugin", topic, | ||
212 | topic, | ||
213 | "Execute subcommand for plugin '"+topic+"'", | ||
214 | null); | ||
215 | |||
216 | ICommander commander = | ||
217 | SceneManager.CurrentOrFirstScene.GetCommanders()[topic]; | ||
218 | |||
219 | if (commander == null) | ||
220 | continue; | ||
221 | |||
222 | foreach (string command in commander.Commands.Keys) | ||
223 | { | ||
224 | m_console.Commands.AddCommand(topic, topic+" "+command, | ||
225 | topic+" "+commander.Commands[command].ShortHelp(), | ||
226 | String.Empty, HandleCommanderCommand); | ||
227 | } | ||
228 | } | ||
229 | } | ||
230 | |||
231 | private void HandleCommanderCommand(string module, string[] cmd) | ||
232 | { | ||
233 | m_sceneManager.SendCommandToPluginModules(cmd); | ||
234 | } | ||
235 | |||
236 | private void HandleCommanderHelp(string module, string[] cmd) | ||
237 | { | ||
238 | ICommander moduleCommander = SceneManager.CurrentOrFirstScene.GetCommander(cmd[1]); | ||
239 | if (moduleCommander != null) | ||
240 | m_console.Notice(moduleCommander.Help); | ||
201 | } | 241 | } |
202 | 242 | ||
203 | /// <summary> | 243 | /// <summary> |
diff --git a/OpenSim/Region/ClientStack/RegionApplicationBase.cs b/OpenSim/Region/ClientStack/RegionApplicationBase.cs index 0921dbd..dcc17a7 100644 --- a/OpenSim/Region/ClientStack/RegionApplicationBase.cs +++ b/OpenSim/Region/ClientStack/RegionApplicationBase.cs | |||
@@ -108,6 +108,8 @@ namespace OpenSim.Region.ClientStack | |||
108 | 108 | ||
109 | m_log.Info("[REGION]: Starting HTTP server"); | 109 | m_log.Info("[REGION]: Starting HTTP server"); |
110 | m_httpServer.Start(); | 110 | m_httpServer.Start(); |
111 | |||
112 | base.StartupSpecific(); | ||
111 | } | 113 | } |
112 | 114 | ||
113 | /// <summary> | 115 | /// <summary> |
diff --git a/OpenSim/Region/Environment/Modules/Framework/InterfaceCommander/Command.cs b/OpenSim/Region/Environment/Modules/Framework/InterfaceCommander/Command.cs index 0ad95ae..b6114e8 100644 --- a/OpenSim/Region/Environment/Modules/Framework/InterfaceCommander/Command.cs +++ b/OpenSim/Region/Environment/Modules/Framework/InterfaceCommander/Command.cs | |||
@@ -88,6 +88,18 @@ namespace OpenSim.Region.Environment.Modules.Framework.InterfaceCommander | |||
88 | } | 88 | } |
89 | } | 89 | } |
90 | 90 | ||
91 | public string ShortHelp() | ||
92 | { | ||
93 | string help = m_name; | ||
94 | |||
95 | foreach (CommandArgument arg in m_args) | ||
96 | { | ||
97 | help += " <" + arg.Name + ">"; | ||
98 | } | ||
99 | |||
100 | return help; | ||
101 | } | ||
102 | |||
91 | public void ShowConsoleHelp() | 103 | public void ShowConsoleHelp() |
92 | { | 104 | { |
93 | Console.WriteLine("== " + Name + " =="); | 105 | Console.WriteLine("== " + Name + " =="); |
diff --git a/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs index 060a4f4..e48ef13 100644 --- a/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs | |||
@@ -32,21 +32,20 @@ using System.Collections; | |||
32 | using System.Collections.Generic; | 32 | using System.Collections.Generic; |
33 | using System.Reflection; | 33 | using System.Reflection; |
34 | using log4net; | 34 | using log4net; |
35 | using OpenSim; | ||
35 | using OpenSim.Framework; | 36 | using OpenSim.Framework; |
36 | using OpenSim.Region.Framework.Interfaces; | 37 | using OpenSim.Region.Framework.Interfaces; |
37 | using OpenSim.Region.Framework.Scenes; | 38 | using OpenSim.Region.Framework.Scenes; |
38 | using OpenSim.Region.Environment.Modules.Framework; | 39 | using OpenSim.Region.Environment.Modules.Framework; |
39 | using OpenSim.Region.Environment.Modules.Framework.InterfaceCommander; | ||
40 | using OpenSim.Framework.Communications.Cache; | 40 | using OpenSim.Framework.Communications.Cache; |
41 | 41 | ||
42 | namespace OpenSim.Region.Environment.Modules.World.Permissions | 42 | namespace OpenSim.Region.Environment.Modules.World.Permissions |
43 | { | 43 | { |
44 | public class PermissionsModule : IRegionModule, ICommandableModule | 44 | public class PermissionsModule : IRegionModule |
45 | { | 45 | { |
46 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 46 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
47 | 47 | ||
48 | protected Scene m_scene; | 48 | protected Scene m_scene; |
49 | private readonly Commander m_commander = new Commander("permissions"); | ||
50 | 49 | ||
51 | #region Constants | 50 | #region Constants |
52 | // These are here for testing. They will be taken out | 51 | // These are here for testing. They will be taken out |
@@ -94,60 +93,6 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions | |||
94 | 93 | ||
95 | #endregion | 94 | #endregion |
96 | 95 | ||
97 | #region ICommandableModule Members | ||
98 | |||
99 | public ICommander CommandInterface | ||
100 | { | ||
101 | get { throw new System.NotImplementedException(); } | ||
102 | } | ||
103 | |||
104 | private void InterfaceDebugPermissions(Object[] args) | ||
105 | { | ||
106 | if ((bool)args[0] == true) | ||
107 | { | ||
108 | m_debugPermissions = true; | ||
109 | m_log.Info("[PERMISSIONS]: Permissions Debugging Enabled."); | ||
110 | } | ||
111 | else | ||
112 | { | ||
113 | m_debugPermissions = false; | ||
114 | m_log.Info("[PERMISSIONS]: Permissions Debugging Disabled."); | ||
115 | } | ||
116 | } | ||
117 | |||
118 | private void InterfaceBypassPermissions(Object[] args) | ||
119 | { | ||
120 | if ((bool)args[0] == true) | ||
121 | { | ||
122 | m_log.Info("[PERMISSIONS]: Permissions Bypass Enabled."); | ||
123 | m_bypassPermissionsValue = (bool)args[1]; | ||
124 | } | ||
125 | else | ||
126 | { | ||
127 | m_bypassPermissions = false; | ||
128 | m_log.Info("[PERMISSIONS]: Permissions Bypass Disabled. Normal Operation."); | ||
129 | } | ||
130 | } | ||
131 | |||
132 | /// <summary> | ||
133 | /// Processes commandline input. Do not call directly. | ||
134 | /// </summary> | ||
135 | /// <param name="args">Commandline arguments</param> | ||
136 | private void EventManager_OnPluginConsole(string[] args) | ||
137 | { | ||
138 | if (args[0] == "permissions") | ||
139 | { | ||
140 | string[] tmpArgs = new string[args.Length - 2]; | ||
141 | int i; | ||
142 | for (i = 2; i < args.Length; i++) | ||
143 | tmpArgs[i - 2] = args[i]; | ||
144 | |||
145 | m_commander.ProcessConsoleCommand(args[1], tmpArgs); | ||
146 | } | ||
147 | } | ||
148 | |||
149 | #endregion | ||
150 | |||
151 | #region IRegionModule Members | 96 | #region IRegionModule Members |
152 | 97 | ||
153 | public void Initialise(Scene scene, IConfigSource config) | 98 | public void Initialise(Scene scene, IConfigSource config) |
@@ -226,20 +171,89 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions | |||
226 | 171 | ||
227 | m_scene.Permissions.AddCanTeleportHandler(CanTeleport); //NOT YET IMPLEMENTED | 172 | m_scene.Permissions.AddCanTeleportHandler(CanTeleport); //NOT YET IMPLEMENTED |
228 | 173 | ||
229 | //Register Debug Commands | 174 | m_scene.AddCommand("permissions", "bypass permissions", |
230 | Command bypassCommand = new Command("bypass", CommandIntentions.COMMAND_HAZARDOUS, InterfaceBypassPermissions, "Force the permissions a specific way to test permissions"); | 175 | "bypass permissions <true / false>", |
231 | bypassCommand.AddArgument("enable_bypass_perms", "true to enable bypassing all perms", "Boolean"); | 176 | "Bypass permission checks", |
232 | bypassCommand.AddArgument("bypass_perms_value", "true/false: true will ignore all perms; false will restrict everything", "Boolean"); | 177 | HandleBypassPermissions); |
178 | |||
179 | m_scene.AddCommand("permissions", "force permissions", | ||
180 | "force permissions <true / false>", | ||
181 | "Force permissions on or off", | ||
182 | HandleForcePermissions); | ||
183 | |||
184 | m_scene.AddCommand("permissions", "debug permissions", | ||
185 | "debug permissions <true / false>", | ||
186 | "Enable permissions debugging", | ||
187 | HandleDebugPermissions); | ||
188 | } | ||
189 | |||
190 | public void HandleBypassPermissions(string module, string[] args) | ||
191 | { | ||
192 | if (m_scene.ConsoleScene() != null && | ||
193 | m_scene.ConsoleScene() != m_scene) | ||
194 | { | ||
195 | return; | ||
196 | } | ||
197 | |||
198 | if (args.Length > 2) | ||
199 | { | ||
200 | bool val; | ||
201 | |||
202 | if (!bool.TryParse(args[2], out val)) | ||
203 | return; | ||
204 | |||
205 | m_bypassPermissions = val; | ||
206 | |||
207 | m_log.InfoFormat("[PERMISSIONS] Set permissions bypass to {0} for {1}", m_bypassPermissions, m_scene.RegionInfo.RegionName); | ||
208 | } | ||
209 | } | ||
210 | |||
211 | public void HandleForcePermissions(string module, string[] args) | ||
212 | { | ||
213 | if (m_scene.ConsoleScene() != null && | ||
214 | m_scene.ConsoleScene() != m_scene) | ||
215 | { | ||
216 | return; | ||
217 | } | ||
218 | |||
219 | if (!m_bypassPermissions) | ||
220 | { | ||
221 | m_log.Error("[PERMISSIONS] Permissions can't be forced unless they are bypassed first"); | ||
222 | return; | ||
223 | } | ||
233 | 224 | ||
234 | m_commander.RegisterCommand("bypass", bypassCommand); | 225 | if (args.Length > 2) |
226 | { | ||
227 | bool val; | ||
235 | 228 | ||
236 | Command debugCommand = new Command("debug", CommandIntentions.COMMAND_STATISTICAL, InterfaceDebugPermissions, "Force the permissions a specific way to test permissions"); | 229 | if (!bool.TryParse(args[2], out val)) |
237 | debugCommand.AddArgument("enable_debug_perms", "true to enable debugging to console all perms", "Boolean"); | 230 | return; |
238 | 231 | ||
239 | m_commander.RegisterCommand("debug", debugCommand); | 232 | m_bypassPermissionsValue = val; |
240 | m_scene.RegisterModuleCommander(m_commander); | ||
241 | 233 | ||
242 | m_scene.EventManager.OnPluginConsole += new EventManager.OnPluginConsoleDelegate(EventManager_OnPluginConsole); | 234 | m_log.InfoFormat("[PERMISSIONS] Forced permissions to {0} in {1}", m_bypassPermissionsValue, m_scene.RegionInfo.RegionName); |
235 | } | ||
236 | } | ||
237 | |||
238 | public void HandleDebugPermissions(string module, string[] args) | ||
239 | { | ||
240 | if (m_scene.ConsoleScene() != null && | ||
241 | m_scene.ConsoleScene() != m_scene) | ||
242 | { | ||
243 | return; | ||
244 | } | ||
245 | |||
246 | if (args.Length > 2) | ||
247 | { | ||
248 | bool val; | ||
249 | |||
250 | if (!bool.TryParse(args[2], out val)) | ||
251 | return; | ||
252 | |||
253 | m_debugPermissions = val; | ||
254 | |||
255 | m_log.InfoFormat("[PERMISSIONS] Set permissions debugging to {0} in {1}", m_debugPermissions, m_scene.RegionInfo.RegionName); | ||
256 | } | ||
243 | } | 257 | } |
244 | 258 | ||
245 | public void PostInitialise() | 259 | public void PostInitialise() |
diff --git a/OpenSim/Region/Framework/Interfaces/ICommand.cs b/OpenSim/Region/Framework/Interfaces/ICommand.cs index 1551b58..15e55c4 100644 --- a/OpenSim/Region/Framework/Interfaces/ICommand.cs +++ b/OpenSim/Region/Framework/Interfaces/ICommand.cs | |||
@@ -46,5 +46,6 @@ namespace OpenSim.Region.Framework.Interfaces | |||
46 | 46 | ||
47 | void Run(object[] args); | 47 | void Run(object[] args); |
48 | void ShowConsoleHelp(); | 48 | void ShowConsoleHelp(); |
49 | string ShortHelp(); | ||
49 | } | 50 | } |
50 | } | 51 | } |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index f07391d..55fc02a 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -37,6 +37,7 @@ using OpenMetaverse; | |||
37 | using OpenMetaverse.Imaging; | 37 | using OpenMetaverse.Imaging; |
38 | using OpenMetaverse.Packets; | 38 | using OpenMetaverse.Packets; |
39 | using OpenSim.Framework; | 39 | using OpenSim.Framework; |
40 | using OpenSim.Framework.Console; | ||
40 | using OpenSim.Framework.Communications; | 41 | using OpenSim.Framework.Communications; |
41 | using OpenSim.Framework.Communications.Cache; | 42 | using OpenSim.Framework.Communications.Cache; |
42 | using OpenSim.Framework.Servers; | 43 | using OpenSim.Framework.Servers; |
@@ -3384,7 +3385,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3384 | /// <param name="cmdparams"></param> | 3385 | /// <param name="cmdparams"></param> |
3385 | public void HandleEditCommand(string[] cmdparams) | 3386 | public void HandleEditCommand(string[] cmdparams) |
3386 | { | 3387 | { |
3387 | Console.WriteLine("Searching for Primitive: '" + cmdparams[0] + "'"); | 3388 | Console.WriteLine("Searching for Primitive: '" + cmdparams[2] + "'"); |
3388 | 3389 | ||
3389 | List<EntityBase> EntityList = GetEntities(); | 3390 | List<EntityBase> EntityList = GetEntities(); |
3390 | 3391 | ||
@@ -3395,11 +3396,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
3395 | SceneObjectPart part = ((SceneObjectGroup)ent).GetChildPart(((SceneObjectGroup)ent).UUID); | 3396 | SceneObjectPart part = ((SceneObjectGroup)ent).GetChildPart(((SceneObjectGroup)ent).UUID); |
3396 | if (part != null) | 3397 | if (part != null) |
3397 | { | 3398 | { |
3398 | if (part.Name == cmdparams[0]) | 3399 | if (part.Name == cmdparams[2]) |
3399 | { | 3400 | { |
3400 | part.Resize( | 3401 | part.Resize( |
3401 | new Vector3(Convert.ToSingle(cmdparams[1]), Convert.ToSingle(cmdparams[2]), | 3402 | new Vector3(Convert.ToSingle(cmdparams[3]), Convert.ToSingle(cmdparams[4]), |
3402 | Convert.ToSingle(cmdparams[3]))); | 3403 | Convert.ToSingle(cmdparams[5]))); |
3403 | 3404 | ||
3404 | Console.WriteLine("Edited scale of Primitive: " + part.Name); | 3405 | Console.WriteLine("Edited scale of Primitive: " + part.Name); |
3405 | } | 3406 | } |
@@ -4235,5 +4236,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
4235 | } | 4236 | } |
4236 | } | 4237 | } |
4237 | } | 4238 | } |
4239 | |||
4240 | public Scene ConsoleScene() | ||
4241 | { | ||
4242 | if (MainConsole.Instance == null) | ||
4243 | return null; | ||
4244 | if (MainConsole.Instance.ConsoleScene is Scene) | ||
4245 | return (Scene)MainConsole.Instance.ConsoleScene; | ||
4246 | return null; | ||
4247 | } | ||
4238 | } | 4248 | } |
4239 | } | 4249 | } |
diff --git a/OpenSim/Region/Framework/Scenes/SceneBase.cs b/OpenSim/Region/Framework/Scenes/SceneBase.cs index e58d3ce..cee9037 100644 --- a/OpenSim/Region/Framework/Scenes/SceneBase.cs +++ b/OpenSim/Region/Framework/Scenes/SceneBase.cs | |||
@@ -32,6 +32,7 @@ using System.Threading; | |||
32 | using OpenMetaverse; | 32 | using OpenMetaverse; |
33 | using log4net; | 33 | using log4net; |
34 | using OpenSim.Framework; | 34 | using OpenSim.Framework; |
35 | using OpenSim.Framework.Console; | ||
35 | using OpenSim.Framework.Communications.Cache; | 36 | using OpenSim.Framework.Communications.Cache; |
36 | using OpenSim.Region.Framework.Interfaces; | 37 | using OpenSim.Region.Framework.Interfaces; |
37 | 38 | ||
@@ -458,5 +459,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
458 | break; | 459 | break; |
459 | } | 460 | } |
460 | } | 461 | } |
462 | |||
463 | public void AddCommand(string module, string command, string shorthelp, string longhelp, CommandDelegate callback) | ||
464 | { | ||
465 | if (MainConsole.Instance == null) | ||
466 | return; | ||
467 | MainConsole.Instance.Commands.AddCommand(module, command, shorthelp, longhelp, callback); | ||
468 | } | ||
461 | } | 469 | } |
462 | } | 470 | } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 1484638..0825bf8 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -128,12 +128,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
128 | get { return m_ScriptEngine.World; } | 128 | get { return m_ScriptEngine.World; } |
129 | } | 129 | } |
130 | 130 | ||
131 | // Extension commands use this: | ||
132 | public ICommander GetCommander(string name) | ||
133 | { | ||
134 | return World.GetCommander(name); | ||
135 | } | ||
136 | |||
137 | public void state(string newState) | 131 | public void state(string newState) |
138 | { | 132 | { |
139 | m_ScriptEngine.SetState(m_itemID, newState); | 133 | m_ScriptEngine.SetState(m_itemID, newState); |
diff --git a/OpenSim/TestSuite/BotManager.cs b/OpenSim/TestSuite/BotManager.cs index 8eb2027..0838214 100644 --- a/OpenSim/TestSuite/BotManager.cs +++ b/OpenSim/TestSuite/BotManager.cs | |||
@@ -40,7 +40,7 @@ namespace OpenSim.TestSuite | |||
40 | /// <summary> | 40 | /// <summary> |
41 | /// Thread/Bot manager for the application | 41 | /// Thread/Bot manager for the application |
42 | /// </summary> | 42 | /// </summary> |
43 | public class BotManager : conscmd_callback | 43 | public class BotManager |
44 | { | 44 | { |
45 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 45 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
46 | 46 | ||
@@ -58,8 +58,6 @@ namespace OpenSim.TestSuite | |||
58 | public BotManager() | 58 | public BotManager() |
59 | { | 59 | { |
60 | m_log.Info("In bot manager"); | 60 | m_log.Info("In bot manager"); |
61 | // m_console = CreateConsole(); | ||
62 | // MainConsole.Instance = m_console; | ||
63 | m_lBot = new List<PhysicsBot>(); | 61 | m_lBot = new List<PhysicsBot>(); |
64 | } | 62 | } |
65 | 63 | ||
@@ -169,52 +167,5 @@ namespace OpenSim.TestSuite | |||
169 | pb.shutdown(); | 167 | pb.shutdown(); |
170 | } | 168 | } |
171 | } | 169 | } |
172 | |||
173 | /// <summary> | ||
174 | /// Standard CreateConsole routine | ||
175 | /// </summary> | ||
176 | /// <returns></returns> | ||
177 | protected ConsoleBase CreateConsole() | ||
178 | { | ||
179 | return new ConsoleBase("Region", this); | ||
180 | } | ||
181 | |||
182 | /// <summary> | ||
183 | /// Command runnint tool.. Currently use it to add bots, shutdown and (dangerous)Forcequit | ||
184 | /// </summary> | ||
185 | /// <param name="command"></param> | ||
186 | /// <param name="cmdparams"></param> | ||
187 | public void RunCmd(string command, string[] cmdparams) | ||
188 | { | ||
189 | switch (command) | ||
190 | { | ||
191 | case "shutdown": | ||
192 | m_console.Warn("BOTMANAGER", "Shutting down bots"); | ||
193 | doBotShutdown(); | ||
194 | break; | ||
195 | case "quit": | ||
196 | m_console.Warn("DANGER", "This should only be used to quit the program if you've already used the shutdown command and the program hasn't quit"); | ||
197 | Environment.Exit(0); | ||
198 | break; | ||
199 | case "addbots": | ||
200 | int newbots; | ||
201 | Int32.TryParse(cmdparams[0], out newbots); | ||
202 | |||
203 | if (newbots > 0) | ||
204 | addbots(newbots); | ||
205 | break; | ||
206 | case "help": | ||
207 | m_console.Notice("HELP", "\nshutdown - graceful shutdown\naddbots <n> - adds n bots to the test\nquit - forcequits, dangerous if you have not already run shutdown"); | ||
208 | break; | ||
209 | } | ||
210 | } | ||
211 | |||
212 | /// <summary> | ||
213 | /// Required method to implement the conscmd_callback interface | ||
214 | /// </summary> | ||
215 | /// <param name="showParams">What to show</param> | ||
216 | public void Show(string[] showParams) | ||
217 | { | ||
218 | } | ||
219 | } | 170 | } |
220 | } | 171 | } |
diff --git a/OpenSim/Tools/pCampBot/BotManager.cs b/OpenSim/Tools/pCampBot/BotManager.cs index 100f2d4..3b08adc 100644 --- a/OpenSim/Tools/pCampBot/BotManager.cs +++ b/OpenSim/Tools/pCampBot/BotManager.cs | |||
@@ -31,6 +31,9 @@ using System.Reflection; | |||
31 | using System.Threading; | 31 | using System.Threading; |
32 | using OpenMetaverse; | 32 | using OpenMetaverse; |
33 | using log4net; | 33 | using log4net; |
34 | using log4net.Appender; | ||
35 | using log4net.Core; | ||
36 | using log4net.Repository; | ||
34 | using Nini.Config; | 37 | using Nini.Config; |
35 | using OpenSim.Framework; | 38 | using OpenSim.Framework; |
36 | using OpenSim.Framework.Console; | 39 | using OpenSim.Framework.Console; |
@@ -40,7 +43,7 @@ namespace pCampBot | |||
40 | /// <summary> | 43 | /// <summary> |
41 | /// Thread/Bot manager for the application | 44 | /// Thread/Bot manager for the application |
42 | /// </summary> | 45 | /// </summary> |
43 | public class BotManager : conscmd_callback | 46 | public class BotManager |
44 | { | 47 | { |
45 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 48 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
46 | 49 | ||
@@ -59,6 +62,36 @@ namespace pCampBot | |||
59 | { | 62 | { |
60 | m_console = CreateConsole(); | 63 | m_console = CreateConsole(); |
61 | MainConsole.Instance = m_console; | 64 | MainConsole.Instance = m_console; |
65 | |||
66 | // Make log4net see the console | ||
67 | // | ||
68 | ILoggerRepository repository = LogManager.GetRepository(); | ||
69 | IAppender[] appenders = repository.GetAppenders(); | ||
70 | OpenSimAppender consoleAppender = null; | ||
71 | |||
72 | foreach (IAppender appender in appenders) | ||
73 | { | ||
74 | if (appender.Name == "Console") | ||
75 | { | ||
76 | consoleAppender = (OpenSimAppender)appender; | ||
77 | consoleAppender.Console = m_console; | ||
78 | break; | ||
79 | } | ||
80 | } | ||
81 | |||
82 | m_console.Commands.AddCommand("bot", "shutdown", | ||
83 | "shutdown", | ||
84 | "Gracefully shut down bots", HandleShutdown); | ||
85 | |||
86 | m_console.Commands.AddCommand("bot", "quit", | ||
87 | "quit", | ||
88 | "Force quit (DANGEROUS, try shutdown first)", | ||
89 | HandleShutdown); | ||
90 | |||
91 | m_console.Commands.AddCommand("bot", "add bots", | ||
92 | "add bots <number>", | ||
93 | "Add more bots", HandleAddBots); | ||
94 | |||
62 | m_lBot = new List<PhysicsBot>(); | 95 | m_lBot = new List<PhysicsBot>(); |
63 | } | 96 | } |
64 | 97 | ||
@@ -175,45 +208,31 @@ namespace pCampBot | |||
175 | /// <returns></returns> | 208 | /// <returns></returns> |
176 | protected ConsoleBase CreateConsole() | 209 | protected ConsoleBase CreateConsole() |
177 | { | 210 | { |
178 | return new ConsoleBase("Region", this); | 211 | return new ConsoleBase("Region"); |
179 | } | 212 | } |
180 | 213 | ||
181 | /// <summary> | 214 | private void HandleShutdown(string module, string[] cmd) |
182 | /// Command runnint tool.. Currently use it to add bots, shutdown and (dangerous)Forcequit | ||
183 | /// </summary> | ||
184 | /// <param name="command"></param> | ||
185 | /// <param name="cmdparams"></param> | ||
186 | public void RunCmd(string command, string[] cmdparams) | ||
187 | { | 215 | { |
188 | switch (command) | 216 | m_console.Warn("BOTMANAGER", "Shutting down bots"); |
189 | { | 217 | doBotShutdown(); |
190 | case "shutdown": | 218 | } |
191 | m_console.Warn("BOTMANAGER", "Shutting down bots"); | ||
192 | doBotShutdown(); | ||
193 | break; | ||
194 | case "quit": | ||
195 | m_console.Warn("DANGER", "This should only be used to quit the program if you've already used the shutdown command and the program hasn't quit"); | ||
196 | Environment.Exit(0); | ||
197 | break; | ||
198 | case "addbots": | ||
199 | int newbots; | ||
200 | Int32.TryParse(cmdparams[0], out newbots); | ||
201 | 219 | ||
202 | if (newbots > 0) | 220 | private void HandleQuit(string module, string[] cmd) |
203 | addbots(newbots); | 221 | { |
204 | break; | 222 | m_console.Warn("DANGER", "This should only be used to quit the program if you've already used the shutdown command and the program hasn't quit"); |
205 | case "help": | 223 | Environment.Exit(0); |
206 | m_console.Notice("HELP", "\nshutdown - graceful shutdown\naddbots <n> - adds n bots to the test\nquit - forcequits, dangerous if you have not already run shutdown"); | ||
207 | break; | ||
208 | } | ||
209 | } | 224 | } |
210 | 225 | ||
211 | /// <summary> | 226 | private void HandleAddBots(string module, string[] cmd) |
212 | /// Required method to implement the conscmd_callback interface | ||
213 | /// </summary> | ||
214 | /// <param name="showParams">What to show</param> | ||
215 | public void Show(string[] showParams) | ||
216 | { | 227 | { |
228 | int newbots = 0; | ||
229 | |||
230 | if (cmd.Length > 2) | ||
231 | { | ||
232 | Int32.TryParse(cmd[2], out newbots); | ||
233 | } | ||
234 | if (newbots > 0) | ||
235 | addbots(newbots); | ||
217 | } | 236 | } |
218 | } | 237 | } |
219 | } | 238 | } |