diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt
index 7601a50690..f621cd3966 100644
--- a/CONTRIBUTORS.txt
+++ b/CONTRIBUTORS.txt
@@ -58,7 +58,7 @@ where we are today.
= Additional OpenSim Contributors =
-These folks have contributed code patches to OpenSim to help make it
+These folks have contributed code patches or content to OpenSimulator to help make it
what it is today.
* aduffy70
@@ -163,6 +163,7 @@ what it is today.
* webmage (IBM)
* Xantor
* Y. Nitta
+* YoshikoFazuku
* YZh
* Zackary Geers aka Kunnis Basiat
* Zha Ewry
@@ -215,5 +216,3 @@ In addition, we would like to thank:
* The Mono Project
* The NANT Developers
* Microsoft (.NET, MSSQL-Adapters)
-*x
-
diff --git a/OpenSim/Addons/Groups/GroupsModule.cs b/OpenSim/Addons/Groups/GroupsModule.cs
index 5b3b9f64ca..5959baca40 100644
--- a/OpenSim/Addons/Groups/GroupsModule.cs
+++ b/OpenSim/Addons/Groups/GroupsModule.cs
@@ -766,14 +766,17 @@ namespace OpenSim.Groups
remoteClient.SendCreateGroupReply(UUID.Zero, false, "Insufficient funds to create a group.");
return UUID.Zero;
}
- money.ApplyCharge(remoteClient.AgentId, money.GroupCreationCharge, MoneyTransactionType.GroupCreate);
}
+
string reason = string.Empty;
UUID groupID = m_groupData.CreateGroup(remoteClient.AgentId, name, charter, showInList, insigniaID, membershipFee, openEnrollment,
allowPublish, maturePublish, remoteClient.AgentId, out reason);
if (groupID != UUID.Zero)
{
+ if (money != null)
+ money.ApplyCharge(remoteClient.AgentId, money.GroupCreationCharge, MoneyTransactionType.GroupCreate);
+
remoteClient.SendCreateGroupReply(groupID, true, "Group created successfullly");
// Update the founder with new group information.
diff --git a/OpenSim/Data/MSSQL/MSSQLSimulationData.cs b/OpenSim/Data/MSSQL/MSSQLSimulationData.cs
index 00af3a01e2..bc5beebf2e 100644
--- a/OpenSim/Data/MSSQL/MSSQLSimulationData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLSimulationData.cs
@@ -2100,7 +2100,7 @@ VALUES
parameters.Add(_Database.CreateParameter("LinkNumber", prim.LinkNum));
parameters.Add(_Database.CreateParameter("MediaURL", prim.MediaUrl));
- if (prim.DynAttrs.Count > 0)
+ if (prim.DynAttrs.CountNamespaces > 0)
parameters.Add(_Database.CreateParameter("DynAttrs", prim.DynAttrs.ToXml()));
else
parameters.Add(_Database.CreateParameter("DynAttrs", null));
diff --git a/OpenSim/Data/MySQL/MySQLSimulationData.cs b/OpenSim/Data/MySQL/MySQLSimulationData.cs
index 537ec850d3..feacbb2ee3 100644
--- a/OpenSim/Data/MySQL/MySQLSimulationData.cs
+++ b/OpenSim/Data/MySQL/MySQLSimulationData.cs
@@ -1730,7 +1730,7 @@ namespace OpenSim.Data.MySQL
else
cmd.Parameters.AddWithValue("Vehicle", String.Empty);
- if (prim.DynAttrs.Count > 0)
+ if (prim.DynAttrs.CountNamespaces > 0)
cmd.Parameters.AddWithValue("DynAttrs", prim.DynAttrs.ToXml());
else
cmd.Parameters.AddWithValue("DynAttrs", null);
diff --git a/OpenSim/Data/MySQL/MySQLXAssetData.cs b/OpenSim/Data/MySQL/MySQLXAssetData.cs
index 15ac9215e2..5f1d2ee665 100644
--- a/OpenSim/Data/MySQL/MySQLXAssetData.cs
+++ b/OpenSim/Data/MySQL/MySQLXAssetData.cs
@@ -199,6 +199,8 @@ namespace OpenSim.Data.MySQL
/// On failure : Throw an exception and attempt to reconnect to database
public void StoreAsset(AssetBase asset)
{
+// m_log.DebugFormat("[XASSETS DB]: Storing asset {0} {1}", asset.Name, asset.ID);
+
lock (m_dbLock)
{
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
diff --git a/OpenSim/Data/SQLite/SQLiteSimulationData.cs b/OpenSim/Data/SQLite/SQLiteSimulationData.cs
index a369b2b37a..52502b359a 100644
--- a/OpenSim/Data/SQLite/SQLiteSimulationData.cs
+++ b/OpenSim/Data/SQLite/SQLiteSimulationData.cs
@@ -2176,7 +2176,7 @@ namespace OpenSim.Data.SQLite
row["MediaURL"] = prim.MediaUrl;
- if (prim.DynAttrs.Count > 0)
+ if (prim.DynAttrs.CountNamespaces > 0)
row["DynAttrs"] = prim.DynAttrs.ToXml();
else
row["DynAttrs"] = null;
diff --git a/OpenSim/Framework/DAMap.cs b/OpenSim/Framework/DAMap.cs
index df4a6bc4a7..5c729e883f 100644
--- a/OpenSim/Framework/DAMap.cs
+++ b/OpenSim/Framework/DAMap.cs
@@ -29,10 +29,12 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
+using System.Reflection;
using System.Text;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
+using log4net;
using OpenMetaverse;
using OpenMetaverse.StructuredData;
@@ -48,13 +50,20 @@ namespace OpenSim.Framework
/// within their data store. However, avoid storing large amounts of data because that
/// would slow down database access.
///
- public class DAMap : IDictionary, IXmlSerializable
+ public class DAMap : IXmlSerializable
{
- private static readonly int MIN_STORE_NAME_LENGTH = 4;
+// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
- protected OSDMap m_map;
-
- public DAMap() { m_map = new OSDMap(); }
+ private static readonly int MIN_NAMESPACE_LENGTH = 4;
+
+ private OSDMap m_map = new OSDMap();
+
+ // WARNING: this is temporary for experimentation only, it will be removed!!!!
+ public OSDMap TopLevelMap
+ {
+ get { return m_map; }
+ set { m_map = value; }
+ }
public XmlSchema GetSchema() { return null; }
@@ -64,39 +73,34 @@ namespace OpenSim.Framework
map.ReadXml(rawXml);
return map;
}
-
+
+ public void ReadXml(XmlReader reader)
+ {
+ ReadXml(reader.ReadInnerXml());
+ }
+
public void ReadXml(string rawXml)
{
// System.Console.WriteLine("Trying to deserialize [{0}]", rawXml);
lock (this)
+ {
m_map = (OSDMap)OSDParser.DeserializeLLSDXml(rawXml);
- }
-
- // WARNING: this is temporary for experimentation only, it will be removed!!!!
- public OSDMap TopLevelMap
- {
- get { return m_map; }
- set { m_map = value; }
- }
-
-
- public void ReadXml(XmlReader reader)
- {
- ReadXml(reader.ReadInnerXml());
- }
-
- public string ToXml()
- {
- lock (this)
- return OSDParser.SerializeLLSDXmlString(m_map);
+ SanitiseMap(this);
+ }
}
public void WriteXml(XmlWriter writer)
{
writer.WriteRaw(ToXml());
}
-
+
+ public string ToXml()
+ {
+ lock (this)
+ return OSDParser.SerializeLLSDXmlString(m_map);
+ }
+
public void CopyFrom(DAMap other)
{
// Deep copy
@@ -104,7 +108,7 @@ namespace OpenSim.Framework
string data = null;
lock (other)
{
- if (other.Count > 0)
+ if (other.CountNamespaces > 0)
{
data = OSDParser.SerializeLLSDXmlString(other.m_map);
}
@@ -120,59 +124,136 @@ namespace OpenSim.Framework
}
///
- /// Returns the number of data stores.
+ /// Sanitise the map to remove any namespaces or stores that are not OSDMap.
///
- public int Count { get { lock (this) { return m_map.Count; } } }
-
- public bool IsReadOnly { get { return false; } }
-
- ///
- /// Returns the names of the data stores.
- ///
- public ICollection Keys { get { lock (this) { return m_map.Keys; } } }
-
- ///
- /// Returns all the data stores.
- ///
- public ICollection Values
+ ///
+ ///
+ public static void SanitiseMap(DAMap daMap)
{
- get
+ List keysToRemove = null;
+
+ // Hard-coded special case that needs to be removed in the future. Normally, modules themselves should
+ // handle reading data from old locations
+ bool osMaterialsMigrationRequired = false;
+
+ OSDMap namespacesMap = daMap.m_map;
+
+ foreach (string key in namespacesMap.Keys)
{
- lock (this)
+// Console.WriteLine("Processing ns {0}", key);
+ if (!(namespacesMap[key] is OSDMap))
{
- List stores = new List(m_map.Count);
- foreach (OSD llsd in m_map.Values)
- stores.Add((OSDMap)llsd);
- return stores;
+ if (keysToRemove == null)
+ keysToRemove = new List();
+
+ keysToRemove.Add(key);
}
}
+
+ if (keysToRemove != null)
+ {
+ foreach (string key in keysToRemove)
+ {
+// Console.WriteLine ("Removing bad ns {0}", key);
+ namespacesMap.Remove(key);
+ }
+ }
+
+ foreach (OSD nsOsd in namespacesMap.Values)
+ {
+ OSDMap nsOsdMap = (OSDMap)nsOsd;
+ keysToRemove = null;
+
+ foreach (string key in nsOsdMap.Keys)
+ {
+ if (!(nsOsdMap[key] is OSDMap))
+ {
+ if (keysToRemove == null)
+ keysToRemove = new List();
+
+ keysToRemove.Add(key);
+ }
+ }
+
+ if (keysToRemove != null)
+ foreach (string key in keysToRemove)
+ nsOsdMap.Remove(key);
+ }
}
-
+
///
- /// Gets or sets one data store.
+ /// Get the number of namespaces
///
- /// Store name
- ///
- public OSDMap this[string key]
- {
- get
- {
- OSD llsd;
-
+ public int CountNamespaces { get { lock (this) { return m_map.Count; } } }
+
+ ///
+ /// Get the number of stores.
+ ///
+ public int CountStores
+ {
+ get
+ {
+ int count = 0;
+
lock (this)
{
- if (m_map.TryGetValue(key, out llsd))
- return (OSDMap)llsd;
- else
- return null;
+ foreach (OSD osdNamespace in m_map)
+ {
+ count += ((OSDMap)osdNamespace).Count;
+ }
}
- }
-
- set
+
+ return count;
+ }
+ }
+
+ ///
+ /// Retrieve a Dynamic Attribute store
+ ///
+ /// namespace for the store - use "OpenSim" for in-core modules
+ /// name of the store within the namespace
+ /// an OSDMap representing the stored data, or null if not found
+ public OSDMap GetStore(string ns, string storeName)
+ {
+ OSD namespaceOsd;
+
+ lock (this)
{
- ValidateKey(key);
- lock (this)
- m_map[key] = value;
+ if (m_map.TryGetValue(ns, out namespaceOsd))
+ {
+ OSD store;
+
+ if (((OSDMap)namespaceOsd).TryGetValue(storeName, out store))
+ return (OSDMap)store;
+ }
+ }
+
+ return null;
+ }
+
+ ///
+ /// Saves a Dynamic attribute store
+ ///
+ /// namespace for the store - use "OpenSim" for in-core modules
+ /// name of the store within the namespace
+ /// an OSDMap representing the data to store
+ public void SetStore(string ns, string storeName, OSDMap store)
+ {
+ ValidateNamespace(ns);
+ OSDMap nsMap;
+
+ lock (this)
+ {
+ if (!m_map.ContainsKey(ns))
+ {
+ nsMap = new OSDMap();
+ m_map[ns] = nsMap;
+ }
+
+ nsMap = (OSDMap)m_map[ns];
+
+// m_log.DebugFormat("[DA MAP]: Setting store to {0}:{1}", ns, storeName);
+ nsMap[storeName] = store;
}
}
@@ -180,54 +261,46 @@ namespace OpenSim.Framework
/// Validate the key used for storing separate data stores.
///
///
- public static void ValidateKey(string key)
+ public static void ValidateNamespace(string ns)
{
- if (key.Length < MIN_STORE_NAME_LENGTH)
- throw new Exception("Minimum store name length is " + MIN_STORE_NAME_LENGTH);
+ if (ns.Length < MIN_NAMESPACE_LENGTH)
+ throw new Exception("Minimum namespace length is " + MIN_NAMESPACE_LENGTH);
}
- public bool ContainsKey(string key)
+ public bool ContainsStore(string ns, string storeName)
{
- lock (this)
- return m_map.ContainsKey(key);
- }
+ OSD namespaceOsd;
- public void Add(string key, OSDMap store)
- {
- ValidateKey(key);
- lock (this)
- m_map.Add(key, store);
- }
-
- public void Add(KeyValuePair kvp)
- {
- ValidateKey(kvp.Key);
- lock (this)
- m_map.Add(kvp.Key, kvp.Value);
- }
-
- public bool Remove(string key)
- {
- lock (this)
- return m_map.Remove(key);
- }
-
- public bool TryGetValue(string key, out OSDMap store)
- {
lock (this)
{
- OSD llsd;
- if (m_map.TryGetValue(key, out llsd))
+ if (m_map.TryGetValue(ns, out namespaceOsd))
{
- store = (OSDMap)llsd;
- return true;
- }
- else
- {
- store = null;
- return false;
+ return ((OSDMap)namespaceOsd).ContainsKey(storeName);
}
}
+
+ return false;
+ }
+
+ public bool TryGetStore(string ns, string storeName, out OSDMap store)
+ {
+ OSD namespaceOsd;
+
+ lock (this)
+ {
+ if (m_map.TryGetValue(ns, out namespaceOsd))
+ {
+ OSD storeOsd;
+
+ bool result = ((OSDMap)namespaceOsd).TryGetValue(storeName, out storeOsd);
+ store = (OSDMap)storeOsd;
+
+ return result;
+ }
+ }
+
+ store = null;
+ return false;
}
public void Clear()
@@ -235,39 +308,25 @@ namespace OpenSim.Framework
lock (this)
m_map.Clear();
}
-
- public bool Contains(KeyValuePair kvp)
+
+ public bool RemoveStore(string ns, string storeName)
{
+ OSD namespaceOsd;
+
lock (this)
- return m_map.ContainsKey(kvp.Key);
- }
+ {
+ if (m_map.TryGetValue(ns, out namespaceOsd))
+ {
+ OSDMap namespaceOsdMap = (OSDMap)namespaceOsd;
+ namespaceOsdMap.Remove(storeName);
- public void CopyTo(KeyValuePair[] array, int index)
- {
- throw new NotImplementedException();
- }
+ // Don't keep empty namespaces around
+ if (namespaceOsdMap.Count <= 0)
+ m_map.Remove(ns);
+ }
+ }
- public bool Remove(KeyValuePair kvp)
- {
- lock (this)
- return m_map.Remove(kvp.Key);
- }
-
- public System.Collections.IDictionaryEnumerator GetEnumerator()
- {
- lock (this)
- return m_map.GetEnumerator();
- }
-
- IEnumerator> IEnumerable>.GetEnumerator()
- {
- return null;
- }
-
- IEnumerator IEnumerable.GetEnumerator()
- {
- lock (this)
- return m_map.GetEnumerator();
- }
+ return false;
+ }
}
}
\ No newline at end of file
diff --git a/OpenSim/Framework/DOMap.cs b/OpenSim/Framework/DOMap.cs
index 755e129a13..f5b650b375 100644
--- a/OpenSim/Framework/DOMap.cs
+++ b/OpenSim/Framework/DOMap.cs
@@ -42,22 +42,22 @@ namespace OpenSim.Framework
/// This class stores and retrieves dynamic objects.
///
///
- /// Experimental - DO NOT USE.
+ /// Experimental - DO NOT USE. Does not yet have namespace support.
///
public class DOMap
{
private IDictionary m_map;
- public void Add(string key, object dynObj)
+ public void Add(string ns, string objName, object dynObj)
{
- DAMap.ValidateKey(key);
+ DAMap.ValidateNamespace(ns);
lock (this)
{
if (m_map == null)
m_map = new Dictionary();
- m_map.Add(key, dynObj);
+ m_map.Add(objName, dynObj);
}
}
diff --git a/OpenSim/Framework/WebUtil.cs b/OpenSim/Framework/WebUtil.cs
index 312e9a92b9..dfa37cac1d 100644
--- a/OpenSim/Framework/WebUtil.cs
+++ b/OpenSim/Framework/WebUtil.cs
@@ -972,11 +972,12 @@ namespace OpenSim.Framework
///
///
///
+ ///
///
///
/// Thrown if we encounter a network issue while posting
/// the request. You'll want to make sure you deal with this as they're not uncommon
- public static string MakeRequest(string verb, string requestUrl, string obj)
+ public static string MakeRequest(string verb, string requestUrl, string obj, int timeoutsecs)
{
int reqnum = WebUtil.RequestNumber++;
@@ -990,6 +991,8 @@ namespace OpenSim.Framework
WebRequest request = WebRequest.Create(requestUrl);
request.Method = verb;
+ if (timeoutsecs > 0)
+ request.Timeout = timeoutsecs * 1000;
string respstring = String.Empty;
int tickset = Util.EnvironmentTickCountSubtract(tickstart);
@@ -1086,6 +1089,11 @@ namespace OpenSim.Framework
return respstring;
}
+
+ public static string MakeRequest(string verb, string requestUrl, string obj)
+ {
+ return MakeRequest(verb, requestUrl, obj, -1);
+ }
}
public class SynchronousRestObjectRequester
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs
index b3e3aa2e97..ae45b992fb 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs
@@ -183,6 +183,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
if (Util.ParseUniversalUserIdentifier(finfo.Friend, out id, out url, out first, out last, out tmp))
{
IUserManagement uMan = m_Scenes[0].RequestModuleInterface();
+ m_log.DebugFormat("[HGFRIENDS MODULE]: caching {0}", finfo.Friend);
uMan.AddUser(id, url + ";" + first + " " + last);
}
}
@@ -347,31 +348,31 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
return null;
}
- public override FriendInfo[] GetFriendsFromService(IClientAPI client)
- {
-// m_log.DebugFormat("[HGFRIENDS MODULE]: Entering GetFriendsFromService for {0}", client.Name);
- Boolean agentIsLocal = true;
- if (UserManagementModule != null)
- agentIsLocal = UserManagementModule.IsLocalGridUser(client.AgentId);
+// public override FriendInfo[] GetFriendsFromService(IClientAPI client)
+// {
+//// m_log.DebugFormat("[HGFRIENDS MODULE]: Entering GetFriendsFromService for {0}", client.Name);
+// Boolean agentIsLocal = true;
+// if (UserManagementModule != null)
+// agentIsLocal = UserManagementModule.IsLocalGridUser(client.AgentId);
- if (agentIsLocal)
- return base.GetFriendsFromService(client);
+// if (agentIsLocal)
+// return base.GetFriendsFromService(client);
- FriendInfo[] finfos = new FriendInfo[0];
- // Foreigner
- AgentCircuitData agentClientCircuit = ((Scene)(client.Scene)).AuthenticateHandler.GetAgentCircuitData(client.CircuitCode);
- if (agentClientCircuit != null)
- {
- //[XXX] string agentUUI = Util.ProduceUserUniversalIdentifier(agentClientCircuit);
+// FriendInfo[] finfos = new FriendInfo[0];
+// // Foreigner
+// AgentCircuitData agentClientCircuit = ((Scene)(client.Scene)).AuthenticateHandler.GetAgentCircuitData(client.CircuitCode);
+// if (agentClientCircuit != null)
+// {
+// //[XXX] string agentUUI = Util.ProduceUserUniversalIdentifier(agentClientCircuit);
- finfos = FriendsService.GetFriends(client.AgentId.ToString());
- m_log.DebugFormat("[HGFRIENDS MODULE]: Fetched {0} local friends for visitor {1}", finfos.Length, client.AgentId.ToString());
- }
+// finfos = FriendsService.GetFriends(client.AgentId.ToString());
+// m_log.DebugFormat("[HGFRIENDS MODULE]: Fetched {0} local friends for visitor {1}", finfos.Length, client.AgentId.ToString());
+// }
-// m_log.DebugFormat("[HGFRIENDS MODULE]: Exiting GetFriendsFromService for {0}", client.Name);
+//// m_log.DebugFormat("[HGFRIENDS MODULE]: Exiting GetFriendsFromService for {0}", client.Name);
- return finfos;
- }
+// return finfos;
+// }
protected override bool StoreRights(UUID agentID, UUID friendID, int rights)
{
diff --git a/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DAExampleModule.cs b/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DAExampleModule.cs
index 1f1568f390..0c632b1365 100644
--- a/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DAExampleModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DAExampleModule.cs
@@ -44,11 +44,12 @@ namespace OpenSim.Region.CoreModules.Framework.DynamicAttributes.DAExampleModule
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "DAExampleModule")]
public class DAExampleModule : INonSharedRegionModule
{
-// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+ private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
- private static readonly bool ENABLED = false; // enable for testing
+ private readonly bool ENABLED = false; // enable for testing
- public const string DANamespace = "DAExample Module";
+ public const string Namespace = "Example";
+ public const string StoreName = "DA";
protected Scene m_scene;
protected IDialogModule m_dialogMod;
@@ -65,6 +66,8 @@ namespace OpenSim.Region.CoreModules.Framework.DynamicAttributes.DAExampleModule
m_scene = scene;
m_scene.EventManager.OnSceneGroupMove += OnSceneGroupMove;
m_dialogMod = m_scene.RequestModuleInterface();
+
+ m_log.DebugFormat("[DA EXAMPLE MODULE]: Added region {0}", m_scene.Name);
}
}
@@ -91,7 +94,7 @@ namespace OpenSim.Region.CoreModules.Framework.DynamicAttributes.DAExampleModule
if (sop == null)
return true;
- if (!sop.DynAttrs.TryGetValue(DANamespace, out attrs))
+ if (!sop.DynAttrs.TryGetStore(Namespace, StoreName, out attrs))
attrs = new OSDMap();
OSDInteger newValue;
@@ -106,12 +109,14 @@ namespace OpenSim.Region.CoreModules.Framework.DynamicAttributes.DAExampleModule
attrs["moves"] = newValue;
- sop.DynAttrs[DANamespace] = attrs;
+ sop.DynAttrs.SetStore(Namespace, StoreName, attrs);
}
sop.ParentGroup.HasGroupChanged = true;
- m_dialogMod.SendGeneralAlert(string.Format("{0} {1} moved {2} times", sop.Name, sop.UUID, newValue));
+ string msg = string.Format("{0} {1} moved {2} times", sop.Name, sop.UUID, newValue);
+ m_log.DebugFormat("[DA EXAMPLE MODULE]: {0}", msg);
+ m_dialogMod.SendGeneralAlert(msg);
return true;
}
diff --git a/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DOExampleModule.cs b/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DOExampleModule.cs
index 650aa35974..166a994a33 100644
--- a/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DOExampleModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DOExampleModule.cs
@@ -64,8 +64,8 @@ namespace OpenSim.Region.Framework.DynamicAttributes.DOExampleModule
private Scene m_scene;
private IDialogModule m_dialogMod;
-
- public string Name { get { return "DOExample Module"; } }
+
+ public string Name { get { return "DO"; } }
public Type ReplaceableInterface { get { return null; } }
public void Initialise(IConfigSource source) {}
@@ -106,7 +106,7 @@ namespace OpenSim.Region.Framework.DynamicAttributes.DOExampleModule
// Console.WriteLine("Here for {0}", so.Name);
- if (rootPart.DynAttrs.TryGetValue(DAExampleModule.DANamespace, out attrs))
+ if (rootPart.DynAttrs.TryGetStore(DAExampleModule.Namespace, DAExampleModule.StoreName, out attrs))
{
movesSoFar = attrs["moves"].AsInteger();
@@ -114,7 +114,7 @@ namespace OpenSim.Region.Framework.DynamicAttributes.DOExampleModule
"[DO EXAMPLE MODULE]: Found saved moves {0} for {1} in {2}", movesSoFar, so.Name, m_scene.Name);
}
- rootPart.DynObjs.Add(Name, new MyObject(movesSoFar));
+ rootPart.DynObjs.Add(DAExampleModule.Namespace, Name, new MyObject(movesSoFar));
}
private bool OnSceneGroupMove(UUID groupId, Vector3 delta)
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
index 864e1817d5..194b591460 100644
--- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
@@ -320,7 +320,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
else
{
names[0] = "Unknown";
- names[1] = "UserUMMTGUN2";
+ names[1] = "UserUMMTGUN3";
return false;
}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
index ec5751d599..99913a9b55 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
@@ -196,7 +196,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
Util.FireAndForget(delegate
{
foreach (InventoryItemBase item in items)
- UserManager.AddUser(item.CreatorIdAsUuid, item.CreatorData);
+ if (!string.IsNullOrEmpty(item.CreatorData))
+ UserManager.AddUser(item.CreatorIdAsUuid, item.CreatorData);
});
}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs
index 2d3ba82e6d..70ba9448be 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs
@@ -204,7 +204,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
Util.FireAndForget(delegate
{
foreach (InventoryItemBase item in items)
- UserManager.AddUser(item.CreatorIdAsUuid, item.CreatorData);
+ if (!string.IsNullOrEmpty(item.CreatorData))
+ UserManager.AddUser(item.CreatorIdAsUuid, item.CreatorData);
});
}
diff --git a/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs b/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs
index b4348c9d5a..66059fb8bb 100644
--- a/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs
+++ b/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs
@@ -144,7 +144,20 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
None
00000000-0000-0000-0000-000000000000
0
-
+
+
+
+ MyNamespace
+
+ MyStore
+
+ the answer
+ 42
+
+
+
+
+
@@ -333,7 +346,20 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
0
2147483647
None
- MyStorelast wordsRosebud
+
+
+
+ MyNamespace
+
+ MyStore
+
+ last words
+ Rosebud
+
+
+
+
+
00000000-0000-0000-0000-000000000000
@@ -362,7 +388,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
Assert.That(rootPart.UUID, Is.EqualTo(new UUID("e6a5a05e-e8cc-4816-8701-04165e335790")));
Assert.That(rootPart.CreatorID, Is.EqualTo(new UUID("a6dacf01-4636-4bb9-8a97-30609438af9d")));
Assert.That(rootPart.Name, Is.EqualTo("PrimMyRide"));
- OSDMap store = rootPart.DynAttrs["MyStore"];
+ OSDMap store = rootPart.DynAttrs.GetStore("MyNamespace", "MyStore");
Assert.AreEqual(42, store["the answer"].AsInteger());
// TODO: Check other properties
@@ -414,13 +440,14 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
rp.CreatorID = rpCreatorId;
rp.Shape = shape;
+ string daNamespace = "MyNamespace";
string daStoreName = "MyStore";
string daKey = "foo";
string daValue = "bar";
OSDMap myStore = new OSDMap();
myStore.Add(daKey, daValue);
rp.DynAttrs = new DAMap();
- rp.DynAttrs[daStoreName] = myStore;
+ rp.DynAttrs.SetStore(daNamespace, daStoreName, myStore);
SceneObjectGroup so = new SceneObjectGroup(rp);
@@ -481,7 +508,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
Assert.That(name, Is.EqualTo(rpName));
Assert.That(creatorId, Is.EqualTo(rpCreatorId));
Assert.NotNull(daMap);
- Assert.AreEqual(daValue, daMap[daStoreName][daKey].AsString());
+ Assert.AreEqual(daValue, daMap.GetStore(daNamespace, daStoreName)[daKey].AsString());
}
[Test]
@@ -496,7 +523,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
Assert.That(rootPart.UUID, Is.EqualTo(new UUID("9be68fdd-f740-4a0f-9675-dfbbb536b946")));
Assert.That(rootPart.CreatorID, Is.EqualTo(new UUID("b46ef588-411e-4a8b-a284-d7dcfe8e74ef")));
Assert.That(rootPart.Name, Is.EqualTo("PrimFun"));
- OSDMap store = rootPart.DynAttrs["MyStore"];
+ OSDMap store = rootPart.DynAttrs.GetStore("MyNamespace", "MyStore");
Assert.AreEqual("Rosebud", store["last words"].AsString());
// TODO: Check other properties
@@ -522,13 +549,14 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
rp.CreatorID = rpCreatorId;
rp.Shape = shape;
+ string daNamespace = "MyNamespace";
string daStoreName = "MyStore";
string daKey = "foo";
string daValue = "bar";
OSDMap myStore = new OSDMap();
myStore.Add(daKey, daValue);
rp.DynAttrs = new DAMap();
- rp.DynAttrs[daStoreName] = myStore;
+ rp.DynAttrs.SetStore(daNamespace, daStoreName, myStore);
SceneObjectGroup so = new SceneObjectGroup(rp);
@@ -585,7 +613,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
Assert.That(name, Is.EqualTo(rpName));
Assert.That(creatorId, Is.EqualTo(rpCreatorId));
Assert.NotNull(daMap);
- Assert.AreEqual(daValue, daMap[daStoreName][daKey].AsString());
+ Assert.AreEqual(daValue, daMap.GetStore(daNamespace, daStoreName)[daKey].AsString());
}
}
}
\ No newline at end of file
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index 4fec44fb7b..1018b54adb 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -1026,6 +1026,16 @@ namespace OpenSim.Region.Framework.Scenes
///
public event TeleportFail OnTeleportFail;
+// public delegate void GatherUuids(SceneObjectPart sop, IDictionary assetUuids);
+//
+// ///
+// /// Triggered when UUIDs referenced by a scene object are being gathered for archiving, hg transfer, etc.
+// ///
+// ///
+// /// The listener should add references to the IDictionary as appropriate.
+// ///
+// public event GatherUuids OnGatherUuids;
+
public class MoneyTransferArgs : EventArgs
{
public UUID sender;
@@ -3274,5 +3284,26 @@ namespace OpenSim.Region.Framework.Scenes
handler(scenePresence);
}
}
+
+// public void TriggerGatherUuids(SceneObjectPart sop, IDictionary assetUuids)
+// {
+// GatherUuids handler = OnGatherUuids;
+//
+// if (handler != null)
+// {
+// foreach (GatherUuids d in handler.GetInvocationList())
+// {
+// try
+// {
+// d(sop, assetUuids);
+// }
+// catch (Exception e)
+// {
+// m_log.ErrorFormat("[EVENT MANAGER]: Delegate for TriggerUuidGather failed - continuing {0} - {1}",
+// e.Message, e.StackTrace);
+// }
+// }
+// }
+// }
}
}
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 0a18d8a17b..9e3d8758bf 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -3810,20 +3810,23 @@ namespace OpenSim.Region.Framework.Scenes
///
/// Update just the root prim position in a linkset
///
- ///
- public void UpdateRootPosition(Vector3 pos)
+ ///
+ public void UpdateRootPosition(Vector3 newPos)
{
// needs to be called with phys building true
- Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z);
- Vector3 oldPos =
- new Vector3(AbsolutePosition.X + m_rootPart.OffsetPosition.X,
- AbsolutePosition.Y + m_rootPart.OffsetPosition.Y,
- AbsolutePosition.Z + m_rootPart.OffsetPosition.Z);
+ Vector3 oldPos;
+
+ // FIXME: This improves the situation where editing just the root prim of an attached object would send
+ // all the other parts to oblivion after detach/reattach. However, a problem remains since the root prim
+ // still ends up in the wrong position on reattach.
+ if (IsAttachment)
+ oldPos = RootPart.OffsetPosition;
+ else
+ oldPos = AbsolutePosition + RootPart.OffsetPosition;
+
Vector3 diff = oldPos - newPos;
- Vector3 axDiff = new Vector3(diff.X, diff.Y, diff.Z);
Quaternion partRotation = m_rootPart.RotationOffset;
- axDiff *= Quaternion.Inverse(partRotation);
- diff = axDiff;
+ diff *= Quaternion.Inverse(partRotation);
SceneObjectPart[] parts = m_parts.GetArray();
for (int i = 0; i < parts.Length; i++)
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
index ce4fb4012e..68918d3749 100644
--- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
+++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
@@ -1346,7 +1346,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
if (sop.MediaUrl != null)
writer.WriteElementString("MediaUrl", sop.MediaUrl.ToString());
- if (sop.DynAttrs.Count > 0)
+ if (sop.DynAttrs.CountNamespaces > 0)
{
writer.WriteStartElement("DynAttrs");
sop.DynAttrs.WriteXml(writer);
diff --git a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
index 7b47275c7d..e60a025045 100644
--- a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
+++ b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
@@ -182,7 +182,12 @@ namespace OpenSim.Region.Framework.Scenes
GatherAssetUuids(tii.AssetID, (AssetType)tii.Type, assetUuids);
}
- // get any texture UUIDs used for materials such as normal and specular maps
+ // FIXME: We need to make gathering modular but we cannot yet, since gatherers are not guaranteed
+ // to be called with scene objects that are in a scene (e.g. in the case of hg asset mapping and
+ // inventory transfer. There needs to be a way for a module to register a method without assuming a
+ // Scene.EventManager is present.
+// part.ParentGroup.Scene.EventManager.TriggerGatherUuids(part, assetUuids);
+
GatherMaterialsUuids(part, assetUuids);
}
catch (Exception e)
@@ -208,7 +213,6 @@ namespace OpenSim.Region.Framework.Scenes
// }
// }
-
///
/// Gather all of the texture asset UUIDs used to reference "Materials" such as normal and specular maps
///
@@ -217,20 +221,27 @@ namespace OpenSim.Region.Framework.Scenes
public void GatherMaterialsUuids(SceneObjectPart part, IDictionary assetUuids)
{
// scan thru the dynAttrs map of this part for any textures used as materials
- OSDMap OSMaterials = null;
+ OSD osdMaterials = null;
lock (part.DynAttrs)
{
- if (part.DynAttrs.ContainsKey("OS:Materials"))
- OSMaterials = part.DynAttrs["OS:Materials"];
- if (OSMaterials != null && OSMaterials.ContainsKey("Materials"))
+ if (part.DynAttrs.ContainsStore("OpenSim", "Materials"))
+ {
+ OSDMap materialsStore = part.DynAttrs.GetStore("OpenSim", "Materials");
+
+ if (materialsStore == null)
+ return;
+
+ materialsStore.TryGetValue("Materials", out osdMaterials);
+ }
+
+ if (osdMaterials != null)
{
- OSD osd = OSMaterials["Materials"];
//m_log.Info("[UUID Gatherer]: found Materials: " + OSDParser.SerializeJsonString(osd));
- if (osd is OSDArray)
+ if (osdMaterials is OSDArray)
{
- OSDArray matsArr = osd as OSDArray;
+ OSDArray matsArr = osdMaterials as OSDArray;
foreach (OSDMap matMap in matsArr)
{
try
@@ -268,8 +279,7 @@ namespace OpenSim.Region.Framework.Scenes
}
}
}
-
-
+
///
/// Get an asset synchronously, potentially using an asynchronous callback. If the
/// asynchronous callback is used, we will wait for it to complete.
diff --git a/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs b/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs
index 4ab6609c36..3a39971078 100644
--- a/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs
+++ b/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs
@@ -121,9 +121,11 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
return;
m_log.DebugFormat("[MaterialsDemoModule]: REGION {0} ADDED", scene.RegionInfo.RegionName);
+
m_scene = scene;
- m_scene.EventManager.OnRegisterCaps += new EventManager.RegisterCapsEvent(OnRegisterCaps);
- m_scene.EventManager.OnObjectAddedToScene += new Action(EventManager_OnObjectAddedToScene);
+ m_scene.EventManager.OnRegisterCaps += OnRegisterCaps;
+ m_scene.EventManager.OnObjectAddedToScene += EventManager_OnObjectAddedToScene;
+// m_scene.EventManager.OnGatherUuids += GatherMaterialsUuids;
}
void EventManager_OnObjectAddedToScene(SceneObjectGroup obj)
@@ -157,6 +159,10 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
if (!m_enabled)
return;
+ m_scene.EventManager.OnRegisterCaps -= OnRegisterCaps;
+ m_scene.EventManager.OnObjectAddedToScene -= EventManager_OnObjectAddedToScene;
+// m_scene.EventManager.OnGatherUuids -= GatherMaterialsUuids;
+
m_log.DebugFormat("[MaterialsDemoModule]: REGION {0} REMOVED", scene.RegionInfo.RegionName);
}
@@ -167,18 +173,21 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
OSDMap GetMaterial(UUID id)
{
OSDMap map = null;
- if (m_knownMaterials.ContainsKey(id))
+ lock (m_knownMaterials)
{
- map = new OSDMap();
- map["ID"] = OSD.FromBinary(id.GetBytes());
- map["Material"] = m_knownMaterials[id];
+ if (m_knownMaterials.ContainsKey(id))
+ {
+ map = new OSDMap();
+ map["ID"] = OSD.FromBinary(id.GetBytes());
+ map["Material"] = m_knownMaterials[id];
+ }
}
return map;
}
void GetStoredMaterialsForPart(SceneObjectPart part)
{
- OSDMap OSMaterials = null;
+ OSD OSMaterials = null;
OSDArray matsArr = null;
if (part.DynAttrs == null)
@@ -188,23 +197,24 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
lock (part.DynAttrs)
{
- if (part.DynAttrs.ContainsKey("OS:Materials"))
- OSMaterials = part.DynAttrs["OS:Materials"];
- if (OSMaterials != null && OSMaterials.ContainsKey("Materials"))
+ if (part.DynAttrs.ContainsStore("OpenSim", "Materials"))
{
+ OSDMap materialsStore = part.DynAttrs.GetStore("OpenSim", "Materials");
- OSD osd = OSMaterials["Materials"];
- if (osd is OSDArray)
- matsArr = osd as OSDArray;
+ if (materialsStore == null)
+ return;
+
+ materialsStore.TryGetValue("Materials", out OSMaterials);
}
+
+ if (OSMaterials != null && OSMaterials is OSDArray)
+ matsArr = OSMaterials as OSDArray;
+ else
+ return;
}
- if (OSMaterials == null)
- return;
-
m_log.Info("[MaterialsDemoModule]: OSMaterials: " + OSDParser.SerializeJsonString(OSMaterials));
-
if (matsArr == null)
{
m_log.Info("[MaterialsDemoModule]: matsArr is null :( ");
@@ -215,13 +225,13 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
{
if (elemOsd != null && elemOsd is OSDMap)
{
-
OSDMap matMap = elemOsd as OSDMap;
if (matMap.ContainsKey("ID") && matMap.ContainsKey("Material"))
{
try
{
- m_knownMaterials[matMap["ID"].AsUUID()] = (OSDMap)matMap["Material"];
+ lock (m_knownMaterials)
+ m_knownMaterials[matMap["ID"].AsUUID()] = (OSDMap)matMap["Material"];
}
catch (Exception e)
{
@@ -232,7 +242,6 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
}
}
-
void StoreMaterialsForPart(SceneObjectPart part)
{
try
@@ -246,8 +255,11 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
if (te.DefaultTexture != null)
{
- if (m_knownMaterials.ContainsKey(te.DefaultTexture.MaterialID))
- mats[te.DefaultTexture.MaterialID] = m_knownMaterials[te.DefaultTexture.MaterialID];
+ lock (m_knownMaterials)
+ {
+ if (m_knownMaterials.ContainsKey(te.DefaultTexture.MaterialID))
+ mats[te.DefaultTexture.MaterialID] = m_knownMaterials[te.DefaultTexture.MaterialID];
+ }
}
if (te.FaceTextures != null)
@@ -256,8 +268,11 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
{
if (face != null)
{
- if (m_knownMaterials.ContainsKey(face.MaterialID))
- mats[face.MaterialID] = m_knownMaterials[face.MaterialID];
+ lock (m_knownMaterials)
+ {
+ if (m_knownMaterials.ContainsKey(face.MaterialID))
+ mats[face.MaterialID] = m_knownMaterials[face.MaterialID];
+ }
}
}
}
@@ -277,7 +292,7 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
OSMaterials["Materials"] = matsArr;
lock (part.DynAttrs)
- part.DynAttrs["OS:Materials"] = OSMaterials;
+ part.DynAttrs.SetStore("OpenSim", "Materials", OSMaterials);
}
catch (Exception e)
{
@@ -285,7 +300,6 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
}
}
-
public string RenderMaterialsPostCap(string request, string path,
string param, IOSHttpRequest httpRequest,
IOSHttpResponse httpResponse)
@@ -319,18 +333,21 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
try
{
UUID id = new UUID(elem.AsBinary(), 0);
-
- if (m_knownMaterials.ContainsKey(id))
- {
- m_log.Info("[MaterialsDemoModule]: request for known material ID: " + id.ToString());
- OSDMap matMap = new OSDMap();
- matMap["ID"] = OSD.FromBinary(id.GetBytes());
- matMap["Material"] = m_knownMaterials[id];
- respArr.Add(matMap);
+ lock (m_knownMaterials)
+ {
+ if (m_knownMaterials.ContainsKey(id))
+ {
+ m_log.Info("[MaterialsDemoModule]: request for known material ID: " + id.ToString());
+ OSDMap matMap = new OSDMap();
+ matMap["ID"] = OSD.FromBinary(id.GetBytes());
+
+ matMap["Material"] = m_knownMaterials[id];
+ respArr.Add(matMap);
+ }
+ else
+ m_log.Info("[MaterialsDemoModule]: request for UNKNOWN material ID: " + id.ToString());
}
- else
- m_log.Info("[MaterialsDemoModule]: request for UNKNOWN material ID: " + id.ToString());
}
catch (Exception e)
{
@@ -368,7 +385,8 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
m_log.Debug("[MaterialsDemoModule]: mat: " + OSDParser.SerializeJsonString(mat));
UUID id = HashOsd(mat);
- m_knownMaterials[id] = mat;
+ lock (m_knownMaterials)
+ m_knownMaterials[id] = mat;
var sop = m_scene.GetSceneObjectPart(matLocalID);
@@ -476,24 +494,22 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
m_log.Debug("[MaterialsDemoModule]: GET cap handler");
OSDMap resp = new OSDMap();
-
-
int matsCount = 0;
-
OSDArray allOsd = new OSDArray();
- foreach (KeyValuePair kvp in m_knownMaterials)
+ lock (m_knownMaterials)
{
- OSDMap matMap = new OSDMap();
+ foreach (KeyValuePair kvp in m_knownMaterials)
+ {
+ OSDMap matMap = new OSDMap();
- matMap["ID"] = OSD.FromBinary(kvp.Key.GetBytes());
-
- matMap["Material"] = kvp.Value;
- allOsd.Add(matMap);
- matsCount++;
+ matMap["ID"] = OSD.FromBinary(kvp.Key.GetBytes());
+ matMap["Material"] = kvp.Value;
+ allOsd.Add(matMap);
+ matsCount++;
+ }
}
-
resp["Zipped"] = ZCompressOSD(allOsd, false);
m_log.Debug("[MaterialsDemoModule]: matsCount: " + matsCount.ToString());
@@ -575,5 +591,72 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
output.Flush();
}
+ // FIXME: This code is currently still in UuidGatherer since we cannot use Scene.EventManager as some
+ // calls to the gatherer are done for objects with no scene.
+// ///
+// /// Gather all of the texture asset UUIDs used to reference "Materials" such as normal and specular maps
+// ///
+// ///
+// ///
+// private void GatherMaterialsUuids(SceneObjectPart part, IDictionary assetUuids)
+// {
+// // scan thru the dynAttrs map of this part for any textures used as materials
+// OSD osdMaterials = null;
+//
+// lock (part.DynAttrs)
+// {
+// if (part.DynAttrs.ContainsStore("OpenSim", "Materials"))
+// {
+// OSDMap materialsStore = part.DynAttrs.GetStore("OpenSim", "Materials");
+// if (materialsStore == null)
+// return;
+//
+// materialsStore.TryGetValue("Materials", out osdMaterials);
+// }
+//
+// if (osdMaterials != null)
+// {
+// //m_log.Info("[UUID Gatherer]: found Materials: " + OSDParser.SerializeJsonString(osd));
+//
+// if (osdMaterials is OSDArray)
+// {
+// OSDArray matsArr = osdMaterials as OSDArray;
+// foreach (OSDMap matMap in matsArr)
+// {
+// try
+// {
+// if (matMap.ContainsKey("Material"))
+// {
+// OSDMap mat = matMap["Material"] as OSDMap;
+// if (mat.ContainsKey("NormMap"))
+// {
+// UUID normalMapId = mat["NormMap"].AsUUID();
+// if (normalMapId != UUID.Zero)
+// {
+// assetUuids[normalMapId] = AssetType.Texture;
+// //m_log.Info("[UUID Gatherer]: found normal map ID: " + normalMapId.ToString());
+// }
+// }
+// if (mat.ContainsKey("SpecMap"))
+// {
+// UUID specularMapId = mat["SpecMap"].AsUUID();
+// if (specularMapId != UUID.Zero)
+// {
+// assetUuids[specularMapId] = AssetType.Texture;
+// //m_log.Info("[UUID Gatherer]: found specular map ID: " + specularMapId.ToString());
+// }
+// }
+// }
+//
+// }
+// catch (Exception e)
+// {
+// m_log.Warn("[MaterialsDemoModule]: exception getting materials: " + e.Message);
+// }
+// }
+// }
+// }
+// }
+// }
}
}
\ No newline at end of file
diff --git a/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs b/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs
index ff45d94b7a..cc4325ac4c 100644
--- a/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs
+++ b/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs
@@ -119,16 +119,14 @@ namespace OpenSim.Server.Handlers.Asset
if (asset == null || asset.Data.Length == 0)
{
- MainConsole.Instance.Output("Asset not found");
+ MainConsole.Instance.OutputFormat("Could not find asset with ID {0}", args[2]);
return;
}
- m_AssetService.Delete(args[2]);
-
- //MainConsole.Instance.Output("Asset deleted");
- // TODO: Implement this
-
- MainConsole.Instance.Output("Asset deletion not supported by database");
+ if (!m_AssetService.Delete(asset.ID))
+ MainConsole.Instance.OutputFormat("ERROR: Could not delete asset {0} {1}", asset.ID, asset.Name);
+ else
+ MainConsole.Instance.OutputFormat("Deleted asset {0} {1}", asset.ID, asset.Name);
}
void HandleDumpAsset(string module, string[] args)
diff --git a/OpenSim/Services/AssetService/XAssetService.cs b/OpenSim/Services/AssetService/XAssetService.cs
index 8a2ca7cf6d..6047616f65 100644
--- a/OpenSim/Services/AssetService/XAssetService.cs
+++ b/OpenSim/Services/AssetService/XAssetService.cs
@@ -205,15 +205,16 @@ namespace OpenSim.Services.AssetService
if (!UUID.TryParse(id, out assetID))
return false;
- // Don't bother deleting from a chained asset service. This isn't a big deal since deleting happens
- // very rarely.
+ if (HasChainedAssetService)
+ m_ChainedAssetService.Delete(id);
return m_Database.Delete(id);
}
private void MigrateFromChainedService(AssetBase asset)
{
- Util.FireAndForget(o => { Store(asset); m_ChainedAssetService.Delete(asset.ID); });
+ Store(asset);
+ m_ChainedAssetService.Delete(asset.ID);
}
}
}
\ No newline at end of file
diff --git a/OpenSim/Services/Connectors/Hypergrid/HGFriendsServicesConnector.cs b/OpenSim/Services/Connectors/Hypergrid/HGFriendsServicesConnector.cs
index e984a544fd..622d4e1712 100644
--- a/OpenSim/Services/Connectors/Hypergrid/HGFriendsServicesConnector.cs
+++ b/OpenSim/Services/Connectors/Hypergrid/HGFriendsServicesConnector.cs
@@ -277,7 +277,7 @@ namespace OpenSim.Services.Connectors.Hypergrid
{
reply = SynchronousRestFormsRequester.MakeRequest("POST",
uri,
- ServerUtils.BuildQueryString(sendData));
+ ServerUtils.BuildQueryString(sendData), 15);
}
catch (Exception e)
{
diff --git a/bin/assets/TexturesAssetSet/IMG_BLOOM1.jp2 b/bin/assets/TexturesAssetSet/IMG_BLOOM1.jp2
new file mode 100644
index 0000000000..8186d493b5
Binary files /dev/null and b/bin/assets/TexturesAssetSet/IMG_BLOOM1.jp2 differ
diff --git a/bin/assets/TexturesAssetSet/TexturesAssetSet.xml b/bin/assets/TexturesAssetSet/TexturesAssetSet.xml
index a4a0cba127..a29ac38bfb 100644
--- a/bin/assets/TexturesAssetSet/TexturesAssetSet.xml
+++ b/bin/assets/TexturesAssetSet/TexturesAssetSet.xml
@@ -746,4 +746,16 @@
+
+
+
+