Merge branch 'master' into careminster
Conflicts: OpenSim/Data/MySQL/MySQLSimulationData.cs OpenSim/Region/Framework/Scenes/EventManager.cs OpenSim/Region/Framework/Scenes/SceneObjectGroup.csavinationmerge
						commit
						ffcee82b1d
					
				| 
						 | 
				
			
			@ -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
 | 
			
		||||
  
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -199,6 +199,8 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
        /// <remarks>On failure : Throw an exception and attempt to reconnect to database</remarks>
 | 
			
		||||
        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))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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.
 | 
			
		||||
    /// </remarks>
 | 
			
		||||
    public class DAMap : IDictionary<string, OSDMap>, 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
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns the number of data stores.
 | 
			
		||||
        /// Sanitise the map to remove any namespaces or stores that are not OSDMap.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int Count { get { lock (this) { return m_map.Count; } } }
 | 
			
		||||
        
 | 
			
		||||
        public bool IsReadOnly { get { return false; } }
 | 
			
		||||
        
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns the names of the data stores.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ICollection<string> Keys { get { lock (this) { return m_map.Keys; } } }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns all the data stores.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public ICollection<OSDMap> Values
 | 
			
		||||
        /// <param name='map'>
 | 
			
		||||
        /// </param>
 | 
			
		||||
        public static void SanitiseMap(DAMap daMap)
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            List<string> 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<OSDMap> stores = new List<OSDMap>(m_map.Count);
 | 
			
		||||
                    foreach (OSD llsd in m_map.Values)
 | 
			
		||||
                        stores.Add((OSDMap)llsd);
 | 
			
		||||
                    return stores;
 | 
			
		||||
                    if (keysToRemove == null)
 | 
			
		||||
                        keysToRemove = new List<string>();
 | 
			
		||||
 | 
			
		||||
                    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<string>();
 | 
			
		||||
 | 
			
		||||
                        keysToRemove.Add(key);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (keysToRemove != null)
 | 
			
		||||
                    foreach (string key in keysToRemove)
 | 
			
		||||
                        nsOsdMap.Remove(key);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets one data store.
 | 
			
		||||
        /// Get the number of namespaces
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="key">Store name</param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public OSDMap this[string key] 
 | 
			
		||||
        {    
 | 
			
		||||
            get  
 | 
			
		||||
            {                    
 | 
			
		||||
                OSD llsd;
 | 
			
		||||
                
 | 
			
		||||
        public int CountNamespaces { get { lock (this) { return m_map.Count; } } }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Get the number of stores.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        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;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Retrieve a Dynamic Attribute store
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="ns">namespace for the store - use "OpenSim" for in-core modules</param>
 | 
			
		||||
        /// <param name="storeName">name of the store within the namespace</param>
 | 
			
		||||
        /// <returns>an OSDMap representing the stored data, or null if not found</returns>
 | 
			
		||||
        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;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Saves a Dynamic attribute store
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="ns">namespace for the store - use "OpenSim" for in-core modules</param>
 | 
			
		||||
        /// <param name="storeName">name of the store within the namespace</param>
 | 
			
		||||
        /// <param name="store">an OSDMap representing the data to store</param>
 | 
			
		||||
        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.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name='key'></param>
 | 
			
		||||
        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<string, OSDMap> 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<string, OSDMap> 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<string, OSDMap>[] array, int index)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
                    // Don't keep empty namespaces around
 | 
			
		||||
                    if (namespaceOsdMap.Count <= 0)
 | 
			
		||||
                        m_map.Remove(ns);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        public bool Remove(KeyValuePair<string, OSDMap> kvp)
 | 
			
		||||
        {
 | 
			
		||||
            lock (this)
 | 
			
		||||
                return m_map.Remove(kvp.Key);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public System.Collections.IDictionaryEnumerator GetEnumerator()
 | 
			
		||||
        {
 | 
			
		||||
            lock (this)
 | 
			
		||||
                return m_map.GetEnumerator();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        IEnumerator<KeyValuePair<string, OSDMap>> IEnumerable<KeyValuePair<string, OSDMap>>.GetEnumerator()
 | 
			
		||||
        {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        IEnumerator IEnumerable.GetEnumerator()
 | 
			
		||||
        {
 | 
			
		||||
            lock (this)
 | 
			
		||||
                return m_map.GetEnumerator();
 | 
			
		||||
        }        
 | 
			
		||||
            return false;
 | 
			
		||||
        }     
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -42,22 +42,22 @@ namespace OpenSim.Framework
 | 
			
		|||
    /// This class stores and retrieves dynamic objects.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    /// <remarks>
 | 
			
		||||
    /// Experimental - DO NOT USE.
 | 
			
		||||
    /// Experimental - DO NOT USE.  Does not yet have namespace support.
 | 
			
		||||
    /// </remarks>
 | 
			
		||||
    public class DOMap
 | 
			
		||||
    {
 | 
			
		||||
        private IDictionary<string, object> 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<string, object>();
 | 
			
		||||
 | 
			
		||||
                m_map.Add(key, dynObj);
 | 
			
		||||
                m_map.Add(objName, dynObj);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -972,11 +972,12 @@ namespace OpenSim.Framework
 | 
			
		|||
        /// <param name="verb"></param>
 | 
			
		||||
        /// <param name="requestUrl"></param>
 | 
			
		||||
        /// <param name="obj"> </param>
 | 
			
		||||
        /// <param name="timeoutsecs"> </param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        ///
 | 
			
		||||
        /// <exception cref="System.Net.WebException">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</exception>
 | 
			
		||||
        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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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<IUserManagement>();
 | 
			
		||||
                                    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)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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<IDialogModule>();
 | 
			
		||||
 | 
			
		||||
                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;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -320,7 +320,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
 | 
			
		|||
            else
 | 
			
		||||
            {
 | 
			
		||||
                names[0] = "Unknown";
 | 
			
		||||
                names[1] = "UserUMMTGUN2";
 | 
			
		||||
                names[1] = "UserUMMTGUN3";
 | 
			
		||||
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
                    });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -144,7 +144,20 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
 | 
			
		|||
                    <Flags>None</Flags>
 | 
			
		||||
                    <CollisionSound><Guid>00000000-0000-0000-0000-000000000000</Guid></CollisionSound>
 | 
			
		||||
                    <CollisionSoundVolume>0</CollisionSoundVolume>
 | 
			
		||||
                    <DynAttrs><llsd><map><key>MyStore</key><map><key>the answer</key><integer>42</integer></map></map></llsd></DynAttrs>
 | 
			
		||||
                    <DynAttrs>
 | 
			
		||||
                        <llsd>
 | 
			
		||||
                            <map>
 | 
			
		||||
                                <key>MyNamespace</key>
 | 
			
		||||
                                <map>                                
 | 
			
		||||
                                    <key>MyStore</key>
 | 
			
		||||
                                    <map>   
 | 
			
		||||
                                        <key>the answer</key>
 | 
			
		||||
                                        <integer>42</integer>
 | 
			
		||||
                                    </map>
 | 
			
		||||
                                </map>
 | 
			
		||||
                            </map>
 | 
			
		||||
                        </llsd>
 | 
			
		||||
                    </DynAttrs>
 | 
			
		||||
                </SceneObjectPart>
 | 
			
		||||
            </RootPart>
 | 
			
		||||
            <OtherParts />
 | 
			
		||||
| 
						 | 
				
			
			@ -333,7 +346,20 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
 | 
			
		|||
                <EveryoneMask>0</EveryoneMask>
 | 
			
		||||
                <NextOwnerMask>2147483647</NextOwnerMask>
 | 
			
		||||
                <Flags>None</Flags>
 | 
			
		||||
                <DynAttrs><llsd><map><key>MyStore</key><map><key>last words</key><string>Rosebud</string></map></map></llsd></DynAttrs>
 | 
			
		||||
                <DynAttrs>
 | 
			
		||||
                    <llsd>
 | 
			
		||||
                        <map>
 | 
			
		||||
                            <key>MyNamespace</key>
 | 
			
		||||
                            <map>                                
 | 
			
		||||
                                <key>MyStore</key>
 | 
			
		||||
                                <map>   
 | 
			
		||||
                                    <key>last words</key>
 | 
			
		||||
                                    <string>Rosebud</string>
 | 
			
		||||
                                </map>
 | 
			
		||||
                            </map>
 | 
			
		||||
                        </map>
 | 
			
		||||
                    </llsd>
 | 
			
		||||
                </DynAttrs>
 | 
			
		||||
                <SitTargetAvatar><UUID>00000000-0000-0000-0000-000000000000</UUID></SitTargetAvatar>
 | 
			
		||||
            </SceneObjectPart>
 | 
			
		||||
            <OtherParts />
 | 
			
		||||
| 
						 | 
				
			
			@ -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());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1026,6 +1026,16 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
        /// </remarks>
 | 
			
		||||
        public event TeleportFail OnTeleportFail;
 | 
			
		||||
 | 
			
		||||
//        public delegate void GatherUuids(SceneObjectPart sop, IDictionary<UUID, AssetType> assetUuids);
 | 
			
		||||
//
 | 
			
		||||
//        /// <summary>
 | 
			
		||||
//        /// Triggered when UUIDs referenced by a scene object are being gathered for archiving, hg transfer, etc.
 | 
			
		||||
//        /// </summary>
 | 
			
		||||
//        /// <remarks>
 | 
			
		||||
//        /// The listener should add references to the IDictionary<UUID, AssetType> as appropriate.
 | 
			
		||||
//        /// </remarks>
 | 
			
		||||
//        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<UUID, AssetType> 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);
 | 
			
		||||
//                    }
 | 
			
		||||
//                }
 | 
			
		||||
//            }
 | 
			
		||||
//        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3810,20 +3810,23 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
        /// <summary>
 | 
			
		||||
        /// Update just the root prim position in a linkset
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="pos"></param>
 | 
			
		||||
        public void UpdateRootPosition(Vector3 pos)
 | 
			
		||||
        /// <param name="newPos"></param>
 | 
			
		||||
        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++)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		|||
