diff options
author | teravus | 2012-11-15 10:05:16 -0500 |
---|---|---|
committer | teravus | 2012-11-15 10:05:16 -0500 |
commit | e9153e1d1aae50024d8cd05fe14a9bce34343a0e (patch) | |
tree | bc111d34f95a26b99c7e34d9e495dc14d1802cc3 /OpenSim/Framework | |
parent | Merge master into teravuswork (diff) | |
download | opensim-SC_OLD-e9153e1d1aae50024d8cd05fe14a9bce34343a0e.zip opensim-SC_OLD-e9153e1d1aae50024d8cd05fe14a9bce34343a0e.tar.gz opensim-SC_OLD-e9153e1d1aae50024d8cd05fe14a9bce34343a0e.tar.bz2 opensim-SC_OLD-e9153e1d1aae50024d8cd05fe14a9bce34343a0e.tar.xz |
Revert "Merge master into teravuswork", it should have been avination, not master.
This reverts commit dfac269032300872c4d0dc507f4f9062d102b0f4, reversing
changes made to 619c39e5144f15aca129d6d999bcc5c34133ee64.
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 | } |