diff options
Diffstat (limited to '')
31 files changed, 406 insertions, 1891 deletions
diff --git a/OpenSim/Framework/AssetPermissions.cs b/OpenSim/Framework/AssetPermissions.cs deleted file mode 100644 index 4a905c2..0000000 --- a/OpenSim/Framework/AssetPermissions.cs +++ /dev/null | |||
@@ -1,84 +0,0 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Reflection; | ||
4 | |||
5 | using Nini.Config; | ||
6 | using log4net; | ||
7 | |||
8 | using OpenMetaverse; | ||
9 | |||
10 | namespace OpenSim.Framework | ||
11 | { | ||
12 | public class AssetPermissions | ||
13 | { | ||
14 | private static readonly ILog m_log = | ||
15 | LogManager.GetLogger( | ||
16 | MethodBase.GetCurrentMethod().DeclaringType); | ||
17 | |||
18 | private bool[] m_DisallowExport, m_DisallowImport; | ||
19 | private string[] m_AssetTypeNames; | ||
20 | |||
21 | public AssetPermissions(IConfig config) | ||
22 | { | ||
23 | Type enumType = typeof(AssetType); | ||
24 | m_AssetTypeNames = Enum.GetNames(enumType); | ||
25 | for (int i = 0; i < m_AssetTypeNames.Length; i++) | ||
26 | m_AssetTypeNames[i] = m_AssetTypeNames[i].ToLower(); | ||
27 | int n = Enum.GetValues(enumType).Length; | ||
28 | m_DisallowExport = new bool[n]; | ||
29 | m_DisallowImport = new bool[n]; | ||
30 | |||
31 | LoadPermsFromConfig(config, "DisallowExport", m_DisallowExport); | ||
32 | LoadPermsFromConfig(config, "DisallowImport", m_DisallowImport); | ||
33 | |||
34 | } | ||
35 | |||
36 | private void LoadPermsFromConfig(IConfig assetConfig, string variable, bool[] bitArray) | ||
37 | { | ||
38 | if (assetConfig == null) | ||
39 | return; | ||
40 | |||
41 | string perms = assetConfig.GetString(variable, String.Empty); | ||
42 | string[] parts = perms.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); | ||
43 | foreach (string s in parts) | ||
44 | { | ||
45 | int index = Array.IndexOf(m_AssetTypeNames, s.Trim().ToLower()); | ||
46 | if (index >= 0) | ||
47 | bitArray[index] = true; | ||
48 | else | ||
49 | m_log.WarnFormat("[Asset Permissions]: Invalid AssetType {0}", s); | ||
50 | } | ||
51 | |||
52 | } | ||
53 | |||
54 | public bool AllowedExport(sbyte type) | ||
55 | { | ||
56 | string assetTypeName = ((AssetType)type).ToString(); | ||
57 | |||
58 | int index = Array.IndexOf(m_AssetTypeNames, assetTypeName.ToLower()); | ||
59 | if (index >= 0 && m_DisallowExport[index]) | ||
60 | { | ||
61 | m_log.DebugFormat("[Asset Permissions]: Export denied: configuration does not allow export of AssetType {0}", assetTypeName); | ||
62 | return false; | ||
63 | } | ||
64 | |||
65 | return true; | ||
66 | } | ||
67 | |||
68 | public bool AllowedImport(sbyte type) | ||
69 | { | ||
70 | string assetTypeName = ((AssetType)type).ToString(); | ||
71 | |||
72 | int index = Array.IndexOf(m_AssetTypeNames, assetTypeName.ToLower()); | ||
73 | if (index >= 0 && m_DisallowImport[index]) | ||
74 | { | ||
75 | m_log.DebugFormat("[Asset Permissions]: Import denied: configuration does not allow import of AssetType {0}", assetTypeName); | ||
76 | return false; | ||
77 | } | ||
78 | |||
79 | return true; | ||
80 | } | ||
81 | |||
82 | |||
83 | } | ||
84 | } | ||
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs index 1638541..c5d9641 100644 --- a/OpenSim/Framework/AvatarAppearance.cs +++ b/OpenSim/Framework/AvatarAppearance.cs | |||
@@ -358,9 +358,6 @@ namespace OpenSim.Framework | |||
358 | SetVisualParams(visualParams); | 358 | SetVisualParams(visualParams); |
359 | } | 359 | } |
360 | 360 | ||
361 | /// <summary> | ||
362 | /// Set avatar height by a calculation based on their visual parameters. | ||
363 | /// </summary> | ||
364 | public virtual void SetHeight() | 361 | public virtual void SetHeight() |
365 | { | 362 | { |
366 | // Start with shortest possible female avatar height | 363 | // Start with shortest possible female avatar height |
diff --git a/OpenSim/Framework/Cache.cs b/OpenSim/Framework/Cache.cs index 31cab4a..79e20fc 100644 --- a/OpenSim/Framework/Cache.cs +++ b/OpenSim/Framework/Cache.cs | |||
@@ -199,14 +199,7 @@ namespace OpenSim.Framework | |||
199 | // | 199 | // |
200 | public class Cache | 200 | public class Cache |
201 | { | 201 | { |
202 | /// <summary> | ||
203 | /// Must only be accessed under lock. | ||
204 | /// </summary> | ||
205 | private List<CacheItemBase> m_Index = new List<CacheItemBase>(); | 202 | private List<CacheItemBase> m_Index = new List<CacheItemBase>(); |
206 | |||
207 | /// <summary> | ||
208 | /// Must only be accessed under m_Index lock. | ||
209 | /// </summary> | ||
210 | private Dictionary<string, CacheItemBase> m_Lookup = | 203 | private Dictionary<string, CacheItemBase> m_Lookup = |
211 | new Dictionary<string, CacheItemBase>(); | 204 | new Dictionary<string, CacheItemBase>(); |
212 | 205 | ||
@@ -327,19 +320,19 @@ namespace OpenSim.Framework | |||
327 | { | 320 | { |
328 | if (m_Lookup.ContainsKey(index)) | 321 | if (m_Lookup.ContainsKey(index)) |
329 | item = m_Lookup[index]; | 322 | item = m_Lookup[index]; |
323 | } | ||
330 | 324 | ||
331 | if (item == null) | 325 | if (item == null) |
332 | { | 326 | { |
333 | Expire(true); | ||
334 | return null; | ||
335 | } | ||
336 | |||
337 | item.hits++; | ||
338 | item.lastUsed = DateTime.Now; | ||
339 | |||
340 | Expire(true); | 327 | Expire(true); |
328 | return null; | ||
341 | } | 329 | } |
342 | 330 | ||
331 | item.hits++; | ||
332 | item.lastUsed = DateTime.Now; | ||
333 | |||
334 | Expire(true); | ||
335 | |||
343 | return item; | 336 | return item; |
344 | } | 337 | } |
345 | 338 | ||
@@ -392,10 +385,7 @@ namespace OpenSim.Framework | |||
392 | // | 385 | // |
393 | public Object Find(Predicate<CacheItemBase> d) | 386 | public Object Find(Predicate<CacheItemBase> d) |
394 | { | 387 | { |
395 | CacheItemBase item; | 388 | CacheItemBase item = m_Index.Find(d); |
396 | |||
397 | lock (m_Index) | ||
398 | item = m_Index.Find(d); | ||
399 | 389 | ||
400 | if (item == null) | 390 | if (item == null) |
401 | return null; | 391 | return null; |
@@ -429,12 +419,12 @@ namespace OpenSim.Framework | |||
429 | public virtual void Store(string index, Object data, Type container, | 419 | public virtual void Store(string index, Object data, Type container, |
430 | Object[] parameters) | 420 | Object[] parameters) |
431 | { | 421 | { |
422 | Expire(false); | ||
423 | |||
432 | CacheItemBase item; | 424 | CacheItemBase item; |
433 | 425 | ||
434 | lock (m_Index) | 426 | lock (m_Index) |
435 | { | 427 | { |
436 | Expire(false); | ||
437 | |||
438 | if (m_Index.Contains(new CacheItemBase(index))) | 428 | if (m_Index.Contains(new CacheItemBase(index))) |
439 | { | 429 | { |
440 | if ((m_Flags & CacheFlags.AllowUpdate) != 0) | 430 | if ((m_Flags & CacheFlags.AllowUpdate) != 0) |
@@ -460,17 +450,9 @@ namespace OpenSim.Framework | |||
460 | m_Index.Add(item); | 450 | m_Index.Add(item); |
461 | m_Lookup[index] = item; | 451 | m_Lookup[index] = item; |
462 | } | 452 | } |
463 | |||
464 | item.Store(data); | 453 | item.Store(data); |
465 | } | 454 | } |
466 | 455 | ||
467 | /// <summary> | ||
468 | /// Expire items as appropriate. | ||
469 | /// </summary> | ||
470 | /// <remarks> | ||
471 | /// Callers must lock m_Index. | ||
472 | /// </remarks> | ||
473 | /// <param name='getting'></param> | ||
474 | protected virtual void Expire(bool getting) | 456 | protected virtual void Expire(bool getting) |
475 | { | 457 | { |
476 | if (getting && (m_Strategy == CacheStrategy.Aggressive)) | 458 | if (getting && (m_Strategy == CacheStrategy.Aggressive)) |
@@ -493,10 +475,12 @@ namespace OpenSim.Framework | |||
493 | 475 | ||
494 | switch (m_Strategy) | 476 | switch (m_Strategy) |
495 | { | 477 | { |
496 | case CacheStrategy.Aggressive: | 478 | case CacheStrategy.Aggressive: |
497 | if (Count < Size) | 479 | if (Count < Size) |
498 | return; | 480 | return; |
499 | 481 | ||
482 | lock (m_Index) | ||
483 | { | ||
500 | m_Index.Sort(new SortLRU()); | 484 | m_Index.Sort(new SortLRU()); |
501 | m_Index.Reverse(); | 485 | m_Index.Reverse(); |
502 | 486 | ||
@@ -506,7 +490,7 @@ namespace OpenSim.Framework | |||
506 | 490 | ||
507 | ExpireDelegate doExpire = OnExpire; | 491 | ExpireDelegate doExpire = OnExpire; |
508 | 492 | ||
509 | if (doExpire != null) | 493 | if (doExpire != null) |
510 | { | 494 | { |
511 | List<CacheItemBase> candidates = | 495 | List<CacheItemBase> candidates = |
512 | m_Index.GetRange(target, Count - target); | 496 | m_Index.GetRange(target, Count - target); |
@@ -529,34 +513,27 @@ namespace OpenSim.Framework | |||
529 | foreach (CacheItemBase item in m_Index) | 513 | foreach (CacheItemBase item in m_Index) |
530 | m_Lookup[item.uuid] = item; | 514 | m_Lookup[item.uuid] = item; |
531 | } | 515 | } |
532 | 516 | } | |
533 | break; | 517 | break; |
534 | 518 | default: | |
535 | default: | 519 | break; |
536 | break; | ||
537 | } | 520 | } |
538 | } | 521 | } |
539 | 522 | ||
540 | public void Invalidate(string uuid) | 523 | public void Invalidate(string uuid) |
541 | { | 524 | { |
542 | lock (m_Index) | 525 | if (!m_Lookup.ContainsKey(uuid)) |
543 | { | 526 | return; |
544 | if (!m_Lookup.ContainsKey(uuid)) | ||
545 | return; | ||
546 | 527 | ||
547 | CacheItemBase item = m_Lookup[uuid]; | 528 | CacheItemBase item = m_Lookup[uuid]; |
548 | m_Lookup.Remove(uuid); | 529 | m_Lookup.Remove(uuid); |
549 | m_Index.Remove(item); | 530 | m_Index.Remove(item); |
550 | } | ||
551 | } | 531 | } |
552 | 532 | ||
553 | public void Clear() | 533 | public void Clear() |
554 | { | 534 | { |
555 | lock (m_Index) | 535 | m_Index.Clear(); |
556 | { | 536 | m_Lookup.Clear(); |
557 | m_Index.Clear(); | ||
558 | m_Lookup.Clear(); | ||
559 | } | ||
560 | } | 537 | } |
561 | } | 538 | } |
562 | } \ No newline at end of file | 539 | } |
diff --git a/OpenSim/Framework/Client/IClientChat.cs b/OpenSim/Framework/Client/IClientChat.cs index 86b1faa..078ea9b 100644 --- a/OpenSim/Framework/Client/IClientChat.cs +++ b/OpenSim/Framework/Client/IClientChat.cs | |||
@@ -33,8 +33,7 @@ namespace OpenSim.Framework.Client | |||
33 | { | 33 | { |
34 | event ChatMessage OnChatFromClient; | 34 | event ChatMessage OnChatFromClient; |
35 | 35 | ||
36 | void SendChatMessage( | 36 | void SendChatMessage(string message, byte type, Vector3 fromPos, string fromName, UUID fromAgentID, byte source, |
37 | string message, byte type, Vector3 fromPos, string fromName, UUID fromAgentID, UUID ownerID, byte source, | 37 | byte audible); |
38 | byte audible); | ||
39 | } | 38 | } |
40 | } \ No newline at end of file | 39 | } |
diff --git a/OpenSim/Framework/Console/ConsoleUtil.cs b/OpenSim/Framework/Console/ConsoleUtil.cs deleted file mode 100644 index 16a63e0..0000000 --- a/OpenSim/Framework/Console/ConsoleUtil.cs +++ /dev/null | |||
@@ -1,228 +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 OpenSimulator 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 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.IO; | ||
31 | using System.Linq; | ||
32 | using System.Reflection; | ||
33 | using log4net; | ||
34 | using OpenMetaverse; | ||
35 | |||
36 | namespace OpenSim.Framework.Console | ||
37 | { | ||
38 | public class ConsoleUtil | ||
39 | { | ||
40 | // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
41 | |||
42 | public const int LocalIdNotFound = 0; | ||
43 | |||
44 | /// <summary> | ||
45 | /// Used by modules to display stock co-ordinate help, though possibly this should be under some general section | ||
46 | /// rather than in each help summary. | ||
47 | /// </summary> | ||
48 | public const string CoordHelp | ||
49 | = @"Each component of the coord is comma separated. There must be no spaces between the commas. | ||
50 | If you don't care about the z component you can simply omit it. | ||
51 | If you don't care about the x or y components then you can leave them blank (though a comma is still required) | ||
52 | If you want to specify the maxmimum value of a component then you can use ~ instead of a number | ||
53 | If you want to specify the minimum value of a component then you can use -~ instead of a number | ||
54 | e.g. | ||
55 | delete object pos 20,20,20 to 40,40,40 | ||
56 | delete object pos 20,20 to 40,40 | ||
57 | delete object pos ,20,20 to ,40,40 | ||
58 | delete object pos ,,30 to ,,~ | ||
59 | delete object pos ,,-~ to ,,30"; | ||
60 | |||
61 | public const string MinRawConsoleVectorValue = "-~"; | ||
62 | public const string MaxRawConsoleVectorValue = "~"; | ||
63 | |||
64 | public const string VectorSeparator = ","; | ||
65 | public static char[] VectorSeparatorChars = VectorSeparator.ToCharArray(); | ||
66 | |||
67 | /// <summary> | ||
68 | /// Check if the given file path exists. | ||
69 | /// </summary> | ||
70 | /// <remarks>If not, warning is printed to the given console.</remarks> | ||
71 | /// <returns>true if the file does not exist, false otherwise.</returns> | ||
72 | /// <param name='console'></param> | ||
73 | /// <param name='path'></param> | ||
74 | public static bool CheckFileDoesNotExist(ICommandConsole console, string path) | ||
75 | { | ||
76 | if (File.Exists(path)) | ||
77 | { | ||
78 | console.OutputFormat("File {0} already exists. Please move or remove it.", path); | ||
79 | return false; | ||
80 | } | ||
81 | |||
82 | return true; | ||
83 | } | ||
84 | |||
85 | /// <summary> | ||
86 | /// Try to parse a console UUID from the console. | ||
87 | /// </summary> | ||
88 | /// <remarks> | ||
89 | /// Will complain to the console if parsing fails. | ||
90 | /// </remarks> | ||
91 | /// <returns></returns> | ||
92 | /// <param name='console'>If null then no complaint is printed.</param> | ||
93 | /// <param name='rawUuid'></param> | ||
94 | /// <param name='uuid'></param> | ||
95 | public static bool TryParseConsoleUuid(ICommandConsole console, string rawUuid, out UUID uuid) | ||
96 | { | ||
97 | if (!UUID.TryParse(rawUuid, out uuid)) | ||
98 | { | ||
99 | if (console != null) | ||
100 | console.OutputFormat("{0} is not a valid uuid", rawUuid); | ||
101 | |||
102 | return false; | ||
103 | } | ||
104 | |||
105 | return true; | ||
106 | } | ||
107 | |||
108 | public static bool TryParseConsoleLocalId(ICommandConsole console, string rawLocalId, out uint localId) | ||
109 | { | ||
110 | if (!uint.TryParse(rawLocalId, out localId)) | ||
111 | { | ||
112 | if (console != null) | ||
113 | console.OutputFormat("{0} is not a valid local id", localId); | ||
114 | |||
115 | return false; | ||
116 | } | ||
117 | |||
118 | if (localId == 0) | ||
119 | { | ||
120 | if (console != null) | ||
121 | console.OutputFormat("{0} is not a valid local id - it must be greater than 0", localId); | ||
122 | |||
123 | return false; | ||
124 | } | ||
125 | |||
126 | return true; | ||
127 | } | ||
128 | |||
129 | /// <summary> | ||
130 | /// Tries to parse the input as either a UUID or a local ID. | ||
131 | /// </summary> | ||
132 | /// <returns>true if parsing succeeded, false otherwise.</returns> | ||
133 | /// <param name='console'></param> | ||
134 | /// <param name='rawId'></param> | ||
135 | /// <param name='uuid'></param> | ||
136 | /// <param name='localId'> | ||
137 | /// Will be set to ConsoleUtil.LocalIdNotFound if parsing result was a UUID or no parse succeeded. | ||
138 | /// </param> | ||
139 | public static bool TryParseConsoleId(ICommandConsole console, string rawId, out UUID uuid, out uint localId) | ||
140 | { | ||
141 | if (TryParseConsoleUuid(null, rawId, out uuid)) | ||
142 | { | ||
143 | localId = LocalIdNotFound; | ||
144 | return true; | ||
145 | } | ||
146 | |||
147 | if (TryParseConsoleLocalId(null, rawId, out localId)) | ||
148 | { | ||
149 | return true; | ||
150 | } | ||
151 | |||
152 | if (console != null) | ||
153 | console.OutputFormat("{0} is not a valid UUID or local id", rawId); | ||
154 | |||
155 | return false; | ||
156 | } | ||
157 | |||
158 | /// <summary> | ||
159 | /// Convert a minimum vector input from the console to an OpenMetaverse.Vector3 | ||
160 | /// </summary> | ||
161 | /// <param name='rawConsoleVector'>/param> | ||
162 | /// <param name='vector'></param> | ||
163 | /// <returns></returns> | ||
164 | public static bool TryParseConsoleMinVector(string rawConsoleVector, out Vector3 vector) | ||
165 | { | ||
166 | return TryParseConsoleVector(rawConsoleVector, c => float.MinValue.ToString(), out vector); | ||
167 | } | ||
168 | |||
169 | /// <summary> | ||
170 | /// Convert a maximum vector input from the console to an OpenMetaverse.Vector3 | ||
171 | /// </summary> | ||
172 | /// <param name='rawConsoleVector'>/param> | ||
173 | /// <param name='vector'></param> | ||
174 | /// <returns></returns> | ||
175 | public static bool TryParseConsoleMaxVector(string rawConsoleVector, out Vector3 vector) | ||
176 | { | ||
177 | return TryParseConsoleVector(rawConsoleVector, c => float.MaxValue.ToString(), out vector); | ||
178 | } | ||
179 | |||
180 | /// <summary> | ||
181 | /// Convert a vector input from the console to an OpenMetaverse.Vector3 | ||
182 | /// </summary> | ||
183 | /// <param name='rawConsoleVector'> | ||
184 | /// A string in the form <x>,<y>,<z> where there is no space between values. | ||
185 | /// Any component can be missing (e.g. ,,40). blankComponentFunc is invoked to replace the blank with a suitable value | ||
186 | /// Also, if the blank component is at the end, then the comma can be missed off entirely (e.g. 40,30 or 40) | ||
187 | /// The strings "~" and "-~" are valid in components. The first substitutes float.MaxValue whilst the second is float.MinValue | ||
188 | /// Other than that, component values must be numeric. | ||
189 | /// </param> | ||
190 | /// <param name='blankComponentFunc'></param> | ||
191 | /// <param name='vector'></param> | ||
192 | /// <returns></returns> | ||
193 | public static bool TryParseConsoleVector( | ||
194 | string rawConsoleVector, Func<string, string> blankComponentFunc, out Vector3 vector) | ||
195 | { | ||
196 | List<string> components = rawConsoleVector.Split(VectorSeparatorChars).ToList(); | ||
197 | |||
198 | if (components.Count < 1 || components.Count > 3) | ||
199 | { | ||
200 | vector = Vector3.Zero; | ||
201 | return false; | ||
202 | } | ||
203 | |||
204 | for (int i = components.Count; i < 3; i++) | ||
205 | components.Add(""); | ||
206 | |||
207 | List<string> semiDigestedComponents | ||
208 | = components.ConvertAll<string>( | ||
209 | c => | ||
210 | { | ||
211 | if (c == "") | ||
212 | return blankComponentFunc.Invoke(c); | ||
213 | else if (c == MaxRawConsoleVectorValue) | ||
214 | return float.MaxValue.ToString(); | ||
215 | else if (c == MinRawConsoleVectorValue) | ||
216 | return float.MinValue.ToString(); | ||
217 | else | ||
218 | return c; | ||
219 | }); | ||
220 | |||
221 | string semiDigestedConsoleVector = string.Join(VectorSeparator, semiDigestedComponents.ToArray()); | ||
222 | |||
223 | // m_log.DebugFormat("[CONSOLE UTIL]: Parsing {0} into OpenMetaverse.Vector3", semiDigestedConsoleVector); | ||
224 | |||
225 | return Vector3.TryParse(semiDigestedConsoleVector, out vector); | ||
226 | } | ||
227 | } | ||
228 | } \ No newline at end of file | ||
diff --git a/OpenSim/Framework/Constants.cs b/OpenSim/Framework/Constants.cs index a2eb5ee..1b1aaf2 100644 --- a/OpenSim/Framework/Constants.cs +++ b/OpenSim/Framework/Constants.cs | |||
@@ -31,7 +31,6 @@ namespace OpenSim.Framework | |||
31 | public class Constants | 31 | public class Constants |
32 | { | 32 | { |
33 | public const uint RegionSize = 256; | 33 | public const uint RegionSize = 256; |
34 | public const uint RegionHeight = 4096; | ||
35 | public const byte TerrainPatchSize = 16; | 34 | public const byte TerrainPatchSize = 16; |
36 | public const string DefaultTexture = "89556747-24cb-43ed-920b-47caed15465f"; | 35 | public const string DefaultTexture = "89556747-24cb-43ed-920b-47caed15465f"; |
37 | 36 | ||
diff --git a/OpenSim/Framework/EstateSettings.cs b/OpenSim/Framework/EstateSettings.cs index e03750b..9020761 100644 --- a/OpenSim/Framework/EstateSettings.cs +++ b/OpenSim/Framework/EstateSettings.cs | |||
@@ -419,11 +419,11 @@ namespace OpenSim.Framework | |||
419 | 419 | ||
420 | public void SetFromFlags(ulong regionFlags) | 420 | public void SetFromFlags(ulong regionFlags) |
421 | { | 421 | { |
422 | ResetHomeOnTeleport = ((regionFlags & (ulong)OpenMetaverse.RegionFlags.ResetHomeOnTeleport) == (ulong)OpenMetaverse.RegionFlags.ResetHomeOnTeleport); | 422 | ResetHomeOnTeleport = ((regionFlags & (ulong)RegionFlags.ResetHomeOnTeleport) == (ulong)RegionFlags.ResetHomeOnTeleport); |
423 | BlockDwell = ((regionFlags & (ulong)OpenMetaverse.RegionFlags.BlockDwell) == (ulong)OpenMetaverse.RegionFlags.BlockDwell); | 423 | BlockDwell = ((regionFlags & (ulong)RegionFlags.BlockDwell) == (ulong)RegionFlags.BlockDwell); |
424 | AllowLandmark = ((regionFlags & (ulong)OpenMetaverse.RegionFlags.AllowLandmark) == (ulong)OpenMetaverse.RegionFlags.AllowLandmark); | 424 | AllowLandmark = ((regionFlags & (ulong)RegionFlags.AllowLandmark) == (ulong)RegionFlags.AllowLandmark); |
425 | AllowParcelChanges = ((regionFlags & (ulong)OpenMetaverse.RegionFlags.AllowParcelChanges) == (ulong)OpenMetaverse.RegionFlags.AllowParcelChanges); | 425 | AllowParcelChanges = ((regionFlags & (ulong)RegionFlags.AllowParcelChanges) == (ulong)RegionFlags.AllowParcelChanges); |
426 | AllowSetHome = ((regionFlags & (ulong)OpenMetaverse.RegionFlags.AllowSetHome) == (ulong)OpenMetaverse.RegionFlags.AllowSetHome); | 426 | AllowSetHome = ((regionFlags & (ulong)RegionFlags.AllowSetHome) == (ulong)RegionFlags.AllowSetHome); |
427 | } | 427 | } |
428 | 428 | ||
429 | public bool GroupAccess(UUID groupID) | 429 | public bool GroupAccess(UUID groupID) |
diff --git a/OpenSim/Framework/GridInstantMessage.cs b/OpenSim/Framework/GridInstantMessage.cs index 6ae0488..a6bf6e3 100644 --- a/OpenSim/Framework/GridInstantMessage.cs +++ b/OpenSim/Framework/GridInstantMessage.cs | |||
@@ -44,6 +44,7 @@ namespace OpenSim.Framework | |||
44 | public Vector3 Position; | 44 | public Vector3 Position; |
45 | public byte[] binaryBucket; | 45 | public byte[] binaryBucket; |
46 | 46 | ||
47 | |||
47 | public uint ParentEstateID; | 48 | public uint ParentEstateID; |
48 | public Guid RegionID; | 49 | public Guid RegionID; |
49 | public uint timestamp; | 50 | public uint timestamp; |
@@ -57,7 +58,7 @@ namespace OpenSim.Framework | |||
57 | string _fromAgentName, UUID _toAgentID, | 58 | string _fromAgentName, UUID _toAgentID, |
58 | byte _dialog, bool _fromGroup, string _message, | 59 | byte _dialog, bool _fromGroup, string _message, |
59 | UUID _imSessionID, bool _offline, Vector3 _position, | 60 | UUID _imSessionID, bool _offline, Vector3 _position, |
60 | byte[] _binaryBucket, bool addTimestamp) | 61 | byte[] _binaryBucket) |
61 | { | 62 | { |
62 | fromAgentID = _fromAgentID.Guid; | 63 | fromAgentID = _fromAgentID.Guid; |
63 | fromAgentName = _fromAgentName; | 64 | fromAgentName = _fromAgentName; |
@@ -78,9 +79,7 @@ namespace OpenSim.Framework | |||
78 | ParentEstateID = scene.RegionInfo.EstateSettings.ParentEstateID; | 79 | ParentEstateID = scene.RegionInfo.EstateSettings.ParentEstateID; |
79 | RegionID = scene.RegionInfo.RegionSettings.RegionUUID.Guid; | 80 | RegionID = scene.RegionInfo.RegionSettings.RegionUUID.Guid; |
80 | } | 81 | } |
81 | 82 | timestamp = (uint)Util.UnixTimeSinceEpoch(); | |
82 | if (addTimestamp) | ||
83 | timestamp = (uint)Util.UnixTimeSinceEpoch(); | ||
84 | } | 83 | } |
85 | 84 | ||
86 | public GridInstantMessage(IScene scene, UUID _fromAgentID, | 85 | public GridInstantMessage(IScene scene, UUID _fromAgentID, |
@@ -88,7 +87,7 @@ namespace OpenSim.Framework | |||
88 | string _message, bool _offline, | 87 | string _message, bool _offline, |
89 | Vector3 _position) : this(scene, _fromAgentID, _fromAgentName, | 88 | Vector3 _position) : this(scene, _fromAgentID, _fromAgentName, |
90 | _toAgentID, _dialog, false, _message, | 89 | _toAgentID, _dialog, false, _message, |
91 | _fromAgentID ^ _toAgentID, _offline, _position, new byte[0], true) | 90 | _fromAgentID ^ _toAgentID, _offline, _position, new byte[0]) |
92 | { | 91 | { |
93 | } | 92 | } |
94 | } | 93 | } |
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs index 1c6685a..e31c7f6 100644 --- a/OpenSim/Framework/IClientAPI.cs +++ b/OpenSim/Framework/IClientAPI.cs | |||
@@ -815,23 +815,8 @@ namespace OpenSim.Framework | |||
815 | event Action<IClientAPI> OnRegionHandShakeReply; | 815 | event Action<IClientAPI> OnRegionHandShakeReply; |
816 | event GenericCall1 OnRequestWearables; | 816 | event GenericCall1 OnRequestWearables; |
817 | event Action<IClientAPI, bool> OnCompleteMovementToRegion; | 817 | event Action<IClientAPI, bool> OnCompleteMovementToRegion; |
818 | |||
819 | /// <summary> | ||
820 | /// Called when an AgentUpdate message is received and before OnAgentUpdate. | ||
821 | /// </summary> | ||
822 | /// <remarks> | ||
823 | /// Listeners must not retain a reference to AgentUpdateArgs since this object may be reused for subsequent AgentUpdates. | ||
824 | /// </remarks> | ||
825 | event UpdateAgent OnPreAgentUpdate; | 818 | event UpdateAgent OnPreAgentUpdate; |
826 | |||
827 | /// <summary> | ||
828 | /// Called when an AgentUpdate message is received and after OnPreAgentUpdate. | ||
829 | /// </summary> | ||
830 | /// <remarks> | ||
831 | /// Listeners must not retain a reference to AgentUpdateArgs since this object may be reused for subsequent AgentUpdates. | ||
832 | /// </remarks> | ||
833 | event UpdateAgent OnAgentUpdate; | 819 | event UpdateAgent OnAgentUpdate; |
834 | |||
835 | event AgentRequestSit OnAgentRequestSit; | 820 | event AgentRequestSit OnAgentRequestSit; |
836 | event AgentSit OnAgentSit; | 821 | event AgentSit OnAgentSit; |
837 | event AvatarPickerRequest OnAvatarPickerRequest; | 822 | event AvatarPickerRequest OnAvatarPickerRequest; |
@@ -1061,21 +1046,8 @@ namespace OpenSim.Framework | |||
1061 | 1046 | ||
1062 | void InPacket(object NewPack); | 1047 | void InPacket(object NewPack); |
1063 | void ProcessInPacket(Packet NewPack); | 1048 | void ProcessInPacket(Packet NewPack); |
1064 | |||
1065 | /// <summary> | ||
1066 | /// Close this client | ||
1067 | /// </summary> | ||
1068 | void Close(); | 1049 | void Close(); |
1069 | 1050 | void Close(bool sendStop); | |
1070 | /// <summary> | ||
1071 | /// Close this client | ||
1072 | /// </summary> | ||
1073 | /// <param name='force'> | ||
1074 | /// If true, attempts the close without checking active status. You do not want to try this except as a last | ||
1075 | /// ditch attempt where Active == false but the ScenePresence still exists. | ||
1076 | /// </param> | ||
1077 | void Close(bool sendStop, bool force); | ||
1078 | |||
1079 | void Kick(string message); | 1051 | void Kick(string message); |
1080 | 1052 | ||
1081 | /// <summary> | 1053 | /// <summary> |
@@ -1112,20 +1084,8 @@ namespace OpenSim.Framework | |||
1112 | void SendAnimations(UUID[] animID, int[] seqs, UUID sourceAgentId, UUID[] objectIDs); | 1084 | void SendAnimations(UUID[] animID, int[] seqs, UUID sourceAgentId, UUID[] objectIDs); |
1113 | void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args); | 1085 | void SendRegionHandshake(RegionInfo regionInfo, RegionHandshakeArgs args); |
1114 | 1086 | ||
1115 | /// <summary> | 1087 | void SendChatMessage(string message, byte type, Vector3 fromPos, string fromName, UUID fromAgentID, byte source, |
1116 | /// Send chat to the viewer. | 1088 | byte audible); |
1117 | /// </summary> | ||
1118 | /// <param name='message'></param> | ||
1119 | /// <param name='type'></param> | ||
1120 | /// <param name='fromPos'></param> | ||
1121 | /// <param name='fromName'></param> | ||
1122 | /// <param name='fromAgentID'></param> | ||
1123 | /// <param name='ownerID'></param> | ||
1124 | /// <param name='source'></param> | ||
1125 | /// <param name='audible'></param> | ||
1126 | void SendChatMessage( | ||
1127 | string message, byte type, Vector3 fromPos, string fromName, UUID fromAgentID, UUID ownerID, byte source, | ||
1128 | byte audible); | ||
1129 | 1089 | ||
1130 | void SendInstantMessage(GridInstantMessage im); | 1090 | void SendInstantMessage(GridInstantMessage im); |
1131 | 1091 | ||
diff --git a/OpenSim/Framework/InventoryFolderBase.cs b/OpenSim/Framework/InventoryFolderBase.cs index b3457a6..a12183c 100644 --- a/OpenSim/Framework/InventoryFolderBase.cs +++ b/OpenSim/Framework/InventoryFolderBase.cs | |||
@@ -73,27 +73,33 @@ namespace OpenSim.Framework | |||
73 | { | 73 | { |
74 | } | 74 | } |
75 | 75 | ||
76 | public InventoryFolderBase(UUID id) : this() | 76 | public InventoryFolderBase(UUID id) |
77 | { | 77 | { |
78 | ID = id; | 78 | ID = id; |
79 | } | 79 | } |
80 | 80 | ||
81 | public InventoryFolderBase(UUID id, UUID owner) : this(id) | 81 | public InventoryFolderBase(UUID id, UUID owner) |
82 | { | 82 | { |
83 | ID = id; | ||
83 | Owner = owner; | 84 | Owner = owner; |
84 | } | 85 | } |
85 | 86 | ||
86 | public InventoryFolderBase(UUID id, string name, UUID owner, UUID parent) : this(id, owner) | 87 | public InventoryFolderBase(UUID id, string name, UUID owner, UUID parent) |
87 | { | 88 | { |
89 | ID = id; | ||
88 | Name = name; | 90 | Name = name; |
91 | Owner = owner; | ||
89 | ParentID = parent; | 92 | ParentID = parent; |
90 | } | 93 | } |
91 | 94 | ||
92 | public InventoryFolderBase( | 95 | public InventoryFolderBase(UUID id, string name, UUID owner, short type, UUID parent, ushort version) |
93 | UUID id, string name, UUID owner, short type, UUID parent, ushort version) : this(id, name, owner, parent) | ||
94 | { | 96 | { |
97 | ID = id; | ||
98 | Name = name; | ||
99 | Owner = owner; | ||
95 | Type = type; | 100 | Type = type; |
101 | ParentID = parent; | ||
96 | Version = version; | 102 | Version = version; |
97 | } | 103 | } |
98 | } | 104 | } |
99 | } \ No newline at end of file | 105 | } |
diff --git a/OpenSim/Framework/LandData.cs b/OpenSim/Framework/LandData.cs index 4dffd3f..dcaa46d 100644 --- a/OpenSim/Framework/LandData.cs +++ b/OpenSim/Framework/LandData.cs | |||
@@ -49,8 +49,8 @@ namespace OpenSim.Framework | |||
49 | // use only one serializer to give the runtime a chance to | 49 | // use only one serializer to give the runtime a chance to |
50 | // optimize it (it won't do that if you use a new instance | 50 | // optimize it (it won't do that if you use a new instance |
51 | // every time) | 51 | // every time) |
52 | private static XmlSerializer serializer = new XmlSerializer(typeof(LandData)); | 52 | private static XmlSerializer serializer = new XmlSerializer(typeof (LandData)); |
53 | 53 | ||
54 | private Vector3 _AABBMax = new Vector3(); | 54 | private Vector3 _AABBMax = new Vector3(); |
55 | private Vector3 _AABBMin = new Vector3(); | 55 | private Vector3 _AABBMin = new Vector3(); |
56 | private int _area = 0; | 56 | private int _area = 0; |
@@ -65,11 +65,11 @@ namespace OpenSim.Framework | |||
65 | private byte[] _bitmap = new byte[512]; | 65 | private byte[] _bitmap = new byte[512]; |
66 | private string _description = String.Empty; | 66 | private string _description = String.Empty; |
67 | 67 | ||
68 | private uint _flags = (uint)ParcelFlags.AllowFly | (uint)ParcelFlags.AllowLandmark | | 68 | private uint _flags = (uint) ParcelFlags.AllowFly | (uint) ParcelFlags.AllowLandmark | |
69 | (uint)ParcelFlags.AllowAPrimitiveEntry | | 69 | (uint) ParcelFlags.AllowAPrimitiveEntry | |
70 | (uint)ParcelFlags.AllowDeedToGroup | | 70 | (uint) ParcelFlags.AllowDeedToGroup | |
71 | (uint)ParcelFlags.CreateObjects | (uint)ParcelFlags.AllowOtherScripts | | 71 | (uint) ParcelFlags.CreateObjects | (uint) ParcelFlags.AllowOtherScripts | |
72 | (uint)ParcelFlags.AllowVoiceChat; | 72 | (uint) ParcelFlags.SoundLocal | (uint) ParcelFlags.AllowVoiceChat; |
73 | 73 | ||
74 | private byte _landingType = 0; | 74 | private byte _landingType = 0; |
75 | private string _name = "Your Parcel"; | 75 | private string _name = "Your Parcel"; |
@@ -97,36 +97,16 @@ namespace OpenSim.Framework | |||
97 | private bool _mediaLoop = false; | 97 | private bool _mediaLoop = false; |
98 | private bool _obscureMusic = false; | 98 | private bool _obscureMusic = false; |
99 | private bool _obscureMedia = false; | 99 | private bool _obscureMedia = false; |
100 | private float _dwell = 0; | ||
101 | |||
102 | /// <summary> | ||
103 | /// Traffic count of parcel | ||
104 | /// </summary> | ||
105 | [XmlIgnore] | ||
106 | public float Dwell | ||
107 | { | ||
108 | get | ||
109 | { | ||
110 | return _dwell; | ||
111 | } | ||
112 | set | ||
113 | { | ||
114 | _dwell = value; | ||
115 | } | ||
116 | } | ||
117 | 100 | ||
118 | /// <summary> | 101 | /// <summary> |
119 | /// Whether to obscure parcel media URL | 102 | /// Whether to obscure parcel media URL |
120 | /// </summary> | 103 | /// </summary> |
121 | [XmlIgnore] | 104 | [XmlIgnore] |
122 | public bool ObscureMedia | 105 | public bool ObscureMedia { |
123 | { | 106 | get { |
124 | get | ||
125 | { | ||
126 | return _obscureMedia; | 107 | return _obscureMedia; |
127 | } | 108 | } |
128 | set | 109 | set { |
129 | { | ||
130 | _obscureMedia = value; | 110 | _obscureMedia = value; |
131 | } | 111 | } |
132 | } | 112 | } |
@@ -135,14 +115,11 @@ namespace OpenSim.Framework | |||
135 | /// Whether to obscure parcel music URL | 115 | /// Whether to obscure parcel music URL |
136 | /// </summary> | 116 | /// </summary> |
137 | [XmlIgnore] | 117 | [XmlIgnore] |
138 | public bool ObscureMusic | 118 | public bool ObscureMusic { |
139 | { | 119 | get { |
140 | get | ||
141 | { | ||
142 | return _obscureMusic; | 120 | return _obscureMusic; |
143 | } | 121 | } |
144 | set | 122 | set { |
145 | { | ||
146 | _obscureMusic = value; | 123 | _obscureMusic = value; |
147 | } | 124 | } |
148 | } | 125 | } |
@@ -151,14 +128,11 @@ namespace OpenSim.Framework | |||
151 | /// Whether to loop parcel media | 128 | /// Whether to loop parcel media |
152 | /// </summary> | 129 | /// </summary> |
153 | [XmlIgnore] | 130 | [XmlIgnore] |
154 | public bool MediaLoop | 131 | public bool MediaLoop { |
155 | { | 132 | get { |
156 | get | ||
157 | { | ||
158 | return _mediaLoop; | 133 | return _mediaLoop; |
159 | } | 134 | } |
160 | set | 135 | set { |
161 | { | ||
162 | _mediaLoop = value; | 136 | _mediaLoop = value; |
163 | } | 137 | } |
164 | } | 138 | } |
@@ -167,14 +141,11 @@ namespace OpenSim.Framework | |||
167 | /// Height of parcel media render | 141 | /// Height of parcel media render |
168 | /// </summary> | 142 | /// </summary> |
169 | [XmlIgnore] | 143 | [XmlIgnore] |
170 | public int MediaHeight | 144 | public int MediaHeight { |
171 | { | 145 | get { |
172 | get | ||
173 | { | ||
174 | return _mediaHeight; | 146 | return _mediaHeight; |
175 | } | 147 | } |
176 | set | 148 | set { |
177 | { | ||
178 | _mediaHeight = value; | 149 | _mediaHeight = value; |
179 | } | 150 | } |
180 | } | 151 | } |
@@ -183,14 +154,11 @@ namespace OpenSim.Framework | |||
183 | /// Width of parcel media render | 154 | /// Width of parcel media render |
184 | /// </summary> | 155 | /// </summary> |
185 | [XmlIgnore] | 156 | [XmlIgnore] |
186 | public int MediaWidth | 157 | public int MediaWidth { |
187 | { | 158 | get { |
188 | get | ||
189 | { | ||
190 | return _mediaWidth; | 159 | return _mediaWidth; |
191 | } | 160 | } |
192 | set | 161 | set { |
193 | { | ||
194 | _mediaWidth = value; | 162 | _mediaWidth = value; |
195 | } | 163 | } |
196 | } | 164 | } |
@@ -199,14 +167,11 @@ namespace OpenSim.Framework | |||
199 | /// Upper corner of the AABB for the parcel | 167 | /// Upper corner of the AABB for the parcel |
200 | /// </summary> | 168 | /// </summary> |
201 | [XmlIgnore] | 169 | [XmlIgnore] |
202 | public Vector3 AABBMax | 170 | public Vector3 AABBMax { |
203 | { | 171 | get { |
204 | get | ||
205 | { | ||
206 | return _AABBMax; | 172 | return _AABBMax; |
207 | } | 173 | } |
208 | set | 174 | set { |
209 | { | ||
210 | _AABBMax = value; | 175 | _AABBMax = value; |
211 | } | 176 | } |
212 | } | 177 | } |
@@ -214,14 +179,11 @@ namespace OpenSim.Framework | |||
214 | /// Lower corner of the AABB for the parcel | 179 | /// Lower corner of the AABB for the parcel |
215 | /// </summary> | 180 | /// </summary> |
216 | [XmlIgnore] | 181 | [XmlIgnore] |
217 | public Vector3 AABBMin | 182 | public Vector3 AABBMin { |
218 | { | 183 | get { |
219 | get | ||
220 | { | ||
221 | return _AABBMin; | 184 | return _AABBMin; |
222 | } | 185 | } |
223 | set | 186 | set { |
224 | { | ||
225 | _AABBMin = value; | 187 | _AABBMin = value; |
226 | } | 188 | } |
227 | } | 189 | } |
@@ -229,14 +191,11 @@ namespace OpenSim.Framework | |||
229 | /// <summary> | 191 | /// <summary> |
230 | /// Area in meters^2 the parcel contains | 192 | /// Area in meters^2 the parcel contains |
231 | /// </summary> | 193 | /// </summary> |
232 | public int Area | 194 | public int Area { |
233 | { | 195 | get { |
234 | get | ||
235 | { | ||
236 | return _area; | 196 | return _area; |
237 | } | 197 | } |
238 | set | 198 | set { |
239 | { | ||
240 | _area = value; | 199 | _area = value; |
241 | } | 200 | } |
242 | } | 201 | } |
@@ -244,14 +203,11 @@ namespace OpenSim.Framework | |||
244 | /// <summary> | 203 | /// <summary> |
245 | /// ID of auction (3rd Party Integration) when parcel is being auctioned | 204 | /// ID of auction (3rd Party Integration) when parcel is being auctioned |
246 | /// </summary> | 205 | /// </summary> |
247 | public uint AuctionID | 206 | public uint AuctionID { |
248 | { | 207 | get { |
249 | get | ||
250 | { | ||
251 | return _auctionID; | 208 | return _auctionID; |
252 | } | 209 | } |
253 | set | 210 | set { |
254 | { | ||
255 | _auctionID = value; | 211 | _auctionID = value; |
256 | } | 212 | } |
257 | } | 213 | } |
@@ -259,14 +215,11 @@ namespace OpenSim.Framework | |||
259 | /// <summary> | 215 | /// <summary> |
260 | /// UUID of authorized buyer of parcel. This is UUID.Zero if anyone can buy it. | 216 | /// UUID of authorized buyer of parcel. This is UUID.Zero if anyone can buy it. |
261 | /// </summary> | 217 | /// </summary> |
262 | public UUID AuthBuyerID | 218 | public UUID AuthBuyerID { |
263 | { | 219 | get { |
264 | get | ||
265 | { | ||
266 | return _authBuyerID; | 220 | return _authBuyerID; |
267 | } | 221 | } |
268 | set | 222 | set { |
269 | { | ||
270 | _authBuyerID = value; | 223 | _authBuyerID = value; |
271 | } | 224 | } |
272 | } | 225 | } |
@@ -274,14 +227,11 @@ namespace OpenSim.Framework | |||
274 | /// <summary> | 227 | /// <summary> |
275 | /// Category of parcel. Used for classifying the parcel in classified listings | 228 | /// Category of parcel. Used for classifying the parcel in classified listings |
276 | /// </summary> | 229 | /// </summary> |
277 | public ParcelCategory Category | 230 | public ParcelCategory Category { |
278 | { | 231 | get { |
279 | get | ||
280 | { | ||
281 | return _category; | 232 | return _category; |
282 | } | 233 | } |
283 | set | 234 | set { |
284 | { | ||
285 | _category = value; | 235 | _category = value; |
286 | } | 236 | } |
287 | } | 237 | } |
@@ -289,14 +239,11 @@ namespace OpenSim.Framework | |||
289 | /// <summary> | 239 | /// <summary> |
290 | /// Date that the current owner purchased or claimed the parcel | 240 | /// Date that the current owner purchased or claimed the parcel |
291 | /// </summary> | 241 | /// </summary> |
292 | public int ClaimDate | 242 | public int ClaimDate { |
293 | { | 243 | get { |
294 | get | ||
295 | { | ||
296 | return _claimDate; | 244 | return _claimDate; |
297 | } | 245 | } |
298 | set | 246 | set { |
299 | { | ||
300 | _claimDate = value; | 247 | _claimDate = value; |
301 | } | 248 | } |
302 | } | 249 | } |
@@ -304,14 +251,11 @@ namespace OpenSim.Framework | |||
304 | /// <summary> | 251 | /// <summary> |
305 | /// The last price that the parcel was sold at | 252 | /// The last price that the parcel was sold at |
306 | /// </summary> | 253 | /// </summary> |
307 | public int ClaimPrice | 254 | public int ClaimPrice { |
308 | { | 255 | get { |
309 | get | ||
310 | { | ||
311 | return _claimPrice; | 256 | return _claimPrice; |
312 | } | 257 | } |
313 | set | 258 | set { |
314 | { | ||
315 | _claimPrice = value; | 259 | _claimPrice = value; |
316 | } | 260 | } |
317 | } | 261 | } |
@@ -319,14 +263,11 @@ namespace OpenSim.Framework | |||
319 | /// <summary> | 263 | /// <summary> |
320 | /// Global ID for the parcel. (3rd Party Integration) | 264 | /// Global ID for the parcel. (3rd Party Integration) |
321 | /// </summary> | 265 | /// </summary> |
322 | public UUID GlobalID | 266 | public UUID GlobalID { |
323 | { | 267 | get { |
324 | get | ||
325 | { | ||
326 | return _globalID; | 268 | return _globalID; |
327 | } | 269 | } |
328 | set | 270 | set { |
329 | { | ||
330 | _globalID = value; | 271 | _globalID = value; |
331 | } | 272 | } |
332 | } | 273 | } |
@@ -334,14 +275,11 @@ namespace OpenSim.Framework | |||
334 | /// <summary> | 275 | /// <summary> |
335 | /// Unique ID of the Group that owns | 276 | /// Unique ID of the Group that owns |
336 | /// </summary> | 277 | /// </summary> |
337 | public UUID GroupID | 278 | public UUID GroupID { |
338 | { | 279 | get { |
339 | get | ||
340 | { | ||
341 | return _groupID; | 280 | return _groupID; |
342 | } | 281 | } |
343 | set | 282 | set { |
344 | { | ||
345 | _groupID = value; | 283 | _groupID = value; |
346 | } | 284 | } |
347 | } | 285 | } |
@@ -349,14 +287,11 @@ namespace OpenSim.Framework | |||
349 | /// <summary> | 287 | /// <summary> |
350 | /// Returns true if the Land Parcel is owned by a group | 288 | /// Returns true if the Land Parcel is owned by a group |
351 | /// </summary> | 289 | /// </summary> |
352 | public bool IsGroupOwned | 290 | public bool IsGroupOwned { |
353 | { | 291 | get { |
354 | get | ||
355 | { | ||
356 | return _isGroupOwned; | 292 | return _isGroupOwned; |
357 | } | 293 | } |
358 | set | 294 | set { |
359 | { | ||
360 | _isGroupOwned = value; | 295 | _isGroupOwned = value; |
361 | } | 296 | } |
362 | } | 297 | } |
@@ -364,14 +299,11 @@ namespace OpenSim.Framework | |||
364 | /// <summary> | 299 | /// <summary> |
365 | /// jp2 data for the image representative of the parcel in the parcel dialog | 300 | /// jp2 data for the image representative of the parcel in the parcel dialog |
366 | /// </summary> | 301 | /// </summary> |
367 | public byte[] Bitmap | 302 | public byte[] Bitmap { |
368 | { | 303 | get { |
369 | get | ||
370 | { | ||
371 | return _bitmap; | 304 | return _bitmap; |
372 | } | 305 | } |
373 | set | 306 | set { |
374 | { | ||
375 | _bitmap = value; | 307 | _bitmap = value; |
376 | } | 308 | } |
377 | } | 309 | } |
@@ -379,14 +311,11 @@ namespace OpenSim.Framework | |||
379 | /// <summary> | 311 | /// <summary> |
380 | /// Parcel Description | 312 | /// Parcel Description |
381 | /// </summary> | 313 | /// </summary> |
382 | public string Description | 314 | public string Description { |
383 | { | 315 | get { |
384 | get | ||
385 | { | ||
386 | return _description; | 316 | return _description; |
387 | } | 317 | } |
388 | set | 318 | set { |
389 | { | ||
390 | _description = value; | 319 | _description = value; |
391 | } | 320 | } |
392 | } | 321 | } |
@@ -394,14 +323,11 @@ namespace OpenSim.Framework | |||
394 | /// <summary> | 323 | /// <summary> |
395 | /// Parcel settings. Access flags, Fly, NoPush, Voice, Scripts allowed, etc. ParcelFlags | 324 | /// Parcel settings. Access flags, Fly, NoPush, Voice, Scripts allowed, etc. ParcelFlags |
396 | /// </summary> | 325 | /// </summary> |
397 | public uint Flags | 326 | public uint Flags { |
398 | { | 327 | get { |
399 | get | ||
400 | { | ||
401 | return _flags; | 328 | return _flags; |
402 | } | 329 | } |
403 | set | 330 | set { |
404 | { | ||
405 | _flags = value; | 331 | _flags = value; |
406 | } | 332 | } |
407 | } | 333 | } |
@@ -410,14 +336,11 @@ namespace OpenSim.Framework | |||
410 | /// Determines if people are able to teleport where they please on the parcel or if they | 336 | /// Determines if people are able to teleport where they please on the parcel or if they |
411 | /// get constrainted to a specific point on teleport within the parcel | 337 | /// get constrainted to a specific point on teleport within the parcel |
412 | /// </summary> | 338 | /// </summary> |
413 | public byte LandingType | 339 | public byte LandingType { |
414 | { | 340 | get { |
415 | get | ||
416 | { | ||
417 | return _landingType; | 341 | return _landingType; |
418 | } | 342 | } |
419 | set | 343 | set { |
420 | { | ||
421 | _landingType = value; | 344 | _landingType = value; |
422 | } | 345 | } |
423 | } | 346 | } |
@@ -425,14 +348,11 @@ namespace OpenSim.Framework | |||
425 | /// <summary> | 348 | /// <summary> |
426 | /// Parcel Name | 349 | /// Parcel Name |
427 | /// </summary> | 350 | /// </summary> |
428 | public string Name | 351 | public string Name { |
429 | { | 352 | get { |
430 | get | ||
431 | { | ||
432 | return _name; | 353 | return _name; |
433 | } | 354 | } |
434 | set | 355 | set { |
435 | { | ||
436 | _name = value; | 356 | _name = value; |
437 | } | 357 | } |
438 | } | 358 | } |
@@ -440,14 +360,11 @@ namespace OpenSim.Framework | |||
440 | /// <summary> | 360 | /// <summary> |
441 | /// Status of Parcel, Leased, Abandoned, For Sale | 361 | /// Status of Parcel, Leased, Abandoned, For Sale |
442 | /// </summary> | 362 | /// </summary> |
443 | public ParcelStatus Status | 363 | public ParcelStatus Status { |
444 | { | 364 | get { |
445 | get | ||
446 | { | ||
447 | return _status; | 365 | return _status; |
448 | } | 366 | } |
449 | set | 367 | set { |
450 | { | ||
451 | _status = value; | 368 | _status = value; |
452 | } | 369 | } |
453 | } | 370 | } |
@@ -455,14 +372,11 @@ namespace OpenSim.Framework | |||
455 | /// <summary> | 372 | /// <summary> |
456 | /// Internal ID of the parcel. Sometimes the client will try to use this value | 373 | /// Internal ID of the parcel. Sometimes the client will try to use this value |
457 | /// </summary> | 374 | /// </summary> |
458 | public int LocalID | 375 | public int LocalID { |
459 | { | 376 | get { |
460 | get | ||
461 | { | ||
462 | return _localID; | 377 | return _localID; |
463 | } | 378 | } |
464 | set | 379 | set { |
465 | { | ||
466 | _localID = value; | 380 | _localID = value; |
467 | } | 381 | } |
468 | } | 382 | } |
@@ -470,14 +384,11 @@ namespace OpenSim.Framework | |||
470 | /// <summary> | 384 | /// <summary> |
471 | /// Determines if we scale the media based on the surface it's on | 385 | /// Determines if we scale the media based on the surface it's on |
472 | /// </summary> | 386 | /// </summary> |
473 | public byte MediaAutoScale | 387 | public byte MediaAutoScale { |
474 | { | 388 | get { |
475 | get | ||
476 | { | ||
477 | return _mediaAutoScale; | 389 | return _mediaAutoScale; |
478 | } | 390 | } |
479 | set | 391 | set { |
480 | { | ||
481 | _mediaAutoScale = value; | 392 | _mediaAutoScale = value; |
482 | } | 393 | } |
483 | } | 394 | } |
@@ -485,14 +396,11 @@ namespace OpenSim.Framework | |||
485 | /// <summary> | 396 | /// <summary> |
486 | /// Texture Guid to replace with the output of the media stream | 397 | /// Texture Guid to replace with the output of the media stream |
487 | /// </summary> | 398 | /// </summary> |
488 | public UUID MediaID | 399 | public UUID MediaID { |
489 | { | 400 | get { |
490 | get | ||
491 | { | ||
492 | return _mediaID; | 401 | return _mediaID; |
493 | } | 402 | } |
494 | set | 403 | set { |
495 | { | ||
496 | _mediaID = value; | 404 | _mediaID = value; |
497 | } | 405 | } |
498 | } | 406 | } |
@@ -500,14 +408,11 @@ namespace OpenSim.Framework | |||
500 | /// <summary> | 408 | /// <summary> |
501 | /// URL to the media file to display | 409 | /// URL to the media file to display |
502 | /// </summary> | 410 | /// </summary> |
503 | public string MediaURL | 411 | public string MediaURL { |
504 | { | 412 | get { |
505 | get | ||
506 | { | ||
507 | return _mediaURL; | 413 | return _mediaURL; |
508 | } | 414 | } |
509 | set | 415 | set { |
510 | { | ||
511 | _mediaURL = value; | 416 | _mediaURL = value; |
512 | } | 417 | } |
513 | } | 418 | } |
@@ -527,14 +432,11 @@ namespace OpenSim.Framework | |||
527 | /// <summary> | 432 | /// <summary> |
528 | /// URL to the shoutcast music stream to play on the parcel | 433 | /// URL to the shoutcast music stream to play on the parcel |
529 | /// </summary> | 434 | /// </summary> |
530 | public string MusicURL | 435 | public string MusicURL { |
531 | { | 436 | get { |
532 | get | ||
533 | { | ||
534 | return _musicURL; | 437 | return _musicURL; |
535 | } | 438 | } |
536 | set | 439 | set { |
537 | { | ||
538 | _musicURL = value; | 440 | _musicURL = value; |
539 | } | 441 | } |
540 | } | 442 | } |
@@ -543,14 +445,11 @@ namespace OpenSim.Framework | |||
543 | /// Owner Avatar or Group of the parcel. Naturally, all land masses must be | 445 | /// Owner Avatar or Group of the parcel. Naturally, all land masses must be |
544 | /// owned by someone | 446 | /// owned by someone |
545 | /// </summary> | 447 | /// </summary> |
546 | public UUID OwnerID | 448 | public UUID OwnerID { |
547 | { | 449 | get { |
548 | get | ||
549 | { | ||
550 | return _ownerID; | 450 | return _ownerID; |
551 | } | 451 | } |
552 | set | 452 | set { |
553 | { | ||
554 | _ownerID = value; | 453 | _ownerID = value; |
555 | } | 454 | } |
556 | } | 455 | } |
@@ -558,14 +457,11 @@ namespace OpenSim.Framework | |||
558 | /// <summary> | 457 | /// <summary> |
559 | /// List of access data for the parcel. User data, some bitflags, and a time | 458 | /// List of access data for the parcel. User data, some bitflags, and a time |
560 | /// </summary> | 459 | /// </summary> |
561 | public List<LandAccessEntry> ParcelAccessList | 460 | public List<LandAccessEntry> ParcelAccessList { |
562 | { | 461 | get { |
563 | get | ||
564 | { | ||
565 | return _parcelAccessList; | 462 | return _parcelAccessList; |
566 | } | 463 | } |
567 | set | 464 | set { |
568 | { | ||
569 | _parcelAccessList = value; | 465 | _parcelAccessList = value; |
570 | } | 466 | } |
571 | } | 467 | } |
@@ -573,14 +469,11 @@ namespace OpenSim.Framework | |||
573 | /// <summary> | 469 | /// <summary> |
574 | /// How long in hours a Pass to the parcel is given | 470 | /// How long in hours a Pass to the parcel is given |
575 | /// </summary> | 471 | /// </summary> |
576 | public float PassHours | 472 | public float PassHours { |
577 | { | 473 | get { |
578 | get | ||
579 | { | ||
580 | return _passHours; | 474 | return _passHours; |
581 | } | 475 | } |
582 | set | 476 | set { |
583 | { | ||
584 | _passHours = value; | 477 | _passHours = value; |
585 | } | 478 | } |
586 | } | 479 | } |
@@ -588,14 +481,11 @@ namespace OpenSim.Framework | |||
588 | /// <summary> | 481 | /// <summary> |
589 | /// Price to purchase a Pass to a restricted parcel | 482 | /// Price to purchase a Pass to a restricted parcel |
590 | /// </summary> | 483 | /// </summary> |
591 | public int PassPrice | 484 | public int PassPrice { |
592 | { | 485 | get { |
593 | get | ||
594 | { | ||
595 | return _passPrice; | 486 | return _passPrice; |
596 | } | 487 | } |
597 | set | 488 | set { |
598 | { | ||
599 | _passPrice = value; | 489 | _passPrice = value; |
600 | } | 490 | } |
601 | } | 491 | } |
@@ -603,14 +493,11 @@ namespace OpenSim.Framework | |||
603 | /// <summary> | 493 | /// <summary> |
604 | /// When the parcel is being sold, this is the price to purchase the parcel | 494 | /// When the parcel is being sold, this is the price to purchase the parcel |
605 | /// </summary> | 495 | /// </summary> |
606 | public int SalePrice | 496 | public int SalePrice { |
607 | { | 497 | get { |
608 | get | ||
609 | { | ||
610 | return _salePrice; | 498 | return _salePrice; |
611 | } | 499 | } |
612 | set | 500 | set { |
613 | { | ||
614 | _salePrice = value; | 501 | _salePrice = value; |
615 | } | 502 | } |
616 | } | 503 | } |
@@ -619,14 +506,11 @@ namespace OpenSim.Framework | |||
619 | /// Number of meters^2 in the Simulator | 506 | /// Number of meters^2 in the Simulator |
620 | /// </summary> | 507 | /// </summary> |
621 | [XmlIgnore] | 508 | [XmlIgnore] |
622 | public int SimwideArea | 509 | public int SimwideArea { |
623 | { | 510 | get { |
624 | get | ||
625 | { | ||
626 | return _simwideArea; | 511 | return _simwideArea; |
627 | } | 512 | } |
628 | set | 513 | set { |
629 | { | ||
630 | _simwideArea = value; | 514 | _simwideArea = value; |
631 | } | 515 | } |
632 | } | 516 | } |
@@ -635,14 +519,11 @@ namespace OpenSim.Framework | |||
635 | /// Number of SceneObjectPart in the Simulator | 519 | /// Number of SceneObjectPart in the Simulator |
636 | /// </summary> | 520 | /// </summary> |
637 | [XmlIgnore] | 521 | [XmlIgnore] |
638 | public int SimwidePrims | 522 | public int SimwidePrims { |
639 | { | 523 | get { |
640 | get | ||
641 | { | ||
642 | return _simwidePrims; | 524 | return _simwidePrims; |
643 | } | 525 | } |
644 | set | 526 | set { |
645 | { | ||
646 | _simwidePrims = value; | 527 | _simwidePrims = value; |
647 | } | 528 | } |
648 | } | 529 | } |
@@ -650,14 +531,11 @@ namespace OpenSim.Framework | |||
650 | /// <summary> | 531 | /// <summary> |
651 | /// ID of the snapshot used in the client parcel dialog of the parcel | 532 | /// ID of the snapshot used in the client parcel dialog of the parcel |
652 | /// </summary> | 533 | /// </summary> |
653 | public UUID SnapshotID | 534 | public UUID SnapshotID { |
654 | { | 535 | get { |
655 | get | ||
656 | { | ||
657 | return _snapshotID; | 536 | return _snapshotID; |
658 | } | 537 | } |
659 | set | 538 | set { |
660 | { | ||
661 | _snapshotID = value; | 539 | _snapshotID = value; |
662 | } | 540 | } |
663 | } | 541 | } |
@@ -666,14 +544,11 @@ namespace OpenSim.Framework | |||
666 | /// When teleporting is restricted to a certain point, this is the location | 544 | /// When teleporting is restricted to a certain point, this is the location |
667 | /// that the user will be redirected to | 545 | /// that the user will be redirected to |
668 | /// </summary> | 546 | /// </summary> |
669 | public Vector3 UserLocation | 547 | public Vector3 UserLocation { |
670 | { | 548 | get { |
671 | get | ||
672 | { | ||
673 | return _userLocation; | 549 | return _userLocation; |
674 | } | 550 | } |
675 | set | 551 | set { |
676 | { | ||
677 | _userLocation = value; | 552 | _userLocation = value; |
678 | } | 553 | } |
679 | } | 554 | } |
@@ -682,14 +557,11 @@ namespace OpenSim.Framework | |||
682 | /// When teleporting is restricted to a certain point, this is the rotation | 557 | /// When teleporting is restricted to a certain point, this is the rotation |
683 | /// that the user will be positioned | 558 | /// that the user will be positioned |
684 | /// </summary> | 559 | /// </summary> |
685 | public Vector3 UserLookAt | 560 | public Vector3 UserLookAt { |
686 | { | 561 | get { |
687 | get | ||
688 | { | ||
689 | return _userLookAt; | 562 | return _userLookAt; |
690 | } | 563 | } |
691 | set | 564 | set { |
692 | { | ||
693 | _userLookAt = value; | 565 | _userLookAt = value; |
694 | } | 566 | } |
695 | } | 567 | } |
@@ -698,14 +570,11 @@ namespace OpenSim.Framework | |||
698 | /// Autoreturn number of minutes to return SceneObjectGroup that are owned by someone who doesn't own | 570 | /// Autoreturn number of minutes to return SceneObjectGroup that are owned by someone who doesn't own |
699 | /// the parcel and isn't set to the same 'group' as the parcel. | 571 | /// the parcel and isn't set to the same 'group' as the parcel. |
700 | /// </summary> | 572 | /// </summary> |
701 | public int OtherCleanTime | 573 | public int OtherCleanTime { |
702 | { | 574 | get { |
703 | get | ||
704 | { | ||
705 | return _otherCleanTime; | 575 | return _otherCleanTime; |
706 | } | 576 | } |
707 | set | 577 | set { |
708 | { | ||
709 | _otherCleanTime = value; | 578 | _otherCleanTime = value; |
710 | } | 579 | } |
711 | } | 580 | } |
@@ -713,14 +582,11 @@ namespace OpenSim.Framework | |||
713 | /// <summary> | 582 | /// <summary> |
714 | /// parcel media description | 583 | /// parcel media description |
715 | /// </summary> | 584 | /// </summary> |
716 | public string MediaDescription | 585 | public string MediaDescription { |
717 | { | 586 | get { |
718 | get | ||
719 | { | ||
720 | return _mediaDescription; | 587 | return _mediaDescription; |
721 | } | 588 | } |
722 | set | 589 | set { |
723 | { | ||
724 | _mediaDescription = value; | 590 | _mediaDescription = value; |
725 | } | 591 | } |
726 | } | 592 | } |
@@ -756,7 +622,7 @@ namespace OpenSim.Framework | |||
756 | landData._mediaURL = _mediaURL; | 622 | landData._mediaURL = _mediaURL; |
757 | landData._musicURL = _musicURL; | 623 | landData._musicURL = _musicURL; |
758 | landData._ownerID = _ownerID; | 624 | landData._ownerID = _ownerID; |
759 | landData._bitmap = (byte[])_bitmap.Clone(); | 625 | landData._bitmap = (byte[]) _bitmap.Clone(); |
760 | landData._description = _description; | 626 | landData._description = _description; |
761 | landData._flags = _flags; | 627 | landData._flags = _flags; |
762 | landData._name = _name; | 628 | landData._name = _name; |
@@ -777,7 +643,6 @@ namespace OpenSim.Framework | |||
777 | landData._obscureMedia = _obscureMedia; | 643 | landData._obscureMedia = _obscureMedia; |
778 | landData._simwideArea = _simwideArea; | 644 | landData._simwideArea = _simwideArea; |
779 | landData._simwidePrims = _simwidePrims; | 645 | landData._simwidePrims = _simwidePrims; |
780 | landData._dwell = _dwell; | ||
781 | 646 | ||
782 | landData._parcelAccessList.Clear(); | 647 | landData._parcelAccessList.Clear(); |
783 | foreach (LandAccessEntry entry in _parcelAccessList) | 648 | foreach (LandAccessEntry entry in _parcelAccessList) |
diff --git a/OpenSim/Framework/Monitoring/BaseStatsCollector.cs b/OpenSim/Framework/Monitoring/BaseStatsCollector.cs index 446e3c0..9ee0876 100644 --- a/OpenSim/Framework/Monitoring/BaseStatsCollector.cs +++ b/OpenSim/Framework/Monitoring/BaseStatsCollector.cs | |||
@@ -43,32 +43,27 @@ namespace OpenSim.Framework.Monitoring | |||
43 | StringBuilder sb = new StringBuilder(Environment.NewLine); | 43 | StringBuilder sb = new StringBuilder(Environment.NewLine); |
44 | sb.Append("MEMORY STATISTICS"); | 44 | sb.Append("MEMORY STATISTICS"); |
45 | sb.Append(Environment.NewLine); | 45 | sb.Append(Environment.NewLine); |
46 | sb.AppendFormat( | 46 | sb.Append( |
47 | string.Format( | ||
47 | "Allocated to OpenSim objects: {0} MB\n", | 48 | "Allocated to OpenSim objects: {0} MB\n", |
48 | Math.Round(GC.GetTotalMemory(false) / 1024.0 / 1024.0)); | 49 | Math.Round(GC.GetTotalMemory(false) / 1024.0 / 1024.0))); |
49 | |||
50 | sb.AppendFormat( | ||
51 | "OpenSim last object memory churn : {0} MB/s\n", | ||
52 | Math.Round((MemoryWatchdog.LastMemoryChurn * 1000) / 1024.0 / 1024, 3)); | ||
53 | |||
54 | sb.AppendFormat( | ||
55 | "OpenSim average object memory churn : {0} MB/s\n", | ||
56 | Math.Round((MemoryWatchdog.AverageMemoryChurn * 1000) / 1024.0 / 1024, 3)); | ||
57 | 50 | ||
58 | Process myprocess = Process.GetCurrentProcess(); | 51 | Process myprocess = Process.GetCurrentProcess(); |
59 | if (!myprocess.HasExited) | 52 | if (!myprocess.HasExited) |
60 | { | 53 | { |
61 | myprocess.Refresh(); | 54 | myprocess.Refresh(); |
62 | sb.AppendFormat( | 55 | sb.Append( |
56 | string.Format( | ||
63 | "Process memory: Physical {0} MB \t Paged {1} MB \t Virtual {2} MB\n", | 57 | "Process memory: Physical {0} MB \t Paged {1} MB \t Virtual {2} MB\n", |
64 | Math.Round(Process.GetCurrentProcess().WorkingSet64 / 1024.0 / 1024.0), | 58 | Math.Round(Process.GetCurrentProcess().WorkingSet64 / 1024.0 / 1024.0), |
65 | Math.Round(Process.GetCurrentProcess().PagedMemorySize64 / 1024.0 / 1024.0), | 59 | Math.Round(Process.GetCurrentProcess().PagedMemorySize64 / 1024.0 / 1024.0), |
66 | Math.Round(Process.GetCurrentProcess().VirtualMemorySize64 / 1024.0 / 1024.0)); | 60 | Math.Round(Process.GetCurrentProcess().VirtualMemorySize64 / 1024.0 / 1024.0))); |
67 | sb.AppendFormat( | 61 | sb.Append( |
62 | string.Format( | ||
68 | "Peak process memory: Physical {0} MB \t Paged {1} MB \t Virtual {2} MB\n", | 63 | "Peak process memory: Physical {0} MB \t Paged {1} MB \t Virtual {2} MB\n", |
69 | Math.Round(Process.GetCurrentProcess().PeakWorkingSet64 / 1024.0 / 1024.0), | 64 | Math.Round(Process.GetCurrentProcess().PeakWorkingSet64 / 1024.0 / 1024.0), |
70 | Math.Round(Process.GetCurrentProcess().PeakPagedMemorySize64 / 1024.0 / 1024.0), | 65 | Math.Round(Process.GetCurrentProcess().PeakPagedMemorySize64 / 1024.0 / 1024.0), |
71 | Math.Round(Process.GetCurrentProcess().PeakVirtualMemorySize64 / 1024.0 / 1024.0)); | 66 | Math.Round(Process.GetCurrentProcess().PeakVirtualMemorySize64 / 1024.0 / 1024.0))); |
72 | } | 67 | } |
73 | else | 68 | else |
74 | sb.Append("Process reported as Exited \n"); | 69 | sb.Append("Process reported as Exited \n"); |
diff --git a/OpenSim/Framework/Monitoring/MemoryWatchdog.cs b/OpenSim/Framework/Monitoring/MemoryWatchdog.cs index c6010cd..a23cf1f 100644 --- a/OpenSim/Framework/Monitoring/MemoryWatchdog.cs +++ b/OpenSim/Framework/Monitoring/MemoryWatchdog.cs | |||
@@ -60,7 +60,7 @@ namespace OpenSim.Framework.Monitoring | |||
60 | private static bool m_enabled; | 60 | private static bool m_enabled; |
61 | 61 | ||
62 | /// <summary> | 62 | /// <summary> |
63 | /// Last memory churn in bytes per millisecond. | 63 | /// Average memory churn in bytes per millisecond. |
64 | /// </summary> | 64 | /// </summary> |
65 | public static double AverageMemoryChurn | 65 | public static double AverageMemoryChurn |
66 | { | 66 | { |
@@ -68,14 +68,6 @@ namespace OpenSim.Framework.Monitoring | |||
68 | } | 68 | } |
69 | 69 | ||
70 | /// <summary> | 70 | /// <summary> |
71 | /// Average memory churn in bytes per millisecond. | ||
72 | /// </summary> | ||
73 | public static double LastMemoryChurn | ||
74 | { | ||
75 | get { if (m_samples.Count > 0) return m_samples.Last(); else return 0; } | ||
76 | } | ||
77 | |||
78 | /// <summary> | ||
79 | /// Maximum number of statistical samples. | 71 | /// Maximum number of statistical samples. |
80 | /// </summary> | 72 | /// </summary> |
81 | /// <remarks> | 73 | /// <remarks> |
diff --git a/OpenSim/Framework/Monitoring/SimExtraStatsCollector.cs b/OpenSim/Framework/Monitoring/SimExtraStatsCollector.cs index aa86202..cdd7cc7 100644 --- a/OpenSim/Framework/Monitoring/SimExtraStatsCollector.cs +++ b/OpenSim/Framework/Monitoring/SimExtraStatsCollector.cs | |||
@@ -355,25 +355,10 @@ Asset service request failures: {3}" + Environment.NewLine, | |||
355 | sb.Append(Environment.NewLine); | 355 | sb.Append(Environment.NewLine); |
356 | sb.Append( | 356 | sb.Append( |
357 | string.Format( | 357 | string.Format( |
358 | "{0,6:0} {1,6:0} {2,6:0} {3,6:0} {4,6:0} {5,6:0.0} {6,6:0.0} {7,6:0.0} {8,6:0.0} {9,6:0.0} {10,6:0.0}\n\n", | 358 | "{0,6:0} {1,6:0} {2,6:0} {3,6:0} {4,6:0} {5,6:0.0} {6,6:0.0} {7,6:0.0} {8,6:0.0} {9,6:0.0} {10,6:0.0}", |
359 | inPacketsPerSecond, outPacketsPerSecond, pendingDownloads, pendingUploads, unackedBytes, totalFrameTime, | 359 | inPacketsPerSecond, outPacketsPerSecond, pendingDownloads, pendingUploads, unackedBytes, totalFrameTime, |
360 | netFrameTime, physicsFrameTime, otherFrameTime, agentFrameTime, imageFrameTime)); | 360 | netFrameTime, physicsFrameTime, otherFrameTime, agentFrameTime, imageFrameTime)); |
361 | 361 | sb.Append(Environment.NewLine); | |
362 | Dictionary<string, Dictionary<string, Stat>> sceneStats; | ||
363 | |||
364 | if (StatsManager.TryGetStats("scene", out sceneStats)) | ||
365 | { | ||
366 | foreach (KeyValuePair<string, Dictionary<string, Stat>> kvp in sceneStats) | ||
367 | { | ||
368 | foreach (Stat stat in kvp.Value.Values) | ||
369 | { | ||
370 | if (stat.Verbosity == StatVerbosity.Info) | ||
371 | { | ||
372 | sb.AppendFormat("{0} ({1}): {2}{3}\n", stat.Name, stat.Container, stat.Value, stat.UnitName); | ||
373 | } | ||
374 | } | ||
375 | } | ||
376 | } | ||
377 | 362 | ||
378 | /* | 363 | /* |
379 | sb.Append(Environment.NewLine); | 364 | sb.Append(Environment.NewLine); |
diff --git a/OpenSim/Framework/Monitoring/StatsManager.cs b/OpenSim/Framework/Monitoring/StatsManager.cs index 4844336..d78fa6a 100644 --- a/OpenSim/Framework/Monitoring/StatsManager.cs +++ b/OpenSim/Framework/Monitoring/StatsManager.cs | |||
@@ -25,9 +25,6 @@ | |||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | |||
31 | namespace OpenSim.Framework.Monitoring | 28 | namespace OpenSim.Framework.Monitoring |
32 | { | 29 | { |
33 | /// <summary> | 30 | /// <summary> |
@@ -35,24 +32,6 @@ namespace OpenSim.Framework.Monitoring | |||
35 | /// </summary> | 32 | /// </summary> |
36 | public class StatsManager | 33 | public class StatsManager |
37 | { | 34 | { |
38 | // Subcommand used to list other stats. | ||
39 | public const string AllSubCommand = "all"; | ||
40 | |||
41 | // Subcommand used to list other stats. | ||
42 | public const string ListSubCommand = "list"; | ||
43 | |||
44 | // All subcommands | ||
45 | public static HashSet<string> SubCommands = new HashSet<string> { AllSubCommand, ListSubCommand }; | ||
46 | |||
47 | /// <summary> | ||
48 | /// Registered stats categorized by category/container/shortname | ||
49 | /// </summary> | ||
50 | /// <remarks> | ||
51 | /// Do not add or remove directly from this dictionary. | ||
52 | /// </remarks> | ||
53 | public static Dictionary<string, Dictionary<string, Dictionary<string, Stat>>> RegisteredStats | ||
54 | = new Dictionary<string, Dictionary<string, Dictionary<string, Stat>>>(); | ||
55 | |||
56 | private static AssetStatsCollector assetStats; | 35 | private static AssetStatsCollector assetStats; |
57 | private static UserStatsCollector userStats; | 36 | private static UserStatsCollector userStats; |
58 | private static SimExtraStatsCollector simExtraStats = new SimExtraStatsCollector(); | 37 | private static SimExtraStatsCollector simExtraStats = new SimExtraStatsCollector(); |
@@ -61,75 +40,6 @@ namespace OpenSim.Framework.Monitoring | |||
61 | public static UserStatsCollector UserStats { get { return userStats; } } | 40 | public static UserStatsCollector UserStats { get { return userStats; } } |
62 | public static SimExtraStatsCollector SimExtraStats { get { return simExtraStats; } } | 41 | public static SimExtraStatsCollector SimExtraStats { get { return simExtraStats; } } |
63 | 42 | ||
64 | public static void RegisterConsoleCommands(ICommandConsole console) | ||
65 | { | ||
66 | console.Commands.AddCommand( | ||
67 | "General", | ||
68 | false, | ||
69 | "show stats", | ||
70 | "show stats [list|all|<category>]", | ||
71 | "Show statistical information for this server", | ||
72 | "If no final argument is specified then legacy statistics information is currently shown.\n" | ||
73 | + "If list is specified then statistic categories are shown.\n" | ||
74 | + "If all is specified then all registered statistics are shown.\n" | ||
75 | + "If a category name is specified then only statistics from that category are shown.\n" | ||
76 | + "THIS STATS FACILITY IS EXPERIMENTAL AND DOES NOT YET CONTAIN ALL STATS", | ||
77 | HandleShowStatsCommand); | ||
78 | } | ||
79 | |||
80 | public static void HandleShowStatsCommand(string module, string[] cmd) | ||
81 | { | ||
82 | ICommandConsole con = MainConsole.Instance; | ||
83 | |||
84 | if (cmd.Length > 2) | ||
85 | { | ||
86 | var categoryName = cmd[2]; | ||
87 | |||
88 | if (categoryName == AllSubCommand) | ||
89 | { | ||
90 | foreach (var category in RegisteredStats.Values) | ||
91 | { | ||
92 | OutputCategoryStatsToConsole(con, category); | ||
93 | } | ||
94 | } | ||
95 | else if (categoryName == ListSubCommand) | ||
96 | { | ||
97 | con.Output("Statistic categories available are:"); | ||
98 | foreach (string category in RegisteredStats.Keys) | ||
99 | con.OutputFormat(" {0}", category); | ||
100 | } | ||
101 | else | ||
102 | { | ||
103 | Dictionary<string, Dictionary<string, Stat>> category; | ||
104 | if (!RegisteredStats.TryGetValue(categoryName, out category)) | ||
105 | { | ||
106 | con.OutputFormat("No such category as {0}", categoryName); | ||
107 | } | ||
108 | else | ||
109 | { | ||
110 | OutputCategoryStatsToConsole(con, category); | ||
111 | } | ||
112 | } | ||
113 | } | ||
114 | else | ||
115 | { | ||
116 | // Legacy | ||
117 | con.Output(SimExtraStats.Report()); | ||
118 | } | ||
119 | } | ||
120 | |||
121 | private static void OutputCategoryStatsToConsole( | ||
122 | ICommandConsole con, Dictionary<string, Dictionary<string, Stat>> category) | ||
123 | { | ||
124 | foreach (var container in category.Values) | ||
125 | { | ||
126 | foreach (Stat stat in container.Values) | ||
127 | { | ||
128 | con.Output(stat.ToConsoleString()); | ||
129 | } | ||
130 | } | ||
131 | } | ||
132 | |||
133 | /// <summary> | 43 | /// <summary> |
134 | /// Start collecting statistics related to assets. | 44 | /// Start collecting statistics related to assets. |
135 | /// Should only be called once. | 45 | /// Should only be called once. |
@@ -151,275 +61,5 @@ namespace OpenSim.Framework.Monitoring | |||
151 | 61 | ||
152 | return userStats; | 62 | return userStats; |
153 | } | 63 | } |
154 | |||
155 | /// <summary> | ||
156 | /// Registers a statistic. | ||
157 | /// </summary> | ||
158 | /// <param name='stat'></param> | ||
159 | /// <returns></returns> | ||
160 | public static bool RegisterStat(Stat stat) | ||
161 | { | ||
162 | Dictionary<string, Dictionary<string, Stat>> category = null, newCategory; | ||
163 | Dictionary<string, Stat> container = null, newContainer; | ||
164 | |||
165 | lock (RegisteredStats) | ||
166 | { | ||
167 | // Stat name is not unique across category/container/shortname key. | ||
168 | // XXX: For now just return false. This is to avoid problems in regression tests where all tests | ||
169 | // in a class are run in the same instance of the VM. | ||
170 | if (TryGetStat(stat, out category, out container)) | ||
171 | return false; | ||
172 | |||
173 | // We take a copy-on-write approach here of replacing dictionaries when keys are added or removed. | ||
174 | // This means that we don't need to lock or copy them on iteration, which will be a much more | ||
175 | // common operation after startup. | ||
176 | if (container != null) | ||
177 | newContainer = new Dictionary<string, Stat>(container); | ||
178 | else | ||
179 | newContainer = new Dictionary<string, Stat>(); | ||
180 | |||
181 | if (category != null) | ||
182 | newCategory = new Dictionary<string, Dictionary<string, Stat>>(category); | ||
183 | else | ||
184 | newCategory = new Dictionary<string, Dictionary<string, Stat>>(); | ||
185 | |||
186 | newContainer[stat.ShortName] = stat; | ||
187 | newCategory[stat.Container] = newContainer; | ||
188 | RegisteredStats[stat.Category] = newCategory; | ||
189 | } | ||
190 | |||
191 | return true; | ||
192 | } | ||
193 | |||
194 | /// <summary> | ||
195 | /// Deregister a statistic | ||
196 | /// </summary>> | ||
197 | /// <param name='stat'></param> | ||
198 | /// <returns></returns | ||
199 | public static bool DeregisterStat(Stat stat) | ||
200 | { | ||
201 | Dictionary<string, Dictionary<string, Stat>> category = null, newCategory; | ||
202 | Dictionary<string, Stat> container = null, newContainer; | ||
203 | |||
204 | lock (RegisteredStats) | ||
205 | { | ||
206 | if (!TryGetStat(stat, out category, out container)) | ||
207 | return false; | ||
208 | |||
209 | newContainer = new Dictionary<string, Stat>(container); | ||
210 | newContainer.Remove(stat.ShortName); | ||
211 | |||
212 | newCategory = new Dictionary<string, Dictionary<string, Stat>>(category); | ||
213 | newCategory.Remove(stat.Container); | ||
214 | |||
215 | newCategory[stat.Container] = newContainer; | ||
216 | RegisteredStats[stat.Category] = newCategory; | ||
217 | |||
218 | return true; | ||
219 | } | ||
220 | } | ||
221 | |||
222 | public static bool TryGetStats(string category, out Dictionary<string, Dictionary<string, Stat>> stats) | ||
223 | { | ||
224 | return RegisteredStats.TryGetValue(category, out stats); | ||
225 | } | ||
226 | |||
227 | public static bool TryGetStat( | ||
228 | Stat stat, | ||
229 | out Dictionary<string, Dictionary<string, Stat>> category, | ||
230 | out Dictionary<string, Stat> container) | ||
231 | { | ||
232 | category = null; | ||
233 | container = null; | ||
234 | |||
235 | lock (RegisteredStats) | ||
236 | { | ||
237 | if (RegisteredStats.TryGetValue(stat.Category, out category)) | ||
238 | { | ||
239 | if (category.TryGetValue(stat.Container, out container)) | ||
240 | { | ||
241 | if (container.ContainsKey(stat.ShortName)) | ||
242 | return true; | ||
243 | } | ||
244 | } | ||
245 | } | ||
246 | |||
247 | return false; | ||
248 | } | ||
249 | } | ||
250 | |||
251 | /// <summary> | ||
252 | /// Stat type. | ||
253 | /// </summary> | ||
254 | /// <remarks> | ||
255 | /// A push stat is one which is continually updated and so it's value can simply by read. | ||
256 | /// A pull stat is one where reading the value triggers a collection method - the stat is not continually updated. | ||
257 | /// </remarks> | ||
258 | public enum StatType | ||
259 | { | ||
260 | Push, | ||
261 | Pull | ||
262 | } | ||
263 | |||
264 | /// <summary> | ||
265 | /// Verbosity of stat. | ||
266 | /// </summary> | ||
267 | /// <remarks> | ||
268 | /// Info will always be displayed. | ||
269 | /// </remarks> | ||
270 | public enum StatVerbosity | ||
271 | { | ||
272 | Debug, | ||
273 | Info | ||
274 | } | ||
275 | |||
276 | /// <summary> | ||
277 | /// Holds individual static details | ||
278 | /// </summary> | ||
279 | public class Stat | ||
280 | { | ||
281 | /// <summary> | ||
282 | /// Category of this stat (e.g. cache, scene, etc). | ||
283 | /// </summary> | ||
284 | public string Category { get; private set; } | ||
285 | |||
286 | /// <summary> | ||
287 | /// Containing name for this stat. | ||
288 | /// FIXME: In the case of a scene, this is currently the scene name (though this leaves | ||
289 | /// us with a to-be-resolved problem of non-unique region names). | ||
290 | /// </summary> | ||
291 | /// <value> | ||
292 | /// The container. | ||
293 | /// </value> | ||
294 | public string Container { get; private set; } | ||
295 | |||
296 | public StatType StatType { get; private set; } | ||
297 | |||
298 | /// <summary> | ||
299 | /// Action used to update this stat when the value is requested if it's a pull type. | ||
300 | /// </summary> | ||
301 | public Action<Stat> PullAction { get; private set; } | ||
302 | |||
303 | public StatVerbosity Verbosity { get; private set; } | ||
304 | public string ShortName { get; private set; } | ||
305 | public string Name { get; private set; } | ||
306 | public string Description { get; private set; } | ||
307 | public virtual string UnitName { get; private set; } | ||
308 | |||
309 | public virtual double Value | ||
310 | { | ||
311 | get | ||
312 | { | ||
313 | // Asking for an update here means that the updater cannot access this value without infinite recursion. | ||
314 | // XXX: A slightly messy but simple solution may be to flick a flag so we can tell if this is being | ||
315 | // called by the pull action and just return the value. | ||
316 | if (StatType == StatType.Pull) | ||
317 | PullAction(this); | ||
318 | |||
319 | return m_value; | ||
320 | } | ||
321 | |||
322 | set | ||
323 | { | ||
324 | m_value = value; | ||
325 | } | ||
326 | } | ||
327 | |||
328 | private double m_value; | ||
329 | |||
330 | /// <summary> | ||
331 | /// Constructor | ||
332 | /// </summary> | ||
333 | /// <param name='shortName'>Short name for the stat. Must not contain spaces. e.g. "LongFrames"</param> | ||
334 | /// <param name='name'>Human readable name for the stat. e.g. "Long frames"</param> | ||
335 | /// <param name='description'>Description of stat</param> | ||
336 | /// <param name='unitName'> | ||
337 | /// Unit name for the stat. Should be preceeded by a space if the unit name isn't normally appeneded immediately to the value. | ||
338 | /// e.g. " frames" | ||
339 | /// </param> | ||
340 | /// <param name='category'>Category under which this stat should appear, e.g. "scene". Do not capitalize.</param> | ||
341 | /// <param name='container'>Entity to which this stat relates. e.g. scene name if this is a per scene stat.</param> | ||
342 | /// <param name='type'>Push or pull</param> | ||
343 | /// <param name='pullAction'>Pull stats need an action to update the stat on request. Push stats should set null here.</param> | ||
344 | /// <param name='verbosity'>Verbosity of stat. Controls whether it will appear in short stat display or only full display.</param> | ||
345 | public Stat( | ||
346 | string shortName, | ||
347 | string name, | ||
348 | string description, | ||
349 | string unitName, | ||
350 | string category, | ||
351 | string container, | ||
352 | StatType type, | ||
353 | Action<Stat> pullAction, | ||
354 | StatVerbosity verbosity) | ||
355 | { | ||
356 | if (StatsManager.SubCommands.Contains(category)) | ||
357 | throw new Exception( | ||
358 | string.Format("Stat cannot be in category '{0}' since this is reserved for a subcommand", category)); | ||
359 | |||
360 | ShortName = shortName; | ||
361 | Name = name; | ||
362 | Description = description; | ||
363 | UnitName = unitName; | ||
364 | Category = category; | ||
365 | Container = container; | ||
366 | StatType = type; | ||
367 | |||
368 | if (StatType == StatType.Push && pullAction != null) | ||
369 | throw new Exception("A push stat cannot have a pull action"); | ||
370 | else | ||
371 | PullAction = pullAction; | ||
372 | |||
373 | Verbosity = verbosity; | ||
374 | } | ||
375 | |||
376 | public virtual string ToConsoleString() | ||
377 | { | ||
378 | return string.Format( | ||
379 | "{0}.{1}.{2} : {3}{4}", Category, Container, ShortName, Value, UnitName); | ||
380 | } | ||
381 | } | ||
382 | |||
383 | public class PercentageStat : Stat | ||
384 | { | ||
385 | public int Antecedent { get; set; } | ||
386 | public int Consequent { get; set; } | ||
387 | |||
388 | public override double Value | ||
389 | { | ||
390 | get | ||
391 | { | ||
392 | int c = Consequent; | ||
393 | |||
394 | // Avoid any chance of a multi-threaded divide-by-zero | ||
395 | if (c == 0) | ||
396 | return 0; | ||
397 | |||
398 | return (double)Antecedent / c * 100; | ||
399 | } | ||
400 | |||
401 | set | ||
402 | { | ||
403 | throw new Exception("Cannot set value on a PercentageStat"); | ||
404 | } | ||
405 | } | ||
406 | |||
407 | public PercentageStat( | ||
408 | string shortName, | ||
409 | string name, | ||
410 | string description, | ||
411 | string category, | ||
412 | string container, | ||
413 | StatType type, | ||
414 | Action<Stat> pullAction, | ||
415 | StatVerbosity verbosity) | ||
416 | : base(shortName, name, description, "%", category, container, type, pullAction, verbosity) {} | ||
417 | |||
418 | public override string ToConsoleString() | ||
419 | { | ||
420 | return string.Format( | ||
421 | "{0}.{1}.{2} : {3:0.##}{4} ({5}/{6})", | ||
422 | Category, Container, ShortName, Value, UnitName, Antecedent, Consequent); | ||
423 | } | ||
424 | } | 64 | } |
425 | } \ No newline at end of file | 65 | } \ No newline at end of file |
diff --git a/OpenSim/Framework/Monitoring/Watchdog.cs b/OpenSim/Framework/Monitoring/Watchdog.cs index 28d6d5c..b709baa 100644 --- a/OpenSim/Framework/Monitoring/Watchdog.cs +++ b/OpenSim/Framework/Monitoring/Watchdog.cs | |||
@@ -89,17 +89,6 @@ namespace OpenSim.Framework.Monitoring | |||
89 | FirstTick = Environment.TickCount & Int32.MaxValue; | 89 | FirstTick = Environment.TickCount & Int32.MaxValue; |
90 | LastTick = FirstTick; | 90 | LastTick = FirstTick; |
91 | } | 91 | } |
92 | |||
93 | public ThreadWatchdogInfo(ThreadWatchdogInfo previousTwi) | ||
94 | { | ||
95 | Thread = previousTwi.Thread; | ||
96 | FirstTick = previousTwi.FirstTick; | ||
97 | LastTick = previousTwi.LastTick; | ||
98 | Timeout = previousTwi.Timeout; | ||
99 | IsTimedOut = previousTwi.IsTimedOut; | ||
100 | AlarmIfTimeout = previousTwi.AlarmIfTimeout; | ||
101 | AlarmMethod = previousTwi.AlarmMethod; | ||
102 | } | ||
103 | } | 92 | } |
104 | 93 | ||
105 | /// <summary> | 94 | /// <summary> |
@@ -231,25 +220,7 @@ namespace OpenSim.Framework.Monitoring | |||
231 | private static bool RemoveThread(int threadID) | 220 | private static bool RemoveThread(int threadID) |
232 | { | 221 | { |
233 | lock (m_threads) | 222 | lock (m_threads) |
234 | { | 223 | return m_threads.Remove(threadID); |
235 | ThreadWatchdogInfo twi; | ||
236 | if (m_threads.TryGetValue(threadID, out twi)) | ||
237 | { | ||
238 | m_log.DebugFormat( | ||
239 | "[WATCHDOG]: Removing thread {0}, ID {1}", twi.Thread.Name, twi.Thread.ManagedThreadId); | ||
240 | |||
241 | m_threads.Remove(threadID); | ||
242 | |||
243 | return true; | ||
244 | } | ||
245 | else | ||
246 | { | ||
247 | m_log.WarnFormat( | ||
248 | "[WATCHDOG]: Requested to remove thread with ID {0} but this is not being monitored", threadID); | ||
249 | |||
250 | return false; | ||
251 | } | ||
252 | } | ||
253 | } | 224 | } |
254 | 225 | ||
255 | public static bool AbortThread(int threadID) | 226 | public static bool AbortThread(int threadID) |
@@ -364,9 +335,7 @@ namespace OpenSim.Framework.Monitoring | |||
364 | if (callbackInfos == null) | 335 | if (callbackInfos == null) |
365 | callbackInfos = new List<ThreadWatchdogInfo>(); | 336 | callbackInfos = new List<ThreadWatchdogInfo>(); |
366 | 337 | ||
367 | // Send a copy of the watchdog info to prevent race conditions where the watchdog | 338 | callbackInfos.Add(threadInfo); |
368 | // thread updates the monitoring info after an alarm has been sent out. | ||
369 | callbackInfos.Add(new ThreadWatchdogInfo(threadInfo)); | ||
370 | } | 339 | } |
371 | } | 340 | } |
372 | } | 341 | } |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/PacketPool.cs b/OpenSim/Framework/PacketPool.cs index 9f22fb4..41d17c5 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/PacketPool.cs +++ b/OpenSim/Framework/PacketPool.cs | |||
@@ -31,10 +31,10 @@ using System.Reflection; | |||
31 | using OpenMetaverse; | 31 | using OpenMetaverse; |
32 | using OpenMetaverse.Packets; | 32 | using OpenMetaverse.Packets; |
33 | using log4net; | 33 | using log4net; |
34 | using OpenSim.Framework.Monitoring; | ||
35 | 34 | ||
36 | namespace OpenSim.Region.ClientStack.LindenUDP | 35 | namespace OpenSim.Framework |
37 | { | 36 | { |
37 | |||
38 | public sealed class PacketPool | 38 | public sealed class PacketPool |
39 | { | 39 | { |
40 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 40 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
@@ -44,32 +44,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
44 | private bool packetPoolEnabled = true; | 44 | private bool packetPoolEnabled = true; |
45 | private bool dataBlockPoolEnabled = true; | 45 | private bool dataBlockPoolEnabled = true; |
46 | 46 | ||
47 | private PercentageStat m_packetsReusedStat = new PercentageStat( | ||
48 | "PacketsReused", | ||
49 | "Packets reused", | ||
50 | "Number of packets reused out of all requests to the packet pool", | ||
51 | "clientstack", | ||
52 | "packetpool", | ||
53 | StatType.Push, | ||
54 | null, | ||
55 | StatVerbosity.Debug); | ||
56 | |||
57 | private PercentageStat m_blocksReusedStat = new PercentageStat( | ||
58 | "PacketDataBlocksReused", | ||
59 | "Packet data blocks reused", | ||
60 | "Number of data blocks reused out of all requests to the packet pool", | ||
61 | "clientstack", | ||
62 | "packetpool", | ||
63 | StatType.Push, | ||
64 | null, | ||
65 | StatVerbosity.Debug); | ||
66 | |||
67 | /// <summary> | ||
68 | /// Pool of packets available for reuse. | ||
69 | /// </summary> | ||
70 | private readonly Dictionary<PacketType, Stack<Packet>> pool = new Dictionary<PacketType, Stack<Packet>>(); | 47 | private readonly Dictionary<PacketType, Stack<Packet>> pool = new Dictionary<PacketType, Stack<Packet>>(); |
71 | 48 | ||
72 | private static Dictionary<Type, Stack<Object>> DataBlocks = new Dictionary<Type, Stack<Object>>(); | 49 | private static Dictionary<Type, Stack<Object>> DataBlocks = |
50 | new Dictionary<Type, Stack<Object>>(); | ||
51 | |||
52 | static PacketPool() | ||
53 | { | ||
54 | } | ||
73 | 55 | ||
74 | public static PacketPool Instance | 56 | public static PacketPool Instance |
75 | { | 57 | { |
@@ -88,45 +70,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
88 | get { return dataBlockPoolEnabled; } | 70 | get { return dataBlockPoolEnabled; } |
89 | } | 71 | } |
90 | 72 | ||
91 | private PacketPool() | ||
92 | { | ||
93 | StatsManager.RegisterStat(m_packetsReusedStat); | ||
94 | StatsManager.RegisterStat(m_blocksReusedStat); | ||
95 | |||
96 | StatsManager.RegisterStat( | ||
97 | new Stat( | ||
98 | "PacketsPoolCount", | ||
99 | "Objects within the packet pool", | ||
100 | "The number of objects currently stored within the packet pool", | ||
101 | "", | ||
102 | "clientstack", | ||
103 | "packetpool", | ||
104 | StatType.Pull, | ||
105 | stat => { lock (pool) { stat.Value = pool.Count; } }, | ||
106 | StatVerbosity.Debug)); | ||
107 | |||
108 | StatsManager.RegisterStat( | ||
109 | new Stat( | ||
110 | "PacketDataBlocksPoolCount", | ||
111 | "Objects within the packet data block pool", | ||
112 | "The number of objects currently stored within the packet data block pool", | ||
113 | "", | ||
114 | "clientstack", | ||
115 | "packetpool", | ||
116 | StatType.Pull, | ||
117 | stat => { lock (DataBlocks) { stat.Value = DataBlocks.Count; } }, | ||
118 | StatVerbosity.Debug)); | ||
119 | } | ||
120 | |||
121 | /// <summary> | ||
122 | /// Gets a packet of the given type. | ||
123 | /// </summary> | ||
124 | /// <param name='type'></param> | ||
125 | /// <returns>Guaranteed to always return a packet, whether from the pool or newly constructed.</returns> | ||
126 | public Packet GetPacket(PacketType type) | 73 | public Packet GetPacket(PacketType type) |
127 | { | 74 | { |
128 | m_packetsReusedStat.Consequent++; | ||
129 | |||
130 | Packet packet; | 75 | Packet packet; |
131 | 76 | ||
132 | if (!packetPoolEnabled) | 77 | if (!packetPoolEnabled) |
@@ -136,19 +81,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
136 | { | 81 | { |
137 | if (!pool.ContainsKey(type) || pool[type] == null || (pool[type]).Count == 0) | 82 | if (!pool.ContainsKey(type) || pool[type] == null || (pool[type]).Count == 0) |
138 | { | 83 | { |
139 | // m_log.DebugFormat("[PACKETPOOL]: Building {0} packet", type); | ||
140 | |||
141 | // Creating a new packet if we cannot reuse an old package | 84 | // Creating a new packet if we cannot reuse an old package |
142 | packet = Packet.BuildPacket(type); | 85 | packet = Packet.BuildPacket(type); |
143 | } | 86 | } |
144 | else | 87 | else |
145 | { | 88 | { |
146 | // m_log.DebugFormat("[PACKETPOOL]: Pulling {0} packet", type); | ||
147 | |||
148 | // Recycle old packages | 89 | // Recycle old packages |
149 | m_packetsReusedStat.Antecedent++; | 90 | packet = (pool[type]).Pop(); |
150 | |||
151 | packet = pool[type].Pop(); | ||
152 | } | 91 | } |
153 | } | 92 | } |
154 | 93 | ||
@@ -197,7 +136,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
197 | { | 136 | { |
198 | PacketType type = GetType(bytes); | 137 | PacketType type = GetType(bytes); |
199 | 138 | ||
200 | // Array.Clear(zeroBuffer, 0, zeroBuffer.Length); | 139 | Array.Clear(zeroBuffer, 0, zeroBuffer.Length); |
201 | 140 | ||
202 | int i = 0; | 141 | int i = 0; |
203 | Packet packet = GetPacket(type); | 142 | Packet packet = GetPacket(type); |
@@ -244,7 +183,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
244 | switch (packet.Type) | 183 | switch (packet.Type) |
245 | { | 184 | { |
246 | // List pooling packets here | 185 | // List pooling packets here |
247 | case PacketType.AgentUpdate: | ||
248 | case PacketType.PacketAck: | 186 | case PacketType.PacketAck: |
249 | case PacketType.ObjectUpdate: | 187 | case PacketType.ObjectUpdate: |
250 | case PacketType.ImprovedTerseObjectUpdate: | 188 | case PacketType.ImprovedTerseObjectUpdate: |
@@ -259,9 +197,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
259 | 197 | ||
260 | if ((pool[type]).Count < 50) | 198 | if ((pool[type]).Count < 50) |
261 | { | 199 | { |
262 | // m_log.DebugFormat("[PACKETPOOL]: Pushing {0} packet", type); | 200 | (pool[type]).Push(packet); |
263 | |||
264 | pool[type].Push(packet); | ||
265 | } | 201 | } |
266 | } | 202 | } |
267 | break; | 203 | break; |
@@ -273,21 +209,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
273 | } | 209 | } |
274 | } | 210 | } |
275 | 211 | ||
276 | public T GetDataBlock<T>() where T: new() | 212 | public static T GetDataBlock<T>() where T: new() |
277 | { | 213 | { |
278 | lock (DataBlocks) | 214 | lock (DataBlocks) |
279 | { | 215 | { |
280 | m_blocksReusedStat.Consequent++; | ||
281 | |||
282 | Stack<Object> s; | 216 | Stack<Object> s; |
283 | 217 | ||
284 | if (DataBlocks.TryGetValue(typeof(T), out s)) | 218 | if (DataBlocks.TryGetValue(typeof(T), out s)) |
285 | { | 219 | { |
286 | if (s.Count > 0) | 220 | if (s.Count > 0) |
287 | { | ||
288 | m_blocksReusedStat.Antecedent++; | ||
289 | return (T)s.Pop(); | 221 | return (T)s.Pop(); |
290 | } | ||
291 | } | 222 | } |
292 | else | 223 | else |
293 | { | 224 | { |
@@ -298,7 +229,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
298 | } | 229 | } |
299 | } | 230 | } |
300 | 231 | ||
301 | public void ReturnDataBlock<T>(T block) where T: new() | 232 | public static void ReturnDataBlock<T>(T block) where T: new() |
302 | { | 233 | { |
303 | if (block == null) | 234 | if (block == null) |
304 | return; | 235 | return; |
@@ -313,4 +244,4 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
313 | } | 244 | } |
314 | } | 245 | } |
315 | } | 246 | } |
316 | } \ No newline at end of file | 247 | } |
diff --git a/OpenSim/Framework/Pool.cs b/OpenSim/Framework/Pool.cs deleted file mode 100644 index 5484f5c..0000000 --- a/OpenSim/Framework/Pool.cs +++ /dev/null | |||
@@ -1,91 +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 OpenSimulator 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 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | |||
31 | namespace OpenSim.Framework | ||
32 | { | ||
33 | /// <summary> | ||
34 | /// Naive pool implementation. | ||
35 | /// </summary> | ||
36 | /// <remarks> | ||
37 | /// Currently assumes that objects are in a useable state when returned. | ||
38 | /// </remarks> | ||
39 | public class Pool<T> | ||
40 | { | ||
41 | /// <summary> | ||
42 | /// Number of objects in the pool. | ||
43 | /// </summary> | ||
44 | public int Count | ||
45 | { | ||
46 | get | ||
47 | { | ||
48 | lock (m_pool) | ||
49 | return m_pool.Count; | ||
50 | } | ||
51 | } | ||
52 | |||
53 | private Stack<T> m_pool; | ||
54 | |||
55 | /// <summary> | ||
56 | /// Maximum pool size. Beyond this, any returned objects are not pooled. | ||
57 | /// </summary> | ||
58 | private int m_maxPoolSize; | ||
59 | |||
60 | private Func<T> m_createFunction; | ||
61 | |||
62 | public Pool(Func<T> createFunction, int maxSize) | ||
63 | { | ||
64 | m_maxPoolSize = maxSize; | ||
65 | m_createFunction = createFunction; | ||
66 | m_pool = new Stack<T>(m_maxPoolSize); | ||
67 | } | ||
68 | |||
69 | public T GetObject() | ||
70 | { | ||
71 | lock (m_pool) | ||
72 | { | ||
73 | if (m_pool.Count > 0) | ||
74 | return m_pool.Pop(); | ||
75 | else | ||
76 | return m_createFunction(); | ||
77 | } | ||
78 | } | ||
79 | |||
80 | public void ReturnObject(T obj) | ||
81 | { | ||
82 | lock (m_pool) | ||
83 | { | ||
84 | if (m_pool.Count >= m_maxPoolSize) | ||
85 | return; | ||
86 | else | ||
87 | m_pool.Push(obj); | ||
88 | } | ||
89 | } | ||
90 | } | ||
91 | } \ No newline at end of file | ||
diff --git a/OpenSim/Framework/RegionFlags.cs b/OpenSim/Framework/RegionFlags.cs deleted file mode 100644 index a3089b0..0000000 --- a/OpenSim/Framework/RegionFlags.cs +++ /dev/null | |||
@@ -1,53 +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 OpenSimulator 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 | using System; | ||
29 | |||
30 | namespace OpenSim.Framework | ||
31 | { | ||
32 | /// <summary> | ||
33 | /// Region flags used internally by OpenSimulator to store installation specific information about regions. | ||
34 | /// </summary> | ||
35 | /// <remarks> | ||
36 | /// Don't confuse with OpenMetaverse.RegionFlags which are client facing flags (i.e. they go over the wire). | ||
37 | /// Returned by IGridService.GetRegionFlags() | ||
38 | /// </remarks> | ||
39 | [Flags] | ||
40 | public enum RegionFlags : int | ||
41 | { | ||
42 | DefaultRegion = 1, // Used for new Rez. Random if multiple defined | ||
43 | FallbackRegion = 2, // Regions we redirect to when the destination is down | ||
44 | RegionOnline = 4, // Set when a region comes online, unset when it unregisters and DeleteOnUnregister is false | ||
45 | NoDirectLogin = 8, // Region unavailable for direct logins (by name) | ||
46 | Persistent = 16, // Don't remove on unregister | ||
47 | LockedOut = 32, // Don't allow registration | ||
48 | NoMove = 64, // Don't allow moving this region | ||
49 | Reservation = 128, // This is an inactive reservation | ||
50 | Authenticate = 256, // Require authentication | ||
51 | Hyperlink = 512 // Record represents a HG link | ||
52 | } | ||
53 | } \ No newline at end of file | ||
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs index e7bed6a..4bde7be 100644 --- a/OpenSim/Framework/RegionInfo.cs +++ b/OpenSim/Framework/RegionInfo.cs | |||
@@ -122,13 +122,10 @@ namespace OpenSim.Framework | |||
122 | public UUID lastMapUUID = UUID.Zero; | 122 | public UUID lastMapUUID = UUID.Zero; |
123 | public string lastMapRefresh = "0"; | 123 | public string lastMapRefresh = "0"; |
124 | 124 | ||
125 | private float m_nonphysPrimMin = 0; | ||
126 | private int m_nonphysPrimMax = 0; | 125 | private int m_nonphysPrimMax = 0; |
127 | private float m_physPrimMin = 0; | ||
128 | private int m_physPrimMax = 0; | 126 | private int m_physPrimMax = 0; |
129 | private bool m_clampPrimSize = false; | 127 | private bool m_clampPrimSize = false; |
130 | private int m_objectCapacity = 0; | 128 | private int m_objectCapacity = 0; |
131 | private int m_linksetCapacity = 0; | ||
132 | private int m_agentCapacity = 0; | 129 | private int m_agentCapacity = 0; |
133 | private string m_regionType = String.Empty; | 130 | private string m_regionType = String.Empty; |
134 | private RegionLightShareData m_windlight = new RegionLightShareData(); | 131 | private RegionLightShareData m_windlight = new RegionLightShareData(); |
@@ -290,21 +287,11 @@ namespace OpenSim.Framework | |||
290 | set { m_windlight = value; } | 287 | set { m_windlight = value; } |
291 | } | 288 | } |
292 | 289 | ||
293 | public float NonphysPrimMin | ||
294 | { | ||
295 | get { return m_nonphysPrimMin; } | ||
296 | } | ||
297 | |||
298 | public int NonphysPrimMax | 290 | public int NonphysPrimMax |
299 | { | 291 | { |
300 | get { return m_nonphysPrimMax; } | 292 | get { return m_nonphysPrimMax; } |
301 | } | 293 | } |
302 | 294 | ||
303 | public float PhysPrimMin | ||
304 | { | ||
305 | get { return m_physPrimMin; } | ||
306 | } | ||
307 | |||
308 | public int PhysPrimMax | 295 | public int PhysPrimMax |
309 | { | 296 | { |
310 | get { return m_physPrimMax; } | 297 | get { return m_physPrimMax; } |
@@ -320,11 +307,6 @@ namespace OpenSim.Framework | |||
320 | get { return m_objectCapacity; } | 307 | get { return m_objectCapacity; } |
321 | } | 308 | } |
322 | 309 | ||
323 | public int LinksetCapacity | ||
324 | { | ||
325 | get { return m_linksetCapacity; } | ||
326 | } | ||
327 | |||
328 | public int AgentCapacity | 310 | public int AgentCapacity |
329 | { | 311 | { |
330 | get { return m_agentCapacity; } | 312 | get { return m_agentCapacity; } |
@@ -643,31 +625,16 @@ namespace OpenSim.Framework | |||
643 | m_regionType = config.GetString("RegionType", String.Empty); | 625 | m_regionType = config.GetString("RegionType", String.Empty); |
644 | allKeys.Remove("RegionType"); | 626 | allKeys.Remove("RegionType"); |
645 | 627 | ||
646 | #region Prim stuff | 628 | // Prim stuff |
647 | 629 | // | |
648 | m_nonphysPrimMin = config.GetFloat("NonPhysicalPrimMin", 0); | 630 | m_nonphysPrimMax = config.GetInt("NonphysicalPrimMax", 0); |
649 | allKeys.Remove("NonPhysicalPrimMin"); | 631 | allKeys.Remove("NonphysicalPrimMax"); |
650 | |||
651 | m_nonphysPrimMax = config.GetInt("NonPhysicalPrimMax", 0); | ||
652 | allKeys.Remove("NonPhysicalPrimMax"); | ||
653 | |||
654 | m_physPrimMin = config.GetFloat("PhysicalPrimMin", 0); | ||
655 | allKeys.Remove("PhysicalPrimMin"); | ||
656 | |||
657 | m_physPrimMax = config.GetInt("PhysicalPrimMax", 0); | 632 | m_physPrimMax = config.GetInt("PhysicalPrimMax", 0); |
658 | allKeys.Remove("PhysicalPrimMax"); | 633 | allKeys.Remove("PhysicalPrimMax"); |
659 | |||
660 | m_clampPrimSize = config.GetBoolean("ClampPrimSize", false); | 634 | m_clampPrimSize = config.GetBoolean("ClampPrimSize", false); |
661 | allKeys.Remove("ClampPrimSize"); | 635 | allKeys.Remove("ClampPrimSize"); |
662 | |||
663 | m_objectCapacity = config.GetInt("MaxPrims", 15000); | 636 | m_objectCapacity = config.GetInt("MaxPrims", 15000); |
664 | allKeys.Remove("MaxPrims"); | 637 | allKeys.Remove("MaxPrims"); |
665 | |||
666 | m_linksetCapacity = config.GetInt("LinksetPrims", 0); | ||
667 | allKeys.Remove("LinksetPrims"); | ||
668 | |||
669 | #endregion | ||
670 | |||
671 | m_agentCapacity = config.GetInt("MaxAgents", 100); | 638 | m_agentCapacity = config.GetInt("MaxAgents", 100); |
672 | allKeys.Remove("MaxAgents"); | 639 | allKeys.Remove("MaxAgents"); |
673 | 640 | ||
@@ -706,27 +673,16 @@ namespace OpenSim.Framework | |||
706 | 673 | ||
707 | config.Set("ExternalHostName", m_externalHostName); | 674 | config.Set("ExternalHostName", m_externalHostName); |
708 | 675 | ||
709 | if (m_nonphysPrimMin > 0) | 676 | if (m_nonphysPrimMax != 0) |
710 | config.Set("NonphysicalPrimMax", m_nonphysPrimMin); | ||
711 | |||
712 | if (m_nonphysPrimMax > 0) | ||
713 | config.Set("NonphysicalPrimMax", m_nonphysPrimMax); | 677 | config.Set("NonphysicalPrimMax", m_nonphysPrimMax); |
714 | 678 | if (m_physPrimMax != 0) | |
715 | if (m_physPrimMin > 0) | ||
716 | config.Set("PhysicalPrimMax", m_physPrimMin); | ||
717 | |||
718 | if (m_physPrimMax > 0) | ||
719 | config.Set("PhysicalPrimMax", m_physPrimMax); | 679 | config.Set("PhysicalPrimMax", m_physPrimMax); |
720 | |||
721 | config.Set("ClampPrimSize", m_clampPrimSize.ToString()); | 680 | config.Set("ClampPrimSize", m_clampPrimSize.ToString()); |
722 | 681 | ||
723 | if (m_objectCapacity > 0) | 682 | if (m_objectCapacity != 0) |
724 | config.Set("MaxPrims", m_objectCapacity); | 683 | config.Set("MaxPrims", m_objectCapacity); |
725 | 684 | ||
726 | if (m_linksetCapacity > 0) | 685 | if (m_agentCapacity != 0) |
727 | config.Set("LinksetPrims", m_linksetCapacity); | ||
728 | |||
729 | if (m_agentCapacity > 0) | ||
730 | config.Set("MaxAgents", m_agentCapacity); | 686 | config.Set("MaxAgents", m_agentCapacity); |
731 | 687 | ||
732 | if (ScopeID != UUID.Zero) | 688 | if (ScopeID != UUID.Zero) |
@@ -803,15 +759,9 @@ namespace OpenSim.Framework | |||
803 | configMember.addConfigurationOption("lastmap_refresh", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, | 759 | configMember.addConfigurationOption("lastmap_refresh", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, |
804 | "Last Map Refresh", Util.UnixTimeSinceEpoch().ToString(), true); | 760 | "Last Map Refresh", Util.UnixTimeSinceEpoch().ToString(), true); |
805 | 761 | ||
806 | configMember.addConfigurationOption("nonphysical_prim_min", ConfigurationOption.ConfigurationTypes.TYPE_FLOAT, | ||
807 | "Minimum size for nonphysical prims", m_nonphysPrimMin.ToString(), true); | ||
808 | |||
809 | configMember.addConfigurationOption("nonphysical_prim_max", ConfigurationOption.ConfigurationTypes.TYPE_INT32, | 762 | configMember.addConfigurationOption("nonphysical_prim_max", ConfigurationOption.ConfigurationTypes.TYPE_INT32, |
810 | "Maximum size for nonphysical prims", m_nonphysPrimMax.ToString(), true); | 763 | "Maximum size for nonphysical prims", m_nonphysPrimMax.ToString(), true); |
811 | 764 | ||
812 | configMember.addConfigurationOption("physical_prim_min", ConfigurationOption.ConfigurationTypes.TYPE_FLOAT, | ||
813 | "Minimum size for nonphysical prims", m_physPrimMin.ToString(), true); | ||
814 | |||
815 | configMember.addConfigurationOption("physical_prim_max", ConfigurationOption.ConfigurationTypes.TYPE_INT32, | 765 | configMember.addConfigurationOption("physical_prim_max", ConfigurationOption.ConfigurationTypes.TYPE_INT32, |
816 | "Maximum size for physical prims", m_physPrimMax.ToString(), true); | 766 | "Maximum size for physical prims", m_physPrimMax.ToString(), true); |
817 | 767 | ||
@@ -821,9 +771,6 @@ namespace OpenSim.Framework | |||
821 | configMember.addConfigurationOption("object_capacity", ConfigurationOption.ConfigurationTypes.TYPE_INT32, | 771 | configMember.addConfigurationOption("object_capacity", ConfigurationOption.ConfigurationTypes.TYPE_INT32, |
822 | "Max objects this sim will hold", m_objectCapacity.ToString(), true); | 772 | "Max objects this sim will hold", m_objectCapacity.ToString(), true); |
823 | 773 | ||
824 | configMember.addConfigurationOption("linkset_capacity", ConfigurationOption.ConfigurationTypes.TYPE_INT32, | ||
825 | "Max prims an object will hold", m_linksetCapacity.ToString(), true); | ||
826 | |||
827 | configMember.addConfigurationOption("agent_capacity", ConfigurationOption.ConfigurationTypes.TYPE_INT32, | 774 | configMember.addConfigurationOption("agent_capacity", ConfigurationOption.ConfigurationTypes.TYPE_INT32, |
828 | "Max avatars this sim will hold", m_agentCapacity.ToString(), true); | 775 | "Max avatars this sim will hold", m_agentCapacity.ToString(), true); |
829 | 776 | ||
@@ -945,9 +892,6 @@ namespace OpenSim.Framework | |||
945 | case "object_capacity": | 892 | case "object_capacity": |
946 | m_objectCapacity = (int)configuration_result; | 893 | m_objectCapacity = (int)configuration_result; |
947 | break; | 894 | break; |
948 | case "linkset_capacity": | ||
949 | m_linksetCapacity = (int)configuration_result; | ||
950 | break; | ||
951 | case "agent_capacity": | 895 | case "agent_capacity": |
952 | m_agentCapacity = (int)configuration_result; | 896 | m_agentCapacity = (int)configuration_result; |
953 | break; | 897 | break; |
diff --git a/OpenSim/Framework/Serialization/ArchiveConstants.cs b/OpenSim/Framework/Serialization/ArchiveConstants.cs index 48f1c4f..2c5e001 100644 --- a/OpenSim/Framework/Serialization/ArchiveConstants.cs +++ b/OpenSim/Framework/Serialization/ArchiveConstants.cs | |||
@@ -53,11 +53,6 @@ namespace OpenSim.Framework.Serialization | |||
53 | public const string INVENTORY_PATH = "inventory/"; | 53 | public const string INVENTORY_PATH = "inventory/"; |
54 | 54 | ||
55 | /// <value> | 55 | /// <value> |
56 | /// Path for regions in a multi-region archive | ||
57 | /// </value> | ||
58 | public const string REGIONS_PATH = "regions/"; | ||
59 | |||
60 | /// <value> | ||
61 | /// Path for the prims file | 56 | /// Path for the prims file |
62 | /// </value> | 57 | /// </value> |
63 | public const string OBJECTS_PATH = "objects/"; | 58 | public const string OBJECTS_PATH = "objects/"; |
diff --git a/OpenSim/Framework/Serialization/External/OspResolver.cs b/OpenSim/Framework/Serialization/External/OspResolver.cs index fa7160f..d31d27c 100644 --- a/OpenSim/Framework/Serialization/External/OspResolver.cs +++ b/OpenSim/Framework/Serialization/External/OspResolver.cs | |||
@@ -65,14 +65,9 @@ namespace OpenSim.Framework.Serialization | |||
65 | 65 | ||
66 | UserAccount account = userService.GetUserAccount(UUID.Zero, userId); | 66 | UserAccount account = userService.GetUserAccount(UUID.Zero, userId); |
67 | if (account != null) | 67 | if (account != null) |
68 | { | ||
69 | return MakeOspa(account.FirstName, account.LastName); | 68 | return MakeOspa(account.FirstName, account.LastName); |
70 | } | ||
71 | // else | 69 | // else |
72 | // { | ||
73 | // m_log.WarnFormat("[OSP RESOLVER]: No user account for {0}", userId); | 70 | // m_log.WarnFormat("[OSP RESOLVER]: No user account for {0}", userId); |
74 | // System.Console.WriteLine("[OSP RESOLVER]: No user account for {0}", userId); | ||
75 | // } | ||
76 | 71 | ||
77 | return null; | 72 | return null; |
78 | } | 73 | } |
@@ -84,13 +79,10 @@ namespace OpenSim.Framework.Serialization | |||
84 | /// <returns></returns> | 79 | /// <returns></returns> |
85 | public static string MakeOspa(string firstName, string lastName) | 80 | public static string MakeOspa(string firstName, string lastName) |
86 | { | 81 | { |
87 | string ospa | 82 | // m_log.DebugFormat("[OSP RESOLVER]: Making OSPA for {0} {1}", firstName, lastName); |
88 | = OSPA_PREFIX + OSPA_NAME_KEY + OSPA_PAIR_SEPARATOR + firstName + OSPA_NAME_VALUE_SEPARATOR + lastName; | ||
89 | |||
90 | // m_log.DebugFormat("[OSP RESOLVER]: Made OSPA {0} for {1} {2}", ospa, firstName, lastName); | ||
91 | // System.Console.WriteLine("[OSP RESOLVER]: Made OSPA {0} for {1} {2}", ospa, firstName, lastName); | ||
92 | 83 | ||
93 | return ospa; | 84 | return |
85 | OSPA_PREFIX + OSPA_NAME_KEY + OSPA_PAIR_SEPARATOR + firstName + OSPA_NAME_VALUE_SEPARATOR + lastName; | ||
94 | } | 86 | } |
95 | 87 | ||
96 | /// <summary> | 88 | /// <summary> |
diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs index 605909d..cf19002 100644 --- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs +++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs | |||
@@ -96,6 +96,11 @@ namespace OpenSim.Framework.Servers | |||
96 | get { return m_httpServer; } | 96 | get { return m_httpServer; } |
97 | } | 97 | } |
98 | 98 | ||
99 | /// <summary> | ||
100 | /// Holds the non-viewer statistics collection object for this service/server | ||
101 | /// </summary> | ||
102 | protected IStatsCollector m_stats; | ||
103 | |||
99 | public BaseOpenSimServer() | 104 | public BaseOpenSimServer() |
100 | { | 105 | { |
101 | m_startuptime = DateTime.Now; | 106 | m_startuptime = DateTime.Now; |
@@ -172,6 +177,10 @@ namespace OpenSim.Framework.Servers | |||
172 | "show info", | 177 | "show info", |
173 | "Show general information about the server", HandleShow); | 178 | "Show general information about the server", HandleShow); |
174 | 179 | ||
180 | m_console.Commands.AddCommand("General", false, "show stats", | ||
181 | "show stats", | ||
182 | "Show statistics", HandleShow); | ||
183 | |||
175 | m_console.Commands.AddCommand("General", false, "show threads", | 184 | m_console.Commands.AddCommand("General", false, "show threads", |
176 | "show threads", | 185 | "show threads", |
177 | "Show thread status", HandleShow); | 186 | "Show thread status", HandleShow); |
@@ -192,19 +201,8 @@ namespace OpenSim.Framework.Servers | |||
192 | "threads show", | 201 | "threads show", |
193 | "Show thread status. Synonym for \"show threads\"", | 202 | "Show thread status. Synonym for \"show threads\"", |
194 | (string module, string[] args) => Notice(GetThreadsReport())); | 203 | (string module, string[] args) => Notice(GetThreadsReport())); |
195 | |||
196 | m_console.Commands.AddCommand("General", false, "force gc", | ||
197 | "force gc", | ||
198 | "Manually invoke runtime garbage collection. For debugging purposes", | ||
199 | HandleForceGc); | ||
200 | } | 204 | } |
201 | } | 205 | } |
202 | |||
203 | private void HandleForceGc(string module, string[] args) | ||
204 | { | ||
205 | MainConsole.Instance.Output("Manually invoking runtime garbage collection"); | ||
206 | GC.Collect(); | ||
207 | } | ||
208 | 206 | ||
209 | /// <summary> | 207 | /// <summary> |
210 | /// Should be overriden and referenced by descendents if they need to perform extra shutdown processing | 208 | /// Should be overriden and referenced by descendents if they need to perform extra shutdown processing |
@@ -228,7 +226,12 @@ namespace OpenSim.Framework.Servers | |||
228 | { | 226 | { |
229 | StringBuilder sb = new StringBuilder("DIAGNOSTICS\n\n"); | 227 | StringBuilder sb = new StringBuilder("DIAGNOSTICS\n\n"); |
230 | sb.Append(GetUptimeReport()); | 228 | sb.Append(GetUptimeReport()); |
231 | sb.Append(StatsManager.SimExtraStats.Report()); | 229 | |
230 | if (m_stats != null) | ||
231 | { | ||
232 | sb.Append(m_stats.Report()); | ||
233 | } | ||
234 | |||
232 | sb.Append(Environment.NewLine); | 235 | sb.Append(Environment.NewLine); |
233 | sb.Append(GetThreadsReport()); | 236 | sb.Append(GetThreadsReport()); |
234 | 237 | ||
@@ -379,6 +382,10 @@ namespace OpenSim.Framework.Servers | |||
379 | { | 382 | { |
380 | Notice("set log level [level] - change the console logging level only. For example, off or debug."); | 383 | Notice("set log level [level] - change the console logging level only. For example, off or debug."); |
381 | Notice("show info - show server information (e.g. startup path)."); | 384 | Notice("show info - show server information (e.g. startup path)."); |
385 | |||
386 | if (m_stats != null) | ||
387 | Notice("show stats - show statistical information for this server"); | ||
388 | |||
382 | Notice("show threads - list tracked threads"); | 389 | Notice("show threads - list tracked threads"); |
383 | Notice("show uptime - show server startup time and uptime."); | 390 | Notice("show uptime - show server startup time and uptime."); |
384 | Notice("show version - show server version."); | 391 | Notice("show version - show server version."); |
@@ -402,6 +409,11 @@ namespace OpenSim.Framework.Servers | |||
402 | ShowInfo(); | 409 | ShowInfo(); |
403 | break; | 410 | break; |
404 | 411 | ||
412 | case "stats": | ||
413 | if (m_stats != null) | ||
414 | Notice(m_stats.Report()); | ||
415 | break; | ||
416 | |||
405 | case "threads": | 417 | case "threads": |
406 | Notice(GetThreadsReport()); | 418 | Notice(GetThreadsReport()); |
407 | break; | 419 | break; |
@@ -592,7 +604,8 @@ namespace OpenSim.Framework.Servers | |||
592 | 604 | ||
593 | public string osSecret { | 605 | public string osSecret { |
594 | // Secret uuid for the simulator | 606 | // Secret uuid for the simulator |
595 | get { return m_osSecret; } | 607 | get { return m_osSecret; } |
608 | |||
596 | } | 609 | } |
597 | 610 | ||
598 | public string StatReport(IOSHttpRequest httpRequest) | 611 | public string StatReport(IOSHttpRequest httpRequest) |
@@ -600,11 +613,11 @@ namespace OpenSim.Framework.Servers | |||
600 | // If we catch a request for "callback", wrap the response in the value for jsonp | 613 | // If we catch a request for "callback", wrap the response in the value for jsonp |
601 | if (httpRequest.Query.ContainsKey("callback")) | 614 | if (httpRequest.Query.ContainsKey("callback")) |
602 | { | 615 | { |
603 | return httpRequest.Query["callback"].ToString() + "(" + StatsManager.SimExtraStats.XReport((DateTime.Now - m_startuptime).ToString() , m_version) + ");"; | 616 | return httpRequest.Query["callback"].ToString() + "(" + m_stats.XReport((DateTime.Now - m_startuptime).ToString() , m_version) + ");"; |
604 | } | 617 | } |
605 | else | 618 | else |
606 | { | 619 | { |
607 | return StatsManager.SimExtraStats.XReport((DateTime.Now - m_startuptime).ToString() , m_version); | 620 | return m_stats.XReport((DateTime.Now - m_startuptime).ToString() , m_version); |
608 | } | 621 | } |
609 | } | 622 | } |
610 | 623 | ||
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs index 3198891..788a0b9 100644 --- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs | |||
@@ -54,23 +54,8 @@ 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> | ||
63 | public int DebugLevel { get; set; } | 57 | public int DebugLevel { get; set; } |
64 | 58 | ||
65 | /// <summary> | ||
66 | /// Request number for diagnostic purposes. | ||
67 | /// </summary> | ||
68 | /// <remarks> | ||
69 | /// This is an internal number. In some debug situations an external number may also be supplied in the | ||
70 | /// opensim-request-id header but we are not currently logging this. | ||
71 | /// </remarks> | ||
72 | public int RequestNumber { get; private set; } | ||
73 | |||
74 | private volatile int NotSocketErrors = 0; | 59 | private volatile int NotSocketErrors = 0; |
75 | public volatile bool HTTPDRunning = false; | 60 | public volatile bool HTTPDRunning = false; |
76 | 61 | ||
@@ -82,7 +67,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
82 | protected Dictionary<string, LLSDMethod> m_llsdHandlers = new Dictionary<string, LLSDMethod>(); | 67 | protected Dictionary<string, LLSDMethod> m_llsdHandlers = new Dictionary<string, LLSDMethod>(); |
83 | protected Dictionary<string, IRequestHandler> m_streamHandlers = new Dictionary<string, IRequestHandler>(); | 68 | protected Dictionary<string, IRequestHandler> m_streamHandlers = new Dictionary<string, IRequestHandler>(); |
84 | protected Dictionary<string, GenericHTTPMethod> m_HTTPHandlers = new Dictionary<string, GenericHTTPMethod>(); | 69 | protected Dictionary<string, GenericHTTPMethod> m_HTTPHandlers = new Dictionary<string, GenericHTTPMethod>(); |
85 | // protected Dictionary<string, IHttpAgentHandler> m_agentHandlers = new Dictionary<string, IHttpAgentHandler>(); | 70 | protected Dictionary<string, IHttpAgentHandler> m_agentHandlers = new Dictionary<string, IHttpAgentHandler>(); |
86 | protected Dictionary<string, PollServiceEventArgs> m_pollHandlers = | 71 | protected Dictionary<string, PollServiceEventArgs> m_pollHandlers = |
87 | new Dictionary<string, PollServiceEventArgs>(); | 72 | new Dictionary<string, PollServiceEventArgs>(); |
88 | 73 | ||
@@ -260,29 +245,29 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
260 | return new List<string>(m_pollHandlers.Keys); | 245 | return new List<string>(m_pollHandlers.Keys); |
261 | } | 246 | } |
262 | 247 | ||
263 | // // Note that the agent string is provided simply to differentiate | 248 | // Note that the agent string is provided simply to differentiate |
264 | // // the handlers - it is NOT required to be an actual agent header | 249 | // the handlers - it is NOT required to be an actual agent header |
265 | // // value. | 250 | // value. |
266 | // public bool AddAgentHandler(string agent, IHttpAgentHandler handler) | 251 | public bool AddAgentHandler(string agent, IHttpAgentHandler handler) |
267 | // { | 252 | { |
268 | // lock (m_agentHandlers) | 253 | lock (m_agentHandlers) |
269 | // { | 254 | { |
270 | // if (!m_agentHandlers.ContainsKey(agent)) | 255 | if (!m_agentHandlers.ContainsKey(agent)) |
271 | // { | 256 | { |
272 | // m_agentHandlers.Add(agent, handler); | 257 | m_agentHandlers.Add(agent, handler); |
273 | // return true; | 258 | return true; |
274 | // } | 259 | } |
275 | // } | 260 | } |
276 | // | 261 | |
277 | // //must already have a handler for that path so return false | 262 | //must already have a handler for that path so return false |
278 | // return false; | 263 | return false; |
279 | // } | 264 | } |
280 | // | 265 | |
281 | // public List<string> GetAgentHandlerKeys() | 266 | public List<string> GetAgentHandlerKeys() |
282 | // { | 267 | { |
283 | // lock (m_agentHandlers) | 268 | lock (m_agentHandlers) |
284 | // return new List<string>(m_agentHandlers.Keys); | 269 | return new List<string>(m_agentHandlers.Keys); |
285 | // } | 270 | } |
286 | 271 | ||
287 | public bool AddLLSDHandler(string path, LLSDMethod handler) | 272 | public bool AddLLSDHandler(string path, LLSDMethod handler) |
288 | { | 273 | { |
@@ -311,8 +296,6 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
311 | 296 | ||
312 | private void OnRequest(object source, RequestEventArgs args) | 297 | private void OnRequest(object source, RequestEventArgs args) |
313 | { | 298 | { |
314 | RequestNumber++; | ||
315 | |||
316 | try | 299 | try |
317 | { | 300 | { |
318 | IHttpClientContext context = (IHttpClientContext)source; | 301 | IHttpClientContext context = (IHttpClientContext)source; |
@@ -423,6 +406,7 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
423 | string requestMethod = request.HttpMethod; | 406 | string requestMethod = request.HttpMethod; |
424 | string uriString = request.RawUrl; | 407 | string uriString = request.RawUrl; |
425 | 408 | ||
409 | // string reqnum = "unknown"; | ||
426 | int requestStartTick = Environment.TickCount; | 410 | int requestStartTick = Environment.TickCount; |
427 | 411 | ||
428 | // Will be adjusted later on. | 412 | // Will be adjusted later on. |
@@ -439,22 +423,22 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
439 | 423 | ||
440 | Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", true); | 424 | Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", true); |
441 | 425 | ||
442 | // // This is the REST agent interface. We require an agent to properly identify | 426 | // This is the REST agent interface. We require an agent to properly identify |
443 | // // itself. If the REST handler recognizes the prefix it will attempt to | 427 | // itself. If the REST handler recognizes the prefix it will attempt to |
444 | // // satisfy the request. If it is not recognizable, and no damage has occurred | 428 | // satisfy the request. If it is not recognizable, and no damage has occurred |
445 | // // the request can be passed through to the other handlers. This is a low | 429 | // the request can be passed through to the other handlers. This is a low |
446 | // // probability event; if a request is matched it is normally expected to be | 430 | // probability event; if a request is matched it is normally expected to be |
447 | // // handled | 431 | // handled |
448 | // IHttpAgentHandler agentHandler; | 432 | IHttpAgentHandler agentHandler; |
449 | // | 433 | |
450 | // if (TryGetAgentHandler(request, response, out agentHandler)) | 434 | if (TryGetAgentHandler(request, response, out agentHandler)) |
451 | // { | 435 | { |
452 | // if (HandleAgentRequest(agentHandler, request, response)) | 436 | if (HandleAgentRequest(agentHandler, request, response)) |
453 | // { | 437 | { |
454 | // requestEndTick = Environment.TickCount; | 438 | requestEndTick = Environment.TickCount; |
455 | // return; | 439 | return; |
456 | // } | 440 | } |
457 | // } | 441 | } |
458 | 442 | ||
459 | //response.KeepAlive = true; | 443 | //response.KeepAlive = true; |
460 | response.SendChunked = false; | 444 | response.SendChunked = false; |
@@ -466,7 +450,9 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
466 | if (TryGetStreamHandler(handlerKey, out requestHandler)) | 450 | if (TryGetStreamHandler(handlerKey, out requestHandler)) |
467 | { | 451 | { |
468 | if (DebugLevel >= 3) | 452 | if (DebugLevel >= 3) |
469 | LogIncomingToStreamHandler(request, requestHandler); | 453 | m_log.DebugFormat( |
454 | "[BASE HTTP SERVER]: Found stream handler for {0} {1} {2} {3}", | ||
455 | request.HttpMethod, request.Url.PathAndQuery, requestHandler.Name, requestHandler.Description); | ||
470 | 456 | ||
471 | response.ContentType = requestHandler.ContentType; // Lets do this defaulting before in case handler has varying content type. | 457 | response.ContentType = requestHandler.ContentType; // Lets do this defaulting before in case handler has varying content type. |
472 | 458 | ||
@@ -543,8 +529,11 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
543 | { | 529 | { |
544 | case null: | 530 | case null: |
545 | case "text/html": | 531 | case "text/html": |
532 | |||
546 | if (DebugLevel >= 3) | 533 | if (DebugLevel >= 3) |
547 | LogIncomingToContentTypeHandler(request); | 534 | m_log.DebugFormat( |
535 | "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}", | ||
536 | request.ContentType, request.HttpMethod, request.Url.PathAndQuery); | ||
548 | 537 | ||
549 | buffer = HandleHTTPRequest(request, response); | 538 | buffer = HandleHTTPRequest(request, response); |
550 | break; | 539 | break; |
@@ -552,8 +541,11 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
552 | case "application/llsd+xml": | 541 | case "application/llsd+xml": |
553 | case "application/xml+llsd": | 542 | case "application/xml+llsd": |
554 | case "application/llsd+json": | 543 | case "application/llsd+json": |
544 | |||
555 | if (DebugLevel >= 3) | 545 | if (DebugLevel >= 3) |
556 | LogIncomingToContentTypeHandler(request); | 546 | m_log.DebugFormat( |
547 | "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}", | ||
548 | request.ContentType, request.HttpMethod, request.Url.PathAndQuery); | ||
557 | 549 | ||
558 | buffer = HandleLLSDRequests(request, response); | 550 | buffer = HandleLLSDRequests(request, response); |
559 | break; | 551 | break; |
@@ -572,7 +564,9 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
572 | if (DoWeHaveALLSDHandler(request.RawUrl)) | 564 | if (DoWeHaveALLSDHandler(request.RawUrl)) |
573 | { | 565 | { |
574 | if (DebugLevel >= 3) | 566 | if (DebugLevel >= 3) |
575 | LogIncomingToContentTypeHandler(request); | 567 | m_log.DebugFormat( |
568 | "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}", | ||
569 | request.ContentType, request.HttpMethod, request.Url.PathAndQuery); | ||
576 | 570 | ||
577 | buffer = HandleLLSDRequests(request, response); | 571 | buffer = HandleLLSDRequests(request, response); |
578 | } | 572 | } |
@@ -580,14 +574,18 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
580 | else if (DoWeHaveAHTTPHandler(request.RawUrl)) | 574 | else if (DoWeHaveAHTTPHandler(request.RawUrl)) |
581 | { | 575 | { |
582 | if (DebugLevel >= 3) | 576 | if (DebugLevel >= 3) |
583 | LogIncomingToContentTypeHandler(request); | 577 | m_log.DebugFormat( |
578 | "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}", | ||
579 | request.ContentType, request.HttpMethod, request.Url.PathAndQuery); | ||
584 | 580 | ||
585 | buffer = HandleHTTPRequest(request, response); | 581 | buffer = HandleHTTPRequest(request, response); |
586 | } | 582 | } |
587 | else | 583 | else |
588 | { | 584 | { |
589 | if (DebugLevel >= 3) | 585 | if (DebugLevel >= 3) |
590 | LogIncomingToXmlRpcHandler(request); | 586 | m_log.DebugFormat( |
587 | "[BASE HTTP SERVER]: Assuming a generic XMLRPC request for {0} {1}", | ||
588 | request.HttpMethod, request.Url.PathAndQuery); | ||
591 | 589 | ||
592 | // generic login request. | 590 | // generic login request. |
593 | buffer = HandleXmlRpcRequests(request, response); | 591 | buffer = HandleXmlRpcRequests(request, response); |
@@ -631,11 +629,11 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
631 | } | 629 | } |
632 | catch (IOException e) | 630 | catch (IOException e) |
633 | { | 631 | { |
634 | m_log.Error(String.Format("[BASE HTTP SERVER]: HandleRequest() threw {0} ", e.StackTrace), e); | 632 | m_log.Error(String.Format("[BASE HTTP SERVER]: HandleRequest() threw {0} ", e.Message), e); |
635 | } | 633 | } |
636 | catch (Exception e) | 634 | catch (Exception e) |
637 | { | 635 | { |
638 | m_log.Error(String.Format("[BASE HTTP SERVER]: HandleRequest() threw {0} ", e.StackTrace), e); | 636 | m_log.Error(String.Format("[BASE HTTP SERVER]: HandleRequest() threw {0} ", e.Message), e); |
639 | SendHTML500(response); | 637 | SendHTML500(response); |
640 | } | 638 | } |
641 | finally | 639 | finally |
@@ -646,93 +644,17 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
646 | if (tickdiff > 3000 && (requestHandler == null || requestHandler.Name == null || requestHandler.Name != "GetTexture")) | 644 | if (tickdiff > 3000 && (requestHandler == null || requestHandler.Name == null || requestHandler.Name != "GetTexture")) |
647 | { | 645 | { |
648 | m_log.InfoFormat( | 646 | m_log.InfoFormat( |
649 | "[BASE HTTP SERVER]: Slow handling of {0} {1} {2} {3} {4} from {5} took {6}ms", | 647 | "[BASE HTTP SERVER]: Slow handling of {0} {1} {2} {3} from {4} took {5}ms", |
650 | RequestNumber, | ||
651 | requestMethod, | 648 | requestMethod, |
652 | uriString, | 649 | uriString, |
653 | requestHandler != null ? requestHandler.Name : "", | 650 | requestHandler != null ? requestHandler.Name : "", |
654 | requestHandler != null ? requestHandler.Description : "", | 651 | requestHandler != null ? requestHandler.Description : "", |
655 | request.RemoteIPEndPoint, | 652 | request.RemoteIPEndPoint.ToString(), |
656 | tickdiff); | ||
657 | } | ||
658 | else if (DebugLevel >= 4) | ||
659 | { | ||
660 | m_log.DebugFormat( | ||
661 | "[BASE HTTP SERVER]: HTTP IN {0} :{1} took {2}ms", | ||
662 | RequestNumber, | ||
663 | Port, | ||
664 | tickdiff); | 653 | tickdiff); |
665 | } | 654 | } |
666 | } | 655 | } |
667 | } | 656 | } |
668 | 657 | ||
669 | private void LogIncomingToStreamHandler(OSHttpRequest request, IRequestHandler requestHandler) | ||
670 | { | ||
671 | m_log.DebugFormat( | ||
672 | "[BASE HTTP SERVER]: HTTP IN {0} :{1} stream handler {2} {3} {4} {5} from {6}", | ||
673 | RequestNumber, | ||
674 | Port, | ||
675 | request.HttpMethod, | ||
676 | request.Url.PathAndQuery, | ||
677 | requestHandler.Name, | ||
678 | requestHandler.Description, | ||
679 | request.RemoteIPEndPoint); | ||
680 | |||
681 | if (DebugLevel >= 5) | ||
682 | LogIncomingInDetail(request); | ||
683 | } | ||
684 | |||
685 | private void LogIncomingToContentTypeHandler(OSHttpRequest request) | ||
686 | { | ||
687 | m_log.DebugFormat( | ||
688 | "[BASE HTTP SERVER]: HTTP IN {0} :{1} {2} content type handler {3} {4} from {5}", | ||
689 | RequestNumber, | ||
690 | Port, | ||
691 | (request.ContentType == null || request.ContentType == "") ? "not set" : request.ContentType, | ||
692 | request.HttpMethod, | ||
693 | request.Url.PathAndQuery, | ||
694 | request.RemoteIPEndPoint); | ||
695 | |||
696 | if (DebugLevel >= 5) | ||
697 | LogIncomingInDetail(request); | ||
698 | } | ||
699 | |||
700 | private void LogIncomingToXmlRpcHandler(OSHttpRequest request) | ||
701 | { | ||
702 | m_log.DebugFormat( | ||
703 | "[BASE HTTP SERVER]: HTTP IN {0} :{1} assumed generic XMLRPC request {2} {3} from {4}", | ||
704 | RequestNumber, | ||
705 | Port, | ||
706 | request.HttpMethod, | ||
707 | request.Url.PathAndQuery, | ||
708 | request.RemoteIPEndPoint); | ||
709 | |||
710 | if (DebugLevel >= 5) | ||
711 | LogIncomingInDetail(request); | ||
712 | } | ||
713 | |||
714 | private void LogIncomingInDetail(OSHttpRequest request) | ||
715 | { | ||
716 | using (StreamReader reader = new StreamReader(Util.Copy(request.InputStream), Encoding.UTF8)) | ||
717 | { | ||
718 | string output; | ||
719 | |||
720 | if (DebugLevel == 5) | ||
721 | { | ||
722 | const int sampleLength = 80; | ||
723 | char[] sampleChars = new char[sampleLength]; | ||
724 | reader.Read(sampleChars, 0, sampleLength); | ||
725 | output = new string(sampleChars); | ||
726 | } | ||
727 | else | ||
728 | { | ||
729 | output = reader.ReadToEnd(); | ||
730 | } | ||
731 | |||
732 | m_log.DebugFormat("[BASE HTTP SERVER]: {0}...", output.Replace("\n", @"\n")); | ||
733 | } | ||
734 | } | ||
735 | |||
736 | private bool TryGetStreamHandler(string handlerKey, out IRequestHandler streamHandler) | 658 | private bool TryGetStreamHandler(string handlerKey, out IRequestHandler streamHandler) |
737 | { | 659 | { |
738 | string bestMatch = null; | 660 | string bestMatch = null; |
@@ -825,24 +747,24 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
825 | } | 747 | } |
826 | } | 748 | } |
827 | 749 | ||
828 | // private bool TryGetAgentHandler(OSHttpRequest request, OSHttpResponse response, out IHttpAgentHandler agentHandler) | 750 | private bool TryGetAgentHandler(OSHttpRequest request, OSHttpResponse response, out IHttpAgentHandler agentHandler) |
829 | // { | 751 | { |
830 | // agentHandler = null; | 752 | agentHandler = null; |
831 | // | 753 | |
832 | // lock (m_agentHandlers) | 754 | lock (m_agentHandlers) |
833 | // { | 755 | { |
834 | // foreach (IHttpAgentHandler handler in m_agentHandlers.Values) | 756 | foreach (IHttpAgentHandler handler in m_agentHandlers.Values) |
835 | // { | 757 | { |
836 | // if (handler.Match(request, response)) | 758 | if (handler.Match(request, response)) |
837 | // { | 759 | { |
838 | // agentHandler = handler; | 760 | agentHandler = handler; |
839 | // return true; | 761 | return true; |
840 | // } | 762 | } |
841 | // } | 763 | } |
842 | // } | 764 | } |
843 | // | 765 | |
844 | // return false; | 766 | return false; |
845 | // } | 767 | } |
846 | 768 | ||
847 | /// <summary> | 769 | /// <summary> |
848 | /// Try all the registered xmlrpc handlers when an xmlrpc request is received. | 770 | /// Try all the registered xmlrpc handlers when an xmlrpc request is received. |
@@ -1815,21 +1737,21 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
1815 | m_pollHandlers.Remove(path); | 1737 | m_pollHandlers.Remove(path); |
1816 | } | 1738 | } |
1817 | 1739 | ||
1818 | // public bool RemoveAgentHandler(string agent, IHttpAgentHandler handler) | 1740 | public bool RemoveAgentHandler(string agent, IHttpAgentHandler handler) |
1819 | // { | 1741 | { |
1820 | // lock (m_agentHandlers) | 1742 | lock (m_agentHandlers) |
1821 | // { | 1743 | { |
1822 | // IHttpAgentHandler foundHandler; | 1744 | IHttpAgentHandler foundHandler; |
1823 | // | 1745 | |
1824 | // if (m_agentHandlers.TryGetValue(agent, out foundHandler) && foundHandler == handler) | 1746 | if (m_agentHandlers.TryGetValue(agent, out foundHandler) && foundHandler == handler) |
1825 | // { | 1747 | { |
1826 | // m_agentHandlers.Remove(agent); | 1748 | m_agentHandlers.Remove(agent); |
1827 | // return true; | 1749 | return true; |
1828 | // } | 1750 | } |
1829 | // } | 1751 | } |
1830 | // | 1752 | |
1831 | // return false; | 1753 | return false; |
1832 | // } | 1754 | } |
1833 | 1755 | ||
1834 | public void RemoveXmlRPCHandler(string method) | 1756 | public void RemoveXmlRPCHandler(string method) |
1835 | { | 1757 | { |
diff --git a/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs index 0bd3aae..db58f6f 100644 --- a/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/Interfaces/IHttpServer.cs | |||
@@ -41,10 +41,10 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
41 | uint Port { get; } | 41 | uint Port { get; } |
42 | bool UseSSL { get; } | 42 | bool UseSSL { get; } |
43 | 43 | ||
44 | // // Note that the agent string is provided simply to differentiate | 44 | // Note that the agent string is provided simply to differentiate |
45 | // // the handlers - it is NOT required to be an actual agent header | 45 | // the handlers - it is NOT required to be an actual agent header |
46 | // // value. | 46 | // value. |
47 | // bool AddAgentHandler(string agent, IHttpAgentHandler handler); | 47 | bool AddAgentHandler(string agent, IHttpAgentHandler handler); |
48 | 48 | ||
49 | /// <summary> | 49 | /// <summary> |
50 | /// Add a handler for an HTTP request. | 50 | /// Add a handler for an HTTP request. |
@@ -106,13 +106,13 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
106 | 106 | ||
107 | bool SetDefaultLLSDHandler(DefaultLLSDMethod handler); | 107 | bool SetDefaultLLSDHandler(DefaultLLSDMethod handler); |
108 | 108 | ||
109 | // /// <summary> | 109 | /// <summary> |
110 | // /// Remove the agent if it is registered. | 110 | /// Remove the agent if it is registered. |
111 | // /// </summary> | 111 | /// </summary> |
112 | // /// <param name="agent"></param> | 112 | /// <param name="agent"></param> |
113 | // /// <param name="handler"></param> | 113 | /// <param name="handler"></param> |
114 | // /// <returns></returns> | 114 | /// <returns></returns> |
115 | // bool RemoveAgentHandler(string agent, IHttpAgentHandler handler); | 115 | bool RemoveAgentHandler(string agent, IHttpAgentHandler handler); |
116 | 116 | ||
117 | /// <summary> | 117 | /// <summary> |
118 | /// Remove an HTTP handler | 118 | /// Remove an HTTP handler |
diff --git a/OpenSim/Framework/Servers/MainServer.cs b/OpenSim/Framework/Servers/MainServer.cs index ae7d515..8dc0e3a 100644 --- a/OpenSim/Framework/Servers/MainServer.cs +++ b/OpenSim/Framework/Servers/MainServer.cs | |||
@@ -29,7 +29,6 @@ using System; | |||
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using System.Reflection; | 30 | using System.Reflection; |
31 | using System.Net; | 31 | using System.Net; |
32 | using System.Text; | ||
33 | using log4net; | 32 | using log4net; |
34 | using OpenSim.Framework; | 33 | using OpenSim.Framework; |
35 | using OpenSim.Framework.Console; | 34 | using OpenSim.Framework.Console; |
@@ -48,12 +47,9 @@ namespace OpenSim.Framework.Servers | |||
48 | /// Control the printing of certain debug messages. | 47 | /// Control the printing of certain debug messages. |
49 | /// </summary> | 48 | /// </summary> |
50 | /// <remarks> | 49 | /// <remarks> |
51 | /// If DebugLevel >= 1 then short warnings are logged when receiving bad input data. | 50 | /// 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. | 51 | /// 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. | 52 | /// 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. | ||
57 | /// </remarks> | 53 | /// </remarks> |
58 | public static int DebugLevel | 54 | public static int DebugLevel |
59 | { | 55 | { |
@@ -105,28 +101,17 @@ namespace OpenSim.Framework.Servers | |||
105 | get { return new Dictionary<uint, BaseHttpServer>(m_Servers); } | 101 | get { return new Dictionary<uint, BaseHttpServer>(m_Servers); } |
106 | } | 102 | } |
107 | 103 | ||
104 | |||
108 | public static void RegisterHttpConsoleCommands(ICommandConsole console) | 105 | public static void RegisterHttpConsoleCommands(ICommandConsole console) |
109 | { | 106 | { |
110 | console.Commands.AddCommand( | 107 | console.Commands.AddCommand( |
111 | "Comms", false, "show http-handlers", | 108 | "Debug", false, "debug http", "debug http [<level>]", |
112 | "show http-handlers", | 109 | "Turn on inbound non-poll http request debugging.", |
113 | "Show all registered http handlers", HandleShowHttpHandlersCommand); | 110 | "If level <= 0, then no extra logging is done.\n" |
114 | 111 | + "If level >= 1, then short warnings are logged when receiving bad input data.\n" | |
115 | console.Commands.AddCommand( | 112 | + "If level >= 2, then long warnings are logged when receiving bad input data.\n" |
116 | "Debug", false, "debug http", "debug http <in|out|all> [<level>]", | 113 | + "If level >= 3, then short notices about all incoming non-poll HTTP requests are logged.\n" |
117 | "Turn on http request logging.", | 114 | + "If no level is specified then the current level is returned.", |
118 | "If in or all and\n" | ||
119 | + " level <= 0 then no extra logging is done.\n" | ||
120 | + " level >= 1 then short warnings are logged when receiving bad input data.\n" | ||
121 | + " level >= 2 then long warnings are logged when receiving bad input data.\n" | ||
122 | + " level >= 3 then short notices about all incoming non-poll HTTP requests are logged.\n" | ||
123 | + " level >= 4 then the time taken to fulfill the request is logged.\n" | ||
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", | ||
130 | HandleDebugHttpCommand); | 115 | HandleDebugHttpCommand); |
131 | } | 116 | } |
132 | 117 | ||
@@ -134,120 +119,25 @@ namespace OpenSim.Framework.Servers | |||
134 | /// Turn on some debugging values for OpenSim. | 119 | /// Turn on some debugging values for OpenSim. |
135 | /// </summary> | 120 | /// </summary> |
136 | /// <param name="args"></param> | 121 | /// <param name="args"></param> |
137 | private static void HandleDebugHttpCommand(string module, string[] cmdparams) | 122 | private static void HandleDebugHttpCommand(string module, string[] args) |
138 | { | 123 | { |
139 | if (cmdparams.Length < 3) | 124 | if (args.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 | ||
164 | { | 125 | { |
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]; | ||
172 | int newDebug; | 126 | int newDebug; |
173 | 127 | if (int.TryParse(args[2], out newDebug)) | |
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 > 6) | ||
181 | { | ||
182 | MainConsole.Instance.OutputFormat("{0} is outside the valid debug level range of 0..6", newDebug); | ||
183 | return; | ||
184 | } | ||
185 | |||
186 | if (allReqs || inReqs) | ||
187 | { | 128 | { |
188 | MainServer.DebugLevel = newDebug; | 129 | MainServer.DebugLevel = newDebug; |
189 | MainConsole.Instance.OutputFormat("IN debug level set to {0}", newDebug); | 130 | MainConsole.Instance.OutputFormat("Debug http 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); | ||
196 | } | 131 | } |
197 | } | 132 | } |
198 | else | 133 | else if (args.Length == 2) |
199 | { | 134 | { |
200 | if (allReqs || inReqs) | 135 | MainConsole.Instance.OutputFormat("Current debug http level is {0}", MainServer.DebugLevel); |
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); | ||
205 | } | 136 | } |
206 | } | 137 | else |
207 | |||
208 | private static void HandleShowHttpHandlersCommand(string module, string[] args) | ||
209 | { | ||
210 | if (args.Length != 2) | ||
211 | { | ||
212 | MainConsole.Instance.Output("Usage: show http-handlers"); | ||
213 | return; | ||
214 | } | ||
215 | |||
216 | StringBuilder handlers = new StringBuilder(); | ||
217 | |||
218 | lock (m_Servers) | ||
219 | { | 138 | { |
220 | foreach (BaseHttpServer httpServer in m_Servers.Values) | 139 | MainConsole.Instance.Output("Usage: debug http 0..3"); |
221 | { | ||
222 | handlers.AppendFormat( | ||
223 | "Registered HTTP Handlers for server at {0}:{1}\n", httpServer.ListenIPAddress, httpServer.Port); | ||
224 | |||
225 | handlers.AppendFormat("* XMLRPC:\n"); | ||
226 | foreach (String s in httpServer.GetXmlRpcHandlerKeys()) | ||
227 | handlers.AppendFormat("\t{0}\n", s); | ||
228 | |||
229 | handlers.AppendFormat("* HTTP:\n"); | ||
230 | List<String> poll = httpServer.GetPollServiceHandlerKeys(); | ||
231 | foreach (String s in httpServer.GetHTTPHandlerKeys()) | ||
232 | handlers.AppendFormat("\t{0} {1}\n", s, (poll.Contains(s) ? "(poll service)" : string.Empty)); | ||
233 | |||
234 | // handlers.AppendFormat("* Agent:\n"); | ||
235 | // foreach (String s in httpServer.GetAgentHandlerKeys()) | ||
236 | // handlers.AppendFormat("\t{0}\n", s); | ||
237 | |||
238 | handlers.AppendFormat("* LLSD:\n"); | ||
239 | foreach (String s in httpServer.GetLLSDHandlerKeys()) | ||
240 | handlers.AppendFormat("\t{0}\n", s); | ||
241 | |||
242 | handlers.AppendFormat("* StreamHandlers ({0}):\n", httpServer.GetStreamHandlerKeys().Count); | ||
243 | foreach (String s in httpServer.GetStreamHandlerKeys()) | ||
244 | handlers.AppendFormat("\t{0}\n", s); | ||
245 | |||
246 | handlers.Append("\n"); | ||
247 | } | ||
248 | } | 140 | } |
249 | |||
250 | MainConsole.Instance.Output(handlers.ToString()); | ||
251 | } | 141 | } |
252 | 142 | ||
253 | /// <summary> | 143 | /// <summary> |
diff --git a/OpenSim/Framework/Servers/VersionInfo.cs b/OpenSim/Framework/Servers/VersionInfo.cs index bb094ed..016a174 100644 --- a/OpenSim/Framework/Servers/VersionInfo.cs +++ b/OpenSim/Framework/Servers/VersionInfo.cs | |||
@@ -29,7 +29,7 @@ namespace OpenSim | |||
29 | { | 29 | { |
30 | public class VersionInfo | 30 | public class VersionInfo |
31 | { | 31 | { |
32 | private const string VERSION_NUMBER = "0.7.5CM"; | 32 | private const string VERSION_NUMBER = "0.7.4CM"; |
33 | private const Flavour VERSION_FLAVOUR = Flavour.Dev; | 33 | private const Flavour VERSION_FLAVOUR = Flavour.Dev; |
34 | 34 | ||
35 | public enum Flavour | 35 | public enum Flavour |
diff --git a/OpenSim/Framework/TaskInventoryDictionary.cs b/OpenSim/Framework/TaskInventoryDictionary.cs index 62ecbd1..4d07746 100644 --- a/OpenSim/Framework/TaskInventoryDictionary.cs +++ b/OpenSim/Framework/TaskInventoryDictionary.cs | |||
@@ -39,12 +39,10 @@ using OpenMetaverse; | |||
39 | namespace OpenSim.Framework | 39 | namespace OpenSim.Framework |
40 | { | 40 | { |
41 | /// <summary> | 41 | /// <summary> |
42 | /// A dictionary containing task inventory items. Indexed by item UUID. | 42 | /// A dictionary for task inventory. |
43 | /// </summary> | 43 | /// </summary> |
44 | /// <remarks> | ||
45 | /// This class is not thread safe. Callers must synchronize on Dictionary methods or Clone() this object before | 44 | /// This class is not thread safe. Callers must synchronize on Dictionary methods or Clone() this object before |
46 | /// iterating over it. | 45 | /// iterating over it. |
47 | /// </remarks> | ||
48 | public class TaskInventoryDictionary : Dictionary<UUID, TaskInventoryItem>, | 46 | public class TaskInventoryDictionary : Dictionary<UUID, TaskInventoryItem>, |
49 | ICloneable, IXmlSerializable | 47 | ICloneable, IXmlSerializable |
50 | { | 48 | { |
diff --git a/OpenSim/Framework/TaskInventoryItem.cs b/OpenSim/Framework/TaskInventoryItem.cs index 574ee56..fb818ee 100644 --- a/OpenSim/Framework/TaskInventoryItem.cs +++ b/OpenSim/Framework/TaskInventoryItem.cs | |||
@@ -73,6 +73,9 @@ namespace OpenSim.Framework | |||
73 | 73 | ||
74 | private bool _ownerChanged = false; | 74 | private bool _ownerChanged = false; |
75 | 75 | ||
76 | // This used ONLY during copy. It can't be relied on at other times! | ||
77 | private bool _scriptRunning = true; | ||
78 | |||
76 | public UUID AssetID { | 79 | public UUID AssetID { |
77 | get { | 80 | get { |
78 | return _assetID; | 81 | return _assetID; |
@@ -350,13 +353,14 @@ namespace OpenSim.Framework | |||
350 | } | 353 | } |
351 | } | 354 | } |
352 | 355 | ||
353 | /// <summary> | 356 | public bool ScriptRunning { |
354 | /// This used ONLY during copy. It can't be relied on at other times! | 357 | get { |
355 | /// </summary> | 358 | return _scriptRunning; |
356 | /// <remarks> | 359 | } |
357 | /// For true script running status, use IEntityInventory.TryGetScriptInstanceRunning() for now. | 360 | set { |
358 | /// </remarks> | 361 | _scriptRunning = value; |
359 | public bool ScriptRunning { get; set; } | 362 | } |
363 | } | ||
360 | 364 | ||
361 | // See ICloneable | 365 | // See ICloneable |
362 | 366 | ||
@@ -384,7 +388,6 @@ namespace OpenSim.Framework | |||
384 | 388 | ||
385 | public TaskInventoryItem() | 389 | public TaskInventoryItem() |
386 | { | 390 | { |
387 | ScriptRunning = true; | ||
388 | CreationDate = (uint)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; | 391 | CreationDate = (uint)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; |
389 | } | 392 | } |
390 | } | 393 | } |
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index e76a37b..384f716 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs | |||
@@ -546,19 +546,6 @@ namespace OpenSim.Framework | |||
546 | } | 546 | } |
547 | 547 | ||
548 | /// <summary> | 548 | /// <summary> |
549 | /// Determines whether a point is inside a bounding box. | ||
550 | /// </summary> | ||
551 | /// <param name='v'></param> | ||
552 | /// <param name='min'></param> | ||
553 | /// <param name='max'></param> | ||
554 | /// <returns></returns> | ||
555 | public static bool IsInsideBox(Vector3 v, Vector3 min, Vector3 max) | ||
556 | { | ||
557 | return v.X >= min.X & v.Y >= min.Y && v.Z >= min.Z | ||
558 | && v.X <= max.X && v.Y <= max.Y && v.Z <= max.Z; | ||
559 | } | ||
560 | |||
561 | /// <summary> | ||
562 | /// Are the co-ordinates of the new region visible from the old region? | 549 | /// Are the co-ordinates of the new region visible from the old region? |
563 | /// </summary> | 550 | /// </summary> |
564 | /// <param name="oldx">Old region x-coord</param> | 551 | /// <param name="oldx">Old region x-coord</param> |
@@ -875,12 +862,6 @@ namespace OpenSim.Framework | |||
875 | return Math.Min(Math.Max(x, min), max); | 862 | return Math.Min(Math.Max(x, min), max); |
876 | } | 863 | } |
877 | 864 | ||
878 | public static Vector3 Clip(Vector3 vec, float min, float max) | ||
879 | { | ||
880 | return new Vector3(Clip(vec.X, min, max), Clip(vec.Y, min, max), | ||
881 | Clip(vec.Z, min, max)); | ||
882 | } | ||
883 | |||
884 | /// <summary> | 865 | /// <summary> |
885 | /// Convert an UUID to a raw uuid string. Right now this is a string without hyphens. | 866 | /// Convert an UUID to a raw uuid string. Right now this is a string without hyphens. |
886 | /// </summary> | 867 | /// </summary> |
@@ -1032,38 +1013,6 @@ namespace OpenSim.Framework | |||
1032 | } | 1013 | } |
1033 | } | 1014 | } |
1034 | 1015 | ||
1035 | /// <summary> | ||
1036 | /// Copy data from one stream to another, leaving the read position of both streams at the beginning. | ||
1037 | /// </summary> | ||
1038 | /// <param name='inputStream'> | ||
1039 | /// Input stream. Must be seekable. | ||
1040 | /// </param> | ||
1041 | /// <exception cref='ArgumentException'> | ||
1042 | /// Thrown if the input stream is not seekable. | ||
1043 | /// </exception> | ||
1044 | public static Stream Copy(Stream inputStream) | ||
1045 | { | ||
1046 | if (!inputStream.CanSeek) | ||
1047 | throw new ArgumentException("Util.Copy(Stream inputStream) must receive an inputStream that can seek"); | ||
1048 | |||
1049 | const int readSize = 256; | ||
1050 | byte[] buffer = new byte[readSize]; | ||
1051 | MemoryStream ms = new MemoryStream(); | ||
1052 | |||
1053 | int count = inputStream.Read(buffer, 0, readSize); | ||
1054 | |||
1055 | while (count > 0) | ||
1056 | { | ||
1057 | ms.Write(buffer, 0, count); | ||
1058 | count = inputStream.Read(buffer, 0, readSize); | ||
1059 | } | ||
1060 | |||
1061 | ms.Position = 0; | ||
1062 | inputStream.Position = 0; | ||
1063 | |||
1064 | return ms; | ||
1065 | } | ||
1066 | |||
1067 | public static XmlRpcResponse XmlRpcCommand(string url, string methodName, params object[] args) | 1016 | public static XmlRpcResponse XmlRpcCommand(string url, string methodName, params object[] args) |
1068 | { | 1017 | { |
1069 | return SendXmlRpcCommand(url, methodName, args); | 1018 | return SendXmlRpcCommand(url, methodName, args); |
diff --git a/OpenSim/Framework/WebUtil.cs b/OpenSim/Framework/WebUtil.cs index b85d93d..30a8c28 100644 --- a/OpenSim/Framework/WebUtil.cs +++ b/OpenSim/Framework/WebUtil.cs | |||
@@ -54,17 +54,9 @@ 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> | ||
65 | /// Request number for diagnostic purposes. | 57 | /// Request number for diagnostic purposes. |
66 | /// </summary> | 58 | /// </summary> |
67 | public static int RequestNumber { get; internal set; } | 59 | public static int RequestNumber = 0; |
68 | 60 | ||
69 | /// <summary> | 61 | /// <summary> |
70 | /// this is the header field used to communicate the local request id | 62 | /// this is the header field used to communicate the local request id |
@@ -154,11 +146,7 @@ namespace OpenSim.Framework | |||
154 | private static OSDMap ServiceOSDRequestWorker(string url, OSDMap data, string method, int timeout, bool compressed) | 146 | private static OSDMap ServiceOSDRequestWorker(string url, OSDMap data, string method, int timeout, bool compressed) |
155 | { | 147 | { |
156 | int reqnum = RequestNumber++; | 148 | int reqnum = RequestNumber++; |
157 | 149 | // m_log.DebugFormat("[WEB UTIL]: <{0}> start osd request for {1}, method {2}",reqnum,url,method); | |
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); | ||
162 | 150 | ||
163 | string errorMessage = "unknown error"; | 151 | string errorMessage = "unknown error"; |
164 | int tickstart = Util.EnvironmentTickCount(); | 152 | int tickstart = Util.EnvironmentTickCount(); |
@@ -242,7 +230,7 @@ namespace OpenSim.Framework | |||
242 | int tickdiff = Util.EnvironmentTickCountSubtract(tickstart); | 230 | int tickdiff = Util.EnvironmentTickCountSubtract(tickstart); |
243 | if (tickdiff > LongCallTime) | 231 | if (tickdiff > LongCallTime) |
244 | m_log.InfoFormat( | 232 | m_log.InfoFormat( |
245 | "[WEB UTIL]: Slow ServiceOSD request {0} {1} {2} took {3}ms, {4}ms writing, {5}", | 233 | "[OSD REQUEST]: Slow request to <{0}> {1} {2} took {3}ms, {4}ms writing, {5}", |
246 | reqnum, | 234 | reqnum, |
247 | method, | 235 | method, |
248 | url, | 236 | url, |
@@ -251,14 +239,10 @@ namespace OpenSim.Framework | |||
251 | strBuffer != null | 239 | strBuffer != null |
252 | ? (strBuffer.Length > MaxRequestDiagLength ? strBuffer.Remove(MaxRequestDiagLength) : strBuffer) | 240 | ? (strBuffer.Length > MaxRequestDiagLength ? strBuffer.Remove(MaxRequestDiagLength) : strBuffer) |
253 | : ""); | 241 | : ""); |
254 | else if (DebugLevel >= 4) | ||
255 | m_log.DebugFormat( | ||
256 | "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing", | ||
257 | reqnum, tickdiff, tickdata); | ||
258 | } | 242 | } |
259 | 243 | ||
260 | m_log.DebugFormat( | 244 | m_log.DebugFormat( |
261 | "[WEB UTIL]: ServiceOSD request {0} {1} {2} FAILED: {3}", reqnum, url, method, errorMessage); | 245 | "[WEB UTIL]: <{0}> osd request for {1}, method {2} FAILED: {3}", reqnum, url, method, errorMessage); |
262 | 246 | ||
263 | return ErrorResponseMap(errorMessage); | 247 | return ErrorResponseMap(errorMessage); |
264 | } | 248 | } |
@@ -334,11 +318,7 @@ namespace OpenSim.Framework | |||
334 | { | 318 | { |
335 | int reqnum = RequestNumber++; | 319 | int reqnum = RequestNumber++; |
336 | string method = (data != null && data["RequestMethod"] != null) ? data["RequestMethod"] : "unknown"; | 320 | string method = (data != null && data["RequestMethod"] != null) ? data["RequestMethod"] : "unknown"; |
337 | 321 | // m_log.DebugFormat("[WEB UTIL]: <{0}> start form request for {1}, method {2}",reqnum,url,method); | |
338 | if (DebugLevel >= 3) | ||
339 | m_log.DebugFormat( | ||
340 | "[WEB UTIL]: HTTP OUT {0} ServiceForm {1} {2} (timeout {3})", | ||
341 | reqnum, method, url, timeout); | ||
342 | 322 | ||
343 | string errorMessage = "unknown error"; | 323 | string errorMessage = "unknown error"; |
344 | int tickstart = Util.EnvironmentTickCount(); | 324 | int tickstart = Util.EnvironmentTickCount(); |
@@ -401,7 +381,7 @@ namespace OpenSim.Framework | |||
401 | int tickdiff = Util.EnvironmentTickCountSubtract(tickstart); | 381 | int tickdiff = Util.EnvironmentTickCountSubtract(tickstart); |
402 | if (tickdiff > LongCallTime) | 382 | if (tickdiff > LongCallTime) |
403 | m_log.InfoFormat( | 383 | m_log.InfoFormat( |
404 | "[WEB UTIL]: Slow ServiceForm request {0} {1} {2} took {3}ms, {4}ms writing, {5}", | 384 | "[SERVICE FORM]: Slow request to <{0}> {1} {2} took {3}ms, {4}ms writing, {5}", |
405 | reqnum, | 385 | reqnum, |
406 | method, | 386 | method, |
407 | url, | 387 | url, |
@@ -410,13 +390,9 @@ namespace OpenSim.Framework | |||
410 | queryString != null | 390 | queryString != null |
411 | ? (queryString.Length > MaxRequestDiagLength) ? queryString.Remove(MaxRequestDiagLength) : queryString | 391 | ? (queryString.Length > MaxRequestDiagLength) ? queryString.Remove(MaxRequestDiagLength) : queryString |
412 | : ""); | 392 | : ""); |
413 | else if (DebugLevel >= 4) | ||
414 | m_log.DebugFormat( | ||
415 | "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing", | ||
416 | reqnum, tickdiff, tickdata); | ||
417 | } | 393 | } |
418 | 394 | ||
419 | m_log.WarnFormat("[WEB UTIL]: ServiceForm request {0} {1} {2} failed: {2}", reqnum, method, url, errorMessage); | 395 | m_log.WarnFormat("[SERVICE FORM]: <{0}> form request to {1} failed: {2}", reqnum, url, errorMessage); |
420 | 396 | ||
421 | return ErrorResponseMap(errorMessage); | 397 | return ErrorResponseMap(errorMessage); |
422 | } | 398 | } |
@@ -668,6 +644,7 @@ namespace OpenSim.Framework | |||
668 | /// <returns></returns> | 644 | /// <returns></returns> |
669 | public static string[] GetPreferredImageTypes(string accept) | 645 | public static string[] GetPreferredImageTypes(string accept) |
670 | { | 646 | { |
647 | |||
671 | if (accept == null || accept == string.Empty) | 648 | if (accept == null || accept == string.Empty) |
672 | return new string[0]; | 649 | return new string[0]; |
673 | 650 | ||
@@ -726,16 +703,14 @@ namespace OpenSim.Framework | |||
726 | int maxConnections) | 703 | int maxConnections) |
727 | { | 704 | { |
728 | int reqnum = WebUtil.RequestNumber++; | 705 | int reqnum = WebUtil.RequestNumber++; |
729 | 706 | // m_log.DebugFormat("[WEB UTIL]: <{0}> start osd request for {1}, method {2}",reqnum,url,method); | |
730 | if (WebUtil.DebugLevel >= 3) | ||
731 | m_log.DebugFormat( | ||
732 | "[WEB UTIL]: HTTP OUT {0} AsynchronousRequestObject {1} {2}", | ||
733 | reqnum, verb, requestUrl); | ||
734 | 707 | ||
735 | int tickstart = Util.EnvironmentTickCount(); | 708 | int tickstart = Util.EnvironmentTickCount(); |
736 | // int tickdata = 0; | 709 | // int tickdata = 0; |
737 | int tickdiff = 0; | 710 | int tickdiff = 0; |
738 | 711 | ||
712 | // m_log.DebugFormat("[ASYNC REQUEST]: Starting {0} {1}", verb, requestUrl); | ||
713 | |||
739 | Type type = typeof(TRequest); | 714 | Type type = typeof(TRequest); |
740 | 715 | ||
741 | WebRequest request = WebRequest.Create(requestUrl); | 716 | WebRequest request = WebRequest.Create(requestUrl); |
@@ -893,7 +868,7 @@ namespace OpenSim.Framework | |||
893 | } | 868 | } |
894 | 869 | ||
895 | m_log.InfoFormat( | 870 | m_log.InfoFormat( |
896 | "[ASYNC REQUEST]: Slow request {0} {1} {2} took {3}ms, {4}ms writing, {5}", | 871 | "[ASYNC REQUEST]: Slow request to <{0}> {1} {2} took {3}ms, {4}ms writing, {5}", |
897 | reqnum, | 872 | reqnum, |
898 | verb, | 873 | verb, |
899 | requestUrl, | 874 | requestUrl, |
@@ -908,12 +883,6 @@ namespace OpenSim.Framework | |||
908 | requestUrl, | 883 | requestUrl, |
909 | tickdiff); | 884 | tickdiff); |
910 | } | 885 | } |
911 | else if (WebUtil.DebugLevel >= 4) | ||
912 | { | ||
913 | m_log.DebugFormat( | ||
914 | "[WEB UTIL]: HTTP OUT {0} took {1}ms", | ||
915 | reqnum, tickdiff); | ||
916 | } | ||
917 | } | 886 | } |
918 | } | 887 | } |
919 | 888 | ||
@@ -934,11 +903,7 @@ namespace OpenSim.Framework | |||
934 | public static string MakeRequest(string verb, string requestUrl, string obj) | 903 | public static string MakeRequest(string verb, string requestUrl, string obj) |
935 | { | 904 | { |
936 | int reqnum = WebUtil.RequestNumber++; | 905 | int reqnum = WebUtil.RequestNumber++; |
937 | 906 | // m_log.DebugFormat("[WEB UTIL]: <{0}> start osd request for {1}, method {2}",reqnum,url,method); | |
938 | if (WebUtil.DebugLevel >= 3) | ||
939 | m_log.DebugFormat( | ||
940 | "[WEB UTIL]: HTTP OUT {0} SynchronousRestForms {1} {2}", | ||
941 | reqnum, verb, requestUrl); | ||
942 | 907 | ||
943 | int tickstart = Util.EnvironmentTickCount(); | 908 | int tickstart = Util.EnvironmentTickCount(); |
944 | int tickdata = 0; | 909 | int tickdata = 0; |
@@ -1025,7 +990,7 @@ namespace OpenSim.Framework | |||
1025 | int tickdiff = Util.EnvironmentTickCountSubtract(tickstart); | 990 | int tickdiff = Util.EnvironmentTickCountSubtract(tickstart); |
1026 | if (tickdiff > WebUtil.LongCallTime) | 991 | if (tickdiff > WebUtil.LongCallTime) |
1027 | m_log.InfoFormat( | 992 | m_log.InfoFormat( |
1028 | "[FORMS]: Slow request {0} {1} {2} took {3}ms, {4}ms writing, {5}", | 993 | "[FORMS]: Slow request to <{0}> {1} {2} took {3}ms {4}ms writing {5}", |
1029 | reqnum, | 994 | reqnum, |
1030 | verb, | 995 | verb, |
1031 | requestUrl, | 996 | requestUrl, |
@@ -1033,10 +998,6 @@ namespace OpenSim.Framework | |||
1033 | tickset, | 998 | tickset, |
1034 | tickdata, | 999 | tickdata, |
1035 | obj.Length > WebUtil.MaxRequestDiagLength ? obj.Remove(WebUtil.MaxRequestDiagLength) : obj); | 1000 | obj.Length > WebUtil.MaxRequestDiagLength ? obj.Remove(WebUtil.MaxRequestDiagLength) : obj); |
1036 | else if (WebUtil.DebugLevel >= 4) | ||
1037 | m_log.DebugFormat( | ||
1038 | "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing", | ||
1039 | reqnum, tickdiff, tickdata); | ||
1040 | 1001 | ||
1041 | return respstring; | 1002 | return respstring; |
1042 | } | 1003 | } |
@@ -1071,11 +1032,7 @@ namespace OpenSim.Framework | |||
1071 | public static TResponse MakeRequest<TRequest, TResponse>(string verb, string requestUrl, TRequest obj, int pTimeout, int maxConnections) | 1032 | public static TResponse MakeRequest<TRequest, TResponse>(string verb, string requestUrl, TRequest obj, int pTimeout, int maxConnections) |
1072 | { | 1033 | { |
1073 | int reqnum = WebUtil.RequestNumber++; | 1034 | int reqnum = WebUtil.RequestNumber++; |
1074 | 1035 | // m_log.DebugFormat("[WEB UTIL]: <{0}> start osd request for {1}, method {2}",reqnum,url,method); | |
1075 | if (WebUtil.DebugLevel >= 3) | ||
1076 | m_log.DebugFormat( | ||
1077 | "[WEB UTIL]: HTTP OUT {0} SynchronousRestObject {1} {2}", | ||
1078 | reqnum, verb, requestUrl); | ||
1079 | 1036 | ||
1080 | int tickstart = Util.EnvironmentTickCount(); | 1037 | int tickstart = Util.EnvironmentTickCount(); |
1081 | int tickdata = 0; | 1038 | int tickdata = 0; |
@@ -1194,7 +1151,7 @@ namespace OpenSim.Framework | |||
1194 | } | 1151 | } |
1195 | 1152 | ||
1196 | m_log.InfoFormat( | 1153 | m_log.InfoFormat( |
1197 | "[SynchronousRestObjectRequester]: Slow request {0} {1} {2} took {3}ms, {4}ms writing, {5}", | 1154 | "[SynchronousRestObjectRequester]: Slow request to <{0}> {1} {2} took {3}ms, {4}ms writing, {5}", |
1198 | reqnum, | 1155 | reqnum, |
1199 | verb, | 1156 | verb, |
1200 | requestUrl, | 1157 | requestUrl, |
@@ -1202,12 +1159,6 @@ namespace OpenSim.Framework | |||
1202 | tickdata, | 1159 | tickdata, |
1203 | originalRequest); | 1160 | originalRequest); |
1204 | } | 1161 | } |
1205 | else if (WebUtil.DebugLevel >= 4) | ||
1206 | { | ||
1207 | m_log.DebugFormat( | ||
1208 | "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing", | ||
1209 | reqnum, tickdiff, tickdata); | ||
1210 | } | ||
1211 | 1162 | ||
1212 | return deserial; | 1163 | return deserial; |
1213 | } | 1164 | } |