aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorDiva Canto2012-09-20 15:51:27 -0700
committerDiva Canto2012-09-20 15:51:27 -0700
commit33aa6d172f29a8d34ae1d1f75e506b2e5eb681d7 (patch)
tree55a191ba66b585e7cb1531257e4326529779702f /OpenSim
parentMore HG2.0: Added permission policies in HGAsset Service based on asset types... (diff)
parentInsert a new log level 4 for HTTP IN and HTTP OUT that will log how long the ... (diff)
downloadopensim-SC-33aa6d172f29a8d34ae1d1f75e506b2e5eb681d7.zip
opensim-SC-33aa6d172f29a8d34ae1d1f75e506b2e5eb681d7.tar.gz
opensim-SC-33aa6d172f29a8d34ae1d1f75e506b2e5eb681d7.tar.bz2
opensim-SC-33aa6d172f29a8d34ae1d1f75e506b2e5eb681d7.tar.xz
Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs47
-rw-r--r--OpenSim/Framework/Servers/MainServer.cs101
-rw-r--r--OpenSim/Framework/WebUtil.cs65
-rw-r--r--OpenSim/Region/Framework/Scenes/EventManager.cs120
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs2
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/Chat/IRCConnector.cs6
6 files changed, 287 insertions, 54 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index 43a19fa..4e04dd8 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -54,6 +54,12 @@ namespace OpenSim.Framework.Servers.HttpServer
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 private HttpServerLogWriter httpserverlog = new HttpServerLogWriter(); 55 private HttpServerLogWriter httpserverlog = new HttpServerLogWriter();
56 56
57 /// <summary>
58 /// Gets or sets the debug level.
59 /// </summary>
60 /// <value>
61 /// See MainServer.DebugLevel.
62 /// </value>
57 public int DebugLevel { get; set; } 63 public int DebugLevel { get; set; }
58 64
59 private volatile int NotSocketErrors = 0; 65 private volatile int NotSocketErrors = 0;
@@ -529,8 +535,8 @@ namespace OpenSim.Framework.Servers.HttpServer
529 535
530 if (DebugLevel >= 3) 536 if (DebugLevel >= 3)
531 m_log.DebugFormat( 537 m_log.DebugFormat(
532 "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}", 538 "[BASE HTTP SERVER]: HTTP IN {0} content type handler {1} {2} from {3}",
533 request.ContentType, request.HttpMethod, request.Url.PathAndQuery); 539 request.ContentType, request.HttpMethod, request.Url.PathAndQuery, request.RemoteIPEndPoint);
534 540
535 buffer = HandleHTTPRequest(request, response); 541 buffer = HandleHTTPRequest(request, response);
536 break; 542 break;
@@ -541,8 +547,8 @@ namespace OpenSim.Framework.Servers.HttpServer
541 547
542 if (DebugLevel >= 3) 548 if (DebugLevel >= 3)
543 m_log.DebugFormat( 549 m_log.DebugFormat(
544 "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}", 550 "[BASE HTTP SERVER]: HTTP IN {0} content type handler {1} {2} from {3}",
545 request.ContentType, request.HttpMethod, request.Url.PathAndQuery); 551 request.ContentType, request.HttpMethod, request.Url.PathAndQuery, request.RemoteIPEndPoint);
546 552
547 buffer = HandleLLSDRequests(request, response); 553 buffer = HandleLLSDRequests(request, response);
548 break; 554 break;
@@ -640,7 +646,18 @@ namespace OpenSim.Framework.Servers.HttpServer
640 uriString, 646 uriString,
641 requestHandler != null ? requestHandler.Name : "", 647 requestHandler != null ? requestHandler.Name : "",
642 requestHandler != null ? requestHandler.Description : "", 648 requestHandler != null ? requestHandler.Description : "",
643 request.RemoteIPEndPoint.ToString(), 649 request.RemoteIPEndPoint,
650 tickdiff);
651 }
652 else if (DebugLevel >= 4)
653 {
654 m_log.DebugFormat(
655 "[BASE HTTP SERVER]: HTTP IN {0} {1} {2} {3} from {4} took {5}ms",
656 requestMethod,
657 uriString,
658 requestHandler != null ? requestHandler.Name : "",
659 requestHandler != null ? requestHandler.Description : "",
660 request.RemoteIPEndPoint,
644 tickdiff); 661 tickdiff);
645 } 662 }
646 } 663 }
@@ -649,30 +666,30 @@ namespace OpenSim.Framework.Servers.HttpServer
649 private void LogIncomingToStreamHandler(OSHttpRequest request, IRequestHandler requestHandler) 666 private void LogIncomingToStreamHandler(OSHttpRequest request, IRequestHandler requestHandler)
650 { 667 {
651 m_log.DebugFormat( 668 m_log.DebugFormat(
652 "[BASE HTTP SERVER]: Found stream handler for {0} {1} {2} {3}", 669 "[BASE HTTP SERVER]: HTTP IN stream handler {0} {1} {2} {3} from {4}",
653 request.HttpMethod, request.Url.PathAndQuery, requestHandler.Name, requestHandler.Description); 670 request.HttpMethod, request.Url.PathAndQuery, requestHandler.Name, requestHandler.Description, request.RemoteIPEndPoint);
654 671
655 if (DebugLevel >= 4) 672 if (DebugLevel >= 5)
656 LogIncomingInDetail(request); 673 LogIncomingInDetail(request);
657 } 674 }
658 675
659 private void LogIncomingToContentTypeHandler(OSHttpRequest request) 676 private void LogIncomingToContentTypeHandler(OSHttpRequest request)
660 { 677 {
661 m_log.DebugFormat( 678 m_log.DebugFormat(
662 "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}", 679 "[BASE HTTP SERVER]: HTTP IN {0} content type handler {1} {2} from {3}",
663 request.ContentType, request.HttpMethod, request.Url.PathAndQuery); 680 request.ContentType, request.HttpMethod, request.Url.PathAndQuery, request.RemoteIPEndPoint);
664 681
665 if (DebugLevel >= 4) 682 if (DebugLevel >= 5)
666 LogIncomingInDetail(request); 683 LogIncomingInDetail(request);
667 } 684 }
668 685
669 private void LogIncomingToXmlRpcHandler(OSHttpRequest request) 686 private void LogIncomingToXmlRpcHandler(OSHttpRequest request)
670 { 687 {
671 m_log.DebugFormat( 688 m_log.DebugFormat(
672 "[BASE HTTP SERVER]: Assuming a generic XMLRPC request for {0} {1}", 689 "[BASE HTTP SERVER]: HTTP IN assumed generic XMLRPC request {0} {1} from {2}",
673 request.HttpMethod, request.Url.PathAndQuery); 690 request.HttpMethod, request.Url.PathAndQuery, request.RemoteIPEndPoint);
674 691
675 if (DebugLevel >= 4) 692 if (DebugLevel >= 5)
676 LogIncomingInDetail(request); 693 LogIncomingInDetail(request);
677 } 694 }
678 695
@@ -682,7 +699,7 @@ namespace OpenSim.Framework.Servers.HttpServer
682 { 699 {
683 string output; 700 string output;
684 701
685 if (DebugLevel == 4) 702 if (DebugLevel == 5)
686 { 703 {
687 const int sampleLength = 80; 704 const int sampleLength = 80;
688 char[] sampleChars = new char[sampleLength]; 705 char[] sampleChars = new char[sampleLength];
diff --git a/OpenSim/Framework/Servers/MainServer.cs b/OpenSim/Framework/Servers/MainServer.cs
index 7402c73..72f9cce 100644
--- a/OpenSim/Framework/Servers/MainServer.cs
+++ b/OpenSim/Framework/Servers/MainServer.cs
@@ -48,9 +48,12 @@ namespace OpenSim.Framework.Servers
48 /// Control the printing of certain debug messages. 48 /// Control the printing of certain debug messages.
49 /// </summary> 49 /// </summary>
50 /// <remarks> 50 /// <remarks>
51 /// If DebugLevel >= 1, then short warnings are logged when receiving bad input data. 51 /// If DebugLevel >= 1 then short warnings are logged when receiving bad input data.
52 /// If DebugLevel >= 2, then long warnings are logged when receiving bad input data. 52 /// If DebugLevel >= 2 then long warnings are logged when receiving bad input data.
53 /// If DebugLevel >= 3, then short notices about all incoming non-poll HTTP requests are logged. 53 /// If DebugLevel >= 3 then short notices about all incoming non-poll HTTP requests are logged.
54 /// If DebugLevel >= 4 then the time taken to fulfill the request is logged.
55 /// If DebugLevel >= 5 then the start of the body of incoming non-poll HTTP requests will be logged.
56 /// If DebugLevel >= 6 then the entire body of incoming non-poll HTTP requests will be logged.
54 /// </remarks> 57 /// </remarks>
55 public static int DebugLevel 58 public static int DebugLevel
56 { 59 {
@@ -102,7 +105,6 @@ namespace OpenSim.Framework.Servers
102 get { return new Dictionary<uint, BaseHttpServer>(m_Servers); } 105 get { return new Dictionary<uint, BaseHttpServer>(m_Servers); }
103 } 106 }
104 107
105
106 public static void RegisterHttpConsoleCommands(ICommandConsole console) 108 public static void RegisterHttpConsoleCommands(ICommandConsole console)
107 { 109 {
108 console.Commands.AddCommand( 110 console.Commands.AddCommand(
@@ -111,15 +113,20 @@ namespace OpenSim.Framework.Servers
111 "Show all registered http handlers", HandleShowHttpHandlersCommand); 113 "Show all registered http handlers", HandleShowHttpHandlersCommand);
112 114
113 console.Commands.AddCommand( 115 console.Commands.AddCommand(
114 "Debug", false, "debug http", "debug http [<level>]", 116 "Debug", false, "debug http", "debug http <in|out|all> [<level>]",
115 "Turn on inbound non-poll http request debugging.", 117 "Turn on http request logging.",
116 "If level <= 0, then no extra logging is done.\n" 118 "If in or all and\n"
117 + "If level >= 1, then short warnings are logged when receiving bad input data.\n" 119 + " level <= 0 then no extra logging is done.\n"
118 + "If level >= 2, then long warnings are logged when receiving bad input data.\n" 120 + " level >= 1 then short warnings are logged when receiving bad input data.\n"
119 + "If level >= 3, then short notices about all incoming non-poll HTTP requests are logged.\n" 121 + " level >= 2 then long warnings are logged when receiving bad input data.\n"
120 + "If level >= 4, then a sample from the beginning of the incoming data is logged.\n" 122 + " level >= 3 then short notices about all incoming non-poll HTTP requests are logged.\n"
121 + "If level >= 5, then the entire incoming data is logged.\n" 123 + " level >= 4 then the time taken to fulfill the request is logged.\n"
122 + "If no level is specified then the current level is returned.", 124 + " level >= 5 then a sample from the beginning of the incoming data is logged.\n"
125 + " level >= 6 then the entire incoming data is logged.\n"
126 + " no level is specified then the current level is returned.\n\n"
127 + "If out or all and\n"
128 + " level >= 3 then short notices about all outgoing requests going through WebUtil are logged.\n"
129 + " level >= 4 then the time taken to fulfill the request is logged.\n",
123 HandleDebugHttpCommand); 130 HandleDebugHttpCommand);
124 } 131 }
125 132
@@ -127,24 +134,74 @@ namespace OpenSim.Framework.Servers
127 /// Turn on some debugging values for OpenSim. 134 /// Turn on some debugging values for OpenSim.
128 /// </summary> 135 /// </summary>
129 /// <param name="args"></param> 136 /// <param name="args"></param>
130 private static void HandleDebugHttpCommand(string module, string[] args) 137 private static void HandleDebugHttpCommand(string module, string[] cmdparams)
131 { 138 {
132 if (args.Length == 3) 139 if (cmdparams.Length < 3)
140 {
141 MainConsole.Instance.Output("Usage: debug http <in|out|all> 0..6");
142 return;
143 }
144
145 bool inReqs = false;
146 bool outReqs = false;
147 bool allReqs = false;
148
149 string subCommand = cmdparams[2];
150
151 if (subCommand.ToLower() == "in")
152 {
153 inReqs = true;
154 }
155 else if (subCommand.ToLower() == "out")
156 {
157 outReqs = true;
158 }
159 else if (subCommand.ToLower() == "all")
160 {
161 allReqs = true;
162 }
163 else
133 { 164 {
165 MainConsole.Instance.Output("You must specify in, out or all");
166 return;
167 }
168
169 if (cmdparams.Length >= 4)
170 {
171 string rawNewDebug = cmdparams[3];
134 int newDebug; 172 int newDebug;
135 if (int.TryParse(args[2], out newDebug)) 173
174 if (!int.TryParse(rawNewDebug, out newDebug))
175 {
176 MainConsole.Instance.OutputFormat("{0} is not a valid debug level", rawNewDebug);
177 return;
178 }
179
180 if (newDebug < 0 || newDebug > 5)
181 {
182 MainConsole.Instance.OutputFormat("{0} is outside the valid debug level range of 0..5", newDebug);
183 return;
184 }
185
186 if (allReqs || inReqs)
136 { 187 {
137 MainServer.DebugLevel = newDebug; 188 MainServer.DebugLevel = newDebug;
138 MainConsole.Instance.OutputFormat("Debug http level set to {0}", newDebug); 189 MainConsole.Instance.OutputFormat("IN debug level set to {0}", newDebug);
190 }
191
192 if (allReqs || outReqs)
193 {
194 WebUtil.DebugLevel = newDebug;
195 MainConsole.Instance.OutputFormat("OUT debug level set to {0}", newDebug);
139 } 196 }
140 }
141 else if (args.Length == 2)
142 {
143 MainConsole.Instance.OutputFormat("Current debug http level is {0}", MainServer.DebugLevel);
144 } 197 }
145 else 198 else
146 { 199 {
147 MainConsole.Instance.Output("Usage: debug http 0..5"); 200 if (allReqs || inReqs)
201 MainConsole.Instance.OutputFormat("Current IN debug level is {0}", MainServer.DebugLevel);
202
203 if (allReqs || outReqs)
204 MainConsole.Instance.OutputFormat("Current OUT debug level is {0}", WebUtil.DebugLevel);
148 } 205 }
149 } 206 }
150 207
diff --git a/OpenSim/Framework/WebUtil.cs b/OpenSim/Framework/WebUtil.cs
index 2aa4af5..64d61f1 100644
--- a/OpenSim/Framework/WebUtil.cs
+++ b/OpenSim/Framework/WebUtil.cs
@@ -54,6 +54,14 @@ namespace OpenSim.Framework
54 MethodBase.GetCurrentMethod().DeclaringType); 54 MethodBase.GetCurrentMethod().DeclaringType);
55 55
56 /// <summary> 56 /// <summary>
57 /// Control the printing of certain debug messages.
58 /// </summary>
59 /// <remarks>
60 /// If DebugLevel >= 3 then short notices about outgoing HTTP requests are logged.
61 /// </remarks>
62 public static int DebugLevel { get; set; }
63
64 /// <summary>
57 /// Request number for diagnostic purposes. 65 /// Request number for diagnostic purposes.
58 /// </summary> 66 /// </summary>
59 public static int RequestNumber = 0; 67 public static int RequestNumber = 0;
@@ -146,7 +154,11 @@ namespace OpenSim.Framework
146 private static OSDMap ServiceOSDRequestWorker(string url, OSDMap data, string method, int timeout, bool compressed) 154 private static OSDMap ServiceOSDRequestWorker(string url, OSDMap data, string method, int timeout, bool compressed)
147 { 155 {
148 int reqnum = RequestNumber++; 156 int reqnum = RequestNumber++;
149 // m_log.DebugFormat("[WEB UTIL]: <{0}> start osd request for {1}, method {2}",reqnum,url,method); 157
158 if (DebugLevel >= 3)
159 m_log.DebugFormat(
160 "[WEB UTIL]: HTTP OUT {0} ServiceOSD {1} {2} (timeout {3}, compressed {4})",
161 reqnum, method, url, timeout, compressed);
150 162
151 string errorMessage = "unknown error"; 163 string errorMessage = "unknown error";
152 int tickstart = Util.EnvironmentTickCount(); 164 int tickstart = Util.EnvironmentTickCount();
@@ -238,6 +250,10 @@ namespace OpenSim.Framework
238 strBuffer != null 250 strBuffer != null
239 ? (strBuffer.Length > MaxRequestDiagLength ? strBuffer.Remove(MaxRequestDiagLength) : strBuffer) 251 ? (strBuffer.Length > MaxRequestDiagLength ? strBuffer.Remove(MaxRequestDiagLength) : strBuffer)
240 : ""); 252 : "");
253 else if (DebugLevel >= 4)
254 m_log.DebugFormat(
255 "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing",
256 reqnum, tickdiff, tickdata);
241 } 257 }
242 258
243 m_log.DebugFormat( 259 m_log.DebugFormat(
@@ -317,7 +333,11 @@ namespace OpenSim.Framework
317 { 333 {
318 int reqnum = RequestNumber++; 334 int reqnum = RequestNumber++;
319 string method = (data != null && data["RequestMethod"] != null) ? data["RequestMethod"] : "unknown"; 335 string method = (data != null && data["RequestMethod"] != null) ? data["RequestMethod"] : "unknown";
320 // m_log.DebugFormat("[WEB UTIL]: <{0}> start form request for {1}, method {2}",reqnum,url,method); 336
337 if (DebugLevel >= 3)
338 m_log.DebugFormat(
339 "[WEB UTIL]: HTTP OUT {0} ServiceForm {1} {2} (timeout {3})",
340 reqnum, method, url, timeout);
321 341
322 string errorMessage = "unknown error"; 342 string errorMessage = "unknown error";
323 int tickstart = Util.EnvironmentTickCount(); 343 int tickstart = Util.EnvironmentTickCount();
@@ -389,6 +409,10 @@ namespace OpenSim.Framework
389 queryString != null 409 queryString != null
390 ? (queryString.Length > MaxRequestDiagLength) ? queryString.Remove(MaxRequestDiagLength) : queryString 410 ? (queryString.Length > MaxRequestDiagLength) ? queryString.Remove(MaxRequestDiagLength) : queryString
391 : ""); 411 : "");
412 else if (DebugLevel >= 4)
413 m_log.DebugFormat(
414 "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing",
415 reqnum, tickdiff, tickdata);
392 } 416 }
393 417
394 m_log.WarnFormat("[SERVICE FORM]: <{0}> form request to {1} failed: {2}", reqnum, url, errorMessage); 418 m_log.WarnFormat("[SERVICE FORM]: <{0}> form request to {1} failed: {2}", reqnum, url, errorMessage);
@@ -643,7 +667,6 @@ namespace OpenSim.Framework
643 /// <returns></returns> 667 /// <returns></returns>
644 public static string[] GetPreferredImageTypes(string accept) 668 public static string[] GetPreferredImageTypes(string accept)
645 { 669 {
646
647 if (accept == null || accept == string.Empty) 670 if (accept == null || accept == string.Empty)
648 return new string[0]; 671 return new string[0];
649 672
@@ -695,13 +718,15 @@ namespace OpenSim.Framework
695 string requestUrl, TRequest obj, Action<TResponse> action) 718 string requestUrl, TRequest obj, Action<TResponse> action)
696 { 719 {
697 int reqnum = WebUtil.RequestNumber++; 720 int reqnum = WebUtil.RequestNumber++;
698 // m_log.DebugFormat("[WEB UTIL]: <{0}> start osd request for {1}, method {2}",reqnum,url,method); 721
722 if (WebUtil.DebugLevel >= 3)
723 m_log.DebugFormat(
724 "[WEB UTIL]: HTTP OUT {0} AsynchronousRequestObject {1} {2}",
725 reqnum, verb, requestUrl);
699 726
700 int tickstart = Util.EnvironmentTickCount(); 727 int tickstart = Util.EnvironmentTickCount();
701 int tickdata = 0; 728 int tickdata = 0;
702 729
703 // m_log.DebugFormat("[ASYNC REQUEST]: Starting {0} {1}", verb, requestUrl);
704
705 Type type = typeof(TRequest); 730 Type type = typeof(TRequest);
706 731
707 WebRequest request = WebRequest.Create(requestUrl); 732 WebRequest request = WebRequest.Create(requestUrl);
@@ -862,6 +887,12 @@ namespace OpenSim.Framework
862 tickdata, 887 tickdata,
863 originalRequest); 888 originalRequest);
864 } 889 }
890 else if (WebUtil.DebugLevel >= 4)
891 {
892 m_log.DebugFormat(
893 "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing",
894 reqnum, tickdiff, tickdata);
895 }
865 } 896 }
866 } 897 }
867 898
@@ -882,7 +913,11 @@ namespace OpenSim.Framework
882 public static string MakeRequest(string verb, string requestUrl, string obj) 913 public static string MakeRequest(string verb, string requestUrl, string obj)
883 { 914 {
884 int reqnum = WebUtil.RequestNumber++; 915 int reqnum = WebUtil.RequestNumber++;
885 // m_log.DebugFormat("[WEB UTIL]: <{0}> start osd request for {1}, method {2}",reqnum,url,method); 916
917 if (WebUtil.DebugLevel >= 3)
918 m_log.DebugFormat(
919 "[WEB UTIL]: HTTP OUT {0} SynchronousRestForms {1} {2}",
920 reqnum, verb, requestUrl);
886 921
887 int tickstart = Util.EnvironmentTickCount(); 922 int tickstart = Util.EnvironmentTickCount();
888 int tickdata = 0; 923 int tickdata = 0;
@@ -974,6 +1009,10 @@ namespace OpenSim.Framework
974 tickdiff, 1009 tickdiff,
975 tickdata, 1010 tickdata,
976 obj.Length > WebUtil.MaxRequestDiagLength ? obj.Remove(WebUtil.MaxRequestDiagLength) : obj); 1011 obj.Length > WebUtil.MaxRequestDiagLength ? obj.Remove(WebUtil.MaxRequestDiagLength) : obj);
1012 else if (WebUtil.DebugLevel >= 4)
1013 m_log.DebugFormat(
1014 "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing",
1015 reqnum, tickdiff, tickdata);
977 1016
978 return respstring; 1017 return respstring;
979 } 1018 }
@@ -998,7 +1037,11 @@ namespace OpenSim.Framework
998 public static TResponse MakeRequest<TRequest, TResponse>(string verb, string requestUrl, TRequest obj) 1037 public static TResponse MakeRequest<TRequest, TResponse>(string verb, string requestUrl, TRequest obj)
999 { 1038 {
1000 int reqnum = WebUtil.RequestNumber++; 1039 int reqnum = WebUtil.RequestNumber++;
1001 // m_log.DebugFormat("[WEB UTIL]: <{0}> start osd request for {1}, method {2}",reqnum,url,method); 1040
1041 if (WebUtil.DebugLevel >= 3)
1042 m_log.DebugFormat(
1043 "[WEB UTIL]: HTTP OUT {0} SynchronousRestObject {1} {2}",
1044 reqnum, verb, requestUrl);
1002 1045
1003 int tickstart = Util.EnvironmentTickCount(); 1046 int tickstart = Util.EnvironmentTickCount();
1004 int tickdata = 0; 1047 int tickdata = 0;
@@ -1119,6 +1162,12 @@ namespace OpenSim.Framework
1119 tickdata, 1162 tickdata,
1120 originalRequest); 1163 originalRequest);
1121 } 1164 }
1165 else if (WebUtil.DebugLevel >= 4)
1166 {
1167 m_log.DebugFormat(
1168 "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing",
1169 reqnum, tickdiff, tickdata);
1170 }
1122 1171
1123 return deserial; 1172 return deserial;
1124 } 1173 }
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index e1c9c8e..f079e00 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -184,6 +184,22 @@ namespace OpenSim.Region.Framework.Scenes
184 184
185 public delegate void OnPluginConsoleDelegate(string[] args); 185 public delegate void OnPluginConsoleDelegate(string[] args);
186 186
187 /// <summary>
188 /// Triggered after <see cref="OpenSim.IApplicationPlugin.PostInitialise"/>
189 /// has been called for all <see cref="OpenSim.IApplicationPlugin"/>
190 /// loaded via <see cref="OpenSim.OpenSimBase.LoadPlugins"/>.
191 /// Handlers for this event are typically used to parse the arguments
192 /// from <see cref="OnPluginConsoleDelegate"/> in order to process or
193 /// filter the arguments and pass them onto <see cref="OpenSim.Region.CoreModules.Framework.InterfaceCommander.Commander.ProcessConsoleCommand"/>
194 /// </summary>
195 /// <remarks>
196 /// Triggered by <see cref="TriggerOnPluginConsole"/> in
197 /// <see cref="Scene.SendCommandToPlugins"/> via
198 /// <see cref="SceneManager.SendCommandToPluginModules"/> via
199 /// <see cref="OpenSim.OpenSimBase.HandleCommanderCommand"/> via
200 /// <see cref="OpenSim.OpenSimBase.AddPluginCommands"/> via
201 /// <see cref="OpenSim.OpenSimBase.StartupSpecific"/>
202 /// </remarks>
187 public event OnPluginConsoleDelegate OnPluginConsole; 203 public event OnPluginConsoleDelegate OnPluginConsole;
188 204
189 /// <summary> 205 /// <summary>
@@ -198,6 +214,18 @@ namespace OpenSim.Region.Framework.Scenes
198 214
199 public delegate void OnSetRootAgentSceneDelegate(UUID agentID, Scene scene); 215 public delegate void OnSetRootAgentSceneDelegate(UUID agentID, Scene scene);
200 216
217 /// <summary>
218 /// Triggered before the grunt work for adding a root agent to a
219 /// scene has been performed (resuming attachment scripts, physics,
220 /// animations etc.)
221 /// </summary>
222 /// <remarks>
223 /// Triggered before <see cref="OnMakeRootAgent"/>
224 /// by <see cref="TriggerSetRootAgentScene"/>
225 /// in <see cref="ScenePresence.MakeRootAgent"/>
226 /// via <see cref="Scene.AgentCrossing"/>
227 /// and <see cref="ScenePresence.CompleteMovement"/>
228 /// </remarks>
201 public event OnSetRootAgentSceneDelegate OnSetRootAgentScene; 229 public event OnSetRootAgentSceneDelegate OnSetRootAgentScene;
202 230
203 /// <summary> 231 /// <summary>
@@ -222,12 +250,34 @@ namespace OpenSim.Region.Framework.Scenes
222 /// <summary> 250 /// <summary>
223 /// Fired when an object is touched/grabbed. 251 /// Fired when an object is touched/grabbed.
224 /// </summary> 252 /// </summary>
253 /// <remarks>
225 /// The originalID is the local ID of the part that was actually touched. The localID itself is always that of 254 /// The originalID is the local ID of the part that was actually touched. The localID itself is always that of
226 /// the root part. 255 /// the root part.
256 /// Triggerd in response to <see cref="OpenSim.Framework.IClientAPI.OnGrabObject"/>
257 /// via <see cref="TriggerObjectGrab"/>
258 /// in <see cref="Scene.ProcessObjectGrab"/>
259 /// </remarks>
227 public event ObjectGrabDelegate OnObjectGrab; 260 public event ObjectGrabDelegate OnObjectGrab;
228 public delegate void ObjectGrabDelegate(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs); 261 public delegate void ObjectGrabDelegate(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs);
229 262
263 /// <summary>
264 /// Triggered when an object is being touched/grabbed continuously.
265 /// </summary>
266 /// <remarks>
267 /// Triggered in response to <see cref="OpenSim.Framework.IClientAPI.OnGrabUpdate"/>
268 /// via <see cref="TriggerObjectGrabbing"/>
269 /// in <see cref="Scene.ProcessObjectGrabUpdate"/>
270 /// </remarks>
230 public event ObjectGrabDelegate OnObjectGrabbing; 271 public event ObjectGrabDelegate OnObjectGrabbing;
272
273 /// <summary>
274 /// Triggered when an object stops being touched/grabbed.
275 /// </summary>
276 /// <remarks>
277 /// Triggered in response to <see cref="OpenSim.Framework.IClientAPI.OnDeGrabObject"/>
278 /// via <see cref="TriggerObjectDeGrab"/>
279 /// in <see cref="Scene.ProcessObjectDeGrab"/>
280 /// </remarks>
231 public event ObjectDeGrabDelegate OnObjectDeGrab; 281 public event ObjectDeGrabDelegate OnObjectDeGrab;
232 public event ScriptResetDelegate OnScriptReset; 282 public event ScriptResetDelegate OnScriptReset;
233 283
@@ -391,15 +441,36 @@ namespace OpenSim.Region.Framework.Scenes
391 public event ScriptColliding OnScriptLandColliderEnd; 441 public event ScriptColliding OnScriptLandColliderEnd;
392 442
393 public delegate void OnMakeChildAgentDelegate(ScenePresence presence); 443 public delegate void OnMakeChildAgentDelegate(ScenePresence presence);
444
445 /// <summary>
446 /// Triggered when an agent has been made a child agent of a scene.
447 /// </summary>
448 /// <remarks>
449 /// Triggered by <see cref="TriggerOnMakeChildAgent"/>
450 /// in <see cref="ScenePresence.MakeChildAgent"/>
451 /// via <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.CrossAgentToNewRegionAsync"/>,
452 /// <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.DoTeleport"/>,
453 /// <see cref="OpenSim.Region.CoreModules.InterGrid.KillAUser.ShutdownNoLogout"/>
454 /// </remarks>
394 public event OnMakeChildAgentDelegate OnMakeChildAgent; 455 public event OnMakeChildAgentDelegate OnMakeChildAgent;
395 456
396 public delegate void OnSaveNewWindlightProfileDelegate(); 457 public delegate void OnSaveNewWindlightProfileDelegate();
397 public delegate void OnSendNewWindlightProfileTargetedDelegate(RegionLightShareData wl, UUID user); 458 public delegate void OnSendNewWindlightProfileTargetedDelegate(RegionLightShareData wl, UUID user);
398 459
399 /// <summary> 460 /// <summary>
461 /// Triggered after the grunt work for adding a root agent to a
462 /// scene has been performed (resuming attachment scripts, physics,
463 /// animations etc.)
464 /// </summary>
465 /// <remarks>
400 /// This event is on the critical path for transferring an avatar from one region to another. Try and do 466 /// This event is on the critical path for transferring an avatar from one region to another. Try and do
401 /// as little work on this event as possible, or do work asynchronously. 467 /// as little work on this event as possible, or do work asynchronously.
402 /// </summary> 468 /// Triggered after <see cref="OnSetRootAgentScene"/>
469 /// by <see cref="TriggerOnMakeRootAgent"/>
470 /// in <see cref="ScenePresence.MakeRootAgent"/>
471 /// via <see cref="Scene.AgentCrossing"/>
472 /// and <see cref="ScenePresence.CompleteMovement"/>
473 /// </remarks>
403 public event Action<ScenePresence> OnMakeRootAgent; 474 public event Action<ScenePresence> OnMakeRootAgent;
404 475
405 public event OnSendNewWindlightProfileTargetedDelegate OnSendNewWindlightProfileTargeted; 476 public event OnSendNewWindlightProfileTargetedDelegate OnSendNewWindlightProfileTargeted;
@@ -425,9 +496,10 @@ namespace OpenSim.Region.Framework.Scenes
425 public event AvatarKillData OnAvatarKilled; 496 public event AvatarKillData OnAvatarKilled;
426 public delegate void AvatarKillData(uint KillerLocalID, ScenePresence avatar); 497 public delegate void AvatarKillData(uint KillerLocalID, ScenePresence avatar);
427 498
428// public delegate void ScriptTimerEvent(uint localID, double timerinterval); 499 /*
429 500 public delegate void ScriptTimerEvent(uint localID, double timerinterval);
430// public event ScriptTimerEvent OnScriptTimerEvent; 501 public event ScriptTimerEvent OnScriptTimerEvent;
502 */
431 503
432 public delegate void EstateToolsSunUpdate(ulong regionHandle, bool FixedTime, bool EstateSun, float LindenHour); 504 public delegate void EstateToolsSunUpdate(ulong regionHandle, bool FixedTime, bool EstateSun, float LindenHour);
433 public delegate void GetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID); 505 public delegate void GetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID);
@@ -437,12 +509,27 @@ namespace OpenSim.Region.Framework.Scenes
437 /// <summary> 509 /// <summary>
438 /// Triggered when an object is added to the scene. 510 /// Triggered when an object is added to the scene.
439 /// </summary> 511 /// </summary>
512 /// <remarks>
513 /// Triggered by <see cref="TriggerObjectAddedToScene"/>
514 /// in <see cref="Scene.AddNewSceneObject"/>,
515 /// <see cref="Scene.DuplicateObject"/>,
516 /// <see cref="Scene.doObjectDuplicateOnRay"/>
517 /// </remarks>
440 public event Action<SceneObjectGroup> OnObjectAddedToScene; 518 public event Action<SceneObjectGroup> OnObjectAddedToScene;
441 519
442 /// <summary> 520 /// <summary>
443 /// Triggered when an object is removed from the scene. 521 /// Delegate for <see cref="OnObjectBeingRemovedFromScene"/>
444 /// </summary> 522 /// </summary>
523 /// <param name="obj">The object being removed from the scene</param>
445 public delegate void ObjectBeingRemovedFromScene(SceneObjectGroup obj); 524 public delegate void ObjectBeingRemovedFromScene(SceneObjectGroup obj);
525
526 /// <summary>
527 /// Triggered when an object is removed from the scene.
528 /// </summary>
529 /// <remarks>
530 /// Triggered by <see cref="TriggerObjectBeingRemovedFromScene"/>
531 /// in <see cref="Scene.DeleteSceneObject"/>
532 /// </remarks>
446 public event ObjectBeingRemovedFromScene OnObjectBeingRemovedFromScene; 533 public event ObjectBeingRemovedFromScene OnObjectBeingRemovedFromScene;
447 534
448 public delegate void NoticeNoLandDataFromStorage(); 535 public delegate void NoticeNoLandDataFromStorage();
@@ -628,9 +715,28 @@ namespace OpenSim.Region.Framework.Scenes
628 public event PrimsLoaded OnPrimsLoaded; 715 public event PrimsLoaded OnPrimsLoaded;
629 716
630 public delegate void TeleportStart(IClientAPI client, GridRegion destination, GridRegion finalDestination, uint teleportFlags, bool gridLogout); 717 public delegate void TeleportStart(IClientAPI client, GridRegion destination, GridRegion finalDestination, uint teleportFlags, bool gridLogout);
718
719 /// <summary>
720 /// Triggered when a teleport starts
721 /// </summary>
722 /// <remarks>
723 /// Triggered by <see cref="TriggerTeleportStart"/>
724 /// in <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.CreateAgent"/>
725 /// and <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.HGEntityTransferModule.CreateAgent"/>
726 /// via <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.DoTeleport"/>
727 /// </remarks>
631 public event TeleportStart OnTeleportStart; 728 public event TeleportStart OnTeleportStart;
632 729
633 public delegate void TeleportFail(IClientAPI client, bool gridLogout); 730 public delegate void TeleportFail(IClientAPI client, bool gridLogout);
731
732 /// <summary>
733 /// Trigered when a teleport fails.
734 /// </summary>
735 /// <remarks>
736 /// Triggered by <see cref="TriggerTeleportFail"/>
737 /// in <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.Fail"/>
738 /// via <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.DoTeleport"/>
739 /// </remarks>
634 public event TeleportFail OnTeleportFail; 740 public event TeleportFail OnTeleportFail;
635 741
636 public class MoneyTransferArgs : EventArgs 742 public class MoneyTransferArgs : EventArgs
@@ -638,7 +744,9 @@ namespace OpenSim.Region.Framework.Scenes
638 public UUID sender; 744 public UUID sender;
639 public UUID receiver; 745 public UUID receiver;
640 746
641 // Always false. The SL protocol sucks. 747 /// <summary>
748 /// Always false. The SL protocol sucks.
749 /// </summary>
642 public bool authenticated = false; 750 public bool authenticated = false;
643 751
644 public int amount; 752 public int amount;
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index c873cdf..e9d1d42 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -861,6 +861,8 @@ namespace OpenSim.Region.Framework.Scenes
861 } 861 }
862 862
863 // FIXME: Ultimately this should be in a module. 863 // FIXME: Ultimately this should be in a module.
864 SendPeriodicAppearanceUpdates = true;
865
864 IConfig appearanceConfig = m_config.Configs["Appearance"]; 866 IConfig appearanceConfig = m_config.Configs["Appearance"];
865 if (appearanceConfig != null) 867 if (appearanceConfig != null)
866 { 868 {
diff --git a/OpenSim/Region/OptionalModules/Avatar/Chat/IRCConnector.cs b/OpenSim/Region/OptionalModules/Avatar/Chat/IRCConnector.cs
index ca956fb..a014798 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Chat/IRCConnector.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Chat/IRCConnector.cs
@@ -231,12 +231,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat
231 if (m_server == null || m_baseNick == null || m_ircChannel == null || m_user == null) 231 if (m_server == null || m_baseNick == null || m_ircChannel == null || m_user == null)
232 throw new Exception("Invalid connector configuration"); 232 throw new Exception("Invalid connector configuration");
233 233
234 // Generate an initial nickname if randomizing is enabled 234 // Generate an initial nickname
235 235
236 if (m_randomizeNick) 236 if (m_randomizeNick)
237 {
238 m_nick = m_baseNick + Util.RandomClass.Next(1, 99); 237 m_nick = m_baseNick + Util.RandomClass.Next(1, 99);
239 } 238 else
239 m_nick = m_baseNick;
240 240
241 m_log.InfoFormat("[IRC-Connector-{0}]: Initialization complete", idn); 241 m_log.InfoFormat("[IRC-Connector-{0}]: Initialization complete", idn);
242 242