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.cs39
-rw-r--r--OpenSim/Framework/Communications/RestClient.cs2
-rw-r--r--OpenSim/Framework/EstateSettings.cs56
-rw-r--r--OpenSim/Framework/ICallingCardModule.cs13
-rw-r--r--OpenSim/Framework/IClientAPI.cs12
-rw-r--r--OpenSim/Framework/IMoneyModule.cs1
-rw-r--r--OpenSim/Framework/LandData.cs2
-rw-r--r--OpenSim/Framework/ParcelMediaCommandEnum.cs2
-rw-r--r--OpenSim/Framework/PluginLoader.cs17
-rw-r--r--OpenSim/Framework/PrimitiveBaseShape.cs30
-rw-r--r--OpenSim/Framework/RegionInfo.cs19
-rw-r--r--OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs118
-rw-r--r--OpenSim/Framework/RegionSettings.cs13
-rw-r--r--OpenSim/Framework/Servers/BaseOpenSimServer.cs2
-rw-r--r--OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs31
-rw-r--r--OpenSim/Framework/Servers/VersionInfo.cs6
-rw-r--r--OpenSim/Framework/TaskInventoryDictionary.cs164
-rw-r--r--OpenSim/Framework/TaskInventoryItem.cs17
-rw-r--r--OpenSim/Framework/Tests/MundaneFrameworkTests.cs6
-rw-r--r--OpenSim/Framework/Util.cs46
-rw-r--r--OpenSim/Framework/Watchdog.cs4
-rw-r--r--OpenSim/Framework/WebUtil.cs10
23 files changed, 496 insertions, 122 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 6c2a954..f0580df 100644
--- a/OpenSim/Framework/AvatarAppearance.cs
+++ b/OpenSim/Framework/AvatarAppearance.cs
@@ -240,6 +240,21 @@ namespace OpenSim.Framework
240// } 240// }
241 } 241 }
242 242
243 /// <summary>
244 /// Invalidate all of the baked textures in the appearance, useful
245 /// if you know that none are valid
246 /// </summary>
247 public virtual void ResetBakedTextures()
248 {
249 SetDefaultTexture();
250
251 //for (int i = 0; i < BAKE_INDICES.Length; i++)
252 // {
253 // int idx = BAKE_INDICES[i];
254 // m_texture.FaceTextures[idx].TextureID = UUID.Zero;
255 // }
256 }
257
243 protected virtual void SetDefaultTexture() 258 protected virtual void SetDefaultTexture()
244 { 259 {
245 m_texture = new Primitive.TextureEntry(new UUID(AppearanceManager.DEFAULT_AVATAR_TEXTURE)); 260 m_texture = new Primitive.TextureEntry(new UUID(AppearanceManager.DEFAULT_AVATAR_TEXTURE));
@@ -383,19 +398,18 @@ namespace OpenSim.Framework
383 /// </remarks> 398 /// </remarks>
384 public List<AvatarAttachment> GetAttachments() 399 public List<AvatarAttachment> GetAttachments()
385 { 400 {
386 List<AvatarAttachment> alist = new List<AvatarAttachment>(); 401
387 402
388 lock (m_attachments) 403 lock (m_attachments)
389 { 404 {
405 List<AvatarAttachment> alist = new List<AvatarAttachment>();
390 foreach (KeyValuePair<int, List<AvatarAttachment>> kvp in m_attachments) 406 foreach (KeyValuePair<int, List<AvatarAttachment>> kvp in m_attachments)
391 { 407 {
392 foreach (AvatarAttachment attach in kvp.Value) 408 foreach (AvatarAttachment attach in kvp.Value)
393 alist.Add(new AvatarAttachment(attach)); 409 alist.Add(new AvatarAttachment(attach));
394 } 410 }
395 } 411 return alist;
396 412 } }
397 return alist;
398 }
399 413
400 internal void AppendAttachment(AvatarAttachment attach) 414 internal void AppendAttachment(AvatarAttachment attach)
401 { 415 {
@@ -524,7 +538,6 @@ namespace OpenSim.Framework
524 return kvp.Key; 538 return kvp.Key;
525 } 539 }
526 } 540 }
527
528 return 0; 541 return 0;
529 } 542 }
530 543
@@ -591,12 +604,14 @@ namespace OpenSim.Framework
591 OSDBinary visualparams = new OSDBinary(m_visualparams); 604 OSDBinary visualparams = new OSDBinary(m_visualparams);
592 data["visualparams"] = visualparams; 605 data["visualparams"] = visualparams;
593 606
594 // Attachments 607 lock (m_attachments)
595 List<AvatarAttachment> attachments = GetAttachments(); 608 {
596 OSDArray attachs = new OSDArray(attachments.Count); 609 // Attachments
597 foreach (AvatarAttachment attach in GetAttachments()) 610 OSDArray attachs = new OSDArray(m_attachments.Count);
598 attachs.Add(attach.Pack()); 611 foreach (AvatarAttachment attach in GetAttachments())
599 data["attachments"] = attachs; 612 attachs.Add(attach.Pack());
613 data["attachments"] = attachs;
614 }
600 615
601 return data; 616 return data;
602 } 617 }
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/EstateSettings.cs b/OpenSim/Framework/EstateSettings.cs
index 2a495b0..afbdd49 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 (!IsEstateManager(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
@@ -373,5 +416,14 @@ namespace OpenSim.Framework
373 416
374 return l_EstateAccess.Contains(user); 417 return l_EstateAccess.Contains(user);
375 } 418 }
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 }
376 } 428 }
377} 429}
diff --git a/OpenSim/Framework/ICallingCardModule.cs b/OpenSim/Framework/ICallingCardModule.cs
new file mode 100644
index 0000000..17e6de35
--- /dev/null
+++ b/OpenSim/Framework/ICallingCardModule.cs
@@ -0,0 +1,13 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4using OpenMetaverse;
5using OpenSim.Framework;
6
7namespace OpenSim.Framework
8{
9 public interface ICallingCardModule
10 {
11 UUID CreateCallingCard(UUID userID, UUID creatorID, UUID folderID);
12 }
13}
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs
index 475fc01..925998f 100644
--- a/OpenSim/Framework/IClientAPI.cs
+++ b/OpenSim/Framework/IClientAPI.cs
@@ -264,6 +264,9 @@ namespace OpenSim.Framework
264 public delegate void MoveInventoryItem( 264 public delegate void MoveInventoryItem(
265 IClientAPI remoteClient, List<InventoryItemBase> items); 265 IClientAPI remoteClient, List<InventoryItemBase> items);
266 266
267 public delegate void MoveItemsAndLeaveCopy(
268 IClientAPI remoteClient, List<InventoryItemBase> items, UUID destFolder);
269
267 public delegate void RemoveInventoryItem( 270 public delegate void RemoveInventoryItem(
268 IClientAPI remoteClient, List<UUID> itemIDs); 271 IClientAPI remoteClient, List<UUID> itemIDs);
269 272
@@ -437,6 +440,7 @@ namespace OpenSim.Framework
437 public delegate void ClassifiedInfoRequest(UUID classifiedID, IClientAPI client); 440 public delegate void ClassifiedInfoRequest(UUID classifiedID, IClientAPI client);
438 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); 441 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);
439 public delegate void ClassifiedDelete(UUID classifiedID, IClientAPI client); 442 public delegate void ClassifiedDelete(UUID classifiedID, IClientAPI client);
443 public delegate void ClassifiedGodDelete(UUID classifiedID, UUID queryID, IClientAPI client);
440 444
441 public delegate void EventNotificationAddRequest(uint EventID, IClientAPI client); 445 public delegate void EventNotificationAddRequest(uint EventID, IClientAPI client);
442 public delegate void EventNotificationRemoveRequest(uint EventID, IClientAPI client); 446 public delegate void EventNotificationRemoveRequest(uint EventID, IClientAPI client);
@@ -459,9 +463,9 @@ namespace OpenSim.Framework
459 463
460 public delegate void AgentFOV(IClientAPI client, float verticalAngle); 464 public delegate void AgentFOV(IClientAPI client, float verticalAngle);
461 465
462 public delegate void MuteListEntryUpdate(IClientAPI client, UUID MuteID, string Name, int Flags,UUID AgentID); 466 public delegate void MuteListEntryUpdate(IClientAPI client, UUID MuteID, string Name, int type, uint flags);
463 467
464 public delegate void MuteListEntryRemove(IClientAPI client, UUID MuteID, string Name, UUID AgentID); 468 public delegate void MuteListEntryRemove(IClientAPI client, UUID MuteID, string Name);
465 469
466 public delegate void AvatarInterestReply(IClientAPI client,UUID target, uint wantmask, string wanttext, uint skillsmask, string skillstext, string languages); 470 public delegate void AvatarInterestReply(IClientAPI client,UUID target, uint wantmask, string wanttext, uint skillsmask, string skillstext, string languages);
467 471
@@ -845,6 +849,7 @@ namespace OpenSim.Framework
845 event RequestTaskInventory OnRequestTaskInventory; 849 event RequestTaskInventory OnRequestTaskInventory;
846 event UpdateInventoryItem OnUpdateInventoryItem; 850 event UpdateInventoryItem OnUpdateInventoryItem;
847 event CopyInventoryItem OnCopyInventoryItem; 851 event CopyInventoryItem OnCopyInventoryItem;
852 event MoveItemsAndLeaveCopy OnMoveItemsAndLeaveCopy;
848 event MoveInventoryItem OnMoveInventoryItem; 853 event MoveInventoryItem OnMoveInventoryItem;
849 event RemoveInventoryFolder OnRemoveInventoryFolder; 854 event RemoveInventoryFolder OnRemoveInventoryFolder;
850 event RemoveInventoryItem OnRemoveInventoryItem; 855 event RemoveInventoryItem OnRemoveInventoryItem;
@@ -963,7 +968,7 @@ namespace OpenSim.Framework
963 event ClassifiedInfoRequest OnClassifiedInfoRequest; 968 event ClassifiedInfoRequest OnClassifiedInfoRequest;
964 event ClassifiedInfoUpdate OnClassifiedInfoUpdate; 969 event ClassifiedInfoUpdate OnClassifiedInfoUpdate;
965 event ClassifiedDelete OnClassifiedDelete; 970 event ClassifiedDelete OnClassifiedDelete;
966 event ClassifiedDelete OnClassifiedGodDelete; 971 event ClassifiedGodDelete OnClassifiedGodDelete;
967 972
968 event EventNotificationAddRequest OnEventNotificationAddRequest; 973 event EventNotificationAddRequest OnEventNotificationAddRequest;
969 event EventNotificationRemoveRequest OnEventNotificationRemoveRequest; 974 event EventNotificationRemoveRequest OnEventNotificationRemoveRequest;
@@ -1015,6 +1020,7 @@ namespace OpenSim.Framework
1015 void InPacket(object NewPack); 1020 void InPacket(object NewPack);
1016 void ProcessInPacket(Packet NewPack); 1021 void ProcessInPacket(Packet NewPack);
1017 void Close(); 1022 void Close();
1023 void Close(bool sendStop);
1018 void Kick(string message); 1024 void Kick(string message);
1019 1025
1020 /// <summary> 1026 /// <summary>
diff --git a/OpenSim/Framework/IMoneyModule.cs b/OpenSim/Framework/IMoneyModule.cs
index 3d4873d..ea6ed4b 100644
--- a/OpenSim/Framework/IMoneyModule.cs
+++ b/OpenSim/Framework/IMoneyModule.cs
@@ -40,6 +40,7 @@ namespace OpenSim.Framework
40 bool AmountCovered(IClientAPI client, int amount); 40 bool AmountCovered(IClientAPI client, 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 c107143..282a128 100644
--- a/OpenSim/Framework/LandData.cs
+++ b/OpenSim/Framework/LandData.cs
@@ -60,7 +60,7 @@ namespace OpenSim.Framework
60 60
61 private uint _flags = (uint) ParcelFlags.AllowFly | (uint) ParcelFlags.AllowLandmark | 61 private uint _flags = (uint) ParcelFlags.AllowFly | (uint) ParcelFlags.AllowLandmark |
62 (uint) ParcelFlags.AllowAPrimitiveEntry | 62 (uint) ParcelFlags.AllowAPrimitiveEntry |
63 (uint) ParcelFlags.AllowDeedToGroup | (uint) ParcelFlags.AllowTerraform | 63 (uint) ParcelFlags.AllowDeedToGroup |
64 (uint) ParcelFlags.CreateObjects | (uint) ParcelFlags.AllowOtherScripts | 64 (uint) ParcelFlags.CreateObjects | (uint) ParcelFlags.AllowOtherScripts |
65 (uint) ParcelFlags.SoundLocal; 65 (uint) ParcelFlags.SoundLocal;
66 66
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 1b6a1d2..9cfc7ed 100644
--- a/OpenSim/Framework/PrimitiveBaseShape.cs
+++ b/OpenSim/Framework/PrimitiveBaseShape.cs
@@ -720,7 +720,12 @@ namespace OpenSim.Framework
720 return _lightColorR; 720 return _lightColorR;
721 } 721 }
722 set { 722 set {
723 _lightColorR = value; 723 if (value < 0)
724 _lightColorR = 0;
725 else if (value > 1.0f)
726 _lightColorR = 1.0f;
727 else
728 _lightColorR = value;
724 } 729 }
725 } 730 }
726 731
@@ -729,7 +734,12 @@ namespace OpenSim.Framework
729 return _lightColorG; 734 return _lightColorG;
730 } 735 }
731 set { 736 set {
732 _lightColorG = value; 737 if (value < 0)
738 _lightColorG = 0;
739 else if (value > 1.0f)
740 _lightColorG = 1.0f;
741 else
742 _lightColorG = value;
733 } 743 }
734 } 744 }
735 745
@@ -738,7 +748,12 @@ namespace OpenSim.Framework
738 return _lightColorB; 748 return _lightColorB;
739 } 749 }
740 set { 750 set {
741 _lightColorB = value; 751 if (value < 0)
752 _lightColorB = 0;
753 else if (value > 1.0f)
754 _lightColorB = 1.0f;
755 else
756 _lightColorB = value;
742 } 757 }
743 } 758 }
744 759
@@ -747,7 +762,12 @@ namespace OpenSim.Framework
747 return _lightColorA; 762 return _lightColorA;
748 } 763 }
749 set { 764 set {
750 _lightColorA = value; 765 if (value < 0)
766 _lightColorA = 0;
767 else if (value > 1.0f)
768 _lightColorA = 1.0f;
769 else
770 _lightColorA = value;
751 } 771 }
752 } 772 }
753 773
@@ -1410,7 +1430,7 @@ namespace OpenSim.Framework
1410 prim.Textures = this.Textures; 1430 prim.Textures = this.Textures;
1411 1431
1412 prim.Properties = new Primitive.ObjectProperties(); 1432 prim.Properties = new Primitive.ObjectProperties();
1413 prim.Properties.Name = "Primitive"; 1433 prim.Properties.Name = "Object";
1414 prim.Properties.Description = ""; 1434 prim.Properties.Description = "";
1415 prim.Properties.CreatorID = UUID.Zero; 1435 prim.Properties.CreatorID = UUID.Zero;
1416 prim.Properties.GroupID = UUID.Zero; 1436 prim.Properties.GroupID = UUID.Zero;
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs
index f7c080f..db6c26f 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;
@@ -506,6 +508,10 @@ namespace OpenSim.Framework
506 m_regionLocX = Convert.ToUInt32(locationElements[0]); 508 m_regionLocX = Convert.ToUInt32(locationElements[0]);
507 m_regionLocY = Convert.ToUInt32(locationElements[1]); 509 m_regionLocY = Convert.ToUInt32(locationElements[1]);
508 510
511
512 // Datastore (is this implemented? Omitted from example!)
513 DataStore = config.GetString("Datastore", String.Empty);
514
509 // Internal IP 515 // Internal IP
510 IPAddress address; 516 IPAddress address;
511 517
@@ -604,6 +610,9 @@ namespace OpenSim.Framework
604 string location = String.Format("{0},{1}", m_regionLocX, m_regionLocY); 610 string location = String.Format("{0},{1}", m_regionLocX, m_regionLocY);
605 config.Set("Location", location); 611 config.Set("Location", location);
606 612
613 if (DataStore != String.Empty)
614 config.Set("Datastore", DataStore);
615
607 config.Set("InternalAddress", m_internalEndPoint.Address.ToString()); 616 config.Set("InternalAddress", m_internalEndPoint.Address.ToString());
608 config.Set("InternalPort", m_internalEndPoint.Port); 617 config.Set("InternalPort", m_internalEndPoint.Port);
609 618
@@ -789,6 +798,9 @@ namespace OpenSim.Framework
789 case "sim_location_y": 798 case "sim_location_y":
790 m_regionLocY = (uint) configuration_result; 799 m_regionLocY = (uint) configuration_result;
791 break; 800 break;
801 case "datastore":
802 DataStore = (string) configuration_result;
803 break;
792 case "internal_ip_address": 804 case "internal_ip_address":
793 IPAddress address = (IPAddress) configuration_result; 805 IPAddress address = (IPAddress) configuration_result;
794 m_internalEndPoint = new IPEndPoint(address, 0); 806 m_internalEndPoint = new IPEndPoint(address, 0);
@@ -939,6 +951,11 @@ namespace OpenSim.Framework
939 return regionInfo; 951 return regionInfo;
940 } 952 }
941 953
954 public int getInternalEndPointPort()
955 {
956 return m_internalEndPoint.Port;
957 }
958
942 public Dictionary<string, object> ToKeyValuePairs() 959 public Dictionary<string, object> ToKeyValuePairs()
943 { 960 {
944 Dictionary<string, object> kvp = new Dictionary<string, object>(); 961 Dictionary<string, object> kvp = new Dictionary<string, object>();
@@ -957,4 +974,4 @@ namespace OpenSim.Framework
957 return kvp; 974 return kvp;
958 } 975 }
959 } 976 }
960} \ No newline at end of file 977}
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 673cf20..f0786fc 100644
--- a/OpenSim/Framework/RegionSettings.cs
+++ b/OpenSim/Framework/RegionSettings.cs
@@ -397,5 +397,18 @@ namespace OpenSim.Framework
397 set { m_LoadedCreationID = value; } 397 set { m_LoadedCreationID = value; }
398 } 398 }
399 399
400 private bool m_GodBlockSearch = false;
401 public bool GodBlockSearch
402 {
403 get { return m_GodBlockSearch; }
404 set { m_GodBlockSearch = value; }
405 }
406
407 private bool m_Casino = false;
408 public bool Casino
409 {
410 get { return m_Casino; }
411 set { m_Casino = value; }
412 }
400 } 413 }
401} 414}
diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
index db063f1..3551d5d 100644
--- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs
+++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
@@ -304,7 +304,7 @@ namespace OpenSim.Framework.Servers
304 304
305 EnhanceVersionInformation(); 305 EnhanceVersionInformation();
306 306
307 m_log.Info("[STARTUP]: OpenSimulator version: " + m_version + Environment.NewLine); 307 m_log.Info("[STARTUP]: Careminster version: " + m_version + Environment.NewLine);
308 // clr version potentially is more confusing than helpful, since it doesn't tell us if we're running under Mono/MS .NET and 308 // clr version potentially is more confusing than helpful, since it doesn't tell us if we're running under Mono/MS .NET and
309 // the clr version number doesn't match the project version number under Mono. 309 // the clr version number doesn't match the project version number under Mono.
310 //m_log.Info("[STARTUP]: Virtual machine runtime version: " + Environment.Version + Environment.NewLine); 310 //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 3aed9a8..b45ed7b 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -1510,11 +1510,34 @@ namespace OpenSim.Framework.Servers.HttpServer
1510 1510
1511 internal void DoHTTPGruntWork(Hashtable responsedata, OSHttpResponse response) 1511 internal void DoHTTPGruntWork(Hashtable responsedata, OSHttpResponse response)
1512 { 1512 {
1513 //m_log.Info("[BASE HTTP SERVER]: Doing HTTP Grunt work with response"); 1513 int responsecode;
1514 int responsecode = (int)responsedata["int_response_code"]; 1514 string responseString;
1515 string responseString = (string)responsedata["str_response_string"]; 1515 string contentType;
1516 string contentType = (string)responsedata["content_type"];
1517 1516
1517 if (responsedata == null)
1518 {
1519 responsecode = 500;
1520 responseString = "No response could be obtained";
1521 contentType = "text/plain";
1522 responsedata = new Hashtable();
1523 }
1524 else
1525 {
1526 try
1527 {
1528 //m_log.Info("[BASE HTTP SERVER]: Doing HTTP Grunt work with response");
1529 responsecode = (int)responsedata["int_response_code"];
1530 responseString = (string)responsedata["str_response_string"];
1531 contentType = (string)responsedata["content_type"];
1532 }
1533 catch
1534 {
1535 responsecode = 500;
1536 responseString = "No response could be obtained";
1537 contentType = "text/plain";
1538 responsedata = new Hashtable();
1539 }
1540 }
1518 1541
1519 if (responsedata.ContainsKey("error_status_text")) 1542 if (responsedata.ContainsKey("error_status_text"))
1520 { 1543 {
diff --git a/OpenSim/Framework/Servers/VersionInfo.cs b/OpenSim/Framework/Servers/VersionInfo.cs
index f30cb7a..b2bb962 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.3"; 32 private const string VERSION_NUMBER = "0.7.3CM";
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,
@@ -49,7 +49,7 @@ namespace OpenSim
49 49
50 public static string GetVersionString(string versionNumber, Flavour flavour) 50 public static string GetVersionString(string versionNumber, Flavour flavour)
51 { 51 {
52 string versionString = "OpenSim " + versionNumber + " " + flavour; 52 string versionString = "Careminster " + versionNumber + " " + flavour;
53 return versionString.PadRight(VERSIONINFO_VERSION_LENGTH); 53 return versionString.PadRight(VERSIONINFO_VERSION_LENGTH);
54 } 54 }
55 55
diff --git a/OpenSim/Framework/TaskInventoryDictionary.cs b/OpenSim/Framework/TaskInventoryDictionary.cs
index 421bd5d..814758a 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,155 @@ 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 StackTrace stackTrace = new StackTrace(); // get call stack
102 StackFrame[] stackFrames = stackTrace.GetFrames(); // get method calls (frames)
103
104 // write call stack method names
105 foreach (StackFrame stackFrame in stackFrames)
106 {
107 m_log.Error("[SceneObjectGroup.m_parts] "+(stackFrame.GetMethod().Name)); // write method name
108 }
109 }
110 catch
111 {}
112 m_itemLock.ExitReadLock();
113 }
114 if (m_itemLock.RecursiveWriteCount > 0)
115 {
116 m_log.Error("[TaskInventoryDictionary] Recursive write lock requested. This should not happen and means something needs to be fixed.");
117 m_itemLock.ExitWriteLock();
118 }
119
120 while (!m_itemLock.TryEnterReadLock(60000))
121 {
122 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.");
123 if (m_itemLock.IsWriteLockHeld)
124 {
125 m_itemLock = new System.Threading.ReaderWriterLockSlim();
126 System.Console.WriteLine("------------------------------------------");
127 System.Console.WriteLine("My call stack:\n" + Environment.StackTrace);
128 System.Console.WriteLine("------------------------------------------");
129 System.Console.WriteLine("Locker's call stack:\n" + WriterStack);
130 System.Console.WriteLine("------------------------------------------");
131 LockedByThread = null;
132 ReadLockers.Clear();
133 }
134 }
135 }
136 else
137 {
138 if (m_itemLock.RecursiveReadCount>0)
139 {
140 m_itemLock.ExitReadLock();
141 }
142 }
143 }
144
145 /// <summary>
146 /// Lock our inventory list for writing (many can read, one can write)
147 /// </summary>
148 public void LockItemsForWrite(bool locked)
149 {
150 if (locked)
151 {
152 //Enter a write lock, wait indefinately for one to open.
153 if (m_itemLock.RecursiveReadCount > 0)
154 {
155 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.");
156 m_itemLock.ExitReadLock();
157 }
158 if (m_itemLock.RecursiveWriteCount > 0)
159 {
160 m_log.Error("[TaskInventoryDictionary] Recursive write lock requested. This should not happen and means something needs to be fixed.");
161 m_itemLock.ExitWriteLock();
162 }
163 while (!m_itemLock.TryEnterWriteLock(60000))
164 {
165 if (m_itemLock.IsWriteLockHeld)
166 {
167 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.");
168 System.Console.WriteLine("------------------------------------------");
169 System.Console.WriteLine("My call stack:\n" + Environment.StackTrace);
170 System.Console.WriteLine("------------------------------------------");
171 System.Console.WriteLine("Locker's call stack:\n" + WriterStack);
172 System.Console.WriteLine("------------------------------------------");
173 }
174 else
175 {
176 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.");
177 System.Console.WriteLine("------------------------------------------");
178 System.Console.WriteLine("My call stack:\n" + Environment.StackTrace);
179 System.Console.WriteLine("------------------------------------------");
180 foreach (KeyValuePair<Thread, string> kvp in ReadLockers)
181 {
182 System.Console.WriteLine("Locker name {0} call stack:\n" + kvp.Value, kvp.Key.Name);
183 System.Console.WriteLine("------------------------------------------");
184 }
185 }
186 m_itemLock = new System.Threading.ReaderWriterLockSlim();
187 ReadLockers.Clear();
188 }
189
190 LockedByThread = Thread.CurrentThread;
191 WriterStack = Environment.StackTrace;
192 }
193 else
194 {
195 if (m_itemLock.RecursiveWriteCount > 0)
196 {
197 m_itemLock.ExitWriteLock();
198 }
199 }
200 }
48 201
49 #region ICloneable Members 202 #region ICloneable Members
50 203
@@ -52,14 +205,13 @@ namespace OpenSim.Framework
52 { 205 {
53 TaskInventoryDictionary clone = new TaskInventoryDictionary(); 206 TaskInventoryDictionary clone = new TaskInventoryDictionary();
54 207
55 lock (this) 208 m_itemLock.EnterReadLock();
209 foreach (UUID uuid in Keys)
56 { 210 {
57 foreach (UUID uuid in Keys) 211 clone.Add(uuid, (TaskInventoryItem) this[uuid].Clone());
58 {
59 clone.Add(uuid, (TaskInventoryItem) this[uuid].Clone());
60 }
61 } 212 }
62 213 m_itemLock.ExitReadLock();
214
63 return clone; 215 return clone;
64 } 216 }
65 217
diff --git a/OpenSim/Framework/TaskInventoryItem.cs b/OpenSim/Framework/TaskInventoryItem.cs
index 30d775c..be2b8c8 100644
--- a/OpenSim/Framework/TaskInventoryItem.cs
+++ b/OpenSim/Framework/TaskInventoryItem.cs
@@ -121,9 +121,12 @@ namespace OpenSim.Framework
121 private UUID _permsGranter; 121 private UUID _permsGranter;
122 private int _permsMask; 122 private int _permsMask;
123 private int _type = 0; 123 private int _type = 0;
124 private UUID _oldID; 124 private UUID _oldID = UUID.Zero;
125 125
126 private bool _ownerChanged = false; 126 private bool _ownerChanged = false;
127
128 // This used ONLY during copy. It can't be relied on at other times!
129 private bool _scriptRunning = true;
127 130
128 public UUID AssetID { 131 public UUID AssetID {
129 get { 132 get {
@@ -387,6 +390,15 @@ namespace OpenSim.Framework
387 } 390 }
388 } 391 }
389 392
393 public bool ScriptRunning {
394 get {
395 return _scriptRunning;
396 }
397 set {
398 _scriptRunning = value;
399 }
400 }
401
390 // See ICloneable 402 // See ICloneable
391 403
392 #region ICloneable Members 404 #region ICloneable Members
@@ -404,7 +416,8 @@ namespace OpenSim.Framework
404 /// <param name="partID">The new part ID to which this item belongs</param> 416 /// <param name="partID">The new part ID to which this item belongs</param>
405 public void ResetIDs(UUID partID) 417 public void ResetIDs(UUID partID)
406 { 418 {
407 OldItemID = ItemID; 419 if (_oldID == UUID.Zero)
420 _oldID = ItemID;
408 ItemID = UUID.Random(); 421 ItemID = UUID.Random();
409 ParentPartID = partID; 422 ParentPartID = partID;
410 ParentID = partID; 423 ParentID = partID;
diff --git a/OpenSim/Framework/Tests/MundaneFrameworkTests.cs b/OpenSim/Framework/Tests/MundaneFrameworkTests.cs
index 76de6be..34a3f15 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 21cfc09..0b2fbb9 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -431,19 +431,25 @@ namespace OpenSim.Framework
431 /// </summary> 431 /// </summary>
432 /// <param name="data"></param> 432 /// <param name="data"></param>
433 /// <returns></returns> 433 /// <returns></returns>
434
434 public static string Md5Hash(string data) 435 public static string Md5Hash(string data)
435 { 436 {
436 byte[] dataMd5 = ComputeMD5Hash(data); 437 return Md5Hash(data, Encoding.Default);
438 }
439
440 public static string Md5Hash(string data, Encoding encoding)
441 {
442 byte[] dataMd5 = ComputeMD5Hash(data, encoding);
437 StringBuilder sb = new StringBuilder(); 443 StringBuilder sb = new StringBuilder();
438 for (int i = 0; i < dataMd5.Length; i++) 444 for (int i = 0; i < dataMd5.Length; i++)
439 sb.AppendFormat("{0:x2}", dataMd5[i]); 445 sb.AppendFormat("{0:x2}", dataMd5[i]);
440 return sb.ToString(); 446 return sb.ToString();
441 } 447 }
442 448
443 private static byte[] ComputeMD5Hash(string data) 449 private static byte[] ComputeMD5Hash(string data, Encoding encoding)
444 { 450 {
445 MD5 md5 = MD5.Create(); 451 MD5 md5 = MD5.Create();
446 return md5.ComputeHash(Encoding.Default.GetBytes(data)); 452 return md5.ComputeHash(encoding.GetBytes(data));
447 } 453 }
448 454
449 /// <summary> 455 /// <summary>
@@ -451,6 +457,12 @@ namespace OpenSim.Framework
451 /// </summary> 457 /// </summary>
452 /// <param name="data"></param> 458 /// <param name="data"></param>
453 /// <returns></returns> 459 /// <returns></returns>
460
461 public static string SHA1Hash(string data, Encoding enc)
462 {
463 return SHA1Hash(enc.GetBytes(data));
464 }
465
454 public static string SHA1Hash(string data) 466 public static string SHA1Hash(string data)
455 { 467 {
456 return SHA1Hash(Encoding.Default.GetBytes(data)); 468 return SHA1Hash(Encoding.Default.GetBytes(data));
@@ -1055,19 +1067,19 @@ namespace OpenSim.Framework
1055 { 1067 {
1056 string os = String.Empty; 1068 string os = String.Empty;
1057 1069
1058 if (Environment.OSVersion.Platform != PlatformID.Unix) 1070// if (Environment.OSVersion.Platform != PlatformID.Unix)
1059 { 1071// {
1060 os = Environment.OSVersion.ToString(); 1072// os = Environment.OSVersion.ToString();
1061 } 1073// }
1062 else 1074// else
1063 { 1075// {
1064 os = ReadEtcIssue(); 1076// os = ReadEtcIssue();
1065 } 1077// }
1066 1078//
1067 if (os.Length > 45) 1079// if (os.Length > 45)
1068 { 1080// {
1069 os = os.Substring(0, 45); 1081// os = os.Substring(0, 45);
1070 } 1082// }
1071 1083
1072 return os; 1084 return os;
1073 } 1085 }
@@ -1200,7 +1212,7 @@ namespace OpenSim.Framework
1200 1212
1201 public static Guid GetHashGuid(string data, string salt) 1213 public static Guid GetHashGuid(string data, string salt)
1202 { 1214 {
1203 byte[] hash = ComputeMD5Hash(data + salt); 1215 byte[] hash = ComputeMD5Hash(data + salt, Encoding.Default);
1204 1216
1205 //string s = BitConverter.ToString(hash); 1217 //string s = BitConverter.ToString(hash);
1206 1218
diff --git a/OpenSim/Framework/Watchdog.cs b/OpenSim/Framework/Watchdog.cs
index 2dd6ebe..fa94109 100644
--- a/OpenSim/Framework/Watchdog.cs
+++ b/OpenSim/Framework/Watchdog.cs
@@ -240,7 +240,7 @@ namespace OpenSim.Framework
240 240
241 lock (m_threads) 241 lock (m_threads)
242 { 242 {
243 int now = Environment.TickCount & Int32.MaxValue; 243 int now = Environment.TickCount;
244 244
245 foreach (ThreadWatchdogInfo threadInfo in m_threads.Values) 245 foreach (ThreadWatchdogInfo threadInfo in m_threads.Values)
246 { 246 {
@@ -266,4 +266,4 @@ namespace OpenSim.Framework
266 m_watchdogTimer.Start(); 266 m_watchdogTimer.Start();
267 } 267 }
268 } 268 }
269} \ No newline at end of file 269}
diff --git a/OpenSim/Framework/WebUtil.cs b/OpenSim/Framework/WebUtil.cs
index c6be79e..6ce122b 100644
--- a/OpenSim/Framework/WebUtil.cs
+++ b/OpenSim/Framework/WebUtil.cs
@@ -243,6 +243,7 @@ namespace OpenSim.Framework
243 catch (Exception ex) 243 catch (Exception ex)
244 { 244 {
245 errorMessage = ex.Message; 245 errorMessage = ex.Message;
246 m_log.Debug("[WEB UTIL]: Exception making request: " + ex.ToString());
246 } 247 }
247 finally 248 finally
248 { 249 {
@@ -309,7 +310,7 @@ namespace OpenSim.Framework
309 /// </summary> 310 /// </summary>
310 public static OSDMap PostToService(string url, NameValueCollection data) 311 public static OSDMap PostToService(string url, NameValueCollection data)
311 { 312 {
312 return ServiceFormRequest(url,data,10000); 313 return ServiceFormRequest(url,data, 20000);
313 } 314 }
314 315
315 public static OSDMap ServiceFormRequest(string url, NameValueCollection data, int timeout) 316 public static OSDMap ServiceFormRequest(string url, NameValueCollection data, int timeout)
@@ -923,11 +924,18 @@ namespace OpenSim.Framework
923 /// the request. You'll want to make sure you deal with this as they're not uncommon</exception> 924 /// the request. You'll want to make sure you deal with this as they're not uncommon</exception>
924 public static TResponse MakeRequest<TRequest, TResponse>(string verb, string requestUrl, TRequest obj) 925 public static TResponse MakeRequest<TRequest, TResponse>(string verb, string requestUrl, TRequest obj)
925 { 926 {
927 return MakeRequest<TRequest, TResponse>(verb, requestUrl, obj, 0);
928 }
929
930 public static TResponse MakeRequest<TRequest, TResponse>(string verb, string requestUrl, TRequest obj, int pTimeout)
931 {
926 Type type = typeof(TRequest); 932 Type type = typeof(TRequest);
927 TResponse deserial = default(TResponse); 933 TResponse deserial = default(TResponse);
928 934
929 WebRequest request = WebRequest.Create(requestUrl); 935 WebRequest request = WebRequest.Create(requestUrl);
930 request.Method = verb; 936 request.Method = verb;
937 if (pTimeout != 0)
938 request.Timeout = pTimeout * 1000;
931 939
932 if ((verb == "POST") || (verb == "PUT")) 940 if ((verb == "POST") || (verb == "PUT"))
933 { 941 {