//            }
 | 
			
		||||
//        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gather all of the texture asset UUIDs used to reference "Materials" such as normal and specular maps
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -217,20 +221,27 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
        public void GatherMaterialsUuids(SceneObjectPart part, IDictionary<UUID, AssetType> 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
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
       
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Get an asset synchronously, potentially using an asynchronous callback.  If the
 | 
			
		||||
        /// asynchronous callback is used, we will wait for it to complete.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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<SceneObjectGroup>(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<UUID, OSDMap> kvp in m_knownMaterials)
 | 
			
		||||
            lock (m_knownMaterials)
 | 
			
		||||
            {
 | 
			
		||||
                OSDMap matMap = new OSDMap();
 | 
			
		||||
                foreach (KeyValuePair<UUID, OSDMap> 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.
 | 
			
		||||
//        /// <summary>
 | 
			
		||||
//        /// Gather all of the texture asset UUIDs used to reference "Materials" such as normal and specular maps
 | 
			
		||||
//        /// </summary>
 | 
			
		||||
//        /// <param name="part"></param>
 | 
			
		||||
//        /// <param name="assetUuids"></param>
 | 
			
		||||
//        private void GatherMaterialsUuids(SceneObjectPart part, IDictionary<UUID, AssetType> 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);
 | 
			
		||||
//                            }
 | 
			
		||||
//                        }
 | 
			
		||||
//                    }
 | 
			
		||||
//                }
 | 
			
		||||
//            }
 | 
			
		||||
//        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -277,7 +277,7 @@ namespace OpenSim.Services.Connectors.Hypergrid
 | 
			
		|||
            {
 | 
			
		||||
                reply = SynchronousRestFormsRequester.MakeRequest("POST",
 | 
			
		||||
                        uri,
 | 
			
		||||
                        ServerUtils.BuildQueryString(sendData));
 | 
			
		||||
                        ServerUtils.BuildQueryString(sendData), 15);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -746,4 +746,16 @@
 | 
			
		|||
     <Key Name="assetType" Value="0" />
 | 
			
		||||
     <Key Name="fileName" Value="735198cf-6ea0-2550-e222-21d3c6a341ae.j2c" />
 | 
			
		||||
  </Section>
 | 
			
		||||
 | 
			
		||||
  <!-- 
 | 
			
		||||
    Texture expected by viewers for properly displaying stars in the night sky
 | 
			
		||||
    Name derives from label in viewer code
 | 
			
		||||
  -->
 | 
			
		||||
  <Section Name="IMG_BLOOM1 Texture">
 | 
			
		||||
    <Key Name="assetID" Value="3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef"/>
 | 
			
		||||
    <Key Name="name" Value="IMG_BLOOM1 Texture"/>
 | 
			
		||||
    <Key Name="assetType" Value="0" />
 | 
			
		||||
    <Key Name="fileName" Value="IMG_BLOOM1.jp2" />
 | 
			
		||||
  </Section>
 | 
			
		||||
 | 
			
		||||
</Nini>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue