aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Framework')
-rw-r--r--OpenSim/Framework/AssetBase.cs8
-rw-r--r--OpenSim/Framework/AvatarAppearance.cs73
-rw-r--r--OpenSim/Framework/AvatarWearable.cs18
-rw-r--r--OpenSim/Framework/ChildAgentDataUpdate.cs36
-rw-r--r--OpenSim/Framework/Communications/RestClient.cs2
-rw-r--r--OpenSim/Framework/Console/RemoteConsole.cs2
-rw-r--r--OpenSim/Framework/EstateSettings.cs56
-rw-r--r--OpenSim/Framework/ExtraPhysicsData.cs50
-rw-r--r--OpenSim/Framework/IClientAPI.cs24
-rw-r--r--OpenSim/Framework/IMoneyModule.cs1
-rw-r--r--OpenSim/Framework/LandData.cs2
-rw-r--r--OpenSim/Framework/LocklessQueue.cs11
-rw-r--r--OpenSim/Framework/MinHeap.cs12
-rw-r--r--OpenSim/Framework/OSChatMessage.cs21
-rw-r--r--OpenSim/Framework/ObjectChangeData.cs80
-rw-r--r--OpenSim/Framework/ParcelMediaCommandEnum.cs2
-rw-r--r--OpenSim/Framework/PluginLoader.cs17
-rw-r--r--OpenSim/Framework/PrimitiveBaseShape.cs38
-rw-r--r--OpenSim/Framework/RegionInfo.cs15
-rw-r--r--OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs118
-rw-r--r--OpenSim/Framework/RegionSettings.cs22
-rw-r--r--OpenSim/Framework/Servers/BaseOpenSimServer.cs2
-rw-r--r--OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs32
-rw-r--r--OpenSim/Framework/Servers/HttpServer/PollServiceEventArgs.cs14
-rw-r--r--OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs243
-rw-r--r--OpenSim/Framework/Servers/HttpServer/PollServiceWorkerThread.cs16
-rw-r--r--OpenSim/Framework/Servers/VersionInfo.cs6
-rw-r--r--OpenSim/Framework/Statistics/BaseStatsCollector.cs24
-rw-r--r--OpenSim/Framework/TaskInventoryDictionary.cs189
-rw-r--r--OpenSim/Framework/TaskInventoryItem.cs2
-rw-r--r--OpenSim/Framework/Tests/MundaneFrameworkTests.cs6
-rw-r--r--OpenSim/Framework/Util.cs46
-rw-r--r--OpenSim/Framework/Watchdog.cs2
-rw-r--r--OpenSim/Framework/WebUtil.cs12
34 files changed, 1030 insertions, 172 deletions
diff --git a/OpenSim/Framework/AssetBase.cs b/OpenSim/Framework/AssetBase.cs
index d2c6c57..ff240be 100644
--- a/OpenSim/Framework/AssetBase.cs
+++ b/OpenSim/Framework/AssetBase.cs
@@ -60,6 +60,8 @@ namespace OpenSim.Framework
60 /// </summary> 60 /// </summary>
61 private AssetMetadata m_metadata; 61 private AssetMetadata m_metadata;
62 62
63 private int m_uploadAttempts;
64
63 // This is needed for .NET serialization!!! 65 // This is needed for .NET serialization!!!
64 // Do NOT "Optimize" away! 66 // Do NOT "Optimize" away!
65 public AssetBase() 67 public AssetBase()
@@ -198,6 +200,12 @@ namespace OpenSim.Framework
198 set { m_metadata.Type = value; } 200 set { m_metadata.Type = value; }
199 } 201 }
200 202
203 public int UploadAttempts
204 {
205 get { return m_uploadAttempts; }
206 set { m_uploadAttempts = value; }
207 }
208
201 /// <summary> 209 /// <summary>
202 /// Is this a region only asset, or does this exist on the asset server also 210 /// Is this a region only asset, or does this exist on the asset server also
203 /// </summary> 211 /// </summary>
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs
index 4f598b0..c5d9641 100644
--- a/OpenSim/Framework/AvatarAppearance.cs
+++ b/OpenSim/Framework/AvatarAppearance.cs
@@ -42,6 +42,8 @@ namespace OpenSim.Framework
42 { 42 {
43 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 43 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
44 44
45 // this is viewer capabilities and weared things dependent
46 // should be only used as initial default value ( V1 viewers )
45 public readonly static int VISUALPARAM_COUNT = 218; 47 public readonly static int VISUALPARAM_COUNT = 218;
46 48
47 public readonly static int TEXTURE_COUNT = 21; 49 public readonly static int TEXTURE_COUNT = 21;
@@ -240,6 +242,21 @@ namespace OpenSim.Framework
240// } 242// }
241 } 243 }
242 244
245 /// <summary>
246 /// Invalidate all of the baked textures in the appearance, useful
247 /// if you know that none are valid
248 /// </summary>
249 public virtual void ResetBakedTextures()
250 {
251 SetDefaultTexture();
252
253 //for (int i = 0; i < BAKE_INDICES.Length; i++)
254 // {
255 // int idx = BAKE_INDICES[i];
256 // m_texture.FaceTextures[idx].TextureID = UUID.Zero;
257 // }
258 }
259
243 protected virtual void SetDefaultTexture() 260 protected virtual void SetDefaultTexture()
244 { 261 {
245 m_texture = new Primitive.TextureEntry(new UUID(AppearanceManager.DEFAULT_AVATAR_TEXTURE)); 262 m_texture = new Primitive.TextureEntry(new UUID(AppearanceManager.DEFAULT_AVATAR_TEXTURE));
@@ -304,19 +321,30 @@ namespace OpenSim.Framework
304 // made. We determine if any of the visual parameters actually 321 // made. We determine if any of the visual parameters actually
305 // changed to know if the appearance should be saved later 322 // changed to know if the appearance should be saved later
306 bool changed = false; 323 bool changed = false;
307 for (int i = 0; i < AvatarAppearance.VISUALPARAM_COUNT; i++) 324
325 int newsize = visualParams.Length;
326
327 if (newsize != m_visualparams.Length)
308 { 328 {
309 if (visualParams[i] != m_visualparams[i]) 329 changed = true;
330 m_visualparams = (byte[])visualParams.Clone();
331 }
332 else
333 {
334
335 for (int i = 0; i < newsize; i++)
310 { 336 {
311// DEBUG ON 337 if (visualParams[i] != m_visualparams[i])
312// m_log.WarnFormat("[AVATARAPPEARANCE] vparams changed [{0}] {1} ==> {2}", 338 {
313// i,m_visualparams[i],visualParams[i]); 339 // DEBUG ON
314// DEBUG OFF 340 // m_log.WarnFormat("[AVATARAPPEARANCE] vparams changed [{0}] {1} ==> {2}",
315 m_visualparams[i] = visualParams[i]; 341 // i,m_visualparams[i],visualParams[i]);
316 changed = true; 342 // DEBUG OFF
343 m_visualparams[i] = visualParams[i];
344 changed = true;
345 }
317 } 346 }
318 } 347 }
319
320 // Reset the height if the visual parameters actually changed 348 // Reset the height if the visual parameters actually changed
321 if (changed) 349 if (changed)
322 SetHeight(); 350 SetHeight();
@@ -374,7 +402,8 @@ namespace OpenSim.Framework
374 } 402 }
375 403
376 s += "Visual Params: "; 404 s += "Visual Params: ";
377 for (uint j = 0; j < AvatarAppearance.VISUALPARAM_COUNT; j++) 405 // for (uint j = 0; j < AvatarAppearance.VISUALPARAM_COUNT; j++)
406 for (uint j = 0; j < m_visualparams.Length; j++)
378 s += String.Format("{0},",m_visualparams[j]); 407 s += String.Format("{0},",m_visualparams[j]);
379 s += "\n"; 408 s += "\n";
380 409
@@ -390,19 +419,18 @@ namespace OpenSim.Framework
390 /// </remarks> 419 /// </remarks>
391 public List<AvatarAttachment> GetAttachments() 420 public List<AvatarAttachment> GetAttachments()
392 { 421 {
393 List<AvatarAttachment> alist = new List<AvatarAttachment>(); 422
394 423
395 lock (m_attachments) 424 lock (m_attachments)
396 { 425 {
426 List<AvatarAttachment> alist = new List<AvatarAttachment>();
397 foreach (KeyValuePair<int, List<AvatarAttachment>> kvp in m_attachments) 427 foreach (KeyValuePair<int, List<AvatarAttachment>> kvp in m_attachments)
398 { 428 {
399 foreach (AvatarAttachment attach in kvp.Value) 429 foreach (AvatarAttachment attach in kvp.Value)
400 alist.Add(new AvatarAttachment(attach)); 430 alist.Add(new AvatarAttachment(attach));
401 } 431 }
402 } 432 return alist;
403 433 } }
404 return alist;
405 }
406 434
407 internal void AppendAttachment(AvatarAttachment attach) 435 internal void AppendAttachment(AvatarAttachment attach)
408 { 436 {
@@ -531,7 +559,6 @@ namespace OpenSim.Framework
531 return kvp.Key; 559 return kvp.Key;
532 } 560 }
533 } 561 }
534
535 return 0; 562 return 0;
536 } 563 }
537 564
@@ -598,12 +625,14 @@ namespace OpenSim.Framework
598 OSDBinary visualparams = new OSDBinary(m_visualparams); 625 OSDBinary visualparams = new OSDBinary(m_visualparams);
599 data["visualparams"] = visualparams; 626 data["visualparams"] = visualparams;
600 627
601 // Attachments 628 lock (m_attachments)
602 List<AvatarAttachment> attachments = GetAttachments(); 629 {
603 OSDArray attachs = new OSDArray(attachments.Count); 630 // Attachments
604 foreach (AvatarAttachment attach in GetAttachments()) 631 OSDArray attachs = new OSDArray(m_attachments.Count);
605 attachs.Add(attach.Pack()); 632 foreach (AvatarAttachment attach in GetAttachments())
606 data["attachments"] = attachs; 633 attachs.Add(attach.Pack());
634 data["attachments"] = attachs;
635 }
607 636
608 return data; 637 return data;
609 } 638 }
diff --git a/OpenSim/Framework/AvatarWearable.cs b/OpenSim/Framework/AvatarWearable.cs
index 8e27596..aee295a 100644
--- a/OpenSim/Framework/AvatarWearable.cs
+++ b/OpenSim/Framework/AvatarWearable.cs
@@ -62,9 +62,14 @@ namespace OpenSim.Framework
62 public static readonly int UNDERSHIRT = 10; 62 public static readonly int UNDERSHIRT = 10;
63 public static readonly int UNDERPANTS = 11; 63 public static readonly int UNDERPANTS = 11;
64 public static readonly int SKIRT = 12; 64 public static readonly int SKIRT = 12;
65
66 public static readonly int MAX_BASICWEARABLES = 13;
67
65 public static readonly int ALPHA = 13; 68 public static readonly int ALPHA = 13;
66 public static readonly int TATTOO = 14; 69 public static readonly int TATTOO = 14;
70// public static readonly int PHYSICS = 15;
67 71
72 // public static readonly int MAX_WEARABLES = 16;
68 public static readonly int MAX_WEARABLES = 15; 73 public static readonly int MAX_WEARABLES = 15;
69 74
70 public static readonly UUID DEFAULT_BODY_ITEM = new UUID("66c41e39-38f9-f75a-024e-585989bfaba9"); 75 public static readonly UUID DEFAULT_BODY_ITEM = new UUID("66c41e39-38f9-f75a-024e-585989bfaba9");
@@ -219,7 +224,7 @@ namespace OpenSim.Framework
219 { 224 {
220 get 225 get
221 { 226 {
222 AvatarWearable[] defaultWearables = new AvatarWearable[MAX_WEARABLES]; //should be 15 of these 227 AvatarWearable[] defaultWearables = new AvatarWearable[MAX_WEARABLES];
223 for (int i = 0; i < MAX_WEARABLES; i++) 228 for (int i = 0; i < MAX_WEARABLES; i++)
224 { 229 {
225 defaultWearables[i] = new AvatarWearable(); 230 defaultWearables[i] = new AvatarWearable();
@@ -242,10 +247,13 @@ namespace OpenSim.Framework
242 247
243// // Alpha 248// // Alpha
244// defaultWearables[ALPHA].Add(DEFAULT_ALPHA_ITEM, DEFAULT_ALPHA_ASSET); 249// defaultWearables[ALPHA].Add(DEFAULT_ALPHA_ITEM, DEFAULT_ALPHA_ASSET);
245 250
246// // Tattoo 251 // // Tattoo
247// defaultWearables[TATTOO].Add(DEFAULT_TATTOO_ITEM, DEFAULT_TATTOO_ASSET); 252 // defaultWearables[TATTOO].Add(DEFAULT_TATTOO_ITEM, DEFAULT_TATTOO_ASSET);
248 253
254 // // Physics
255 // defaultWearables[PHYSICS].Add(DEFAULT_TATTOO_ITEM, DEFAULT_TATTOO_ASSET);
256
249 return defaultWearables; 257 return defaultWearables;
250 } 258 }
251 } 259 }
diff --git a/OpenSim/Framework/ChildAgentDataUpdate.cs b/OpenSim/Framework/ChildAgentDataUpdate.cs
index 6d048f4..e718aa6 100644
--- a/OpenSim/Framework/ChildAgentDataUpdate.cs
+++ b/OpenSim/Framework/ChildAgentDataUpdate.cs
@@ -229,12 +229,14 @@ namespace OpenSim.Framework
229 229
230 public class ControllerData 230 public class ControllerData
231 { 231 {
232 public UUID ObjectID;
232 public UUID ItemID; 233 public UUID ItemID;
233 public uint IgnoreControls; 234 public uint IgnoreControls;
234 public uint EventControls; 235 public uint EventControls;
235 236
236 public ControllerData(UUID item, uint ignore, uint ev) 237 public ControllerData(UUID obj, UUID item, uint ignore, uint ev)
237 { 238 {
239 ObjectID = obj;
238 ItemID = item; 240 ItemID = item;
239 IgnoreControls = ignore; 241 IgnoreControls = ignore;
240 EventControls = ev; 242 EventControls = ev;
@@ -248,6 +250,7 @@ namespace OpenSim.Framework
248 public OSDMap PackUpdateMessage() 250 public OSDMap PackUpdateMessage()
249 { 251 {
250 OSDMap controldata = new OSDMap(); 252 OSDMap controldata = new OSDMap();
253 controldata["object"] = OSD.FromUUID(ObjectID);
251 controldata["item"] = OSD.FromUUID(ItemID); 254 controldata["item"] = OSD.FromUUID(ItemID);
252 controldata["ignore"] = OSD.FromInteger(IgnoreControls); 255 controldata["ignore"] = OSD.FromInteger(IgnoreControls);
253 controldata["event"] = OSD.FromInteger(EventControls); 256 controldata["event"] = OSD.FromInteger(EventControls);
@@ -258,6 +261,8 @@ namespace OpenSim.Framework
258 261
259 public void UnpackUpdateMessage(OSDMap args) 262 public void UnpackUpdateMessage(OSDMap args)
260 { 263 {
264 if (args["object"] != null)
265 ObjectID = args["object"].AsUUID();
261 if (args["item"] != null) 266 if (args["item"] != null)
262 ItemID = args["item"].AsUUID(); 267 ItemID = args["item"].AsUUID();
263 if (args["ignore"] != null) 268 if (args["ignore"] != null)
@@ -306,8 +311,11 @@ namespace OpenSim.Framework
306 311
307 public AgentGroupData[] Groups; 312 public AgentGroupData[] Groups;
308 public Animation[] Anims; 313 public Animation[] Anims;
314 public Animation DefaultAnim = null;
309 315
310 public UUID GranterID; 316 public UUID GranterID;
317 public UUID ParentPart;
318 public Vector3 SitOffset;
311 319
312 // Appearance 320 // Appearance
313 public AvatarAppearance Appearance; 321 public AvatarAppearance Appearance;
@@ -390,6 +398,11 @@ namespace OpenSim.Framework
390 args["animations"] = anims; 398 args["animations"] = anims;
391 } 399 }
392 400
401 if (DefaultAnim != null)
402 {
403 args["default_animation"] = DefaultAnim.PackUpdateMessage();
404 }
405
393 if (Appearance != null) 406 if (Appearance != null)
394 args["packed_appearance"] = Appearance.Pack(); 407 args["packed_appearance"] = Appearance.Pack();
395 408
@@ -468,6 +481,10 @@ namespace OpenSim.Framework
468 } 481 }
469 args["attach_objects"] = attObjs; 482 args["attach_objects"] = attObjs;
470 } 483 }
484
485 args["parent_part"] = OSD.FromUUID(ParentPart);
486 args["sit_offset"] = OSD.FromString(SitOffset.ToString());
487
471 return args; 488 return args;
472 } 489 }
473 490
@@ -583,6 +600,18 @@ namespace OpenSim.Framework
583 } 600 }
584 } 601 }
585 602
603 if (args["default_animation"] != null)
604 {
605 try
606 {
607 DefaultAnim = new Animation((OSDMap)args["default_animation"]);
608 }
609 catch
610 {
611 DefaultAnim = null;
612 }
613 }
614
586 //if ((args["agent_textures"] != null) && (args["agent_textures"]).Type == OSDType.Array) 615 //if ((args["agent_textures"] != null) && (args["agent_textures"]).Type == OSDType.Array)
587 //{ 616 //{
588 // OSDArray textures = (OSDArray)(args["agent_textures"]); 617 // OSDArray textures = (OSDArray)(args["agent_textures"]);
@@ -675,6 +704,11 @@ namespace OpenSim.Framework
675 } 704 }
676 } 705 }
677 } 706 }
707
708 if (args["parent_part"] != null)
709 ParentPart = args["parent_part"].AsUUID();
710 if (args["sit_offset"] != null)
711 Vector3.TryParse(args["sit_offset"].AsString(), out SitOffset);
678 } 712 }
679 713
680 public AgentData() 714 public AgentData()
diff --git a/OpenSim/Framework/Communications/RestClient.cs b/OpenSim/Framework/Communications/RestClient.cs
index 97b3b60..42c0b18 100644
--- a/OpenSim/Framework/Communications/RestClient.cs
+++ b/OpenSim/Framework/Communications/RestClient.cs
@@ -363,7 +363,7 @@ namespace OpenSim.Framework.Communications
363 _request = (HttpWebRequest) WebRequest.Create(buildUri()); 363 _request = (HttpWebRequest) WebRequest.Create(buildUri());
364 _request.KeepAlive = false; 364 _request.KeepAlive = false;
365 _request.ContentType = "application/xml"; 365 _request.ContentType = "application/xml";
366 _request.Timeout = 900000; 366 _request.Timeout = 30000;
367 _request.Method = RequestMethod; 367 _request.Method = RequestMethod;
368 _asyncException = null; 368 _asyncException = null;
369 _request.ContentLength = src.Length; 369 _request.ContentLength = src.Length;
diff --git a/OpenSim/Framework/Console/RemoteConsole.cs b/OpenSim/Framework/Console/RemoteConsole.cs
index eabb62d..e04ca1e 100644
--- a/OpenSim/Framework/Console/RemoteConsole.cs
+++ b/OpenSim/Framework/Console/RemoteConsole.cs
@@ -233,7 +233,7 @@ namespace OpenSim.Framework.Console
233 string uri = "/ReadResponses/" + sessionID.ToString() + "/"; 233 string uri = "/ReadResponses/" + sessionID.ToString() + "/";
234 234
235 m_Server.AddPollServiceHTTPHandler( 235 m_Server.AddPollServiceHTTPHandler(
236 uri, new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents, sessionID)); 236 uri, new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents, sessionID,25000)); // 25 secs timeout
237 237
238 XmlDocument xmldoc = new XmlDocument(); 238 XmlDocument xmldoc = new XmlDocument();
239 XmlNode xmlnode = xmldoc.CreateNode(XmlNodeType.XmlDeclaration, 239 XmlNode xmlnode = xmldoc.CreateNode(XmlNodeType.XmlDeclaration,
diff --git a/OpenSim/Framework/EstateSettings.cs b/OpenSim/Framework/EstateSettings.cs
index a92abbf..9020761 100644
--- a/OpenSim/Framework/EstateSettings.cs
+++ b/OpenSim/Framework/EstateSettings.cs
@@ -58,6 +58,30 @@ namespace OpenSim.Framework
58 set { m_EstateName = value; } 58 set { m_EstateName = value; }
59 } 59 }
60 60
61 private bool m_AllowLandmark = true;
62
63 public bool AllowLandmark
64 {
65 get { return m_AllowLandmark; }
66 set { m_AllowLandmark = value; }
67 }
68
69 private bool m_AllowParcelChanges = true;
70
71 public bool AllowParcelChanges
72 {
73 get { return m_AllowParcelChanges; }
74 set { m_AllowParcelChanges = value; }
75 }
76
77 private bool m_AllowSetHome = true;
78
79 public bool AllowSetHome
80 {
81 get { return m_AllowSetHome; }
82 set { m_AllowSetHome = value; }
83 }
84
61 private uint m_ParentEstateID = 1; 85 private uint m_ParentEstateID = 1;
62 86
63 public uint ParentEstateID 87 public uint ParentEstateID
@@ -338,11 +362,30 @@ namespace OpenSim.Framework
338 return false; 362 return false;
339 } 363 }
340 364
341 public bool IsBanned(UUID avatarID) 365 public bool IsBanned(UUID avatarID, int userFlags)
342 { 366 {
343 foreach (EstateBan ban in l_EstateBans) 367 foreach (EstateBan ban in l_EstateBans)
344 if (ban.BannedUserID == avatarID) 368 if (ban.BannedUserID == avatarID)
345 return true; 369 return true;
370
371 if (!IsEstateManagerOrOwner(avatarID) && !HasAccess(avatarID))
372 {
373 if (DenyMinors)
374 {
375 if ((userFlags & 32) == 0)
376 {
377 return true;
378 }
379 }
380 if (DenyAnonymous)
381 {
382 if ((userFlags & 4) == 0)
383 {
384 return true;
385 }
386 }
387 }
388
346 return false; 389 return false;
347 } 390 }
348 391
@@ -350,7 +393,7 @@ namespace OpenSim.Framework
350 { 393 {
351 if (ban == null) 394 if (ban == null)
352 return; 395 return;
353 if (!IsBanned(ban.BannedUserID)) 396 if (!IsBanned(ban.BannedUserID, 32)) //Ignore age-based bans
354 l_EstateBans.Add(ban); 397 l_EstateBans.Add(ban);
355 } 398 }
356 399
@@ -374,6 +417,15 @@ namespace OpenSim.Framework
374 return l_EstateAccess.Contains(user); 417 return l_EstateAccess.Contains(user);
375 } 418 }
376 419
420 public void SetFromFlags(ulong regionFlags)
421 {
422 ResetHomeOnTeleport = ((regionFlags & (ulong)RegionFlags.ResetHomeOnTeleport) == (ulong)RegionFlags.ResetHomeOnTeleport);
423 BlockDwell = ((regionFlags & (ulong)RegionFlags.BlockDwell) == (ulong)RegionFlags.BlockDwell);
424 AllowLandmark = ((regionFlags & (ulong)RegionFlags.AllowLandmark) == (ulong)RegionFlags.AllowLandmark);
425 AllowParcelChanges = ((regionFlags & (ulong)RegionFlags.AllowParcelChanges) == (ulong)RegionFlags.AllowParcelChanges);
426 AllowSetHome = ((regionFlags & (ulong)RegionFlags.AllowSetHome) == (ulong)RegionFlags.AllowSetHome);
427 }
428
377 public bool GroupAccess(UUID groupID) 429 public bool GroupAccess(UUID groupID)
378 { 430 {
379 return l_EstateGroups.Contains(groupID); 431 return l_EstateGroups.Contains(groupID);
diff --git a/OpenSim/Framework/ExtraPhysicsData.cs b/OpenSim/Framework/ExtraPhysicsData.cs
new file mode 100644
index 0000000..9e7334f
--- /dev/null
+++ b/OpenSim/Framework/ExtraPhysicsData.cs
@@ -0,0 +1,50 @@
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
28using OpenMetaverse;
29
30namespace OpenSim.Framework
31{
32 public enum PhysShapeType : byte
33 {
34 prim = 0,
35 none = 1,
36 convex = 2,
37
38 invalid = 255 // use to mark invalid data in ExtraPhysicsData
39 }
40
41 public struct ExtraPhysicsData
42 {
43 public float Density;
44 public float GravitationModifier;
45 public float Friction;
46 public float Bounce;
47 public PhysShapeType PhysShapeType;
48
49 }
50}
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs
index d5952c4..58a65de 100644
--- a/OpenSim/Framework/IClientAPI.cs
+++ b/OpenSim/Framework/IClientAPI.cs
@@ -70,6 +70,8 @@ namespace OpenSim.Framework
70 70
71 public delegate void StopAnim(IClientAPI remoteClient, UUID animID); 71 public delegate void StopAnim(IClientAPI remoteClient, UUID animID);
72 72
73 public delegate void ChangeAnim(UUID animID, bool addOrRemove, bool sendPack);
74
73 public delegate void LinkObjects(IClientAPI remoteClient, uint parent, List<uint> children); 75 public delegate void LinkObjects(IClientAPI remoteClient, uint parent, List<uint> children);
74 76
75 public delegate void DelinkObjects(List<uint> primIds, IClientAPI client); 77 public delegate void DelinkObjects(List<uint> primIds, IClientAPI client);
@@ -124,12 +126,14 @@ namespace OpenSim.Framework
124 public delegate void ObjectDrop(uint localID, IClientAPI remoteClient); 126 public delegate void ObjectDrop(uint localID, IClientAPI remoteClient);
125 127
126 public delegate void UpdatePrimFlags( 128 public delegate void UpdatePrimFlags(
127 uint localID, bool UsePhysics, bool IsTemporary, bool IsPhantom, IClientAPI remoteClient); 129 uint localID, bool UsePhysics, bool IsTemporary, bool IsPhantom,ExtraPhysicsData PhysData, IClientAPI remoteClient);
128 130
129 public delegate void UpdatePrimTexture(uint localID, byte[] texture, IClientAPI remoteClient); 131 public delegate void UpdatePrimTexture(uint localID, byte[] texture, IClientAPI remoteClient);
130 132
131 public delegate void UpdateVector(uint localID, Vector3 pos, IClientAPI remoteClient); 133 public delegate void UpdateVector(uint localID, Vector3 pos, IClientAPI remoteClient);
132 134
135 public delegate void ClientChangeObject(uint localID, object data ,IClientAPI remoteClient);
136
133 public delegate void UpdatePrimRotation(uint localID, Quaternion rot, IClientAPI remoteClient); 137 public delegate void UpdatePrimRotation(uint localID, Quaternion rot, IClientAPI remoteClient);
134 138
135 public delegate void UpdatePrimSingleRotation(uint localID, Quaternion rot, IClientAPI remoteClient); 139 public delegate void UpdatePrimSingleRotation(uint localID, Quaternion rot, IClientAPI remoteClient);
@@ -266,6 +270,9 @@ namespace OpenSim.Framework
266 public delegate void MoveInventoryItem( 270 public delegate void MoveInventoryItem(
267 IClientAPI remoteClient, List<InventoryItemBase> items); 271 IClientAPI remoteClient, List<InventoryItemBase> items);
268 272
273 public delegate void MoveItemsAndLeaveCopy(
274 IClientAPI remoteClient, List<InventoryItemBase> items, UUID destFolder);
275
269 public delegate void RemoveInventoryItem( 276 public delegate void RemoveInventoryItem(
270 IClientAPI remoteClient, List<UUID> itemIDs); 277 IClientAPI remoteClient, List<UUID> itemIDs);
271 278
@@ -441,6 +448,7 @@ namespace OpenSim.Framework
441 public delegate void ClassifiedInfoRequest(UUID classifiedID, IClientAPI client); 448 public delegate void ClassifiedInfoRequest(UUID classifiedID, IClientAPI client);
442 public delegate void ClassifiedInfoUpdate(UUID classifiedID, uint category, string name, string description, UUID parcelID, uint parentEstate, UUID snapshotID, Vector3 globalPos, byte classifiedFlags, int price, IClientAPI client); 449 public delegate void ClassifiedInfoUpdate(UUID classifiedID, uint category, string name, string description, UUID parcelID, uint parentEstate, UUID snapshotID, Vector3 globalPos, byte classifiedFlags, int price, IClientAPI client);
443 public delegate void ClassifiedDelete(UUID classifiedID, IClientAPI client); 450 public delegate void ClassifiedDelete(UUID classifiedID, IClientAPI client);
451 public delegate void ClassifiedGodDelete(UUID classifiedID, UUID queryID, IClientAPI client);
444 452
445 public delegate void EventNotificationAddRequest(uint EventID, IClientAPI client); 453 public delegate void EventNotificationAddRequest(uint EventID, IClientAPI client);
446 public delegate void EventNotificationRemoveRequest(uint EventID, IClientAPI client); 454 public delegate void EventNotificationRemoveRequest(uint EventID, IClientAPI client);
@@ -463,9 +471,9 @@ namespace OpenSim.Framework
463 471
464 public delegate void AgentFOV(IClientAPI client, float verticalAngle); 472 public delegate void AgentFOV(IClientAPI client, float verticalAngle);
465 473
466 public delegate void MuteListEntryUpdate(IClientAPI client, UUID MuteID, string Name, int Flags,UUID AgentID); 474 public delegate void MuteListEntryUpdate(IClientAPI client, UUID MuteID, string Name, int type, uint flags);
467 475
468 public delegate void MuteListEntryRemove(IClientAPI client, UUID MuteID, string Name, UUID AgentID); 476 public delegate void MuteListEntryRemove(IClientAPI client, UUID MuteID, string Name);
469 477
470 public delegate void AvatarInterestReply(IClientAPI client,UUID target, uint wantmask, string wanttext, uint skillsmask, string skillstext, string languages); 478 public delegate void AvatarInterestReply(IClientAPI client,UUID target, uint wantmask, string wanttext, uint skillsmask, string skillstext, string languages);
471 479
@@ -503,6 +511,7 @@ namespace OpenSim.Framework
503 public delegate void SimWideDeletesDelegate(IClientAPI client,UUID agentID, int flags, UUID targetID); 511 public delegate void SimWideDeletesDelegate(IClientAPI client,UUID agentID, int flags, UUID targetID);
504 512
505 public delegate void SendPostcard(IClientAPI client); 513 public delegate void SendPostcard(IClientAPI client);
514 public delegate void ChangeInventoryItemFlags(IClientAPI client, UUID itemID, uint flags);
506 515
507 #endregion 516 #endregion
508 517
@@ -791,6 +800,7 @@ namespace OpenSim.Framework
791 event ObjectDrop OnObjectDrop; 800 event ObjectDrop OnObjectDrop;
792 event StartAnim OnStartAnim; 801 event StartAnim OnStartAnim;
793 event StopAnim OnStopAnim; 802 event StopAnim OnStopAnim;
803 event ChangeAnim OnChangeAnim;
794 event LinkObjects OnLinkObjects; 804 event LinkObjects OnLinkObjects;
795 event DelinkObjects OnDelinkObjects; 805 event DelinkObjects OnDelinkObjects;
796 event RequestMapBlocks OnRequestMapBlocks; 806 event RequestMapBlocks OnRequestMapBlocks;
@@ -840,6 +850,7 @@ namespace OpenSim.Framework
840 event RequestObjectPropertiesFamily OnRequestObjectPropertiesFamily; 850 event RequestObjectPropertiesFamily OnRequestObjectPropertiesFamily;
841 event UpdatePrimFlags OnUpdatePrimFlags; 851 event UpdatePrimFlags OnUpdatePrimFlags;
842 event UpdatePrimTexture OnUpdatePrimTexture; 852 event UpdatePrimTexture OnUpdatePrimTexture;
853 event ClientChangeObject onClientChangeObject;
843 event UpdateVector OnUpdatePrimGroupPosition; 854 event UpdateVector OnUpdatePrimGroupPosition;
844 event UpdateVector OnUpdatePrimSinglePosition; 855 event UpdateVector OnUpdatePrimSinglePosition;
845 event UpdatePrimRotation OnUpdatePrimGroupRotation; 856 event UpdatePrimRotation OnUpdatePrimGroupRotation;
@@ -864,6 +875,7 @@ namespace OpenSim.Framework
864 event RequestTaskInventory OnRequestTaskInventory; 875 event RequestTaskInventory OnRequestTaskInventory;
865 event UpdateInventoryItem OnUpdateInventoryItem; 876 event UpdateInventoryItem OnUpdateInventoryItem;
866 event CopyInventoryItem OnCopyInventoryItem; 877 event CopyInventoryItem OnCopyInventoryItem;
878 event MoveItemsAndLeaveCopy OnMoveItemsAndLeaveCopy;
867 event MoveInventoryItem OnMoveInventoryItem; 879 event MoveInventoryItem OnMoveInventoryItem;
868 event RemoveInventoryFolder OnRemoveInventoryFolder; 880 event RemoveInventoryFolder OnRemoveInventoryFolder;
869 event RemoveInventoryItem OnRemoveInventoryItem; 881 event RemoveInventoryItem OnRemoveInventoryItem;
@@ -982,7 +994,7 @@ namespace OpenSim.Framework
982 event ClassifiedInfoRequest OnClassifiedInfoRequest; 994 event ClassifiedInfoRequest OnClassifiedInfoRequest;
983 event ClassifiedInfoUpdate OnClassifiedInfoUpdate; 995 event ClassifiedInfoUpdate OnClassifiedInfoUpdate;
984 event ClassifiedDelete OnClassifiedDelete; 996 event ClassifiedDelete OnClassifiedDelete;
985 event ClassifiedDelete OnClassifiedGodDelete; 997 event ClassifiedGodDelete OnClassifiedGodDelete;
986 998
987 event EventNotificationAddRequest OnEventNotificationAddRequest; 999 event EventNotificationAddRequest OnEventNotificationAddRequest;
988 event EventNotificationRemoveRequest OnEventNotificationRemoveRequest; 1000 event EventNotificationRemoveRequest OnEventNotificationRemoveRequest;
@@ -1021,6 +1033,7 @@ namespace OpenSim.Framework
1021 event GroupVoteHistoryRequest OnGroupVoteHistoryRequest; 1033 event GroupVoteHistoryRequest OnGroupVoteHistoryRequest;
1022 event SimWideDeletesDelegate OnSimWideDeletes; 1034 event SimWideDeletesDelegate OnSimWideDeletes;
1023 event SendPostcard OnSendPostcard; 1035 event SendPostcard OnSendPostcard;
1036 event ChangeInventoryItemFlags OnChangeInventoryItemFlags;
1024 event MuteListEntryUpdate OnUpdateMuteListEntry; 1037 event MuteListEntryUpdate OnUpdateMuteListEntry;
1025 event MuteListEntryRemove OnRemoveMuteListEntry; 1038 event MuteListEntryRemove OnRemoveMuteListEntry;
1026 event GodlikeMessage onGodlikeMessage; 1039 event GodlikeMessage onGodlikeMessage;
@@ -1034,6 +1047,7 @@ namespace OpenSim.Framework
1034 void InPacket(object NewPack); 1047 void InPacket(object NewPack);
1035 void ProcessInPacket(Packet NewPack); 1048 void ProcessInPacket(Packet NewPack);
1036 void Close(); 1049 void Close();
1050 void Close(bool sendStop);
1037 void Kick(string message); 1051 void Kick(string message);
1038 1052
1039 /// <summary> 1053 /// <summary>
@@ -1315,6 +1329,8 @@ namespace OpenSim.Framework
1315 1329
1316 void SendObjectPropertiesReply(ISceneEntity Entity); 1330 void SendObjectPropertiesReply(ISceneEntity Entity);
1317 1331
1332 void SendPartPhysicsProprieties(ISceneEntity Entity);
1333
1318 void SendAgentOffline(UUID[] agentIDs); 1334 void SendAgentOffline(UUID[] agentIDs);
1319 1335
1320 void SendAgentOnline(UUID[] agentIDs); 1336 void SendAgentOnline(UUID[] agentIDs);
diff --git a/OpenSim/Framework/IMoneyModule.cs b/OpenSim/Framework/IMoneyModule.cs
index 1e09728..71de93a 100644
--- a/OpenSim/Framework/IMoneyModule.cs
+++ b/OpenSim/Framework/IMoneyModule.cs
@@ -40,6 +40,7 @@ namespace OpenSim.Framework
40 bool AmountCovered(UUID agentID, int amount); 40 bool AmountCovered(UUID agentID, int amount);
41 void ApplyCharge(UUID agentID, int amount, string text); 41 void ApplyCharge(UUID agentID, int amount, string text);
42 void ApplyUploadCharge(UUID agentID, int amount, string text); 42 void ApplyUploadCharge(UUID agentID, int amount, string text);
43 void MoveMoney(UUID fromUser, UUID toUser, int amount, string text);
43 44
44 int UploadCharge { get; } 45 int UploadCharge { get; }
45 int GroupCreationCharge { get; } 46 int GroupCreationCharge { get; }
diff --git a/OpenSim/Framework/LandData.cs b/OpenSim/Framework/LandData.cs
index bf2ecf2..dcaa46d 100644
--- a/OpenSim/Framework/LandData.cs
+++ b/OpenSim/Framework/LandData.cs
@@ -67,7 +67,7 @@ namespace OpenSim.Framework
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 | (uint) ParcelFlags.AllowTerraform | 70 (uint) ParcelFlags.AllowDeedToGroup |
71 (uint) ParcelFlags.CreateObjects | (uint) ParcelFlags.AllowOtherScripts | 71 (uint) ParcelFlags.CreateObjects | (uint) ParcelFlags.AllowOtherScripts |
72 (uint) ParcelFlags.SoundLocal | (uint) ParcelFlags.AllowVoiceChat; 72 (uint) ParcelFlags.SoundLocal | (uint) ParcelFlags.AllowVoiceChat;
73 73
diff --git a/OpenSim/Framework/LocklessQueue.cs b/OpenSim/Framework/LocklessQueue.cs
index dd3d201..84f887c 100644
--- a/OpenSim/Framework/LocklessQueue.cs
+++ b/OpenSim/Framework/LocklessQueue.cs
@@ -99,8 +99,13 @@ namespace OpenSim.Framework
99 } 99 }
100 else 100 else
101 { 101 {
102 item = oldHeadNext.Item; 102 item = oldHeadNext.Item;
103 haveAdvancedHead = CAS(ref head, oldHead, oldHeadNext); 103 haveAdvancedHead = CAS(ref head, oldHead, oldHeadNext);
104 if (haveAdvancedHead)
105 {
106 oldHeadNext.Item = default(T);
107 oldHead.Next = null;
108 }
104 } 109 }
105 } 110 }
106 } 111 }
@@ -111,6 +116,10 @@ namespace OpenSim.Framework
111 116
112 public void Clear() 117 public void Clear()
113 { 118 {
119 // ugly
120 T item;
121 while(count > 0)
122 Dequeue(out item);
114 Init(); 123 Init();
115 } 124 }
116 125
diff --git a/OpenSim/Framework/MinHeap.cs b/OpenSim/Framework/MinHeap.cs
index 33d0364..99ac25d 100644
--- a/OpenSim/Framework/MinHeap.cs
+++ b/OpenSim/Framework/MinHeap.cs
@@ -63,12 +63,15 @@ namespace OpenSim.Framework
63 63
64 internal void Clear() 64 internal void Clear()
65 { 65 {
66 this.value = default(T);
67 if (this.handle != null) 66 if (this.handle != null)
68 {
69 this.handle.Clear(); 67 this.handle.Clear();
70 this.handle = null; 68 ClearRef();
71 } 69 }
70
71 internal void ClearRef()
72 {
73 this.value = default(T);
74 this.handle = null;
72 } 75 }
73 } 76 }
74 77
@@ -285,6 +288,7 @@ namespace OpenSim.Framework
285 if (--this.size > 0 && index != this.size) 288 if (--this.size > 0 && index != this.size)
286 { 289 {
287 Set(this.items[this.size], index); 290 Set(this.items[this.size], index);
291 this.items[this.size].ClearRef();
288 if (!BubbleUp(index)) 292 if (!BubbleUp(index))
289 BubbleDown(index); 293 BubbleDown(index);
290 } 294 }
diff --git a/OpenSim/Framework/OSChatMessage.cs b/OpenSim/Framework/OSChatMessage.cs
index 455756d..7450be2 100644
--- a/OpenSim/Framework/OSChatMessage.cs
+++ b/OpenSim/Framework/OSChatMessage.cs
@@ -51,12 +51,11 @@ namespace OpenSim.Framework
51 protected object m_senderObject; 51 protected object m_senderObject;
52 protected ChatTypeEnum m_type; 52 protected ChatTypeEnum m_type;
53 protected UUID m_fromID; 53 protected UUID m_fromID;
54 protected UUID m_toID; 54 protected UUID m_destination = UUID.Zero;
55 55
56 public OSChatMessage() 56 public OSChatMessage()
57 { 57 {
58 m_position = new Vector3(); 58 m_position = new Vector3();
59 m_toID = UUID.Zero;
60 } 59 }
61 60
62 /// <summary> 61 /// <summary>
@@ -104,15 +103,6 @@ namespace OpenSim.Framework
104 set { m_from = value; } 103 set { m_from = value; }
105 } 104 }
106 105
107 /// <summary>
108 /// The name of the sender (needed for scripts)
109 /// </summary>
110 public string To
111 {
112 get { return m_from; }
113 set { m_from = value; }
114 }
115
116 #region IEventArgs Members 106 #region IEventArgs Members
117 107
118 /// TODO: Sender and SenderObject should just be Sender and of 108 /// TODO: Sender and SenderObject should just be Sender and of
@@ -142,13 +132,10 @@ namespace OpenSim.Framework
142 set { m_fromID = value; } 132 set { m_fromID = value; }
143 } 133 }
144 134
145 /// <summary> 135 public UUID Destination
146 /// The single recipient or all if not set.
147 /// </summary>
148 public UUID TargetUUID
149 { 136 {
150 get { return m_toID; } 137 get { return m_destination; }
151 set { m_toID = value; } 138 set { m_destination = value; }
152 } 139 }
153 140
154 /// <summary> 141 /// <summary>
diff --git a/OpenSim/Framework/ObjectChangeData.cs b/OpenSim/Framework/ObjectChangeData.cs
new file mode 100644
index 0000000..8d56291
--- /dev/null
+++ b/OpenSim/Framework/ObjectChangeData.cs
@@ -0,0 +1,80 @@
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
28using OpenMetaverse;
29
30namespace OpenSim.Framework
31{
32 public enum ObjectChangeType : uint
33 {
34 // bits definitions
35 Position = 0x01,
36 Rotation = 0x02,
37 Scale = 0x04,
38 Group = 0x08,
39 UniformScale = 0x10,
40
41 // macros from above
42 // single prim
43 primP = 0x01,
44 primR = 0x02,
45 primPR = 0x03,
46 primS = 0x04,
47 primPS = 0x05,
48 primRS = 0x06,
49 primPSR = 0x07,
50
51 primUS = 0x14,
52 primPUS = 0x15,
53 primRUS = 0x16,
54 primPUSR = 0x17,
55
56 // group
57 groupP = 0x09,
58 groupR = 0x0A,
59 groupPR = 0x0B,
60 groupS = 0x0C,
61 groupPS = 0x0D,
62 groupRS = 0x0E,
63 groupPSR = 0x0F,
64
65 groupUS = 0x1C,
66 groupPUS = 0x1D,
67 groupRUS = 0x1E,
68 groupPUSR = 0x1F,
69
70 PRSmask = 0x07
71 }
72
73 public struct ObjectChangeData
74 {
75 public Quaternion rotation;
76 public Vector3 position;
77 public Vector3 scale;
78 public ObjectChangeType change;
79 }
80}
diff --git a/OpenSim/Framework/ParcelMediaCommandEnum.cs b/OpenSim/Framework/ParcelMediaCommandEnum.cs
index 93c41ec..e714382 100644
--- a/OpenSim/Framework/ParcelMediaCommandEnum.cs
+++ b/OpenSim/Framework/ParcelMediaCommandEnum.cs
@@ -27,7 +27,7 @@
27 27
28namespace OpenSim.Framework 28namespace OpenSim.Framework
29{ 29{
30 public enum ParcelMediaCommandEnum 30 public enum ParcelMediaCommandEnum : int
31 { 31 {
32 Stop = 0, 32 Stop = 0,
33 Pause = 1, 33 Pause = 1,
diff --git a/OpenSim/Framework/PluginLoader.cs b/OpenSim/Framework/PluginLoader.cs
index 819cb7b..cc80943 100644
--- a/OpenSim/Framework/PluginLoader.cs
+++ b/OpenSim/Framework/PluginLoader.cs
@@ -244,13 +244,22 @@ namespace OpenSim.Framework
244 // The Mono addin manager (in Mono.Addins.dll version 0.2.0.0) 244 // The Mono addin manager (in Mono.Addins.dll version 0.2.0.0)
245 // occasionally seems to corrupt its addin cache 245 // occasionally seems to corrupt its addin cache
246 // Hence, as a temporary solution we'll remove it before each startup 246 // Hence, as a temporary solution we'll remove it before each startup
247
248 string customDir = Environment.GetEnvironmentVariable ("MONO_ADDINS_REGISTRY");
249 string v0 = "addin-db-000";
250 string v1 = "addin-db-001";
251 if (customDir != null && customDir != String.Empty)
252 {
253 v0 = Path.Combine(customDir, v0);
254 v1 = Path.Combine(customDir, v1);
255 }
247 try 256 try
248 { 257 {
249 if (Directory.Exists("addin-db-000")) 258 if (Directory.Exists(v0))
250 Directory.Delete("addin-db-000", true); 259 Directory.Delete(v0, true);
251 260
252 if (Directory.Exists("addin-db-001")) 261 if (Directory.Exists(v1))
253 Directory.Delete("addin-db-001", true); 262 Directory.Delete(v1, true);
254 } 263 }
255 catch (IOException) 264 catch (IOException)
256 { 265 {
diff --git a/OpenSim/Framework/PrimitiveBaseShape.cs b/OpenSim/Framework/PrimitiveBaseShape.cs
index 76dcfca..fcc9873 100644
--- a/OpenSim/Framework/PrimitiveBaseShape.cs
+++ b/OpenSim/Framework/PrimitiveBaseShape.cs
@@ -724,7 +724,12 @@ namespace OpenSim.Framework
724 return _lightColorR; 724 return _lightColorR;
725 } 725 }
726 set { 726 set {
727 _lightColorR = value; 727 if (value < 0)
728 _lightColorR = 0;
729 else if (value > 1.0f)
730 _lightColorR = 1.0f;
731 else
732 _lightColorR = value;
728 } 733 }
729 } 734 }
730 735
@@ -733,7 +738,12 @@ namespace OpenSim.Framework
733 return _lightColorG; 738 return _lightColorG;
734 } 739 }
735 set { 740 set {
736 _lightColorG = value; 741 if (value < 0)
742 _lightColorG = 0;
743 else if (value > 1.0f)
744 _lightColorG = 1.0f;
745 else
746 _lightColorG = value;
737 } 747 }
738 } 748 }
739 749
@@ -742,7 +752,12 @@ namespace OpenSim.Framework
742 return _lightColorB; 752 return _lightColorB;
743 } 753 }
744 set { 754 set {
745 _lightColorB = value; 755 if (value < 0)
756 _lightColorB = 0;
757 else if (value > 1.0f)
758 _lightColorB = 1.0f;
759 else
760 _lightColorB = value;
746 } 761 }
747 } 762 }
748 763
@@ -751,7 +766,12 @@ namespace OpenSim.Framework
751 return _lightColorA; 766 return _lightColorA;
752 } 767 }
753 set { 768 set {
754 _lightColorA = value; 769 if (value < 0)
770 _lightColorA = 0;
771 else if (value > 1.0f)
772 _lightColorA = 1.0f;
773 else
774 _lightColorA = value;
755 } 775 }
756 } 776 }
757 777
@@ -865,6 +885,11 @@ namespace OpenSim.Framework
865 885
866 public ulong GetMeshKey(Vector3 size, float lod) 886 public ulong GetMeshKey(Vector3 size, float lod)
867 { 887 {
888 return GetMeshKey(size, lod, false);
889 }
890
891 public ulong GetMeshKey(Vector3 size, float lod, bool convex)
892 {
868 ulong hash = 5381; 893 ulong hash = 5381;
869 894
870 hash = djb2(hash, this.PathCurve); 895 hash = djb2(hash, this.PathCurve);
@@ -910,6 +935,9 @@ namespace OpenSim.Framework
910 hash = djb2(hash, scaleBytes[i]); 935 hash = djb2(hash, scaleBytes[i]);
911 } 936 }
912 937
938 if(convex)
939 hash = djb2(hash, 0xa5);
940
913 return hash; 941 return hash;
914 } 942 }
915 943
@@ -1414,7 +1442,7 @@ namespace OpenSim.Framework
1414 prim.Textures = this.Textures; 1442 prim.Textures = this.Textures;
1415 1443
1416 prim.Properties = new Primitive.ObjectProperties(); 1444 prim.Properties = new Primitive.ObjectProperties();
1417 prim.Properties.Name = "Primitive"; 1445 prim.Properties.Name = "Object";
1418 prim.Properties.Description = ""; 1446 prim.Properties.Description = "";
1419 prim.Properties.CreatorID = UUID.Zero; 1447 prim.Properties.CreatorID = UUID.Zero;
1420 prim.Properties.GroupID = UUID.Zero; 1448 prim.Properties.GroupID = UUID.Zero;
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs
index a505524..1b2f681 100644
--- a/OpenSim/Framework/RegionInfo.cs
+++ b/OpenSim/Framework/RegionInfo.cs
@@ -40,6 +40,7 @@ using OpenMetaverse.StructuredData;
40 40
41namespace OpenSim.Framework 41namespace OpenSim.Framework
42{ 42{
43 [Serializable]
43 public class RegionLightShareData : ICloneable 44 public class RegionLightShareData : ICloneable
44 { 45 {
45 public bool valid = false; 46 public bool valid = false;
@@ -102,6 +103,7 @@ namespace OpenSim.Framework
102 103
103 public bool commFailTF = false; 104 public bool commFailTF = false;
104 public ConfigurationMember configMember; 105 public ConfigurationMember configMember;
106 public string DataStore = String.Empty;
105 public string RegionFile = String.Empty; 107 public string RegionFile = String.Empty;
106 public bool isSandbox = false; 108 public bool isSandbox = false;
107 public bool Persistent = true; 109 public bool Persistent = true;
@@ -649,6 +651,9 @@ namespace OpenSim.Framework
649 string location = String.Format("{0},{1}", m_regionLocX, m_regionLocY); 651 string location = String.Format("{0},{1}", m_regionLocX, m_regionLocY);
650 config.Set("Location", location); 652 config.Set("Location", location);
651 653
654 if (DataStore != String.Empty)
655 config.Set("Datastore", DataStore);
656
652 config.Set("InternalAddress", m_internalEndPoint.Address.ToString()); 657 config.Set("InternalAddress", m_internalEndPoint.Address.ToString());
653 config.Set("InternalPort", m_internalEndPoint.Port); 658 config.Set("InternalPort", m_internalEndPoint.Port);
654 659
@@ -834,6 +839,9 @@ namespace OpenSim.Framework
834 case "sim_location_y": 839 case "sim_location_y":
835 m_regionLocY = (uint) configuration_result; 840 m_regionLocY = (uint) configuration_result;
836 break; 841 break;
842 case "datastore":
843 DataStore = (string) configuration_result;
844 break;
837 case "internal_ip_address": 845 case "internal_ip_address":
838 IPAddress address = (IPAddress) configuration_result; 846 IPAddress address = (IPAddress) configuration_result;
839 m_internalEndPoint = new IPEndPoint(address, 0); 847 m_internalEndPoint = new IPEndPoint(address, 0);
@@ -984,6 +992,11 @@ namespace OpenSim.Framework
984 return regionInfo; 992 return regionInfo;
985 } 993 }
986 994
995 public int getInternalEndPointPort()
996 {
997 return m_internalEndPoint.Port;
998 }
999
987 public Dictionary<string, object> ToKeyValuePairs() 1000 public Dictionary<string, object> ToKeyValuePairs()
988 { 1001 {
989 Dictionary<string, object> kvp = new Dictionary<string, object>(); 1002 Dictionary<string, object> kvp = new Dictionary<string, object>();
@@ -1002,4 +1015,4 @@ namespace OpenSim.Framework
1002 return kvp; 1015 return kvp;
1003 } 1016 }
1004 } 1017 }
1005} \ No newline at end of file 1018}
diff --git a/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs b/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs
index a2f5d9c..c7caf6f 100644
--- a/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs
+++ b/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs
@@ -48,6 +48,9 @@ namespace OpenSim.Framework.RegionLoader.Web
48 48
49 public RegionInfo[] LoadRegions() 49 public RegionInfo[] LoadRegions()
50 { 50 {
51 int tries = 3;
52 int wait = 2000;
53
51 if (m_configSource == null) 54 if (m_configSource == null)
52 { 55 {
53 m_log.Error("[WEBLOADER]: Unable to load configuration source!"); 56 m_log.Error("[WEBLOADER]: Unable to load configuration source!");
@@ -66,63 +69,72 @@ namespace OpenSim.Framework.RegionLoader.Web
66 } 69 }
67 else 70 else
68 { 71 {
69 RegionInfo[] regionInfos = new RegionInfo[] {}; 72 while(tries > 0)
70 int regionCount = 0; 73 {
71 HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(url); 74 RegionInfo[] regionInfos = new RegionInfo[] {};
72 webRequest.Timeout = 30000; //30 Second Timeout 75 int regionCount = 0;
73 m_log.DebugFormat("[WEBLOADER]: Sending download request to {0}", url); 76 HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(url);
77 webRequest.Timeout = 30000; //30 Second Timeout
78 m_log.DebugFormat("[WEBLOADER]: Sending download request to {0}", url);
74 79
75 try 80 try
76 { 81 {
77 HttpWebResponse webResponse = (HttpWebResponse) webRequest.GetResponse(); 82 HttpWebResponse webResponse = (HttpWebResponse) webRequest.GetResponse();
78 m_log.Debug("[WEBLOADER]: Downloading region information..."); 83 m_log.Debug("[WEBLOADER]: Downloading region information...");
79 StreamReader reader = new StreamReader(webResponse.GetResponseStream()); 84 StreamReader reader = new StreamReader(webResponse.GetResponseStream());
80 string xmlSource = String.Empty; 85 string xmlSource = String.Empty;
81 string tempStr = reader.ReadLine(); 86 string tempStr = reader.ReadLine();
82 while (tempStr != null) 87 while (tempStr != null)
83 { 88 {
84 xmlSource = xmlSource + tempStr; 89 xmlSource = xmlSource + tempStr;
85 tempStr = reader.ReadLine(); 90 tempStr = reader.ReadLine();
86 } 91 }
87 m_log.Debug("[WEBLOADER]: Done downloading region information from server. Total Bytes: " + 92 m_log.Debug("[WEBLOADER]: Done downloading region information from server. Total Bytes: " +
88 xmlSource.Length); 93 xmlSource.Length);
89 XmlDocument xmlDoc = new XmlDocument(); 94 XmlDocument xmlDoc = new XmlDocument();
90 xmlDoc.LoadXml(xmlSource); 95 xmlDoc.LoadXml(xmlSource);
91 if (xmlDoc.FirstChild.Name == "Regions") 96 if (xmlDoc.FirstChild.Name == "Regions")
92 { 97 {
93 regionCount = xmlDoc.FirstChild.ChildNodes.Count; 98 regionCount = xmlDoc.FirstChild.ChildNodes.Count;
94 99
95 if (regionCount > 0) 100 if (regionCount > 0)
96 { 101 {
97 regionInfos = new RegionInfo[regionCount]; 102 regionInfos = new RegionInfo[regionCount];
98 int i; 103 int i;
99 for (i = 0; i < xmlDoc.FirstChild.ChildNodes.Count; i++) 104 for (i = 0; i < xmlDoc.FirstChild.ChildNodes.Count; i++)
100 { 105 {
101 m_log.Debug(xmlDoc.FirstChild.ChildNodes[i].OuterXml); 106 m_log.Debug(xmlDoc.FirstChild.ChildNodes[i].OuterXml);
102 regionInfos[i] = 107 regionInfos[i] =
103 new RegionInfo("REGION CONFIG #" + (i + 1), xmlDoc.FirstChild.ChildNodes[i],false,m_configSource); 108 new RegionInfo("REGION CONFIG #" + (i + 1), xmlDoc.FirstChild.ChildNodes[i],false,m_configSource);
104 } 109 }
105 } 110 }
106 } 111 }
107 } 112 }
108 catch (WebException ex) 113 catch (WebException ex)
109 { 114 {
110 if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound) 115 if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound)
116 {
117 if (!allowRegionless)
118 throw ex;
119 }
120 else
121 throw ex;
122 }
123
124 if (regionCount > 0 | allowRegionless)
125 return regionInfos;
126
127 m_log.Debug("[WEBLOADER]: Request yielded no regions.");
128 tries--;
129 if (tries > 0)
111 { 130 {
112 if (!allowRegionless) 131 m_log.Debug("[WEBLOADER]: Retrying");
113 throw ex; 132 System.Threading.Thread.Sleep(wait);
114 } 133 }
115 else 134 }
116 throw ex;
117 }
118 135
119 if (regionCount > 0 | allowRegionless) 136 m_log.Error("[WEBLOADER]: No region configs were available.");
120 return regionInfos; 137 return null;
121 else
122 {
123 m_log.Error("[WEBLOADER]: No region configs were available.");
124 return null;
125 }
126 } 138 }
127 } 139 }
128 } 140 }
diff --git a/OpenSim/Framework/RegionSettings.cs b/OpenSim/Framework/RegionSettings.cs
index 47dbcec..47a2780 100644
--- a/OpenSim/Framework/RegionSettings.cs
+++ b/OpenSim/Framework/RegionSettings.cs
@@ -482,6 +482,28 @@ namespace OpenSim.Framework
482 set { m_LoadedCreationID = value; } 482 set { m_LoadedCreationID = value; }
483 } 483 }
484 484
485 private bool m_GodBlockSearch = false;
486 public bool GodBlockSearch
487 {
488 get { return m_GodBlockSearch; }
489 set { m_GodBlockSearch = value; }
490 }
491
492 private bool m_Casino = false;
493 public bool Casino
494 {
495 get { return m_Casino; }
496 set { m_Casino = value; }
497 }
498
499 // Telehub support
500 private bool m_TelehubEnabled = false;
501 public bool HasTelehub
502 {
503 get { return m_TelehubEnabled; }
504 set { m_TelehubEnabled = value; }
505 }
506
485 // Connected Telehub object 507 // Connected Telehub object
486 private UUID m_TelehubObject = UUID.Zero; 508 private UUID m_TelehubObject = UUID.Zero;
487 public UUID TelehubObject 509 public UUID TelehubObject
diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
index 14d8b0c..9a2cd0e 100644
--- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs
+++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
@@ -308,7 +308,7 @@ namespace OpenSim.Framework.Servers
308 308
309 EnhanceVersionInformation(); 309 EnhanceVersionInformation();
310 310
311 m_log.Info("[STARTUP]: OpenSimulator version: " + m_version + Environment.NewLine); 311 m_log.Info("[STARTUP]: Careminster version: " + m_version + Environment.NewLine);
312 // clr version potentially is more confusing than helpful, since it doesn't tell us if we're running under Mono/MS .NET and 312 // clr version potentially is more confusing than helpful, since it doesn't tell us if we're running under Mono/MS .NET and
313 // the clr version number doesn't match the project version number under Mono. 313 // the clr version number doesn't match the project version number under Mono.
314 //m_log.Info("[STARTUP]: Virtual machine runtime version: " + Environment.Version + Environment.NewLine); 314 //m_log.Info("[STARTUP]: Virtual machine runtime version: " + Environment.Version + Environment.NewLine);
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index 3de7f9c..1d5b426 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -1447,10 +1447,34 @@ namespace OpenSim.Framework.Servers.HttpServer
1447 1447
1448 internal byte[] DoHTTPGruntWork(Hashtable responsedata, OSHttpResponse response) 1448 internal byte[] DoHTTPGruntWork(Hashtable responsedata, OSHttpResponse response)
1449 { 1449 {
1450 //m_log.Info("[BASE HTTP SERVER]: Doing HTTP Grunt work with response"); 1450 int responsecode;
1451 int responsecode = (int)responsedata["int_response_code"]; 1451 string responseString;
1452 string responseString = (string)responsedata["str_response_string"]; 1452 string contentType;
1453 string contentType = (string)responsedata["content_type"]; 1453
1454 if (responsedata == null)
1455 {
1456 responsecode = 500;
1457 responseString = "No response could be obtained";
1458 contentType = "text/plain";
1459 responsedata = new Hashtable();
1460 }
1461 else
1462 {
1463 try
1464 {
1465 //m_log.Info("[BASE HTTP SERVER]: Doing HTTP Grunt work with response");
1466 responsecode = (int)responsedata["int_response_code"];
1467 responseString = (string)responsedata["str_response_string"];
1468 contentType = (string)responsedata["content_type"];
1469 }
1470 catch
1471 {
1472 responsecode = 500;
1473 responseString = "No response could be obtained";
1474 contentType = "text/plain";
1475 responsedata = new Hashtable();
1476 }
1477 }
1454 1478
1455 if (responsedata.ContainsKey("error_status_text")) 1479 if (responsedata.ContainsKey("error_status_text"))
1456 { 1480 {
diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceEventArgs.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceEventArgs.cs
index 3089351..bb43cd2 100644
--- a/OpenSim/Framework/Servers/HttpServer/PollServiceEventArgs.cs
+++ b/OpenSim/Framework/Servers/HttpServer/PollServiceEventArgs.cs
@@ -45,17 +45,27 @@ namespace OpenSim.Framework.Servers.HttpServer
45 public NoEventsMethod NoEvents; 45 public NoEventsMethod NoEvents;
46 public RequestMethod Request; 46 public RequestMethod Request;
47 public UUID Id; 47 public UUID Id;
48 public int TimeOutms;
49 public EventType Type;
50
51 public enum EventType : int
52 {
53 Normal = 0,
54 LslHttp = 1
55 }
48 56
49 public PollServiceEventArgs( 57 public PollServiceEventArgs(
50 RequestMethod pRequest, 58 RequestMethod pRequest,
51 HasEventsMethod pHasEvents, GetEventsMethod pGetEvents, NoEventsMethod pNoEvents, 59 HasEventsMethod pHasEvents, GetEventsMethod pGetEvents, NoEventsMethod pNoEvents,
52 UUID pId) 60 UUID pId, int pTimeOutms)
53 { 61 {
54 Request = pRequest; 62 Request = pRequest;
55 HasEvents = pHasEvents; 63 HasEvents = pHasEvents;
56 GetEvents = pGetEvents; 64 GetEvents = pGetEvents;
57 NoEvents = pNoEvents; 65 NoEvents = pNoEvents;
58 Id = pId; 66 Id = pId;
67 TimeOutms = pTimeOutms;
68 Type = EventType.Normal;
59 } 69 }
60 } 70 }
61} \ No newline at end of file 71}
diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs
index 3252251..3a14b6f 100644
--- a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs
+++ b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs
@@ -33,14 +33,18 @@ using log4net;
33using HttpServer; 33using HttpServer;
34using OpenSim.Framework; 34using OpenSim.Framework;
35 35
36
37/*
36namespace OpenSim.Framework.Servers.HttpServer 38namespace OpenSim.Framework.Servers.HttpServer
37{ 39{
40
38 public class PollServiceRequestManager 41 public class PollServiceRequestManager
39 { 42 {
40// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 43// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
41 44
42 private readonly BaseHttpServer m_server; 45 private readonly BaseHttpServer m_server;
43 private static Queue m_requests = Queue.Synchronized(new Queue()); 46 private static Queue m_requests = Queue.Synchronized(new Queue());
47 private static ManualResetEvent m_ev = new ManualResetEvent(false);
44 private uint m_WorkerThreadCount = 0; 48 private uint m_WorkerThreadCount = 0;
45 private Thread[] m_workerThreads; 49 private Thread[] m_workerThreads;
46 private PollServiceWorkerThread[] m_PollServiceWorkerThreads; 50 private PollServiceWorkerThread[] m_PollServiceWorkerThreads;
@@ -90,15 +94,17 @@ namespace OpenSim.Framework.Servers.HttpServer
90 { 94 {
91 lock (m_requests) 95 lock (m_requests)
92 m_requests.Enqueue(req); 96 m_requests.Enqueue(req);
97 m_ev.Set();
93 } 98 }
94 99
95 public void ThreadStart() 100 public void ThreadStart()
96 { 101 {
97 while (m_running) 102 while (m_running)
98 { 103 {
104 m_ev.WaitOne(1000);
105 m_ev.Reset();
99 Watchdog.UpdateThread(); 106 Watchdog.UpdateThread();
100 ProcessQueuedRequests(); 107 ProcessQueuedRequests();
101 Thread.Sleep(1000);
102 } 108 }
103 } 109 }
104 110
@@ -154,4 +160,237 @@ namespace OpenSim.Framework.Servers.HttpServer
154 m_running = false; 160 m_running = false;
155 } 161 }
156 } 162 }
157} \ No newline at end of file 163}
164 */
165
166using System.IO;
167using System.Text;
168using System.Collections.Generic;
169
170namespace OpenSim.Framework.Servers.HttpServer
171{
172 public class PollServiceRequestManager
173 {
174 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
175
176 private readonly BaseHttpServer m_server;
177
178 private BlockingQueue<PollServiceHttpRequest> m_requests = new BlockingQueue<PollServiceHttpRequest>();
179 private static Queue<PollServiceHttpRequest> m_slowRequests = new Queue<PollServiceHttpRequest>();
180 private static Queue<PollServiceHttpRequest> m_retryRequests = new Queue<PollServiceHttpRequest>();
181
182 private uint m_WorkerThreadCount = 0;
183 private Thread[] m_workerThreads;
184 private Thread m_retrysThread;
185
186 private bool m_running = true;
187 private int slowCount = 0;
188
189 // private int m_timeout = 250; // increase timeout 250; now use the event one
190
191 public PollServiceRequestManager(BaseHttpServer pSrv, uint pWorkerThreadCount, int pTimeout)
192 {
193 m_server = pSrv;
194 m_WorkerThreadCount = pWorkerThreadCount;
195 m_workerThreads = new Thread[m_WorkerThreadCount];
196
197 //startup worker threads
198 for (uint i = 0; i < m_WorkerThreadCount; i++)
199 {
200 m_workerThreads[i]
201 = Watchdog.StartThread(
202 PoolWorkerJob,
203 String.Format("PollServiceWorkerThread{0}", i),
204 ThreadPriority.Normal,
205 false,
206 true,
207 null,
208 int.MaxValue);
209 }
210
211 m_retrysThread = Watchdog.StartThread(
212 this.CheckRetries,
213 "PollServiceWatcherThread",
214 ThreadPriority.Normal,
215 false,
216 true,
217 null,
218 1000 * 60 * 10);
219 }
220
221
222 private void ReQueueEvent(PollServiceHttpRequest req)
223 {
224 if (m_running)
225 {
226 lock (m_retryRequests)
227 m_retryRequests.Enqueue(req);
228 }
229 }
230
231 public void Enqueue(PollServiceHttpRequest req)
232 {
233 if (m_running)
234 {
235 if (req.PollServiceArgs.Type == PollServiceEventArgs.EventType.LslHttp)
236 {
237 m_requests.Enqueue(req);
238 }
239 else
240 {
241 lock (m_slowRequests)
242 m_slowRequests.Enqueue(req);
243 }
244 }
245 }
246
247 private void CheckRetries()
248 {
249 while (m_running)
250 {
251 Thread.Sleep(100); // let the world move .. back to faster rate
252 Watchdog.UpdateThread();
253 lock (m_retryRequests)
254 {
255 while (m_retryRequests.Count > 0 && m_running)
256 m_requests.Enqueue(m_retryRequests.Dequeue());
257 }
258 slowCount++;
259 if (slowCount >= 10)
260 {
261 slowCount = 0;
262
263 lock (m_slowRequests)
264 {
265 while (m_slowRequests.Count > 0 && m_running)
266 m_requests.Enqueue(m_slowRequests.Dequeue());
267 }
268 }
269 }
270 }
271
272 ~PollServiceRequestManager()
273 {
274 m_running = false;
275// m_timeout = -10000; // cause all to expire
276 Thread.Sleep(1000); // let the world move
277
278 foreach (Thread t in m_workerThreads)
279 {
280 try
281 {
282 t.Abort();
283 }
284 catch
285 {
286 }
287 }
288
289 try
290 {
291 foreach (PollServiceHttpRequest req in m_retryRequests)
292 {
293 m_server.DoHTTPGruntWork(
294 req.PollServiceArgs.NoEvents(req.RequestID, req.PollServiceArgs.Id),
295 new OSHttpResponse(new HttpResponse(req.HttpContext, req.Request), req.HttpContext));
296 }
297 }
298 catch
299 {
300 }
301
302 PollServiceHttpRequest wreq;
303 m_retryRequests.Clear();
304
305 lock (m_slowRequests)
306 {
307 while (m_slowRequests.Count > 0 && m_running)
308 m_requests.Enqueue(m_slowRequests.Dequeue());
309 }
310
311 while (m_requests.Count() > 0)
312 {
313 try
314 {
315 wreq = m_requests.Dequeue(0);
316 m_server.DoHTTPGruntWork(
317 wreq.PollServiceArgs.NoEvents(wreq.RequestID, wreq.PollServiceArgs.Id),
318 new OSHttpResponse(new HttpResponse(wreq.HttpContext, wreq.Request), wreq.HttpContext));
319 }
320 catch
321 {
322 }
323 }
324
325 m_requests.Clear();
326 }
327
328 // work threads
329
330 private void PoolWorkerJob()
331 {
332 PollServiceHttpRequest req;
333 StreamReader str;
334
335// while (true)
336 while (m_running)
337 {
338 req = m_requests.Dequeue(5000);
339
340 Watchdog.UpdateThread();
341 if (req != null)
342 {
343 try
344 {
345 if (req.PollServiceArgs.HasEvents(req.RequestID, req.PollServiceArgs.Id))
346 {
347 try
348 {
349 str = new StreamReader(req.Request.Body);
350 }
351 catch (System.ArgumentException)
352 {
353 // Stream was not readable means a child agent
354 // was closed due to logout, leaving the
355 // Event Queue request orphaned.
356 continue;
357 }
358
359 try
360 {
361 Hashtable responsedata = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id, str.ReadToEnd());
362 m_server.DoHTTPGruntWork(responsedata,
363 new OSHttpResponse(new HttpResponse(req.HttpContext, req.Request), req.HttpContext));
364 }
365 catch (ObjectDisposedException) // Browser aborted before we could read body, server closed the stream
366 {
367 // Ignore it, no need to reply
368 }
369
370 str.Close();
371
372 }
373 else
374 {
375 // if ((Environment.TickCount - req.RequestTime) > m_timeout)
376 if ((Environment.TickCount - req.RequestTime) > req.PollServiceArgs.TimeOutms)
377 {
378 m_server.DoHTTPGruntWork(req.PollServiceArgs.NoEvents(req.RequestID, req.PollServiceArgs.Id),
379 new OSHttpResponse(new HttpResponse(req.HttpContext, req.Request), req.HttpContext));
380 }
381 else
382 {
383 ReQueueEvent(req);
384 }
385 }
386 }
387 catch (Exception e)
388 {
389 m_log.ErrorFormat("Exception in poll service thread: " + e.ToString());
390 }
391 }
392 }
393 }
394 }
395}
396
diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceWorkerThread.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceWorkerThread.cs
index 35a8dee..1e3fbf0 100644
--- a/OpenSim/Framework/Servers/HttpServer/PollServiceWorkerThread.cs
+++ b/OpenSim/Framework/Servers/HttpServer/PollServiceWorkerThread.cs
@@ -25,6 +25,8 @@
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/* Ubit work moved to PollServiceRequestManager
29
28using System; 30using System;
29using System.Collections; 31using System.Collections;
30using System.Collections.Generic; 32using System.Collections.Generic;
@@ -89,8 +91,15 @@ namespace OpenSim.Framework.Servers.HttpServer
89 continue; 91 continue;
90 } 92 }
91 93
92 Hashtable responsedata = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id, str.ReadToEnd()); 94 try
93 DoHTTPGruntWork(m_server, req, responsedata); 95 {
96 Hashtable responsedata = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id, str.ReadToEnd());
97 DoHTTPGruntWork(m_server, req, responsedata);
98 }
99 catch (ObjectDisposedException) // Browser aborted before we could read body, server closed the stream
100 {
101 // Ignore it, no need to reply
102 }
94 } 103 }
95 else 104 else
96 { 105 {
@@ -161,4 +170,5 @@ namespace OpenSim.Framework.Servers.HttpServer
161 } 170 }
162 } 171 }
163 } 172 }
164} \ No newline at end of file 173}
174*/ \ No newline at end of file
diff --git a/OpenSim/Framework/Servers/VersionInfo.cs b/OpenSim/Framework/Servers/VersionInfo.cs
index 5f01788..016a174 100644
--- a/OpenSim/Framework/Servers/VersionInfo.cs
+++ b/OpenSim/Framework/Servers/VersionInfo.cs
@@ -29,11 +29,11 @@ namespace OpenSim
29{ 29{
30 public class VersionInfo 30 public class VersionInfo
31 { 31 {
32 private const string VERSION_NUMBER = "0.7.4"; 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
36 { 36 {
37 Unknown, 37 Unknown,
38 Dev, 38 Dev,
39 RC1, 39 RC1,
@@ -50,7 +50,7 @@ namespace OpenSim
50 50
51 public static string GetVersionString(string versionNumber, Flavour flavour) 51 public static string GetVersionString(string versionNumber, Flavour flavour)
52 { 52 {
53 string versionString = "OpenSim " + versionNumber + " " + flavour; 53 string versionString = "Careminster " + versionNumber + " " + flavour;
54 return versionString.PadRight(VERSIONINFO_VERSION_LENGTH); 54 return versionString.PadRight(VERSIONINFO_VERSION_LENGTH);
55 } 55 }
56 56
diff --git a/OpenSim/Framework/Statistics/BaseStatsCollector.cs b/OpenSim/Framework/Statistics/BaseStatsCollector.cs
index c9e57ce..3f918f3 100644
--- a/OpenSim/Framework/Statistics/BaseStatsCollector.cs
+++ b/OpenSim/Framework/Statistics/BaseStatsCollector.cs
@@ -48,10 +48,26 @@ namespace OpenSim.Framework.Statistics
48 string.Format( 48 string.Format(
49 "Allocated to OpenSim objects: {0} MB\n", 49 "Allocated to OpenSim objects: {0} MB\n",
50 Math.Round(GC.GetTotalMemory(false) / 1024.0 / 1024.0))); 50 Math.Round(GC.GetTotalMemory(false) / 1024.0 / 1024.0)));
51 sb.Append( 51
52 string.Format( 52 Process myprocess = Process.GetCurrentProcess();
53 "Process memory : {0} MB\n", 53 if (!myprocess.HasExited)
54 Math.Round(Process.GetCurrentProcess().WorkingSet64 / 1024.0 / 1024.0))); 54 {
55 myprocess.Refresh();
56 sb.Append(
57 string.Format(
58 "Process memory: Physical {0} MB \t Paged {1} MB \t Virtual {2} MB\n",
59 Math.Round(Process.GetCurrentProcess().WorkingSet64 / 1024.0 / 1024.0),
60 Math.Round(Process.GetCurrentProcess().PagedMemorySize64 / 1024.0 / 1024.0),
61 Math.Round(Process.GetCurrentProcess().VirtualMemorySize64 / 1024.0 / 1024.0)));
62 sb.Append(
63 string.Format(
64 "Peak process memory: Physical {0} MB \t Paged {1} MB \t Virtual {2} MB\n",
65 Math.Round(Process.GetCurrentProcess().PeakWorkingSet64 / 1024.0 / 1024.0),
66 Math.Round(Process.GetCurrentProcess().PeakPagedMemorySize64 / 1024.0 / 1024.0),
67 Math.Round(Process.GetCurrentProcess().PeakVirtualMemorySize64 / 1024.0 / 1024.0)));
68 }
69 else
70 sb.Append("Process reported as Exited \n");
55 71
56 return sb.ToString(); 72 return sb.ToString();
57 } 73 }
diff --git a/OpenSim/Framework/TaskInventoryDictionary.cs b/OpenSim/Framework/TaskInventoryDictionary.cs
index 421bd5d..4d07746 100644
--- a/OpenSim/Framework/TaskInventoryDictionary.cs
+++ b/OpenSim/Framework/TaskInventoryDictionary.cs
@@ -27,9 +27,13 @@
27 27
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Threading;
31using System.Reflection;
30using System.Xml; 32using System.Xml;
33using System.Diagnostics;
31using System.Xml.Schema; 34using System.Xml.Schema;
32using System.Xml.Serialization; 35using System.Xml.Serialization;
36using log4net;
33using OpenMetaverse; 37using OpenMetaverse;
34 38
35namespace OpenSim.Framework 39namespace OpenSim.Framework
@@ -45,6 +49,180 @@ namespace OpenSim.Framework
45 // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 49 // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
46 50
47 private static XmlSerializer tiiSerializer = new XmlSerializer(typeof (TaskInventoryItem)); 51 private static XmlSerializer tiiSerializer = new XmlSerializer(typeof (TaskInventoryItem));
52 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
53
54 private Thread LockedByThread;
55// private string WriterStack;
56
57// private Dictionary<Thread, string> ReadLockers =
58// new Dictionary<Thread, string>();
59
60 /// <value>
61 /// An advanced lock for inventory data
62 /// </value>
63 private System.Threading.ReaderWriterLockSlim m_itemLock = new System.Threading.ReaderWriterLockSlim();
64
65 /// <summary>
66 /// Are we readlocked by the calling thread?
67 /// </summary>
68 public bool IsReadLockedByMe()
69 {
70 if (m_itemLock.RecursiveReadCount > 0)
71 {
72 return true;
73 }
74 else
75 {
76 return false;
77 }
78 }
79
80 /// <summary>
81 /// Lock our inventory list for reading (many can read, one can write)
82 /// </summary>
83 public void LockItemsForRead(bool locked)
84 {
85 if (locked)
86 {
87 if (m_itemLock.IsWriteLockHeld && LockedByThread != null)
88 {
89 if (!LockedByThread.IsAlive)
90 {
91 //Locked by dead thread, reset.
92 m_itemLock = new System.Threading.ReaderWriterLockSlim();
93 }
94 }
95
96 if (m_itemLock.RecursiveReadCount > 0)
97 {
98 m_log.Error("[TaskInventoryDictionary] Recursive read lock requested. This should not happen and means something needs to be fixed. For now though, it's safe to continue.");
99 try
100 {
101 // That call stack is useful for end users only. RealProgrammers need a full dump. Commented.
102 // StackTrace stackTrace = new StackTrace(); // get call stack
103 // StackFrame[] stackFrames = stackTrace.GetFrames(); // get method calls (frames)
104 //
105 // // write call stack method names
106 // foreach (StackFrame stackFrame in stackFrames)
107 // {
108 // m_log.Error("[SceneObjectGroup.m_parts] "+(stackFrame.GetMethod().Name)); // write method name
109 // }
110
111 // The below is far more useful
112// System.Console.WriteLine("------------------------------------------");
113// System.Console.WriteLine("My call stack:\n" + Environment.StackTrace);
114// System.Console.WriteLine("------------------------------------------");
115// foreach (KeyValuePair<Thread, string> kvp in ReadLockers)
116// {
117// System.Console.WriteLine("Locker name {0} call stack:\n" + kvp.Value, kvp.Key.Name);
118// System.Console.WriteLine("------------------------------------------");
119// }
120 }
121 catch
122 {}
123 m_itemLock.ExitReadLock();
124 }
125 if (m_itemLock.RecursiveWriteCount > 0)
126 {
127 m_log.Error("[TaskInventoryDictionary] Recursive write lock requested. This should not happen and means something needs to be fixed.");
128// try
129// {
130// System.Console.WriteLine("------------------------------------------");
131// System.Console.WriteLine("My call stack:\n" + Environment.StackTrace);
132// System.Console.WriteLine("------------------------------------------");
133// System.Console.WriteLine("Locker's call stack:\n" + WriterStack);
134// System.Console.WriteLine("------------------------------------------");
135// }
136// catch
137// {}
138 m_itemLock.ExitWriteLock();
139 }
140
141 while (!m_itemLock.TryEnterReadLock(60000))
142 {
143 m_log.Error("Thread lock detected while trying to aquire READ lock in TaskInventoryDictionary. Locked by thread " + LockedByThread.Name + ". I'm going to try to solve the thread lock automatically to preserve region stability, but this needs to be fixed.");
144 if (m_itemLock.IsWriteLockHeld)
145 {
146 m_itemLock = new System.Threading.ReaderWriterLockSlim();
147// System.Console.WriteLine("------------------------------------------");
148// System.Console.WriteLine("My call stack:\n" + Environment.StackTrace);
149// System.Console.WriteLine("------------------------------------------");
150// System.Console.WriteLine("Locker's call stack:\n" + WriterStack);
151// System.Console.WriteLine("------------------------------------------");
152// LockedByThread = null;
153// ReadLockers.Clear();
154 }
155 }
156// ReadLockers[Thread.CurrentThread] = Environment.StackTrace;
157 }
158 else
159 {
160 if (m_itemLock.RecursiveReadCount>0)
161 {
162 m_itemLock.ExitReadLock();
163 }
164// if (m_itemLock.RecursiveReadCount == 0)
165// ReadLockers.Remove(Thread.CurrentThread);
166 }
167 }
168
169 /// <summary>
170 /// Lock our inventory list for writing (many can read, one can write)
171 /// </summary>
172 public void LockItemsForWrite(bool locked)
173 {
174 if (locked)
175 {
176 //Enter a write lock, wait indefinately for one to open.
177 if (m_itemLock.RecursiveReadCount > 0)
178 {
179 m_log.Error("[TaskInventoryDictionary] Recursive read lock requested. This should not happen and means something needs to be fixed. For now though, it's safe to continue.");
180 m_itemLock.ExitReadLock();
181 }
182 if (m_itemLock.RecursiveWriteCount > 0)
183 {
184 m_log.Error("[TaskInventoryDictionary] Recursive write lock requested. This should not happen and means something needs to be fixed.");
185
186 m_itemLock.ExitWriteLock();
187 }
188 while (!m_itemLock.TryEnterWriteLock(60000))
189 {
190 if (m_itemLock.IsWriteLockHeld)
191 {
192 m_log.Error("Thread lock detected while trying to aquire WRITE lock in TaskInventoryDictionary. Locked by thread " + LockedByThread.Name + ". I'm going to try to solve the thread lock automatically to preserve region stability, but this needs to be fixed.");
193// System.Console.WriteLine("------------------------------------------");
194// System.Console.WriteLine("My call stack:\n" + Environment.StackTrace);
195// System.Console.WriteLine("------------------------------------------");
196// System.Console.WriteLine("Locker's call stack:\n" + WriterStack);
197// System.Console.WriteLine("------------------------------------------");
198 }
199 else
200 {
201 m_log.Error("Thread lock detected while trying to aquire WRITE lock in TaskInventoryDictionary. Locked by a reader. I'm going to try to solve the thread lock automatically to preserve region stability, but this needs to be fixed.");
202// System.Console.WriteLine("------------------------------------------");
203// System.Console.WriteLine("My call stack:\n" + Environment.StackTrace);
204// System.Console.WriteLine("------------------------------------------");
205// foreach (KeyValuePair<Thread, string> kvp in ReadLockers)
206// {
207// System.Console.WriteLine("Locker name {0} call stack:\n" + kvp.Value, kvp.Key.Name);
208// System.Console.WriteLine("------------------------------------------");
209// }
210 }
211 m_itemLock = new System.Threading.ReaderWriterLockSlim();
212// ReadLockers.Clear();
213 }
214
215 LockedByThread = Thread.CurrentThread;
216// WriterStack = Environment.StackTrace;
217 }
218 else
219 {
220 if (m_itemLock.RecursiveWriteCount > 0)
221 {
222 m_itemLock.ExitWriteLock();
223 }
224 }
225 }
48 226
49 #region ICloneable Members 227 #region ICloneable Members
50 228
@@ -52,14 +230,13 @@ namespace OpenSim.Framework
52 { 230 {
53 TaskInventoryDictionary clone = new TaskInventoryDictionary(); 231 TaskInventoryDictionary clone = new TaskInventoryDictionary();
54 232
55 lock (this) 233 m_itemLock.EnterReadLock();
234 foreach (UUID uuid in Keys)
56 { 235 {
57 foreach (UUID uuid in Keys) 236 clone.Add(uuid, (TaskInventoryItem) this[uuid].Clone());
58 {
59 clone.Add(uuid, (TaskInventoryItem) this[uuid].Clone());
60 }
61 } 237 }
62 238 m_itemLock.ExitReadLock();
239
63 return clone; 240 return clone;
64 } 241 }
65 242
diff --git a/OpenSim/Framework/TaskInventoryItem.cs b/OpenSim/Framework/TaskInventoryItem.cs
index 3b40381..fb818ee 100644
--- a/OpenSim/Framework/TaskInventoryItem.cs
+++ b/OpenSim/Framework/TaskInventoryItem.cs
@@ -72,7 +72,7 @@ namespace OpenSim.Framework
72 private UUID _loadedID = UUID.Zero; 72 private UUID _loadedID = UUID.Zero;
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! 76 // This used ONLY during copy. It can't be relied on at other times!
77 private bool _scriptRunning = true; 77 private bool _scriptRunning = true;
78 78
diff --git a/OpenSim/Framework/Tests/MundaneFrameworkTests.cs b/OpenSim/Framework/Tests/MundaneFrameworkTests.cs
index 672847d..6fde488 100644
--- a/OpenSim/Framework/Tests/MundaneFrameworkTests.cs
+++ b/OpenSim/Framework/Tests/MundaneFrameworkTests.cs
@@ -217,12 +217,12 @@ namespace OpenSim.Framework.Tests
217 BannedHostNameMask = string.Empty, 217 BannedHostNameMask = string.Empty,
218 BannedUserID = bannedUserId} 218 BannedUserID = bannedUserId}
219 ); 219 );
220 Assert.IsTrue(es.IsBanned(bannedUserId), "User Should be banned but is not."); 220 Assert.IsTrue(es.IsBanned(bannedUserId, 32), "User Should be banned but is not.");
221 Assert.IsFalse(es.IsBanned(UUID.Zero), "User Should not be banned but is."); 221 Assert.IsFalse(es.IsBanned(UUID.Zero, 32), "User Should not be banned but is.");
222 222
223 es.RemoveBan(bannedUserId); 223 es.RemoveBan(bannedUserId);
224 224
225 Assert.IsFalse(es.IsBanned(bannedUserId), "User Should not be banned but is."); 225 Assert.IsFalse(es.IsBanned(bannedUserId, 32), "User Should not be banned but is.");
226 226
227 es.AddEstateManager(UUID.Zero); 227 es.AddEstateManager(UUID.Zero);
228 228
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index 8cc29ee..384f716 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -481,19 +481,25 @@ namespace OpenSim.Framework
481 /// </summary> 481 /// </summary>
482 /// <param name="data"></param> 482 /// <param name="data"></param>
483 /// <returns></returns> 483 /// <returns></returns>
484
484 public static string Md5Hash(string data) 485 public static string Md5Hash(string data)
485 { 486 {
486 byte[] dataMd5 = ComputeMD5Hash(data); 487 return Md5Hash(data, Encoding.Default);
488 }
489
490 public static string Md5Hash(string data, Encoding encoding)
491 {
492 byte[] dataMd5 = ComputeMD5Hash(data, encoding);
487 StringBuilder sb = new StringBuilder(); 493 StringBuilder sb = new StringBuilder();
488 for (int i = 0; i < dataMd5.Length; i++) 494 for (int i = 0; i < dataMd5.Length; i++)
489 sb.AppendFormat("{0:x2}", dataMd5[i]); 495 sb.AppendFormat("{0:x2}", dataMd5[i]);
490 return sb.ToString(); 496 return sb.ToString();
491 } 497 }
492 498
493 private static byte[] ComputeMD5Hash(string data) 499 private static byte[] ComputeMD5Hash(string data, Encoding encoding)
494 { 500 {
495 MD5 md5 = MD5.Create(); 501 MD5 md5 = MD5.Create();
496 return md5.ComputeHash(Encoding.Default.GetBytes(data)); 502 return md5.ComputeHash(encoding.GetBytes(data));
497 } 503 }
498 504
499 /// <summary> 505 /// <summary>
@@ -501,6 +507,12 @@ namespace OpenSim.Framework
501 /// </summary> 507 /// </summary>
502 /// <param name="data"></param> 508 /// <param name="data"></param>
503 /// <returns></returns> 509 /// <returns></returns>
510
511 public static string SHA1Hash(string data, Encoding enc)
512 {
513 return SHA1Hash(enc.GetBytes(data));
514 }
515
504 public static string SHA1Hash(string data) 516 public static string SHA1Hash(string data)
505 { 517 {
506 return SHA1Hash(Encoding.Default.GetBytes(data)); 518 return SHA1Hash(Encoding.Default.GetBytes(data));
@@ -1105,19 +1117,19 @@ namespace OpenSim.Framework
1105 { 1117 {
1106 string os = String.Empty; 1118 string os = String.Empty;
1107 1119
1108 if (Environment.OSVersion.Platform != PlatformID.Unix) 1120// if (Environment.OSVersion.Platform != PlatformID.Unix)
1109 { 1121// {
1110 os = Environment.OSVersion.ToString(); 1122// os = Environment.OSVersion.ToString();
1111 } 1123// }
1112 else 1124// else
1113 { 1125// {
1114 os = ReadEtcIssue(); 1126// os = ReadEtcIssue();
1115 } 1127// }
1116 1128//
1117 if (os.Length > 45) 1129// if (os.Length > 45)
1118 { 1130// {
1119 os = os.Substring(0, 45); 1131// os = os.Substring(0, 45);
1120 } 1132// }
1121 1133
1122 return os; 1134 return os;
1123 } 1135 }
@@ -1249,7 +1261,7 @@ namespace OpenSim.Framework
1249 1261
1250 public static Guid GetHashGuid(string data, string salt) 1262 public static Guid GetHashGuid(string data, string salt)
1251 { 1263 {
1252 byte[] hash = ComputeMD5Hash(data + salt); 1264 byte[] hash = ComputeMD5Hash(data + salt, Encoding.Default);
1253 1265
1254 //string s = BitConverter.ToString(hash); 1266 //string s = BitConverter.ToString(hash);
1255 1267
diff --git a/OpenSim/Framework/Watchdog.cs b/OpenSim/Framework/Watchdog.cs
index 8a74f53..449d014 100644
--- a/OpenSim/Framework/Watchdog.cs
+++ b/OpenSim/Framework/Watchdog.cs
@@ -328,4 +328,4 @@ namespace OpenSim.Framework
328 m_watchdogTimer.Start(); 328 m_watchdogTimer.Start();
329 } 329 }
330 } 330 }
331} \ No newline at end of file 331}
diff --git a/OpenSim/Framework/WebUtil.cs b/OpenSim/Framework/WebUtil.cs
index 2aa4af5..6a40cd5 100644
--- a/OpenSim/Framework/WebUtil.cs
+++ b/OpenSim/Framework/WebUtil.cs
@@ -223,6 +223,7 @@ namespace OpenSim.Framework
223 catch (Exception ex) 223 catch (Exception ex)
224 { 224 {
225 errorMessage = ex.Message; 225 errorMessage = ex.Message;
226 m_log.Debug("[WEB UTIL]: Exception making request: " + ex.ToString());
226 } 227 }
227 finally 228 finally
228 { 229 {
@@ -302,7 +303,7 @@ namespace OpenSim.Framework
302 /// </summary> 303 /// </summary>
303 public static OSDMap PostToService(string url, NameValueCollection data) 304 public static OSDMap PostToService(string url, NameValueCollection data)
304 { 305 {
305 return ServiceFormRequest(url,data,10000); 306 return ServiceFormRequest(url,data, 20000);
306 } 307 }
307 308
308 public static OSDMap ServiceFormRequest(string url, NameValueCollection data, int timeout) 309 public static OSDMap ServiceFormRequest(string url, NameValueCollection data, int timeout)
@@ -997,6 +998,11 @@ namespace OpenSim.Framework
997 /// the request. You'll want to make sure you deal with this as they're not uncommon</exception> 998 /// the request. You'll want to make sure you deal with this as they're not uncommon</exception>
998 public static TResponse MakeRequest<TRequest, TResponse>(string verb, string requestUrl, TRequest obj) 999 public static TResponse MakeRequest<TRequest, TResponse>(string verb, string requestUrl, TRequest obj)
999 { 1000 {
1001 return MakeRequest<TRequest, TResponse>(verb, requestUrl, obj, 0);
1002 }
1003
1004 public static TResponse MakeRequest<TRequest, TResponse>(string verb, string requestUrl, TRequest obj, int pTimeout)
1005 {
1000 int reqnum = WebUtil.RequestNumber++; 1006 int reqnum = WebUtil.RequestNumber++;
1001 // m_log.DebugFormat("[WEB UTIL]: <{0}> start osd request for {1}, method {2}",reqnum,url,method); 1007 // m_log.DebugFormat("[WEB UTIL]: <{0}> start osd request for {1}, method {2}",reqnum,url,method);
1002 1008
@@ -1008,6 +1014,8 @@ namespace OpenSim.Framework
1008 1014
1009 WebRequest request = WebRequest.Create(requestUrl); 1015 WebRequest request = WebRequest.Create(requestUrl);
1010 request.Method = verb; 1016 request.Method = verb;
1017 if (pTimeout != 0)
1018 request.Timeout = pTimeout * 1000;
1011 MemoryStream buffer = null; 1019 MemoryStream buffer = null;
1012 1020
1013 if ((verb == "POST") || (verb == "PUT")) 1021 if ((verb == "POST") || (verb == "PUT"))
@@ -1123,4 +1131,4 @@ namespace OpenSim.Framework
1123 return deserial; 1131 return deserial;
1124 } 1132 }
1125 } 1133 }
1126} \ No newline at end of file 1134}