From d4bb430f78d9a70137957c8fe42de8fa620597ef Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Fri, 19 Oct 2007 20:28:18 +0000 Subject: [PATCH] get rid of all the ^M line endings --- .../Communications/Cache/AssetServer.cs | 312 +-- .../Communications/Cache/AssetServerBase.cs | 374 +-- .../Communications/Cache/SQLAssetServer.cs | 248 +- .../Framework/Communications/LoginService.cs | 630 +++--- .../Framework/Data.MySQL/MySQLAssetData.cs | 318 +-- .../General/Configuration/AssetConfig.cs | 166 +- .../Framework/General/Interfaces/IPlugin.cs | 114 +- .../Common/Properties/AssemblyInfo.cs | 4 +- .../ScriptServer/Region/RegionBase.cs | 228 +- OpenSim/Grid/UserServer/UserLoginService.cs | 2 +- .../Modules/AssetDownloadModule.cs | 144 +- .../Environment/Scenes/Scene.Inventory.cs | 952 ++++---- .../Environment/Types/BasicQuadTreeNode.cs | 516 ++--- .../Region/Environment/Types/UpdateQueue.cs | 158 +- .../Inventory/Properties/AssemblyInfo.cs | 70 +- OpenSim/Tests/Inventory/TestInventory.cs | 2016 ++++++++--------- 16 files changed, 3126 insertions(+), 3126 deletions(-) diff --git a/OpenSim/Framework/Communications/Cache/AssetServer.cs b/OpenSim/Framework/Communications/Cache/AssetServer.cs index b17f65a8cc..22bdc5cc66 100644 --- a/OpenSim/Framework/Communications/Cache/AssetServer.cs +++ b/OpenSim/Framework/Communications/Cache/AssetServer.cs @@ -1,157 +1,157 @@ -/* -* Copyright (c) Contributors, http://opensimulator.org/ -* See CONTRIBUTORS.TXT for a full list of copyright holders. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* * Neither the name of the OpenSim Project nor the -* names of its contributors may be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY -* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*/ -using System; -using System.Collections.Generic; -using System.IO; -using System.Threading; -using Db4objects.Db4o; -using Db4objects.Db4o.Query; -using libsecondlife; -using Nini.Config; -using OpenSim.Framework.Communications.Cache; -using OpenSim.Framework.Console; -using OpenSim.Framework.Interfaces; -using OpenSim.Framework.Types; -using OpenSim.Framework.Utilities; - -namespace OpenSim.Framework.Communications.Cache -{ - public class LocalAssetServer : AssetServerBase - { - private IObjectContainer db; - - public LocalAssetServer() - { - bool yapfile; - yapfile = File.Exists(Path.Combine(Util.dataDir(), "regionassets.yap")); - - db = Db4oFactory.OpenFile(Path.Combine(Util.dataDir(), "regionassets.yap")); - MainLog.Instance.Verbose("Db4 Asset database creation"); - - if (!yapfile) - { - SetUpAssetDatabase(); - } - } - - public void CreateAndCommitAsset(AssetBase asset) - { - AssetStorage store = new AssetStorage(); - store.Data = asset.Data; - store.Name = asset.Name; - store.UUID = asset.FullID; - db.Set(store); - db.Commit(); - } - - override public void Close() - { - base.Close(); - - if (db != null) - { - MainLog.Instance.Verbose("Closing local asset server database"); - db.Close(); - } - } - - override protected void RunRequests() - { - while (true) - { - byte[] idata = null; - bool found = false; - AssetStorage foundAsset = null; - ARequest req = this._assetRequests.Dequeue(); - IObjectSet result = db.Query(new AssetUUIDQuery(req.AssetID)); - if (result.Count > 0) - { - foundAsset = (AssetStorage)result.Next(); - found = true; - } - - AssetBase asset = new AssetBase(); - if (found) - { - asset.FullID = foundAsset.UUID; - asset.Type = foundAsset.Type; - asset.InvType = foundAsset.Type; - asset.Name = foundAsset.Name; - idata = foundAsset.Data; - asset.Data = idata; - _receiver.AssetReceived(asset, req.IsTexture); - } - else - { - //asset.FullID = ; - _receiver.AssetNotFound(req.AssetID); - } - - } - - } - - override protected void StoreAsset(AssetBase asset) - { - AssetStorage store = new AssetStorage(); - store.Data = asset.Data; - store.Name = asset.Name; - store.UUID = asset.FullID; - db.Set(store); - - CommitAssets(); - } - - protected override void CommitAssets() - { - db.Commit(); - } - - protected virtual void SetUpAssetDatabase() - { - MainLog.Instance.Verbose("LOCAL ASSET SERVER", "Setting up asset database"); - - ForEachDefaultAsset(StoreAsset); - ForEachXmlAsset(StoreAsset); - } - } - - public class AssetUUIDQuery : Predicate - { - private LLUUID _findID; - - public AssetUUIDQuery(LLUUID find) - { - _findID = find; - } - public bool Match(AssetStorage asset) - { - return (asset.UUID == _findID); - } - } +/* +* Copyright (c) Contributors, http://opensimulator.org/ +* See CONTRIBUTORS.TXT for a full list of copyright holders. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* * Neither the name of the OpenSim Project nor the +* names of its contributors may be used to endorse or promote products +* derived from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading; +using Db4objects.Db4o; +using Db4objects.Db4o.Query; +using libsecondlife; +using Nini.Config; +using OpenSim.Framework.Communications.Cache; +using OpenSim.Framework.Console; +using OpenSim.Framework.Interfaces; +using OpenSim.Framework.Types; +using OpenSim.Framework.Utilities; + +namespace OpenSim.Framework.Communications.Cache +{ + public class LocalAssetServer : AssetServerBase + { + private IObjectContainer db; + + public LocalAssetServer() + { + bool yapfile; + yapfile = File.Exists(Path.Combine(Util.dataDir(), "regionassets.yap")); + + db = Db4oFactory.OpenFile(Path.Combine(Util.dataDir(), "regionassets.yap")); + MainLog.Instance.Verbose("Db4 Asset database creation"); + + if (!yapfile) + { + SetUpAssetDatabase(); + } + } + + public void CreateAndCommitAsset(AssetBase asset) + { + AssetStorage store = new AssetStorage(); + store.Data = asset.Data; + store.Name = asset.Name; + store.UUID = asset.FullID; + db.Set(store); + db.Commit(); + } + + override public void Close() + { + base.Close(); + + if (db != null) + { + MainLog.Instance.Verbose("Closing local asset server database"); + db.Close(); + } + } + + override protected void RunRequests() + { + while (true) + { + byte[] idata = null; + bool found = false; + AssetStorage foundAsset = null; + ARequest req = this._assetRequests.Dequeue(); + IObjectSet result = db.Query(new AssetUUIDQuery(req.AssetID)); + if (result.Count > 0) + { + foundAsset = (AssetStorage)result.Next(); + found = true; + } + + AssetBase asset = new AssetBase(); + if (found) + { + asset.FullID = foundAsset.UUID; + asset.Type = foundAsset.Type; + asset.InvType = foundAsset.Type; + asset.Name = foundAsset.Name; + idata = foundAsset.Data; + asset.Data = idata; + _receiver.AssetReceived(asset, req.IsTexture); + } + else + { + //asset.FullID = ; + _receiver.AssetNotFound(req.AssetID); + } + + } + + } + + override protected void StoreAsset(AssetBase asset) + { + AssetStorage store = new AssetStorage(); + store.Data = asset.Data; + store.Name = asset.Name; + store.UUID = asset.FullID; + db.Set(store); + + CommitAssets(); + } + + protected override void CommitAssets() + { + db.Commit(); + } + + protected virtual void SetUpAssetDatabase() + { + MainLog.Instance.Verbose("LOCAL ASSET SERVER", "Setting up asset database"); + + ForEachDefaultAsset(StoreAsset); + ForEachXmlAsset(StoreAsset); + } + } + + public class AssetUUIDQuery : Predicate + { + private LLUUID _findID; + + public AssetUUIDQuery(LLUUID find) + { + _findID = find; + } + public bool Match(AssetStorage asset) + { + return (asset.UUID == _findID); + } + } } \ No newline at end of file diff --git a/OpenSim/Framework/Communications/Cache/AssetServerBase.cs b/OpenSim/Framework/Communications/Cache/AssetServerBase.cs index 858019fe81..08d5b871b1 100644 --- a/OpenSim/Framework/Communications/Cache/AssetServerBase.cs +++ b/OpenSim/Framework/Communications/Cache/AssetServerBase.cs @@ -1,188 +1,188 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Threading; -using libsecondlife; -using Nini.Config; -using OpenSim.Framework.Console; -using OpenSim.Framework.Interfaces; -using OpenSim.Framework.Types; -using OpenSim.Framework.Utilities; - -namespace OpenSim.Framework.Communications.Cache -{ - public abstract class AssetServerBase : IAssetServer - { - protected IAssetReceiver _receiver; - protected BlockingQueue _assetRequests; - protected Thread _localAssetServerThread; - protected IAssetProvider m_assetProviderPlugin; - protected object syncLock = new object(); - - protected abstract void StoreAsset(AssetBase asset); - protected abstract void CommitAssets(); - - protected abstract void RunRequests(); - - public void LoadDefaultAssets() - { - MainLog.Instance.Verbose("SQL ASSET SERVER", "Setting up asset database"); - - ForEachDefaultAsset(StoreAsset ); - ForEachXmlAsset(StoreAsset ); - - CommitAssets(); - } - - - public AssetServerBase() - { - System.Console.WriteLine("Starting Db4o asset storage system"); - this._assetRequests = new BlockingQueue(); - - this._localAssetServerThread = new Thread( RunRequests ); - this._localAssetServerThread.IsBackground = true; - this._localAssetServerThread.Start(); - } - - public void LoadAsset(AssetBase info, bool image, string filename) - { - //should request Asset from storage manager - //but for now read from file - - string dataPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "assets"); //+ folder; - string fileName = Path.Combine(dataPath, filename); - FileInfo fInfo = new FileInfo(fileName); - long numBytes = fInfo.Length; - FileStream fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); - byte[] idata = new byte[numBytes]; - BinaryReader br = new BinaryReader(fStream); - idata = br.ReadBytes((int)numBytes); - br.Close(); - fStream.Close(); - info.Data = idata; - //info.loaded=true; - } - - public void SetReceiver(IAssetReceiver receiver) - { - this._receiver = receiver; - } - - public void FetchAsset(LLUUID assetID, bool isTexture) - { - ARequest req = new ARequest(); - req.AssetID = assetID; - req.IsTexture = isTexture; - this._assetRequests.Enqueue(req); - } - - public void UpdateAsset(AssetBase asset) - { - lock (syncLock) - { - m_assetProviderPlugin.UpdateAsset(asset); - m_assetProviderPlugin.CommitAssets(); - } - } - - public void StoreAndCommitAsset(AssetBase asset) - { - lock (syncLock) - { - StoreAsset(asset); - CommitAssets(); - } - } - - public virtual void Close() - { - _localAssetServerThread.Abort( ); - } - - public void SetServerInfo(string ServerUrl, string ServerKey) - { - - } - - public virtual List GetDefaultAssets() - { - List assets = new List(); - - assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000001", "Bricks", "bricks.jp2")); - assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000002", "Plywood", "plywood.jp2")); - assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000003", "Rocks", "rocks.jp2")); - assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000004", "Granite", "granite.jp2")); - assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000005", "Hardwood", "hardwood.jp2")); - assets.Add(CreateImageAsset("00000000-0000-0000-5005-000000000005", "Prim Base Texture", "plywood.jp2")); - assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000006", "Map Base Texture", "map_base.jp2")); - assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000007", "Map Texture", "map1.jp2")); - assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000010", "Female Body Texture", "femalebody.jp2")); - assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000011", "Female Bottom Texture", "femalebottom.jp2")); - assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000012", "Female Face Texture", "femaleface.jp2")); - - assets.Add(CreateAsset("77c41e39-38f9-f75a-024e-585989bbabbb", "Skin", "base_skin.dat", false)); - assets.Add(CreateAsset("66c41e39-38f9-f75a-024e-585989bfab73", "Shape", "base_shape.dat", false)); - assets.Add(CreateAsset("00000000-38f9-1111-024e-222222111110", "Shirt", "newshirt.dat", false)); - assets.Add(CreateAsset("00000000-38f9-1111-024e-222222111120", "Shirt", "newpants.dat", false)); - - return assets; - } - - public AssetBase CreateImageAsset(string assetIdStr, string name, string filename) - { - return CreateAsset(assetIdStr, name, filename, true); - } - - public void ForEachDefaultAsset(Action action) - { - List assets = GetDefaultAssets(); - assets.ForEach(action); - } - - public AssetBase CreateAsset(string assetIdStr, string name, string filename, bool isImage) - { - AssetBase asset = new AssetBase( - new LLUUID(assetIdStr), - name - ); - - if (!String.IsNullOrEmpty(filename)) - { - MainLog.Instance.Verbose("ASSETS", "Loading: [{0}][{1}]", name, filename ); - - LoadAsset(asset, isImage, filename); - } - else - { - MainLog.Instance.Verbose("ASSETS", "Instantiated: [{0}]", name ); - } - - return asset; - } - - public void ForEachXmlAsset(Action action) - { - string filePath = Path.Combine(Util.configDir(), "OpenSimAssetSet.xml"); - if (File.Exists(filePath)) - { - XmlConfigSource source = new XmlConfigSource(filePath); - - for (int i = 0; i < source.Configs.Count; i++) - { - string assetIdStr = source.Configs[i].GetString("assetID", LLUUID.Random().ToStringHyphenated()); - string name = source.Configs[i].GetString("name", ""); - sbyte type = (sbyte)source.Configs[i].GetInt("assetType", 0); - sbyte invType = (sbyte)source.Configs[i].GetInt("inventoryType", 0); - string fileName = source.Configs[i].GetString("fileName", ""); - - AssetBase newAsset = CreateAsset(assetIdStr, name, fileName, false); - - newAsset.Type = type; - newAsset.InvType = invType; - - } - } - } - } +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading; +using libsecondlife; +using Nini.Config; +using OpenSim.Framework.Console; +using OpenSim.Framework.Interfaces; +using OpenSim.Framework.Types; +using OpenSim.Framework.Utilities; + +namespace OpenSim.Framework.Communications.Cache +{ + public abstract class AssetServerBase : IAssetServer + { + protected IAssetReceiver _receiver; + protected BlockingQueue _assetRequests; + protected Thread _localAssetServerThread; + protected IAssetProvider m_assetProviderPlugin; + protected object syncLock = new object(); + + protected abstract void StoreAsset(AssetBase asset); + protected abstract void CommitAssets(); + + protected abstract void RunRequests(); + + public void LoadDefaultAssets() + { + MainLog.Instance.Verbose("SQL ASSET SERVER", "Setting up asset database"); + + ForEachDefaultAsset(StoreAsset ); + ForEachXmlAsset(StoreAsset ); + + CommitAssets(); + } + + + public AssetServerBase() + { + System.Console.WriteLine("Starting Db4o asset storage system"); + this._assetRequests = new BlockingQueue(); + + this._localAssetServerThread = new Thread( RunRequests ); + this._localAssetServerThread.IsBackground = true; + this._localAssetServerThread.Start(); + } + + public void LoadAsset(AssetBase info, bool image, string filename) + { + //should request Asset from storage manager + //but for now read from file + + string dataPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "assets"); //+ folder; + string fileName = Path.Combine(dataPath, filename); + FileInfo fInfo = new FileInfo(fileName); + long numBytes = fInfo.Length; + FileStream fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); + byte[] idata = new byte[numBytes]; + BinaryReader br = new BinaryReader(fStream); + idata = br.ReadBytes((int)numBytes); + br.Close(); + fStream.Close(); + info.Data = idata; + //info.loaded=true; + } + + public void SetReceiver(IAssetReceiver receiver) + { + this._receiver = receiver; + } + + public void FetchAsset(LLUUID assetID, bool isTexture) + { + ARequest req = new ARequest(); + req.AssetID = assetID; + req.IsTexture = isTexture; + this._assetRequests.Enqueue(req); + } + + public void UpdateAsset(AssetBase asset) + { + lock (syncLock) + { + m_assetProviderPlugin.UpdateAsset(asset); + m_assetProviderPlugin.CommitAssets(); + } + } + + public void StoreAndCommitAsset(AssetBase asset) + { + lock (syncLock) + { + StoreAsset(asset); + CommitAssets(); + } + } + + public virtual void Close() + { + _localAssetServerThread.Abort( ); + } + + public void SetServerInfo(string ServerUrl, string ServerKey) + { + + } + + public virtual List GetDefaultAssets() + { + List assets = new List(); + + assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000001", "Bricks", "bricks.jp2")); + assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000002", "Plywood", "plywood.jp2")); + assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000003", "Rocks", "rocks.jp2")); + assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000004", "Granite", "granite.jp2")); + assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000005", "Hardwood", "hardwood.jp2")); + assets.Add(CreateImageAsset("00000000-0000-0000-5005-000000000005", "Prim Base Texture", "plywood.jp2")); + assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000006", "Map Base Texture", "map_base.jp2")); + assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000007", "Map Texture", "map1.jp2")); + assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000010", "Female Body Texture", "femalebody.jp2")); + assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000011", "Female Bottom Texture", "femalebottom.jp2")); + assets.Add(CreateImageAsset("00000000-0000-0000-9999-000000000012", "Female Face Texture", "femaleface.jp2")); + + assets.Add(CreateAsset("77c41e39-38f9-f75a-024e-585989bbabbb", "Skin", "base_skin.dat", false)); + assets.Add(CreateAsset("66c41e39-38f9-f75a-024e-585989bfab73", "Shape", "base_shape.dat", false)); + assets.Add(CreateAsset("00000000-38f9-1111-024e-222222111110", "Shirt", "newshirt.dat", false)); + assets.Add(CreateAsset("00000000-38f9-1111-024e-222222111120", "Shirt", "newpants.dat", false)); + + return assets; + } + + public AssetBase CreateImageAsset(string assetIdStr, string name, string filename) + { + return CreateAsset(assetIdStr, name, filename, true); + } + + public void ForEachDefaultAsset(Action action) + { + List assets = GetDefaultAssets(); + assets.ForEach(action); + } + + public AssetBase CreateAsset(string assetIdStr, string name, string filename, bool isImage) + { + AssetBase asset = new AssetBase( + new LLUUID(assetIdStr), + name + ); + + if (!String.IsNullOrEmpty(filename)) + { + MainLog.Instance.Verbose("ASSETS", "Loading: [{0}][{1}]", name, filename ); + + LoadAsset(asset, isImage, filename); + } + else + { + MainLog.Instance.Verbose("ASSETS", "Instantiated: [{0}]", name ); + } + + return asset; + } + + public void ForEachXmlAsset(Action action) + { + string filePath = Path.Combine(Util.configDir(), "OpenSimAssetSet.xml"); + if (File.Exists(filePath)) + { + XmlConfigSource source = new XmlConfigSource(filePath); + + for (int i = 0; i < source.Configs.Count; i++) + { + string assetIdStr = source.Configs[i].GetString("assetID", LLUUID.Random().ToStringHyphenated()); + string name = source.Configs[i].GetString("name", ""); + sbyte type = (sbyte)source.Configs[i].GetInt("assetType", 0); + sbyte invType = (sbyte)source.Configs[i].GetInt("inventoryType", 0); + string fileName = source.Configs[i].GetString("fileName", ""); + + AssetBase newAsset = CreateAsset(assetIdStr, name, fileName, false); + + newAsset.Type = type; + newAsset.InvType = invType; + + } + } + } + } } \ No newline at end of file diff --git a/OpenSim/Framework/Communications/Cache/SQLAssetServer.cs b/OpenSim/Framework/Communications/Cache/SQLAssetServer.cs index 379d609bd6..69f83d2cc1 100644 --- a/OpenSim/Framework/Communications/Cache/SQLAssetServer.cs +++ b/OpenSim/Framework/Communications/Cache/SQLAssetServer.cs @@ -1,125 +1,125 @@ -/* -* Copyright (c) Contributors, http://www.openmetaverse.org/ -* See CONTRIBUTORS.TXT for a full list of copyright holders. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* * Neither the name of the OpenSim Project nor the -* names of its contributors may be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY -* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*/ -using System; -using System.IO; -using System.Threading; -using System.Reflection; -using libsecondlife; -using Nini.Config; -using OpenSim.Framework.Console; -using OpenSim.Framework.Interfaces; -using OpenSim.Framework.Types; -using OpenSim.Framework.Utilities; - -namespace OpenSim.Framework.Communications.Cache -{ - public class SQLAssetServer : AssetServerBase - { - public SQLAssetServer(string pluginName) - { - _assetRequests = new BlockingQueue(); - AddPlugin(pluginName); - } - - public SQLAssetServer(IAssetProvider assetProvider) - { - m_assetProviderPlugin = assetProvider; - } - - public void AddPlugin(string FileName) - { - MainLog.Instance.Verbose("SQLAssetServer", "AssetStorage: Attempting to load " + FileName); - Assembly pluginAssembly = Assembly.LoadFrom(FileName); - - foreach (Type pluginType in pluginAssembly.GetTypes()) - { - if (!pluginType.IsAbstract) - { - Type typeInterface = pluginType.GetInterface("IAssetProvider", true); - - if (typeInterface != null) - { - IAssetProvider plug = (IAssetProvider)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); - m_assetProviderPlugin = plug; - m_assetProviderPlugin.Initialise(); - - MainLog.Instance.Verbose("AssetStorage: Added " + m_assetProviderPlugin.Name + " " + m_assetProviderPlugin.Version); - } - - typeInterface = null; - } - } - - pluginAssembly = null; - } - - - public override void Close() - { - base.Close(); - - m_assetProviderPlugin.CommitAssets(); - } - - override protected void RunRequests() - { - while (true) - { - ARequest req = this._assetRequests.Dequeue(); - - MainLog.Instance.Verbose("Requesting asset: " + req.AssetID); - - AssetBase asset = null; - lock (syncLock) - { - asset = m_assetProviderPlugin.FetchAsset(req.AssetID); - } - if (asset != null) - { - _receiver.AssetReceived(asset, req.IsTexture); - } - else - { - _receiver.AssetNotFound(req.AssetID); - } - - } - - } - - protected override void StoreAsset(AssetBase asset) - { - m_assetProviderPlugin.CreateAsset(asset); - } - - protected override void CommitAssets() - { - m_assetProviderPlugin.CommitAssets(); - } - } +/* +* Copyright (c) Contributors, http://www.openmetaverse.org/ +* See CONTRIBUTORS.TXT for a full list of copyright holders. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* * Neither the name of the OpenSim Project nor the +* names of its contributors may be used to endorse or promote products +* derived from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ +using System; +using System.IO; +using System.Threading; +using System.Reflection; +using libsecondlife; +using Nini.Config; +using OpenSim.Framework.Console; +using OpenSim.Framework.Interfaces; +using OpenSim.Framework.Types; +using OpenSim.Framework.Utilities; + +namespace OpenSim.Framework.Communications.Cache +{ + public class SQLAssetServer : AssetServerBase + { + public SQLAssetServer(string pluginName) + { + _assetRequests = new BlockingQueue(); + AddPlugin(pluginName); + } + + public SQLAssetServer(IAssetProvider assetProvider) + { + m_assetProviderPlugin = assetProvider; + } + + public void AddPlugin(string FileName) + { + MainLog.Instance.Verbose("SQLAssetServer", "AssetStorage: Attempting to load " + FileName); + Assembly pluginAssembly = Assembly.LoadFrom(FileName); + + foreach (Type pluginType in pluginAssembly.GetTypes()) + { + if (!pluginType.IsAbstract) + { + Type typeInterface = pluginType.GetInterface("IAssetProvider", true); + + if (typeInterface != null) + { + IAssetProvider plug = (IAssetProvider)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); + m_assetProviderPlugin = plug; + m_assetProviderPlugin.Initialise(); + + MainLog.Instance.Verbose("AssetStorage: Added " + m_assetProviderPlugin.Name + " " + m_assetProviderPlugin.Version); + } + + typeInterface = null; + } + } + + pluginAssembly = null; + } + + + public override void Close() + { + base.Close(); + + m_assetProviderPlugin.CommitAssets(); + } + + override protected void RunRequests() + { + while (true) + { + ARequest req = this._assetRequests.Dequeue(); + + MainLog.Instance.Verbose("Requesting asset: " + req.AssetID); + + AssetBase asset = null; + lock (syncLock) + { + asset = m_assetProviderPlugin.FetchAsset(req.AssetID); + } + if (asset != null) + { + _receiver.AssetReceived(asset, req.IsTexture); + } + else + { + _receiver.AssetNotFound(req.AssetID); + } + + } + + } + + protected override void StoreAsset(AssetBase asset) + { + m_assetProviderPlugin.CreateAsset(asset); + } + + protected override void CommitAssets() + { + m_assetProviderPlugin.CommitAssets(); + } + } } \ No newline at end of file diff --git a/OpenSim/Framework/Communications/LoginService.cs b/OpenSim/Framework/Communications/LoginService.cs index 85af5db929..674c746631 100644 --- a/OpenSim/Framework/Communications/LoginService.cs +++ b/OpenSim/Framework/Communications/LoginService.cs @@ -1,315 +1,315 @@ -/* -* Copyright (c) Contributors, http://opensimulator.org/ -* See CONTRIBUTORS.TXT for a full list of copyright holders. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* * Neither the name of the OpenSim Project nor the -* names of its contributors may be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY -* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*/ - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Reflection; -using System.Security.Cryptography; -using libsecondlife; -using Nwc.XmlRpc; -using OpenSim.Framework.Console; -using OpenSim.Framework.Interfaces; -using OpenSim.Framework.Inventory; -using OpenSim.Framework.Types; -using OpenSim.Framework.Utilities; - -using OpenSim.Framework.Configuration; -using InventoryFolder = OpenSim.Framework.Inventory.InventoryFolder; - -namespace OpenSim.Framework.UserManagement -{ - public class LoginService - { - protected string m_welcomeMessage = "Welcome to OpenSim"; - protected UserManagerBase m_userManager = null; - - public LoginService(UserManagerBase userManager, string welcomeMess) - { - m_userManager = userManager; - if (welcomeMess != "") - { - m_welcomeMessage = welcomeMess; - } - } - - /// - /// Main user login function - /// - /// The XMLRPC request - /// The response to send - public XmlRpcResponse XmlRpcLoginMethod(XmlRpcRequest request) - { - - MainLog.Instance.Verbose("Attempting login now..."); - XmlRpcResponse response = new XmlRpcResponse(); - Hashtable requestData = (Hashtable)request.Params[0]; - - bool GoodXML = (requestData.Contains("first") && requestData.Contains("last") && requestData.Contains("passwd")); - bool GoodLogin = false; - - UserProfileData userProfile; - LoginResponse logResponse = new LoginResponse(); - - if (GoodXML) - { - string firstname = (string)requestData["first"]; - string lastname = (string)requestData["last"]; - string passwd = (string)requestData["passwd"]; - - userProfile = GetTheUser(firstname, lastname); - if (userProfile == null) - return logResponse.CreateLoginFailedResponse(); - - GoodLogin = AuthenticateUser(userProfile, passwd); - } - else - { - return logResponse.CreateGridErrorResponse(); - } - - if (!GoodLogin) - { - return logResponse.CreateLoginFailedResponse(); - } - else - { - // If we already have a session... - if (userProfile.currentAgent != null && userProfile.currentAgent.agentOnline) - { - // Reject the login - return logResponse.CreateAlreadyLoggedInResponse(); - } - // Otherwise... - // Create a new agent session - CreateAgent(userProfile, request); - - try - { - LLUUID agentID = userProfile.UUID; - - // Inventory Library Section - InventoryData inventData = this.CreateInventoryData(agentID); - ArrayList AgentInventoryArray = inventData.InventoryArray; - - Hashtable InventoryRootHash = new Hashtable(); - InventoryRootHash["folder_id"] = inventData.RootFolderID.ToStringHyphenated(); - ArrayList InventoryRoot = new ArrayList(); - InventoryRoot.Add(InventoryRootHash); - userProfile.rootInventoryFolderID = inventData.RootFolderID; - - // Circuit Code - uint circode = (uint)(Util.RandomClass.Next()); - - logResponse.Lastname = userProfile.surname; - logResponse.Firstname = userProfile.username; - logResponse.AgentID = agentID.ToStringHyphenated(); - logResponse.SessionID = userProfile.currentAgent.sessionID.ToStringHyphenated(); - logResponse.SecureSessionID = userProfile.currentAgent.secureSessionID.ToStringHyphenated(); - logResponse.InventoryRoot = InventoryRoot; - logResponse.InventorySkeleton = AgentInventoryArray; - logResponse.InventoryLibrary = this.GetInventoryLibrary(); - logResponse.InventoryLibraryOwner = this.GetLibraryOwner(); - logResponse.CircuitCode = (Int32)circode; - //logResponse.RegionX = 0; //overwritten - //logResponse.RegionY = 0; //overwritten - logResponse.Home = "!!null temporary value {home}!!"; // Overwritten - //logResponse.LookAt = "\n[r" + TheUser.homeLookAt.X.ToString() + ",r" + TheUser.homeLookAt.Y.ToString() + ",r" + TheUser.homeLookAt.Z.ToString() + "]\n"; - //logResponse.SimAddress = "127.0.0.1"; //overwritten - //logResponse.SimPort = 0; //overwritten - logResponse.Message = this.GetMessage(); - - try - { - this.CustomiseResponse(logResponse, userProfile); - } - catch (Exception e) - { - MainLog.Instance.Verbose(e.ToString()); - return logResponse.CreateDeadRegionResponse(); - //return logResponse.ToXmlRpcResponse(); - } - CommitAgent(ref userProfile); - return logResponse.ToXmlRpcResponse(); - - } - - catch (Exception E) - { - MainLog.Instance.Verbose(E.ToString()); - } - //} - } - return response; - - } - - /// - /// Customises the login response and fills in missing values. - /// - /// The existing response - /// The user profile - public virtual void CustomiseResponse(LoginResponse response, UserProfileData theUser) - { - } - - /// - /// Saves a target agent to the database - /// - /// The users profile - /// Successful? - public bool CommitAgent(ref UserProfileData profile) - { - // Saves the agent to database - return true; - } - - - /// - /// Checks a user against it's password hash - /// - /// The users profile - /// The supplied password - /// Authenticated? - public virtual bool AuthenticateUser(UserProfileData profile, string password) - { - - MainLog.Instance.Verbose( - "Authenticating " + profile.username + " " + profile.surname); - - password = password.Remove(0, 3); //remove $1$ - - string s = Util.Md5Hash(password + ":" + profile.passwordSalt); - - return profile.passwordHash.Equals(s.ToString(), StringComparison.InvariantCultureIgnoreCase); - } - - /// - /// - /// - /// - /// - public void CreateAgent(UserProfileData profile, XmlRpcRequest request) - { - this.m_userManager.CreateAgent(profile, request); - } - - /// - /// - /// - /// - /// - /// - public virtual UserProfileData GetTheUser(string firstname, string lastname) - { - return this.m_userManager.GetUserProfile(firstname, lastname); - } - - /// - /// - /// - /// - public virtual string GetMessage() - { - return m_welcomeMessage; - } - - /// - /// - /// - /// - protected virtual ArrayList GetInventoryLibrary() - { - //return new ArrayList(); - Hashtable TempHash = new Hashtable(); - TempHash["name"] = "OpenSim Library"; - TempHash["parent_id"] = LLUUID.Zero.ToStringHyphenated(); - TempHash["version"] = 1; - TempHash["type_default"] = -1; - TempHash["folder_id"] = "00000112-000f-0000-0000-000100bba000"; - ArrayList temp = new ArrayList(); - temp.Add(TempHash); - - TempHash = new Hashtable(); - TempHash["name"] = "Texture Library"; - TempHash["parent_id"] = "00000112-000f-0000-0000-000100bba000"; - TempHash["version"] = 1; - TempHash["type_default"] = -1; - TempHash["folder_id"] = "00000112-000f-0000-0000-000100bba001"; - temp.Add(TempHash); - return temp; - } - - /// - /// - /// - /// - protected virtual ArrayList GetLibraryOwner() - { - //for now create random inventory library owner - Hashtable TempHash = new Hashtable(); - TempHash["agent_id"] = "11111111-1111-0000-0000-000100bba000"; - ArrayList inventoryLibOwner = new ArrayList(); - inventoryLibOwner.Add(TempHash); - return inventoryLibOwner; - } - - protected virtual InventoryData CreateInventoryData(LLUUID userID) - { - AgentInventory userInventory = new AgentInventory(); - userInventory.CreateRootFolder(userID, false); - - ArrayList AgentInventoryArray = new ArrayList(); - Hashtable TempHash; - foreach (InventoryFolder InvFolder in userInventory.InventoryFolders.Values) - { - TempHash = new Hashtable(); - TempHash["name"] = InvFolder.FolderName; - TempHash["parent_id"] = InvFolder.ParentID.ToStringHyphenated(); - TempHash["version"] = (Int32)InvFolder.Version; - TempHash["type_default"] = (Int32)InvFolder.DefaultType; - TempHash["folder_id"] = InvFolder.FolderID.ToStringHyphenated(); - AgentInventoryArray.Add(TempHash); - } - - return new InventoryData(AgentInventoryArray, userInventory.InventoryRoot.FolderID); - } - - public class InventoryData - { - public ArrayList InventoryArray = null; - public LLUUID RootFolderID = LLUUID.Zero; - - public InventoryData(ArrayList invList, LLUUID rootID) - { - InventoryArray = invList; - RootFolderID = rootID; - } - } - } -} +/* +* Copyright (c) Contributors, http://opensimulator.org/ +* See CONTRIBUTORS.TXT for a full list of copyright holders. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* * Neither the name of the OpenSim Project nor the +* names of its contributors may be used to endorse or promote products +* derived from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using System.Security.Cryptography; +using libsecondlife; +using Nwc.XmlRpc; +using OpenSim.Framework.Console; +using OpenSim.Framework.Interfaces; +using OpenSim.Framework.Inventory; +using OpenSim.Framework.Types; +using OpenSim.Framework.Utilities; + +using OpenSim.Framework.Configuration; +using InventoryFolder = OpenSim.Framework.Inventory.InventoryFolder; + +namespace OpenSim.Framework.UserManagement +{ + public class LoginService + { + protected string m_welcomeMessage = "Welcome to OpenSim"; + protected UserManagerBase m_userManager = null; + + public LoginService(UserManagerBase userManager, string welcomeMess) + { + m_userManager = userManager; + if (welcomeMess != "") + { + m_welcomeMessage = welcomeMess; + } + } + + /// + /// Main user login function + /// + /// The XMLRPC request + /// The response to send + public XmlRpcResponse XmlRpcLoginMethod(XmlRpcRequest request) + { + + MainLog.Instance.Verbose("Attempting login now..."); + XmlRpcResponse response = new XmlRpcResponse(); + Hashtable requestData = (Hashtable)request.Params[0]; + + bool GoodXML = (requestData.Contains("first") && requestData.Contains("last") && requestData.Contains("passwd")); + bool GoodLogin = false; + + UserProfileData userProfile; + LoginResponse logResponse = new LoginResponse(); + + if (GoodXML) + { + string firstname = (string)requestData["first"]; + string lastname = (string)requestData["last"]; + string passwd = (string)requestData["passwd"]; + + userProfile = GetTheUser(firstname, lastname); + if (userProfile == null) + return logResponse.CreateLoginFailedResponse(); + + GoodLogin = AuthenticateUser(userProfile, passwd); + } + else + { + return logResponse.CreateGridErrorResponse(); + } + + if (!GoodLogin) + { + return logResponse.CreateLoginFailedResponse(); + } + else + { + // If we already have a session... + if (userProfile.currentAgent != null && userProfile.currentAgent.agentOnline) + { + // Reject the login + return logResponse.CreateAlreadyLoggedInResponse(); + } + // Otherwise... + // Create a new agent session + CreateAgent(userProfile, request); + + try + { + LLUUID agentID = userProfile.UUID; + + // Inventory Library Section + InventoryData inventData = this.CreateInventoryData(agentID); + ArrayList AgentInventoryArray = inventData.InventoryArray; + + Hashtable InventoryRootHash = new Hashtable(); + InventoryRootHash["folder_id"] = inventData.RootFolderID.ToStringHyphenated(); + ArrayList InventoryRoot = new ArrayList(); + InventoryRoot.Add(InventoryRootHash); + userProfile.rootInventoryFolderID = inventData.RootFolderID; + + // Circuit Code + uint circode = (uint)(Util.RandomClass.Next()); + + logResponse.Lastname = userProfile.surname; + logResponse.Firstname = userProfile.username; + logResponse.AgentID = agentID.ToStringHyphenated(); + logResponse.SessionID = userProfile.currentAgent.sessionID.ToStringHyphenated(); + logResponse.SecureSessionID = userProfile.currentAgent.secureSessionID.ToStringHyphenated(); + logResponse.InventoryRoot = InventoryRoot; + logResponse.InventorySkeleton = AgentInventoryArray; + logResponse.InventoryLibrary = this.GetInventoryLibrary(); + logResponse.InventoryLibraryOwner = this.GetLibraryOwner(); + logResponse.CircuitCode = (Int32)circode; + //logResponse.RegionX = 0; //overwritten + //logResponse.RegionY = 0; //overwritten + logResponse.Home = "!!null temporary value {home}!!"; // Overwritten + //logResponse.LookAt = "\n[r" + TheUser.homeLookAt.X.ToString() + ",r" + TheUser.homeLookAt.Y.ToString() + ",r" + TheUser.homeLookAt.Z.ToString() + "]\n"; + //logResponse.SimAddress = "127.0.0.1"; //overwritten + //logResponse.SimPort = 0; //overwritten + logResponse.Message = this.GetMessage(); + + try + { + this.CustomiseResponse(logResponse, userProfile); + } + catch (Exception e) + { + MainLog.Instance.Verbose(e.ToString()); + return logResponse.CreateDeadRegionResponse(); + //return logResponse.ToXmlRpcResponse(); + } + CommitAgent(ref userProfile); + return logResponse.ToXmlRpcResponse(); + + } + + catch (Exception E) + { + MainLog.Instance.Verbose(E.ToString()); + } + //} + } + return response; + + } + + /// + /// Customises the login response and fills in missing values. + /// + /// The existing response + /// The user profile + public virtual void CustomiseResponse(LoginResponse response, UserProfileData theUser) + { + } + + /// + /// Saves a target agent to the database + /// + /// The users profile + /// Successful? + public bool CommitAgent(ref UserProfileData profile) + { + // Saves the agent to database + return true; + } + + + /// + /// Checks a user against it's password hash + /// + /// The users profile + /// The supplied password + /// Authenticated? + public virtual bool AuthenticateUser(UserProfileData profile, string password) + { + + MainLog.Instance.Verbose( + "Authenticating " + profile.username + " " + profile.surname); + + password = password.Remove(0, 3); //remove $1$ + + string s = Util.Md5Hash(password + ":" + profile.passwordSalt); + + return profile.passwordHash.Equals(s.ToString(), StringComparison.InvariantCultureIgnoreCase); + } + + /// + /// + /// + /// + /// + public void CreateAgent(UserProfileData profile, XmlRpcRequest request) + { + this.m_userManager.CreateAgent(profile, request); + } + + /// + /// + /// + /// + /// + /// + public virtual UserProfileData GetTheUser(string firstname, string lastname) + { + return this.m_userManager.GetUserProfile(firstname, lastname); + } + + /// + /// + /// + /// + public virtual string GetMessage() + { + return m_welcomeMessage; + } + + /// + /// + /// + /// + protected virtual ArrayList GetInventoryLibrary() + { + //return new ArrayList(); + Hashtable TempHash = new Hashtable(); + TempHash["name"] = "OpenSim Library"; + TempHash["parent_id"] = LLUUID.Zero.ToStringHyphenated(); + TempHash["version"] = 1; + TempHash["type_default"] = -1; + TempHash["folder_id"] = "00000112-000f-0000-0000-000100bba000"; + ArrayList temp = new ArrayList(); + temp.Add(TempHash); + + TempHash = new Hashtable(); + TempHash["name"] = "Texture Library"; + TempHash["parent_id"] = "00000112-000f-0000-0000-000100bba000"; + TempHash["version"] = 1; + TempHash["type_default"] = -1; + TempHash["folder_id"] = "00000112-000f-0000-0000-000100bba001"; + temp.Add(TempHash); + return temp; + } + + /// + /// + /// + /// + protected virtual ArrayList GetLibraryOwner() + { + //for now create random inventory library owner + Hashtable TempHash = new Hashtable(); + TempHash["agent_id"] = "11111111-1111-0000-0000-000100bba000"; + ArrayList inventoryLibOwner = new ArrayList(); + inventoryLibOwner.Add(TempHash); + return inventoryLibOwner; + } + + protected virtual InventoryData CreateInventoryData(LLUUID userID) + { + AgentInventory userInventory = new AgentInventory(); + userInventory.CreateRootFolder(userID, false); + + ArrayList AgentInventoryArray = new ArrayList(); + Hashtable TempHash; + foreach (InventoryFolder InvFolder in userInventory.InventoryFolders.Values) + { + TempHash = new Hashtable(); + TempHash["name"] = InvFolder.FolderName; + TempHash["parent_id"] = InvFolder.ParentID.ToStringHyphenated(); + TempHash["version"] = (Int32)InvFolder.Version; + TempHash["type_default"] = (Int32)InvFolder.DefaultType; + TempHash["folder_id"] = InvFolder.FolderID.ToStringHyphenated(); + AgentInventoryArray.Add(TempHash); + } + + return new InventoryData(AgentInventoryArray, userInventory.InventoryRoot.FolderID); + } + + public class InventoryData + { + public ArrayList InventoryArray = null; + public LLUUID RootFolderID = LLUUID.Zero; + + public InventoryData(ArrayList invList, LLUUID rootID) + { + InventoryArray = invList; + RootFolderID = rootID; + } + } + } +} diff --git a/OpenSim/Framework/Data.MySQL/MySQLAssetData.cs b/OpenSim/Framework/Data.MySQL/MySQLAssetData.cs index 5bae4ec03f..a8f0fdb981 100644 --- a/OpenSim/Framework/Data.MySQL/MySQLAssetData.cs +++ b/OpenSim/Framework/Data.MySQL/MySQLAssetData.cs @@ -1,159 +1,159 @@ -/* -* Copyright (c) Contributors, http://opensimulator.org/ -* See CONTRIBUTORS.TXT for a full list of copyright holders. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* * Neither the name of the OpenSim Project nor the -* names of its contributors may be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY -* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*/ - -using System; -using System.Collections.Generic; -using MySql.Data.MySqlClient; - -using libsecondlife; -using OpenSim.Framework.Console; -using OpenSim.Framework.Interfaces; -using OpenSim.Framework.Types; - -namespace OpenSim.Framework.Data.MySQL -{ - class MySQLAssetData : IAssetProvider - { - MySQLManager _dbConnection; - #region IAssetProvider Members - - private void UpgradeAssetsTable(string oldVersion) - { - // null as the version, indicates that the table didn't exist - if (oldVersion == null) - { - MainLog.Instance.Notice("ASSETS", "Creating new database tables"); - _dbConnection.ExecuteResourceSql("CreateAssetsTable.sql"); - return; - } - } - - /// - /// Ensure that the assets related tables exists and are at the latest version - /// - private void TestTables() - { - - Dictionary tableList = new Dictionary(); - - tableList["assets"] = null; - _dbConnection.GetTableVersion(tableList); - - UpgradeAssetsTable(tableList["assets"]); - - } - - public AssetBase FetchAsset(LLUUID assetID) - { - AssetBase asset = null; - - MySqlCommand cmd = new MySqlCommand("SELECT name, description, assetType, invType, local, temporary, data FROM assets WHERE id=?id", _dbConnection.Connection); - MySqlParameter p = cmd.Parameters.Add("?id", MySqlDbType.Binary, 16); - p.Value = assetID.GetBytes(); - using (MySqlDataReader dbReader = cmd.ExecuteReader(System.Data.CommandBehavior.SingleRow)) - { - if (dbReader.Read()) - { - asset = new AssetBase(); - asset.Data = (byte[])dbReader["data"]; - asset.Description = (string)dbReader["description"]; - asset.FullID = assetID; - asset.InvType = (sbyte)dbReader["invType"]; - asset.Local = ((sbyte)dbReader["local"]) != 0 ? true : false; - asset.Name = (string)dbReader["name"]; - asset.Type = (sbyte)dbReader["assetType"]; - } - } - return asset; - } - - public void CreateAsset(AssetBase asset) - { - MySqlCommand cmd = new MySqlCommand("REPLACE INTO assets(id, name, description, assetType, invType, local, temporary, data)" + - "VALUES(?id, ?name, ?description, ?assetType, ?invType, ?local, ?temporary, ?data)", _dbConnection.Connection); - MySqlParameter p = cmd.Parameters.Add("?id", MySqlDbType.Binary, 16); - p.Value = asset.FullID.GetBytes(); - cmd.Parameters.AddWithValue("?name", asset.Name); - cmd.Parameters.AddWithValue("?description", asset.Description); - cmd.Parameters.AddWithValue("?assetType", asset.Type); - cmd.Parameters.AddWithValue("?invType", asset.InvType); - cmd.Parameters.AddWithValue("?local", asset.Local); - cmd.Parameters.AddWithValue("?temporary", asset.Temporary); - cmd.Parameters.AddWithValue("?data", asset.Data); - cmd.ExecuteNonQuery(); - } - - public void UpdateAsset(AssetBase asset) - { - CreateAsset(asset); - } - - public bool ExistsAsset(LLUUID uuid) - { - throw new Exception("The method or operation is not implemented."); - } - - /// - /// All writes are immediately commited to the database, so this is a no-op - /// - public void CommitAssets() - { - } - - #endregion - - #region IPlugin Members - - public void Initialise() - { - IniFile GridDataMySqlFile = new IniFile("mysql_connection.ini"); - string hostname = GridDataMySqlFile.ParseFileReadValue("hostname"); - string database = GridDataMySqlFile.ParseFileReadValue("database"); - string username = GridDataMySqlFile.ParseFileReadValue("username"); - string password = GridDataMySqlFile.ParseFileReadValue("password"); - string pooling = GridDataMySqlFile.ParseFileReadValue("pooling"); - string port = GridDataMySqlFile.ParseFileReadValue("port"); - - _dbConnection = new MySQLManager(hostname, database, username, password, pooling, port); - - TestTables(); - } - - public string Version - { - get { return _dbConnection.getVersion(); } - } - - public string Name - { - get { return "MySQL Asset storage engine"; } - } - - #endregion - } -} +/* +* Copyright (c) Contributors, http://opensimulator.org/ +* See CONTRIBUTORS.TXT for a full list of copyright holders. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* * Neither the name of the OpenSim Project nor the +* names of its contributors may be used to endorse or promote products +* derived from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +using System; +using System.Collections.Generic; +using MySql.Data.MySqlClient; + +using libsecondlife; +using OpenSim.Framework.Console; +using OpenSim.Framework.Interfaces; +using OpenSim.Framework.Types; + +namespace OpenSim.Framework.Data.MySQL +{ + class MySQLAssetData : IAssetProvider + { + MySQLManager _dbConnection; + #region IAssetProvider Members + + private void UpgradeAssetsTable(string oldVersion) + { + // null as the version, indicates that the table didn't exist + if (oldVersion == null) + { + MainLog.Instance.Notice("ASSETS", "Creating new database tables"); + _dbConnection.ExecuteResourceSql("CreateAssetsTable.sql"); + return; + } + } + + /// + /// Ensure that the assets related tables exists and are at the latest version + /// + private void TestTables() + { + + Dictionary tableList = new Dictionary(); + + tableList["assets"] = null; + _dbConnection.GetTableVersion(tableList); + + UpgradeAssetsTable(tableList["assets"]); + + } + + public AssetBase FetchAsset(LLUUID assetID) + { + AssetBase asset = null; + + MySqlCommand cmd = new MySqlCommand("SELECT name, description, assetType, invType, local, temporary, data FROM assets WHERE id=?id", _dbConnection.Connection); + MySqlParameter p = cmd.Parameters.Add("?id", MySqlDbType.Binary, 16); + p.Value = assetID.GetBytes(); + using (MySqlDataReader dbReader = cmd.ExecuteReader(System.Data.CommandBehavior.SingleRow)) + { + if (dbReader.Read()) + { + asset = new AssetBase(); + asset.Data = (byte[])dbReader["data"]; + asset.Description = (string)dbReader["description"]; + asset.FullID = assetID; + asset.InvType = (sbyte)dbReader["invType"]; + asset.Local = ((sbyte)dbReader["local"]) != 0 ? true : false; + asset.Name = (string)dbReader["name"]; + asset.Type = (sbyte)dbReader["assetType"]; + } + } + return asset; + } + + public void CreateAsset(AssetBase asset) + { + MySqlCommand cmd = new MySqlCommand("REPLACE INTO assets(id, name, description, assetType, invType, local, temporary, data)" + + "VALUES(?id, ?name, ?description, ?assetType, ?invType, ?local, ?temporary, ?data)", _dbConnection.Connection); + MySqlParameter p = cmd.Parameters.Add("?id", MySqlDbType.Binary, 16); + p.Value = asset.FullID.GetBytes(); + cmd.Parameters.AddWithValue("?name", asset.Name); + cmd.Parameters.AddWithValue("?description", asset.Description); + cmd.Parameters.AddWithValue("?assetType", asset.Type); + cmd.Parameters.AddWithValue("?invType", asset.InvType); + cmd.Parameters.AddWithValue("?local", asset.Local); + cmd.Parameters.AddWithValue("?temporary", asset.Temporary); + cmd.Parameters.AddWithValue("?data", asset.Data); + cmd.ExecuteNonQuery(); + } + + public void UpdateAsset(AssetBase asset) + { + CreateAsset(asset); + } + + public bool ExistsAsset(LLUUID uuid) + { + throw new Exception("The method or operation is not implemented."); + } + + /// + /// All writes are immediately commited to the database, so this is a no-op + /// + public void CommitAssets() + { + } + + #endregion + + #region IPlugin Members + + public void Initialise() + { + IniFile GridDataMySqlFile = new IniFile("mysql_connection.ini"); + string hostname = GridDataMySqlFile.ParseFileReadValue("hostname"); + string database = GridDataMySqlFile.ParseFileReadValue("database"); + string username = GridDataMySqlFile.ParseFileReadValue("username"); + string password = GridDataMySqlFile.ParseFileReadValue("password"); + string pooling = GridDataMySqlFile.ParseFileReadValue("pooling"); + string port = GridDataMySqlFile.ParseFileReadValue("port"); + + _dbConnection = new MySQLManager(hostname, database, username, password, pooling, port); + + TestTables(); + } + + public string Version + { + get { return _dbConnection.getVersion(); } + } + + public string Name + { + get { return "MySQL Asset storage engine"; } + } + + #endregion + } +} diff --git a/OpenSim/Framework/General/Configuration/AssetConfig.cs b/OpenSim/Framework/General/Configuration/AssetConfig.cs index a7c87ad40f..c4e1cc4dbc 100644 --- a/OpenSim/Framework/General/Configuration/AssetConfig.cs +++ b/OpenSim/Framework/General/Configuration/AssetConfig.cs @@ -1,83 +1,83 @@ -/* -* Copyright (c) Contributors, http://opensimulator.org/ -* See CONTRIBUTORS.TXT for a full list of copyright holders. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* * Neither the name of the OpenSim Project nor the -* names of its contributors may be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY -* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*/ - -using System; -using System.Collections.Generic; -using System.Text; - -namespace OpenSim.Framework.Configuration -{ - /// - /// UserConfig -- For User Server Configuration - /// - public class AssetConfig - { - public string DefaultStartupMsg = ""; - - public string DatabaseProvider = ""; - - public static uint DefaultHttpPort = 8003; - public uint HttpPort = DefaultHttpPort; - - private ConfigurationMember configMember; - - public AssetConfig(string description, string filename) - { - configMember = new ConfigurationMember(filename, description, this.loadConfigurationOptions, this.handleIncomingConfiguration); - configMember.performConfigurationRetrieve(); - } - - public void loadConfigurationOptions() - { - configMember.addConfigurationOption("default_startup_message", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, "Default Startup Message", "Welcome to OGS", false); - - configMember.addConfigurationOption("database_provider", ConfigurationOption.ConfigurationTypes.TYPE_STRING, "DLL for database provider", "OpenSim.Framework.Data.MySQL.dll", false); - - configMember.addConfigurationOption("http_port", ConfigurationOption.ConfigurationTypes.TYPE_UINT32, "Http Listener port", DefaultHttpPort.ToString(), false); - - } - - public bool handleIncomingConfiguration(string configuration_key, object configuration_result) - { - switch (configuration_key) - { - case "default_startup_message": - this.DefaultStartupMsg = (string)configuration_result; - break; - case "database_provider": - this.DatabaseProvider = (string)configuration_result; - break; - case "http_port": - HttpPort = (uint)configuration_result; - break; - } - - return true; - } - } -} +/* +* Copyright (c) Contributors, http://opensimulator.org/ +* See CONTRIBUTORS.TXT for a full list of copyright holders. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* * Neither the name of the OpenSim Project nor the +* names of its contributors may be used to endorse or promote products +* derived from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +using System; +using System.Collections.Generic; +using System.Text; + +namespace OpenSim.Framework.Configuration +{ + /// + /// UserConfig -- For User Server Configuration + /// + public class AssetConfig + { + public string DefaultStartupMsg = ""; + + public string DatabaseProvider = ""; + + public static uint DefaultHttpPort = 8003; + public uint HttpPort = DefaultHttpPort; + + private ConfigurationMember configMember; + + public AssetConfig(string description, string filename) + { + configMember = new ConfigurationMember(filename, description, this.loadConfigurationOptions, this.handleIncomingConfiguration); + configMember.performConfigurationRetrieve(); + } + + public void loadConfigurationOptions() + { + configMember.addConfigurationOption("default_startup_message", ConfigurationOption.ConfigurationTypes.TYPE_STRING_NOT_EMPTY, "Default Startup Message", "Welcome to OGS", false); + + configMember.addConfigurationOption("database_provider", ConfigurationOption.ConfigurationTypes.TYPE_STRING, "DLL for database provider", "OpenSim.Framework.Data.MySQL.dll", false); + + configMember.addConfigurationOption("http_port", ConfigurationOption.ConfigurationTypes.TYPE_UINT32, "Http Listener port", DefaultHttpPort.ToString(), false); + + } + + public bool handleIncomingConfiguration(string configuration_key, object configuration_result) + { + switch (configuration_key) + { + case "default_startup_message": + this.DefaultStartupMsg = (string)configuration_result; + break; + case "database_provider": + this.DatabaseProvider = (string)configuration_result; + break; + case "http_port": + HttpPort = (uint)configuration_result; + break; + } + + return true; + } + } +} diff --git a/OpenSim/Framework/General/Interfaces/IPlugin.cs b/OpenSim/Framework/General/Interfaces/IPlugin.cs index ce15d401c3..efd94c98ad 100644 --- a/OpenSim/Framework/General/Interfaces/IPlugin.cs +++ b/OpenSim/Framework/General/Interfaces/IPlugin.cs @@ -1,57 +1,57 @@ -/* -* Copyright (c) Contributors, http://opensimulator.org/ -* See CONTRIBUTORS.TXT for a full list of copyright holders. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* * Neither the name of the OpenSim Project nor the -* names of its contributors may be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY -* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*/ - -using System; -using System.Collections.Generic; -using System.Text; - -namespace OpenSim.Framework.Interfaces -{ - /// - /// This interface, describes a generic plugin - /// - public interface IPlugin - { - /// - /// Returns the plugin version - /// - /// Plugin version in MAJOR.MINOR.REVISION.BUILD format - string Version { get; } - - /// - /// Returns the plugin name - /// - /// Plugin name, eg MySQL User Provider - string Name { get; } - - /// - /// Initialises the plugin (artificial constructor) - /// - void Initialise(); - } -} +/* +* Copyright (c) Contributors, http://opensimulator.org/ +* See CONTRIBUTORS.TXT for a full list of copyright holders. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* * Neither the name of the OpenSim Project nor the +* names of its contributors may be used to endorse or promote products +* derived from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +using System; +using System.Collections.Generic; +using System.Text; + +namespace OpenSim.Framework.Interfaces +{ + /// + /// This interface, describes a generic plugin + /// + public interface IPlugin + { + /// + /// Returns the plugin version + /// + /// Plugin version in MAJOR.MINOR.REVISION.BUILD format + string Version { get; } + + /// + /// Returns the plugin name + /// + /// Plugin name, eg MySQL User Provider + string Name { get; } + + /// + /// Initialises the plugin (artificial constructor) + /// + void Initialise(); + } +} diff --git a/OpenSim/Grid/ScriptEngine/Common/Properties/AssemblyInfo.cs b/OpenSim/Grid/ScriptEngine/Common/Properties/AssemblyInfo.cs index 6b5d3a8f02..44a4f29560 100644 --- a/OpenSim/Grid/ScriptEngine/Common/Properties/AssemblyInfo.cs +++ b/OpenSim/Grid/ScriptEngine/Common/Properties/AssemblyInfo.cs @@ -4,11 +4,11 @@ using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information -// associated with an assembly. +// associated with an assembly. [assembly: AssemblyTitle("OpenSim.Grid.ScriptEngine.Common")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] +[assembly: AssemblyCompany("")] [assembly: AssemblyProduct("OpenSim.Grid.ScriptEngine.Common")] [assembly: AssemblyCopyright("Copyright © 2007")] [assembly: AssemblyTrademark("")] diff --git a/OpenSim/Grid/ScriptServer/ScriptServer/Region/RegionBase.cs b/OpenSim/Grid/ScriptServer/ScriptServer/Region/RegionBase.cs index b9a5c977d3..b18bda26e8 100644 --- a/OpenSim/Grid/ScriptServer/ScriptServer/Region/RegionBase.cs +++ b/OpenSim/Grid/ScriptServer/ScriptServer/Region/RegionBase.cs @@ -1,114 +1,114 @@ -/* -* Copyright (c) Contributors, http://opensimulator.org/ -* See CONTRIBUTORS.TXT for a full list of copyright holders. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* * Neither the name of the OpenSim Project nor the -* names of its contributors may be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY -* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*/ - -using System; -using System.Collections.Generic; -using System.Text; - -namespace OpenSim.Grid.ScriptServer -{ - public abstract class RegionBase - { - // These are events that the region needs to have - - // TEMP: Using System.Delegate -- needs replacing with a real delegate - public delegate void DefaultDelegate(); - - public event DefaultDelegate onScriptRez; - public event DefaultDelegate onstate_entry; - public event DefaultDelegate onstate_exit; - public event DefaultDelegate ontouch_start; - public event DefaultDelegate ontouch; - public event DefaultDelegate ontouch_end; - public event DefaultDelegate oncollision_start; - public event DefaultDelegate oncollision; - public event DefaultDelegate oncollision_end; - public event DefaultDelegate onland_collision_start; - public event DefaultDelegate onland_collision; - public event DefaultDelegate onland_collision_end; - public event DefaultDelegate ontimer; - public event DefaultDelegate onlisten; - public event DefaultDelegate onon_rez; - public event DefaultDelegate onsensor; - public event DefaultDelegate onno_sensor; - public event DefaultDelegate oncontrol; - public event DefaultDelegate onmoney; - public event DefaultDelegate onemail; - public event DefaultDelegate onat_target; - public event DefaultDelegate onnot_at_target; - public event DefaultDelegate onat_rot_target; - public event DefaultDelegate onnot_at_rot_target; - public event DefaultDelegate onrun_time_permissions; - public event DefaultDelegate onchanged; - public event DefaultDelegate onattach; - public event DefaultDelegate ondataserver; - public event DefaultDelegate onlink_message; - public event DefaultDelegate onmoving_start; - public event DefaultDelegate onmoving_end; - public event DefaultDelegate onobject_rez; - public event DefaultDelegate onremote_data; - public event DefaultDelegate onhttp_response; - - - public void ScriptRez() { onScriptRez(); } - public void state_entry() { onstate_entry(); } - public void state_exit() { onstate_exit(); } - public void touch_start() { ontouch_start(); } - public void touch() { ontouch(); } - public void touch_end() { ontouch_end(); } - public void collision_start() { oncollision_start(); } - public void collision() { oncollision(); } - public void collision_end() { oncollision_end(); } - public void land_collision_start() { onland_collision_start(); } - public void land_collision() { onland_collision(); } - public void land_collision_end() { onland_collision_end(); } - public void timer() { ontimer(); } - public void listen() { onlisten(); } - public void on_rez() { onon_rez(); } - public void sensor() { onsensor(); } - public void no_sensor() { onno_sensor(); } - public void control() { oncontrol(); } - public void money() { onmoney(); } - public void email() { onemail(); } - public void at_target() { onat_target(); } - public void not_at_target() { onnot_at_target(); } - public void at_rot_target() { onat_rot_target(); } - public void not_at_rot_target() { onnot_at_rot_target(); } - public void run_time_permissions() { onrun_time_permissions(); } - public void changed() { onchanged(); } - public void attach() { onattach(); } - public void dataserver() { ondataserver(); } - public void link_message() { onlink_message(); } - public void moving_start() { onmoving_start(); } - public void moving_end() { onmoving_end(); } - public void object_rez() { onobject_rez(); } - public void remote_data() { onremote_data(); } - public void http_response() { onhttp_response(); } - - } -} +/* +* Copyright (c) Contributors, http://opensimulator.org/ +* See CONTRIBUTORS.TXT for a full list of copyright holders. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* * Neither the name of the OpenSim Project nor the +* names of its contributors may be used to endorse or promote products +* derived from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +using System; +using System.Collections.Generic; +using System.Text; + +namespace OpenSim.Grid.ScriptServer +{ + public abstract class RegionBase + { + // These are events that the region needs to have + + // TEMP: Using System.Delegate -- needs replacing with a real delegate + public delegate void DefaultDelegate(); + + public event DefaultDelegate onScriptRez; + public event DefaultDelegate onstate_entry; + public event DefaultDelegate onstate_exit; + public event DefaultDelegate ontouch_start; + public event DefaultDelegate ontouch; + public event DefaultDelegate ontouch_end; + public event DefaultDelegate oncollision_start; + public event DefaultDelegate oncollision; + public event DefaultDelegate oncollision_end; + public event DefaultDelegate onland_collision_start; + public event DefaultDelegate onland_collision; + public event DefaultDelegate onland_collision_end; + public event DefaultDelegate ontimer; + public event DefaultDelegate onlisten; + public event DefaultDelegate onon_rez; + public event DefaultDelegate onsensor; + public event DefaultDelegate onno_sensor; + public event DefaultDelegate oncontrol; + public event DefaultDelegate onmoney; + public event DefaultDelegate onemail; + public event DefaultDelegate onat_target; + public event DefaultDelegate onnot_at_target; + public event DefaultDelegate onat_rot_target; + public event DefaultDelegate onnot_at_rot_target; + public event DefaultDelegate onrun_time_permissions; + public event DefaultDelegate onchanged; + public event DefaultDelegate onattach; + public event DefaultDelegate ondataserver; + public event DefaultDelegate onlink_message; + public event DefaultDelegate onmoving_start; + public event DefaultDelegate onmoving_end; + public event DefaultDelegate onobject_rez; + public event DefaultDelegate onremote_data; + public event DefaultDelegate onhttp_response; + + + public void ScriptRez() { onScriptRez(); } + public void state_entry() { onstate_entry(); } + public void state_exit() { onstate_exit(); } + public void touch_start() { ontouch_start(); } + public void touch() { ontouch(); } + public void touch_end() { ontouch_end(); } + public void collision_start() { oncollision_start(); } + public void collision() { oncollision(); } + public void collision_end() { oncollision_end(); } + public void land_collision_start() { onland_collision_start(); } + public void land_collision() { onland_collision(); } + public void land_collision_end() { onland_collision_end(); } + public void timer() { ontimer(); } + public void listen() { onlisten(); } + public void on_rez() { onon_rez(); } + public void sensor() { onsensor(); } + public void no_sensor() { onno_sensor(); } + public void control() { oncontrol(); } + public void money() { onmoney(); } + public void email() { onemail(); } + public void at_target() { onat_target(); } + public void not_at_target() { onnot_at_target(); } + public void at_rot_target() { onat_rot_target(); } + public void not_at_rot_target() { onnot_at_rot_target(); } + public void run_time_permissions() { onrun_time_permissions(); } + public void changed() { onchanged(); } + public void attach() { onattach(); } + public void dataserver() { ondataserver(); } + public void link_message() { onlink_message(); } + public void moving_start() { onmoving_start(); } + public void moving_end() { onmoving_end(); } + public void object_rez() { onobject_rez(); } + public void remote_data() { onremote_data(); } + public void http_response() { onhttp_response(); } + + } +} diff --git a/OpenSim/Grid/UserServer/UserLoginService.cs b/OpenSim/Grid/UserServer/UserLoginService.cs index 10a8974dc8..2aecfa2163 100644 --- a/OpenSim/Grid/UserServer/UserLoginService.cs +++ b/OpenSim/Grid/UserServer/UserLoginService.cs @@ -56,7 +56,7 @@ namespace OpenSim.Grid.UserServer /// The user profile public override void CustomiseResponse(LoginResponse response, UserProfileData theUser) { - // Load information from the gridserver + // Load information from the gridserver RegionProfileData SimInfo = new RegionProfileData(); SimInfo = SimInfo.RequestSimProfileData(theUser.currentAgent.currentHandle, m_config.GridServerURL, m_config.GridSendKey, m_config.GridRecvKey); diff --git a/OpenSim/Region/Environment/Modules/AssetDownloadModule.cs b/OpenSim/Region/Environment/Modules/AssetDownloadModule.cs index b53c05e6e6..440d948e43 100644 --- a/OpenSim/Region/Environment/Modules/AssetDownloadModule.cs +++ b/OpenSim/Region/Environment/Modules/AssetDownloadModule.cs @@ -1,72 +1,72 @@ -/* -* Copyright (c) Contributors, http://opensimulator.org/ -* See CONTRIBUTORS.TXT for a full list of copyright holders. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* * Neither the name of the OpenSim Project nor the -* names of its contributors may be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY -* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*/ - -using OpenSim.Framework.Interfaces; -using OpenSim.Region.Environment.Interfaces; -using OpenSim.Region.Environment.Scenes; -using Nini.Config; - -namespace OpenSim.Region.Environment.Modules -{ - public class AssetDownloadModule : IRegionModule - { - private Scene m_scene; - - public AssetDownloadModule() - { - } - - public void Initialise(Scene scene, IConfigSource config) - { - m_scene = scene; - m_scene.EventManager.OnNewClient += NewClient; - } - - public void PostInitialise() - { - } - - public void Close() - { - } - - public string Name - { - get { return "AssetDownloadModule"; } - } - - public bool IsSharedModule - { - get { return false; } - } - - public void NewClient(IClientAPI client) - { - } - } -} +/* +* Copyright (c) Contributors, http://opensimulator.org/ +* See CONTRIBUTORS.TXT for a full list of copyright holders. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* * Neither the name of the OpenSim Project nor the +* names of its contributors may be used to endorse or promote products +* derived from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +using OpenSim.Framework.Interfaces; +using OpenSim.Region.Environment.Interfaces; +using OpenSim.Region.Environment.Scenes; +using Nini.Config; + +namespace OpenSim.Region.Environment.Modules +{ + public class AssetDownloadModule : IRegionModule + { + private Scene m_scene; + + public AssetDownloadModule() + { + } + + public void Initialise(Scene scene, IConfigSource config) + { + m_scene = scene; + m_scene.EventManager.OnNewClient += NewClient; + } + + public void PostInitialise() + { + } + + public void Close() + { + } + + public string Name + { + get { return "AssetDownloadModule"; } + } + + public bool IsSharedModule + { + get { return false; } + } + + public void NewClient(IClientAPI client) + { + } + } +} diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs index ff58fd8b27..96beb052c7 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs @@ -1,476 +1,476 @@ -/* -* Copyright (c) Contributors, http://opensimulator.org/ -* See CONTRIBUTORS.TXT for a full list of copyright holders. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* * Neither the name of the OpenSim Project nor the -* names of its contributors may be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY -* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*/ - -using Axiom.Math; -using libsecondlife; -using libsecondlife.Packets; -using OpenSim.Framework.Communications.Cache; -using OpenSim.Framework.Communications.Caches; -using OpenSim.Framework.Interfaces; -using OpenSim.Framework.Types; -using OpenSim.Framework.Utilities; -using OpenSim.Region.Physics.Manager; - -namespace OpenSim.Region.Environment.Scenes -{ - public partial class Scene - { - //split these method into this partial as a lot of these (hopefully) are only temporary and won't be needed once Caps is more complete - // or at least some of they can be moved somewhere else - - public void AddInventoryItem(LLUUID avatarId, InventoryItemBase item) - { - ScenePresence avatar; - - if ( TryGetAvatar( avatarId, out avatar )) - { - AddInventoryItem(avatar.ControllingClient, item); - } - } - - public void AddInventoryItem(IClientAPI remoteClient, InventoryItemBase item) - { - CachedUserInfo userInfo = commsManager.UserProfileCache.GetUserDetails(remoteClient.AgentId); - if (userInfo != null) - { - userInfo.AddItem(remoteClient.AgentId, item); - remoteClient.SendInventoryItemUpdate(item); - } - } - - public LLUUID CapsUpdateInventoryItemAsset(LLUUID avatarId, LLUUID itemID, byte[] data) - { - ScenePresence avatar; - - if (TryGetAvatar(avatarId, out avatar)) - { - return CapsUpdateInventoryItemAsset(avatar.ControllingClient, itemID, data); - } - - return LLUUID.Zero; - } - - public LLUUID CapsUpdateInventoryItemAsset(IClientAPI remoteClient, LLUUID itemID, byte[] data) - { - CachedUserInfo userInfo = commsManager.UserProfileCache.GetUserDetails(remoteClient.AgentId); - if (userInfo != null) - { - if (userInfo.RootFolder != null) - { - InventoryItemBase item = userInfo.RootFolder.HasItem(itemID); - if (item != null) - { - AssetBase asset; - asset = new AssetBase(); - asset.FullID = LLUUID.Random(); - asset.Type = (sbyte) item.assetType; - asset.InvType = (sbyte) item.invType; - asset.Name = item.inventoryName; - asset.Data = data; - commsManager.AssetCache.AddAsset(asset); - - item.assetID = asset.FullID; - userInfo.UpdateItem(remoteClient.AgentId, item); - - // remoteClient.SendInventoryItemUpdate(item); - if (item.invType == 7) - { - //do we want to know about updated note cards? - } - else if (item.invType == 10) - { - // do we want to know about updated scripts - } - - return (asset.FullID); - } - } - } - return LLUUID.Zero; - } - - public void UDPUpdateInventoryItemAsset(IClientAPI remoteClient, LLUUID transactionID, LLUUID assetID, - LLUUID itemID) - { - CachedUserInfo userInfo = commsManager.UserProfileCache.GetUserDetails(remoteClient.AgentId); - if (userInfo != null) - { - if (userInfo.RootFolder != null) - { - InventoryItemBase item = userInfo.RootFolder.HasItem(itemID); - if (item != null) - { - AgentAssetTransactions transactions = - commsManager.TransactionsManager.GetUserTransActions(remoteClient.AgentId); - if (transactions != null) - { - AssetBase asset = null; - bool addToCache = false; - - asset = commsManager.AssetCache.GetAsset(assetID); - if (asset == null) - { - asset = transactions.GetTransactionAsset(transactionID); - addToCache = true; - } - - if (asset != null) - { - if (asset.FullID == assetID) - { - asset.Name = item.inventoryName; - asset.Description = item.inventoryDescription; - asset.InvType = (sbyte) item.invType; - asset.Type = (sbyte) item.assetType; - item.assetID = asset.FullID; - - if (addToCache) - { - commsManager.AssetCache.AddAsset(asset); - } - - userInfo.UpdateItem(remoteClient.AgentId, item); - } - } - } - } - } - } - } - - /// - /// temporary method to test out creating new inventory items - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - public void CreateNewInventoryItem(IClientAPI remoteClient, LLUUID transActionID, LLUUID folderID, - uint callbackID, string description, string name, sbyte invType, sbyte type, - byte wearableType, uint nextOwnerMask) - { - if (transActionID == LLUUID.Zero) - { - CachedUserInfo userInfo = commsManager.UserProfileCache.GetUserDetails(remoteClient.AgentId); - if (userInfo != null) - { - AssetBase asset = new AssetBase(); - asset.Name = name; - asset.Description = description; - asset.InvType = invType; - asset.Type = type; - asset.FullID = LLUUID.Random(); - asset.Data = new byte[1]; - commsManager.AssetCache.AddAsset(asset); - - InventoryItemBase item = new InventoryItemBase(); - item.avatarID = remoteClient.AgentId; - item.creatorsID = remoteClient.AgentId; - item.inventoryID = LLUUID.Random(); - item.assetID = asset.FullID; - item.inventoryDescription = description; - item.inventoryName = name; - item.assetType = invType; - item.invType = invType; - item.parentFolderID = folderID; - item.inventoryCurrentPermissions = 2147483647; - item.inventoryNextPermissions = nextOwnerMask; - - userInfo.AddItem(remoteClient.AgentId, item); - remoteClient.SendInventoryItemUpdate(item); - } - } - else - { - commsManager.TransactionsManager.HandleInventoryFromTransaction(remoteClient, transActionID, folderID, - callbackID, description, name, invType, - type, wearableType, nextOwnerMask); - //System.Console.WriteLine("request to create inventory item from transaction " + transActionID); - } - } - - /// - /// - /// - /// - /// - public void RequestTaskInventory(IClientAPI remoteClient, uint primLocalID) - { - bool hasPrim = false; - foreach (EntityBase ent in Entities.Values) - { - if (ent is SceneObjectGroup) - { - hasPrim = ((SceneObjectGroup) ent).HasChildPrim(primLocalID); - if (hasPrim != false) - { - bool fileChange = ((SceneObjectGroup) ent).GetPartInventoryFileName(remoteClient, primLocalID); - if (fileChange) - { - if (XferManager != null) - { - ((SceneObjectGroup) ent).RequestInventoryFile(primLocalID, XferManager); - } - } - break; - } - } - } - } - - public void RemoveTaskInventory(IClientAPI remoteClient, LLUUID itemID, uint localID) - { - bool hasPrim = false; - foreach (EntityBase ent in Entities.Values) - { - if (ent is SceneObjectGroup) - { - hasPrim = ((SceneObjectGroup) ent).HasChildPrim(localID); - if (hasPrim != false) - { - int type = ((SceneObjectGroup) ent).RemoveInventoryItem(remoteClient, localID, itemID); - ((SceneObjectGroup) ent).GetProperites(remoteClient); - if (type == 10) - { - EventManager.TriggerRemoveScript(localID, itemID); - } - } - } - } - } - - public void RezScript(IClientAPI remoteClient, LLUUID itemID, uint localID) - { - CachedUserInfo userInfo = commsManager.UserProfileCache.GetUserDetails(remoteClient.AgentId); - LLUUID copyID = LLUUID.Random(); - if (userInfo != null) - { - if (userInfo.RootFolder != null) - { - InventoryItemBase item = userInfo.RootFolder.HasItem(itemID); - if (item != null) - { - bool isTexture = false; - bool rezzed = false; - if (item.invType == 0) - { - isTexture = true; - } - AssetBase rezAsset = commsManager.AssetCache.GetAsset(item.assetID, isTexture); - if (rezAsset != null) - { - string script = Util.FieldToString(rezAsset.Data); - //Console.WriteLine("rez script "+script); - EventManager.TriggerRezScript(localID, copyID, script); - rezzed = true; - } - else - { - //lets try once more incase the asset cache is being slow getting the asset from server - rezAsset = commsManager.AssetCache.GetAsset(item.assetID, isTexture); - if (rezAsset != null) - { - string script = Util.FieldToString(rezAsset.Data); - // Console.WriteLine("rez script " + script); - EventManager.TriggerRezScript(localID, copyID, script); - rezzed = true; - } - } - - if (rezzed) - { - bool hasPrim = false; - foreach (EntityBase ent in Entities.Values) - { - if (ent is SceneObjectGroup) - { - hasPrim = ((SceneObjectGroup) ent).HasChildPrim(localID); - if (hasPrim != false) - { - bool added = - ((SceneObjectGroup) ent).AddInventoryItem(remoteClient, localID, item, - copyID); - ((SceneObjectGroup) ent).GetProperites(remoteClient); - } - } - } - } - } - } - } - } - - /// - /// - /// - /// - /// - public void DeRezObject(Packet packet, IClientAPI remoteClient) - { - DeRezObjectPacket DeRezPacket = (DeRezObjectPacket) packet; - - if (DeRezPacket.AgentBlock.DestinationID == LLUUID.Zero) - { - //currently following code not used (or don't know of any case of destination being zero - } - else - { - foreach (DeRezObjectPacket.ObjectDataBlock Data in DeRezPacket.ObjectData) - { - EntityBase selectedEnt = null; - //OpenSim.Framework.Console.MainConsole.Instance.WriteLine("LocalID:" + Data.ObjectLocalID.ToString()); - foreach (EntityBase ent in Entities.Values) - { - if (ent.LocalId == Data.ObjectLocalID) - { - selectedEnt = ent; - break; - } - } - if (selectedEnt != null) - { - if (PermissionsMngr.CanDeRezObject(remoteClient.AgentId, ((SceneObjectGroup) selectedEnt).UUID)) - { - string sceneObjectXml = ((SceneObjectGroup) selectedEnt).ToXmlString(); - CachedUserInfo userInfo = commsManager.UserProfileCache.GetUserDetails(remoteClient.AgentId); - if (userInfo != null) - { - AssetBase asset = new AssetBase(); - asset.Name = ((SceneObjectGroup) selectedEnt).GetPartName(selectedEnt.LocalId); - asset.Description = - ((SceneObjectGroup) selectedEnt).GetPartDescription(selectedEnt.LocalId); - asset.InvType = 6; - asset.Type = 6; - asset.FullID = LLUUID.Random(); - asset.Data = Helpers.StringToField(sceneObjectXml); - commsManager.AssetCache.AddAsset(asset); - - - InventoryItemBase item = new InventoryItemBase(); - item.avatarID = remoteClient.AgentId; - item.creatorsID = remoteClient.AgentId; - item.inventoryID = LLUUID.Random(); - item.assetID = asset.FullID; - item.inventoryDescription = asset.Description; - item.inventoryName = asset.Name; - item.assetType = asset.Type; - item.invType = asset.InvType; - item.parentFolderID = DeRezPacket.AgentBlock.DestinationID; - item.inventoryCurrentPermissions = 2147483647; - item.inventoryNextPermissions = 2147483647; - - userInfo.AddItem(remoteClient.AgentId, item); - remoteClient.SendInventoryItemUpdate(item); - } - - DeleteSceneObjectGroup((SceneObjectGroup)selectedEnt); - } - } - } - } - } - - public void DeleteSceneObjectGroup(SceneObjectGroup group) - { - SceneObjectPart rootPart = (group).GetChildPart(group.UUID); - if (rootPart.PhysActor != null) - { - phyScene.RemovePrim(rootPart.PhysActor); - rootPart.PhysActor = null; - } - - storageManager.DataStore.RemoveObject(group.UUID, m_regInfo.RegionID); - group.DeleteGroup(); - - lock (Entities) - { - Entities.Remove(group.UUID); - } - group.DeleteParts(); - } - - public void RezObject(IClientAPI remoteClient, LLUUID itemID, LLVector3 pos) - { - CachedUserInfo userInfo = commsManager.UserProfileCache.GetUserDetails(remoteClient.AgentId); - if (userInfo != null) - { - if (userInfo.RootFolder != null) - { - InventoryItemBase item = userInfo.RootFolder.HasItem(itemID); - if (item != null) - { - AssetBase rezAsset = commsManager.AssetCache.GetAsset(item.assetID, false); - if (rezAsset != null) - { - AddRezObject(Util.FieldToString(rezAsset.Data), pos); - userInfo.DeleteItem(remoteClient.AgentId, item); - remoteClient.SendRemoveInventoryItem(itemID); - } - else - { - //lets try once more incase the asset cache is being slow getting the asset from server - rezAsset = commsManager.AssetCache.GetAsset(item.assetID, false); - if (rezAsset != null) - { - AddRezObject(Util.FieldToString(rezAsset.Data), pos); - userInfo.DeleteItem(remoteClient.AgentId, item); - remoteClient.SendRemoveInventoryItem(itemID); - } - } - } - } - } - } - - private void AddRezObject(string xmlData, LLVector3 pos) - { - SceneObjectGroup group = new SceneObjectGroup(this, m_regionHandle, xmlData); - AddEntity(group); - group.AbsolutePosition = pos; - SceneObjectPart rootPart = group.GetChildPart(group.UUID); - if ((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Phantom) == 0) - { - PrimitiveBaseShape pbs = rootPart.Shape; - rootPart.PhysActor = phyScene.AddPrimShape( - rootPart.Name, - pbs, - new PhysicsVector(rootPart.AbsolutePosition.X, rootPart.AbsolutePosition.Y, - rootPart.AbsolutePosition.Z), - new PhysicsVector(rootPart.Scale.X, rootPart.Scale.Y, rootPart.Scale.Z), - new Quaternion(rootPart.RotationOffset.W, rootPart.RotationOffset.X, - rootPart.RotationOffset.Y, rootPart.RotationOffset.Z)); - } - } - } -} +/* +* Copyright (c) Contributors, http://opensimulator.org/ +* See CONTRIBUTORS.TXT for a full list of copyright holders. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* * Neither the name of the OpenSim Project nor the +* names of its contributors may be used to endorse or promote products +* derived from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +using Axiom.Math; +using libsecondlife; +using libsecondlife.Packets; +using OpenSim.Framework.Communications.Cache; +using OpenSim.Framework.Communications.Caches; +using OpenSim.Framework.Interfaces; +using OpenSim.Framework.Types; +using OpenSim.Framework.Utilities; +using OpenSim.Region.Physics.Manager; + +namespace OpenSim.Region.Environment.Scenes +{ + public partial class Scene + { + //split these method into this partial as a lot of these (hopefully) are only temporary and won't be needed once Caps is more complete + // or at least some of they can be moved somewhere else + + public void AddInventoryItem(LLUUID avatarId, InventoryItemBase item) + { + ScenePresence avatar; + + if ( TryGetAvatar( avatarId, out avatar )) + { + AddInventoryItem(avatar.ControllingClient, item); + } + } + + public void AddInventoryItem(IClientAPI remoteClient, InventoryItemBase item) + { + CachedUserInfo userInfo = commsManager.UserProfileCache.GetUserDetails(remoteClient.AgentId); + if (userInfo != null) + { + userInfo.AddItem(remoteClient.AgentId, item); + remoteClient.SendInventoryItemUpdate(item); + } + } + + public LLUUID CapsUpdateInventoryItemAsset(LLUUID avatarId, LLUUID itemID, byte[] data) + { + ScenePresence avatar; + + if (TryGetAvatar(avatarId, out avatar)) + { + return CapsUpdateInventoryItemAsset(avatar.ControllingClient, itemID, data); + } + + return LLUUID.Zero; + } + + public LLUUID CapsUpdateInventoryItemAsset(IClientAPI remoteClient, LLUUID itemID, byte[] data) + { + CachedUserInfo userInfo = commsManager.UserProfileCache.GetUserDetails(remoteClient.AgentId); + if (userInfo != null) + { + if (userInfo.RootFolder != null) + { + InventoryItemBase item = userInfo.RootFolder.HasItem(itemID); + if (item != null) + { + AssetBase asset; + asset = new AssetBase(); + asset.FullID = LLUUID.Random(); + asset.Type = (sbyte) item.assetType; + asset.InvType = (sbyte) item.invType; + asset.Name = item.inventoryName; + asset.Data = data; + commsManager.AssetCache.AddAsset(asset); + + item.assetID = asset.FullID; + userInfo.UpdateItem(remoteClient.AgentId, item); + + // remoteClient.SendInventoryItemUpdate(item); + if (item.invType == 7) + { + //do we want to know about updated note cards? + } + else if (item.invType == 10) + { + // do we want to know about updated scripts + } + + return (asset.FullID); + } + } + } + return LLUUID.Zero; + } + + public void UDPUpdateInventoryItemAsset(IClientAPI remoteClient, LLUUID transactionID, LLUUID assetID, + LLUUID itemID) + { + CachedUserInfo userInfo = commsManager.UserProfileCache.GetUserDetails(remoteClient.AgentId); + if (userInfo != null) + { + if (userInfo.RootFolder != null) + { + InventoryItemBase item = userInfo.RootFolder.HasItem(itemID); + if (item != null) + { + AgentAssetTransactions transactions = + commsManager.TransactionsManager.GetUserTransActions(remoteClient.AgentId); + if (transactions != null) + { + AssetBase asset = null; + bool addToCache = false; + + asset = commsManager.AssetCache.GetAsset(assetID); + if (asset == null) + { + asset = transactions.GetTransactionAsset(transactionID); + addToCache = true; + } + + if (asset != null) + { + if (asset.FullID == assetID) + { + asset.Name = item.inventoryName; + asset.Description = item.inventoryDescription; + asset.InvType = (sbyte) item.invType; + asset.Type = (sbyte) item.assetType; + item.assetID = asset.FullID; + + if (addToCache) + { + commsManager.AssetCache.AddAsset(asset); + } + + userInfo.UpdateItem(remoteClient.AgentId, item); + } + } + } + } + } + } + } + + /// + /// temporary method to test out creating new inventory items + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public void CreateNewInventoryItem(IClientAPI remoteClient, LLUUID transActionID, LLUUID folderID, + uint callbackID, string description, string name, sbyte invType, sbyte type, + byte wearableType, uint nextOwnerMask) + { + if (transActionID == LLUUID.Zero) + { + CachedUserInfo userInfo = commsManager.UserProfileCache.GetUserDetails(remoteClient.AgentId); + if (userInfo != null) + { + AssetBase asset = new AssetBase(); + asset.Name = name; + asset.Description = description; + asset.InvType = invType; + asset.Type = type; + asset.FullID = LLUUID.Random(); + asset.Data = new byte[1]; + commsManager.AssetCache.AddAsset(asset); + + InventoryItemBase item = new InventoryItemBase(); + item.avatarID = remoteClient.AgentId; + item.creatorsID = remoteClient.AgentId; + item.inventoryID = LLUUID.Random(); + item.assetID = asset.FullID; + item.inventoryDescription = description; + item.inventoryName = name; + item.assetType = invType; + item.invType = invType; + item.parentFolderID = folderID; + item.inventoryCurrentPermissions = 2147483647; + item.inventoryNextPermissions = nextOwnerMask; + + userInfo.AddItem(remoteClient.AgentId, item); + remoteClient.SendInventoryItemUpdate(item); + } + } + else + { + commsManager.TransactionsManager.HandleInventoryFromTransaction(remoteClient, transActionID, folderID, + callbackID, description, name, invType, + type, wearableType, nextOwnerMask); + //System.Console.WriteLine("request to create inventory item from transaction " + transActionID); + } + } + + /// + /// + /// + /// + /// + public void RequestTaskInventory(IClientAPI remoteClient, uint primLocalID) + { + bool hasPrim = false; + foreach (EntityBase ent in Entities.Values) + { + if (ent is SceneObjectGroup) + { + hasPrim = ((SceneObjectGroup) ent).HasChildPrim(primLocalID); + if (hasPrim != false) + { + bool fileChange = ((SceneObjectGroup) ent).GetPartInventoryFileName(remoteClient, primLocalID); + if (fileChange) + { + if (XferManager != null) + { + ((SceneObjectGroup) ent).RequestInventoryFile(primLocalID, XferManager); + } + } + break; + } + } + } + } + + public void RemoveTaskInventory(IClientAPI remoteClient, LLUUID itemID, uint localID) + { + bool hasPrim = false; + foreach (EntityBase ent in Entities.Values) + { + if (ent is SceneObjectGroup) + { + hasPrim = ((SceneObjectGroup) ent).HasChildPrim(localID); + if (hasPrim != false) + { + int type = ((SceneObjectGroup) ent).RemoveInventoryItem(remoteClient, localID, itemID); + ((SceneObjectGroup) ent).GetProperites(remoteClient); + if (type == 10) + { + EventManager.TriggerRemoveScript(localID, itemID); + } + } + } + } + } + + public void RezScript(IClientAPI remoteClient, LLUUID itemID, uint localID) + { + CachedUserInfo userInfo = commsManager.UserProfileCache.GetUserDetails(remoteClient.AgentId); + LLUUID copyID = LLUUID.Random(); + if (userInfo != null) + { + if (userInfo.RootFolder != null) + { + InventoryItemBase item = userInfo.RootFolder.HasItem(itemID); + if (item != null) + { + bool isTexture = false; + bool rezzed = false; + if (item.invType == 0) + { + isTexture = true; + } + AssetBase rezAsset = commsManager.AssetCache.GetAsset(item.assetID, isTexture); + if (rezAsset != null) + { + string script = Util.FieldToString(rezAsset.Data); + //Console.WriteLine("rez script "+script); + EventManager.TriggerRezScript(localID, copyID, script); + rezzed = true; + } + else + { + //lets try once more incase the asset cache is being slow getting the asset from server + rezAsset = commsManager.AssetCache.GetAsset(item.assetID, isTexture); + if (rezAsset != null) + { + string script = Util.FieldToString(rezAsset.Data); + // Console.WriteLine("rez script " + script); + EventManager.TriggerRezScript(localID, copyID, script); + rezzed = true; + } + } + + if (rezzed) + { + bool hasPrim = false; + foreach (EntityBase ent in Entities.Values) + { + if (ent is SceneObjectGroup) + { + hasPrim = ((SceneObjectGroup) ent).HasChildPrim(localID); + if (hasPrim != false) + { + bool added = + ((SceneObjectGroup) ent).AddInventoryItem(remoteClient, localID, item, + copyID); + ((SceneObjectGroup) ent).GetProperites(remoteClient); + } + } + } + } + } + } + } + } + + /// + /// + /// + /// + /// + public void DeRezObject(Packet packet, IClientAPI remoteClient) + { + DeRezObjectPacket DeRezPacket = (DeRezObjectPacket) packet; + + if (DeRezPacket.AgentBlock.DestinationID == LLUUID.Zero) + { + //currently following code not used (or don't know of any case of destination being zero + } + else + { + foreach (DeRezObjectPacket.ObjectDataBlock Data in DeRezPacket.ObjectData) + { + EntityBase selectedEnt = null; + //OpenSim.Framework.Console.MainConsole.Instance.WriteLine("LocalID:" + Data.ObjectLocalID.ToString()); + foreach (EntityBase ent in Entities.Values) + { + if (ent.LocalId == Data.ObjectLocalID) + { + selectedEnt = ent; + break; + } + } + if (selectedEnt != null) + { + if (PermissionsMngr.CanDeRezObject(remoteClient.AgentId, ((SceneObjectGroup) selectedEnt).UUID)) + { + string sceneObjectXml = ((SceneObjectGroup) selectedEnt).ToXmlString(); + CachedUserInfo userInfo = commsManager.UserProfileCache.GetUserDetails(remoteClient.AgentId); + if (userInfo != null) + { + AssetBase asset = new AssetBase(); + asset.Name = ((SceneObjectGroup) selectedEnt).GetPartName(selectedEnt.LocalId); + asset.Description = + ((SceneObjectGroup) selectedEnt).GetPartDescription(selectedEnt.LocalId); + asset.InvType = 6; + asset.Type = 6; + asset.FullID = LLUUID.Random(); + asset.Data = Helpers.StringToField(sceneObjectXml); + commsManager.AssetCache.AddAsset(asset); + + + InventoryItemBase item = new InventoryItemBase(); + item.avatarID = remoteClient.AgentId; + item.creatorsID = remoteClient.AgentId; + item.inventoryID = LLUUID.Random(); + item.assetID = asset.FullID; + item.inventoryDescription = asset.Description; + item.inventoryName = asset.Name; + item.assetType = asset.Type; + item.invType = asset.InvType; + item.parentFolderID = DeRezPacket.AgentBlock.DestinationID; + item.inventoryCurrentPermissions = 2147483647; + item.inventoryNextPermissions = 2147483647; + + userInfo.AddItem(remoteClient.AgentId, item); + remoteClient.SendInventoryItemUpdate(item); + } + + DeleteSceneObjectGroup((SceneObjectGroup)selectedEnt); + } + } + } + } + } + + public void DeleteSceneObjectGroup(SceneObjectGroup group) + { + SceneObjectPart rootPart = (group).GetChildPart(group.UUID); + if (rootPart.PhysActor != null) + { + phyScene.RemovePrim(rootPart.PhysActor); + rootPart.PhysActor = null; + } + + storageManager.DataStore.RemoveObject(group.UUID, m_regInfo.RegionID); + group.DeleteGroup(); + + lock (Entities) + { + Entities.Remove(group.UUID); + } + group.DeleteParts(); + } + + public void RezObject(IClientAPI remoteClient, LLUUID itemID, LLVector3 pos) + { + CachedUserInfo userInfo = commsManager.UserProfileCache.GetUserDetails(remoteClient.AgentId); + if (userInfo != null) + { + if (userInfo.RootFolder != null) + { + InventoryItemBase item = userInfo.RootFolder.HasItem(itemID); + if (item != null) + { + AssetBase rezAsset = commsManager.AssetCache.GetAsset(item.assetID, false); + if (rezAsset != null) + { + AddRezObject(Util.FieldToString(rezAsset.Data), pos); + userInfo.DeleteItem(remoteClient.AgentId, item); + remoteClient.SendRemoveInventoryItem(itemID); + } + else + { + //lets try once more incase the asset cache is being slow getting the asset from server + rezAsset = commsManager.AssetCache.GetAsset(item.assetID, false); + if (rezAsset != null) + { + AddRezObject(Util.FieldToString(rezAsset.Data), pos); + userInfo.DeleteItem(remoteClient.AgentId, item); + remoteClient.SendRemoveInventoryItem(itemID); + } + } + } + } + } + } + + private void AddRezObject(string xmlData, LLVector3 pos) + { + SceneObjectGroup group = new SceneObjectGroup(this, m_regionHandle, xmlData); + AddEntity(group); + group.AbsolutePosition = pos; + SceneObjectPart rootPart = group.GetChildPart(group.UUID); + if ((rootPart.ObjectFlags & (uint) LLObject.ObjectFlags.Phantom) == 0) + { + PrimitiveBaseShape pbs = rootPart.Shape; + rootPart.PhysActor = phyScene.AddPrimShape( + rootPart.Name, + pbs, + new PhysicsVector(rootPart.AbsolutePosition.X, rootPart.AbsolutePosition.Y, + rootPart.AbsolutePosition.Z), + new PhysicsVector(rootPart.Scale.X, rootPart.Scale.Y, rootPart.Scale.Z), + new Quaternion(rootPart.RotationOffset.W, rootPart.RotationOffset.X, + rootPart.RotationOffset.Y, rootPart.RotationOffset.Z)); + } + } + } +} diff --git a/OpenSim/Region/Environment/Types/BasicQuadTreeNode.cs b/OpenSim/Region/Environment/Types/BasicQuadTreeNode.cs index 20bb51d309..942ec4ddb6 100644 --- a/OpenSim/Region/Environment/Types/BasicQuadTreeNode.cs +++ b/OpenSim/Region/Environment/Types/BasicQuadTreeNode.cs @@ -1,258 +1,258 @@ -/* -* Copyright (c) Contributors, http://opensimulator.org/ -* See CONTRIBUTORS.TXT for a full list of copyright holders. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* * Neither the name of the OpenSim Project nor the -* names of its contributors may be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY -* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*/ - -using System.Collections.Generic; -using OpenSim.Region.Environment.Scenes; - -namespace OpenSim.Region.Environment.Types -{ - public class BasicQuadTreeNode - { - private List m_objects = new List(); - private BasicQuadTreeNode[] m_childNodes = null; - private BasicQuadTreeNode m_parent = null; - - private short m_leftX; - private short m_leftY; - private short m_width; - private short m_height; - //private int m_quadNumber; - private string m_quadID; - - public BasicQuadTreeNode(BasicQuadTreeNode parent, string quadID, short leftX, short leftY, short width, short height) - { - m_parent = parent; - m_quadID = quadID; - m_leftX = leftX; - m_leftY = leftY; - m_width = width; - m_height = height; - // Console.WriteLine("creating quadtree node " + m_quadID); - } - - public void AddObject(SceneObjectGroup obj) - { - if (m_childNodes == null) - { - if (!m_objects.Contains(obj)) - { - m_objects.Add(obj); - } - } - else - { - if (obj.AbsolutePosition.X < (m_leftX + (m_width / 2))) - { - if (obj.AbsolutePosition.Y < (m_leftY + (m_height / 2))) - { - m_childNodes[0].AddObject(obj); - } - else - { - m_childNodes[2].AddObject(obj); - } - } - else - { - if (obj.AbsolutePosition.Y < (m_leftY + (m_height / 2))) - { - m_childNodes[1].AddObject(obj); - } - else - { - m_childNodes[3].AddObject(obj); - } - } - } - } - - public void Subdivide() - { - if (m_childNodes == null) - { - m_childNodes = new BasicQuadTreeNode[4]; - m_childNodes[0] = new BasicQuadTreeNode(this, m_quadID + "1/", m_leftX, m_leftY, (short)(m_width / 2), (short)(m_height / 2)); - m_childNodes[1] = new BasicQuadTreeNode(this, m_quadID + "2/", (short)(m_leftX + (m_width / 2)), m_leftY, (short)(m_width / 2), (short)(m_height / 2)); - m_childNodes[2] = new BasicQuadTreeNode(this, m_quadID + "3/", m_leftX, (short)(m_leftY + (m_height / 2)), (short)(m_width / 2), (short)(m_height / 2)); - m_childNodes[3] = new BasicQuadTreeNode(this, m_quadID + "4/", (short)(m_leftX + (m_width / 2)), (short)(m_height + (m_height / 2)), (short)(m_width / 2), (short)(m_height / 2)); - } - else - { - for (int i = 0; i < m_childNodes.Length; i++) - { - m_childNodes[i].Subdivide(); - } - } - } - - public List GetObjectsFrom(float x, float y) - { - if (m_childNodes == null) - { - return new List(m_objects); - } - else - { - if (x < m_leftX + (m_width / 2)) - { - if (y < m_leftY + (m_height / 2)) - { - return m_childNodes[0].GetObjectsFrom(x, y); - } - else - { - return m_childNodes[2].GetObjectsFrom(x, y); - } - } - else - { - if (y < m_leftY + (m_height / 2)) - { - return m_childNodes[1].GetObjectsFrom(x, y); - } - else - { - return m_childNodes[3].GetObjectsFrom(x, y); - } - } - } - } - - public List GetObjectsFrom(string nodeName) - { - if (nodeName == m_quadID) - { - return new List(m_objects); - } - else if (m_childNodes != null) - { - for (int i = 0; i < 4; i++) - { - List retVal; - retVal = m_childNodes[i].GetObjectsFrom(nodeName); - if (retVal != null) - { - return retVal; - } - } - } - return null; - } - - public string GetNodeID(float x, float y) - { - if (m_childNodes == null) - { - return m_quadID; - } - else - { - if (x < m_leftX + (m_width / 2)) - { - if (y < m_leftY + (m_height / 2)) - { - return m_childNodes[0].GetNodeID(x, y); - } - else - { - return m_childNodes[2].GetNodeID(x, y); - } - } - else - { - if (y < m_leftY + (m_height / 2)) - { - return m_childNodes[1].GetNodeID(x, y); - } - else - { - return m_childNodes[3].GetNodeID(x, y); - } - } - } - } - - public void Update() - { - if (m_childNodes != null) - { - for (int i = 0; i < 4; i++) - { - m_childNodes[i].Update(); - } - } - else - { - List outBounds = new List(); - foreach (SceneObjectGroup group in m_objects) - { - if (((group.AbsolutePosition.X > m_leftX) && (group.AbsolutePosition.X < (m_leftX + m_width))) && ((group.AbsolutePosition.Y > m_leftY) && (group.AbsolutePosition.Y < (m_leftY + m_height)))) - { - //still in bounds - } - else - { - outBounds.Add(group); - } - } - - foreach (SceneObjectGroup removee in outBounds) - { - m_objects.Remove(removee); - if (m_parent != null) - { - m_parent.PassUp(removee); - } - } - outBounds.Clear(); - } - } - - public void PassUp(SceneObjectGroup group) - { - if (((group.AbsolutePosition.X > m_leftX) && (group.AbsolutePosition.X < (m_leftX + m_width))) && ((group.AbsolutePosition.Y > m_leftY) && (group.AbsolutePosition.Y < (m_leftY + m_height)))) - { - AddObject(group); - } - else - { - if (m_parent != null) - { - m_parent.PassUp(group); - } - } - } - - public string[] GetNeighbours(string nodeName) - { - string[] retVal = new string[1]; - retVal[0] = ""; - return retVal; - } - } -} +/* +* Copyright (c) Contributors, http://opensimulator.org/ +* See CONTRIBUTORS.TXT for a full list of copyright holders. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* * Neither the name of the OpenSim Project nor the +* names of its contributors may be used to endorse or promote products +* derived from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +using System.Collections.Generic; +using OpenSim.Region.Environment.Scenes; + +namespace OpenSim.Region.Environment.Types +{ + public class BasicQuadTreeNode + { + private List m_objects = new List(); + private BasicQuadTreeNode[] m_childNodes = null; + private BasicQuadTreeNode m_parent = null; + + private short m_leftX; + private short m_leftY; + private short m_width; + private short m_height; + //private int m_quadNumber; + private string m_quadID; + + public BasicQuadTreeNode(BasicQuadTreeNode parent, string quadID, short leftX, short leftY, short width, short height) + { + m_parent = parent; + m_quadID = quadID; + m_leftX = leftX; + m_leftY = leftY; + m_width = width; + m_height = height; + // Console.WriteLine("creating quadtree node " + m_quadID); + } + + public void AddObject(SceneObjectGroup obj) + { + if (m_childNodes == null) + { + if (!m_objects.Contains(obj)) + { + m_objects.Add(obj); + } + } + else + { + if (obj.AbsolutePosition.X < (m_leftX + (m_width / 2))) + { + if (obj.AbsolutePosition.Y < (m_leftY + (m_height / 2))) + { + m_childNodes[0].AddObject(obj); + } + else + { + m_childNodes[2].AddObject(obj); + } + } + else + { + if (obj.AbsolutePosition.Y < (m_leftY + (m_height / 2))) + { + m_childNodes[1].AddObject(obj); + } + else + { + m_childNodes[3].AddObject(obj); + } + } + } + } + + public void Subdivide() + { + if (m_childNodes == null) + { + m_childNodes = new BasicQuadTreeNode[4]; + m_childNodes[0] = new BasicQuadTreeNode(this, m_quadID + "1/", m_leftX, m_leftY, (short)(m_width / 2), (short)(m_height / 2)); + m_childNodes[1] = new BasicQuadTreeNode(this, m_quadID + "2/", (short)(m_leftX + (m_width / 2)), m_leftY, (short)(m_width / 2), (short)(m_height / 2)); + m_childNodes[2] = new BasicQuadTreeNode(this, m_quadID + "3/", m_leftX, (short)(m_leftY + (m_height / 2)), (short)(m_width / 2), (short)(m_height / 2)); + m_childNodes[3] = new BasicQuadTreeNode(this, m_quadID + "4/", (short)(m_leftX + (m_width / 2)), (short)(m_height + (m_height / 2)), (short)(m_width / 2), (short)(m_height / 2)); + } + else + { + for (int i = 0; i < m_childNodes.Length; i++) + { + m_childNodes[i].Subdivide(); + } + } + } + + public List GetObjectsFrom(float x, float y) + { + if (m_childNodes == null) + { + return new List(m_objects); + } + else + { + if (x < m_leftX + (m_width / 2)) + { + if (y < m_leftY + (m_height / 2)) + { + return m_childNodes[0].GetObjectsFrom(x, y); + } + else + { + return m_childNodes[2].GetObjectsFrom(x, y); + } + } + else + { + if (y < m_leftY + (m_height / 2)) + { + return m_childNodes[1].GetObjectsFrom(x, y); + } + else + { + return m_childNodes[3].GetObjectsFrom(x, y); + } + } + } + } + + public List GetObjectsFrom(string nodeName) + { + if (nodeName == m_quadID) + { + return new List(m_objects); + } + else if (m_childNodes != null) + { + for (int i = 0; i < 4; i++) + { + List retVal; + retVal = m_childNodes[i].GetObjectsFrom(nodeName); + if (retVal != null) + { + return retVal; + } + } + } + return null; + } + + public string GetNodeID(float x, float y) + { + if (m_childNodes == null) + { + return m_quadID; + } + else + { + if (x < m_leftX + (m_width / 2)) + { + if (y < m_leftY + (m_height / 2)) + { + return m_childNodes[0].GetNodeID(x, y); + } + else + { + return m_childNodes[2].GetNodeID(x, y); + } + } + else + { + if (y < m_leftY + (m_height / 2)) + { + return m_childNodes[1].GetNodeID(x, y); + } + else + { + return m_childNodes[3].GetNodeID(x, y); + } + } + } + } + + public void Update() + { + if (m_childNodes != null) + { + for (int i = 0; i < 4; i++) + { + m_childNodes[i].Update(); + } + } + else + { + List outBounds = new List(); + foreach (SceneObjectGroup group in m_objects) + { + if (((group.AbsolutePosition.X > m_leftX) && (group.AbsolutePosition.X < (m_leftX + m_width))) && ((group.AbsolutePosition.Y > m_leftY) && (group.AbsolutePosition.Y < (m_leftY + m_height)))) + { + //still in bounds + } + else + { + outBounds.Add(group); + } + } + + foreach (SceneObjectGroup removee in outBounds) + { + m_objects.Remove(removee); + if (m_parent != null) + { + m_parent.PassUp(removee); + } + } + outBounds.Clear(); + } + } + + public void PassUp(SceneObjectGroup group) + { + if (((group.AbsolutePosition.X > m_leftX) && (group.AbsolutePosition.X < (m_leftX + m_width))) && ((group.AbsolutePosition.Y > m_leftY) && (group.AbsolutePosition.Y < (m_leftY + m_height)))) + { + AddObject(group); + } + else + { + if (m_parent != null) + { + m_parent.PassUp(group); + } + } + } + + public string[] GetNeighbours(string nodeName) + { + string[] retVal = new string[1]; + retVal[0] = ""; + return retVal; + } + } +} diff --git a/OpenSim/Region/Environment/Types/UpdateQueue.cs b/OpenSim/Region/Environment/Types/UpdateQueue.cs index b21bcb6344..442e9d57b0 100644 --- a/OpenSim/Region/Environment/Types/UpdateQueue.cs +++ b/OpenSim/Region/Environment/Types/UpdateQueue.cs @@ -1,79 +1,79 @@ -/* -* Copyright (c) Contributors, http://opensimulator.org/ -* See CONTRIBUTORS.TXT for a full list of copyright holders. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* * Neither the name of the OpenSim Project nor the -* names of its contributors may be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY -* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*/ - -using System.Collections.Generic; -using libsecondlife; -using OpenSim.Region.Environment.Scenes; - -namespace OpenSim.Region.Environment.Types -{ - public class UpdateQueue - { - private Queue m_queue; - - private List m_ids; - - public int Count - { - get { return m_queue.Count; } - } - - public UpdateQueue() - { - m_queue = new Queue(); - m_ids = new List(); - } - - public void Enqueue(SceneObjectPart part) - { - lock (m_ids) - { - if (!m_ids.Contains(part.UUID)) - { - m_ids.Add(part.UUID); - m_queue.Enqueue(part); - } - } - } - - public SceneObjectPart Dequeue() - { - SceneObjectPart part = null; - if (m_queue.Count > 0) - { - part = m_queue.Dequeue(); - lock (m_ids) - { - m_ids.Remove(part.UUID); - } - } - - return part; - } - } -} +/* +* Copyright (c) Contributors, http://opensimulator.org/ +* See CONTRIBUTORS.TXT for a full list of copyright holders. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* * Neither the name of the OpenSim Project nor the +* names of its contributors may be used to endorse or promote products +* derived from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +using System.Collections.Generic; +using libsecondlife; +using OpenSim.Region.Environment.Scenes; + +namespace OpenSim.Region.Environment.Types +{ + public class UpdateQueue + { + private Queue m_queue; + + private List m_ids; + + public int Count + { + get { return m_queue.Count; } + } + + public UpdateQueue() + { + m_queue = new Queue(); + m_ids = new List(); + } + + public void Enqueue(SceneObjectPart part) + { + lock (m_ids) + { + if (!m_ids.Contains(part.UUID)) + { + m_ids.Add(part.UUID); + m_queue.Enqueue(part); + } + } + } + + public SceneObjectPart Dequeue() + { + SceneObjectPart part = null; + if (m_queue.Count > 0) + { + part = m_queue.Dequeue(); + lock (m_ids) + { + m_ids.Remove(part.UUID); + } + } + + return part; + } + } +} diff --git a/OpenSim/Tests/Inventory/Properties/AssemblyInfo.cs b/OpenSim/Tests/Inventory/Properties/AssemblyInfo.cs index dd537a557b..cb89a713f4 100644 --- a/OpenSim/Tests/Inventory/Properties/AssemblyInfo.cs +++ b/OpenSim/Tests/Inventory/Properties/AssemblyInfo.cs @@ -1,35 +1,35 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Inventory")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Lauridsen")] -[assembly: AssemblyProduct("Inventory")] -[assembly: AssemblyCopyright("Copyright © Lauridsen 2007")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("2330add7-08a2-4f33-9ab8-74894fe7e3dd")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Inventory")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Lauridsen")] +[assembly: AssemblyProduct("Inventory")] +[assembly: AssemblyCopyright("Copyright © Lauridsen 2007")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("2330add7-08a2-4f33-9ab8-74894fe7e3dd")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/OpenSim/Tests/Inventory/TestInventory.cs b/OpenSim/Tests/Inventory/TestInventory.cs index 7f1ded8f50..f9a791ff8f 100644 --- a/OpenSim/Tests/Inventory/TestInventory.cs +++ b/OpenSim/Tests/Inventory/TestInventory.cs @@ -1,1008 +1,1008 @@ -/* -* Copyright (c) Contributors, http://opensimulator.org/ -* See CONTRIBUTORS.TXT for a full list of copyright holders. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* * Neither the name of the OpenSim Project nor the -* names of its contributors may be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY -* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*/ - -using System; -using System.Collections.Generic; -using System.Text; -using NUnit.Framework; - -using libsecondlife; -using OpenSim.Framework.Types; -using OpenSim.Framework.Data; -using OpenSim.Framework.Data.SQLite; -using OpenSim.Framework.Data.MySQL; -using OpenSim.Framework.Console; - -namespace OpenSim.Test.Inventory -{ - [TestFixture] - public class TestInventory - { - IInventoryData _dbPlugin; - LLUUID _agent_1_id; - public static LLUUID LibraryFolderRootUuid = new LLUUID("5926de2a-c2d7-4c11-ac4e-74512ffeb6d1"); - - Random _rnd = new Random((int)DateTime.Now.Ticks); - - [TestFixtureSetUp] - public void SetupInventoryTest() - { - - _agent_1_id = LLUUID.Random(); - - MainLog.Instance = new LogBase("UnitTest.log", "TEST", null, true); -// _dbPlugin = new SQLiteInventoryStore(); - _dbPlugin = new MySQLInventoryData(); - _dbPlugin.Initialise(); - } - - [TestFixtureTearDown] - public void TeardownInventoryTest() - { - _dbPlugin.Close(); - } - - private bool AreFoldersIdentical(InventoryFolderBase a, InventoryFolderBase b) - { - if (a.agentID != b.agentID) return false; - if (a.folderID != b.folderID) return false; - if (a.name != b.name) return false; - if (a.parentID != b.parentID) return false; - if (a.type != b.type) return false; - if (a.version != b.version) return false; - return true; - } - - private bool AreItemsIdentical(InventoryItemBase a, InventoryItemBase b) - { - if (a.assetID != b.assetID) return false; - if (a.assetType != b.assetType) return false; - if (a.avatarID != b.avatarID) return false; - if (a.creatorsID != b.creatorsID) return false; - if (a.inventoryBasePermissions != b.inventoryBasePermissions) return false; - if (a.inventoryCurrentPermissions != b.inventoryCurrentPermissions) return false; - if (a.inventoryEveryOnePermissions != b.inventoryEveryOnePermissions) return false; - if (a.inventoryNextPermissions != b.inventoryNextPermissions) return false; - if (a.inventoryID != b.inventoryID) return false; - if (a.inventoryDescription != b.inventoryDescription) return false; - if (a.inventoryName != b.inventoryName) return false; - if (a.invType != b.invType) return false; - if (a.parentFolderID != b.parentFolderID) return false; - return true; - } - - /// - /// Test that we can insert a root folder - /// - [Test] - public void T01_SetupRootFolder() - { - InventoryFolderBase root = new InventoryFolderBase(); - root.agentID = _agent_1_id; - root.folderID = _agent_1_id; - root.name = "Root folder"; - root.parentID = LLUUID.Zero; - root.type = 2; - root.version = 2; - _dbPlugin.addInventoryFolder(root); - - InventoryFolderBase f = _dbPlugin.getInventoryFolder(root.folderID); - Assert.IsNotNull(f, "Failed to get existing folder"); - Assert.IsTrue(AreFoldersIdentical(root, f), "Difference between stored and retrieved folder data"); - - // Test that we only get the root folder, based on it's id, i.e. any other gui will not find the folder - f = _dbPlugin.getInventoryFolder(LLUUID.Zero); - Assert.IsNull(f, "get folder returned a folder, but shouldn't find one"); - - f = _dbPlugin.getInventoryFolder(LLUUID.Random()); - Assert.IsNull(f, "get folder returned a folder, but shouldn't find one"); - - // test that we can delete the folder - - _dbPlugin.deleteInventoryFolder(_agent_1_id); - f = _dbPlugin.getInventoryFolder(root.folderID); - Assert.IsNull(f, "get folder returned a folder, but it should have been deleted"); - } - - /// - /// Make sure that all folders reported as root folders are root folders - /// - [Test] - public void T02_TestRootFolder() - { - InventoryFolderBase root = new InventoryFolderBase(); - root.agentID = _agent_1_id; - root.folderID = _agent_1_id; - root.name = "Root folder"; - root.parentID = LLUUID.Zero; - root.type = 2; - root.version = 2; - _dbPlugin.addInventoryFolder(root); - - List folders = _dbPlugin.getUserRootFolders(_agent_1_id); - Assert.IsNotNull(folders, "Failed to get rootfolders for user"); - - bool foundRoot = false; - foreach(InventoryFolderBase f in folders) { - - // a root folder has a zero valued LLUUID - Assert.AreEqual(f.parentID, LLUUID.Zero, "non root folder returned"); - - - if(f.agentID == root.agentID) - { - // we cannot have two different user specific root folders - Assert.IsFalse(foundRoot, "Two different user specific root folders returned"); - - Assert.IsTrue(AreFoldersIdentical(root, f), "Difference between stored and retrieved folder data"); - foundRoot = false; - } - } - _dbPlugin.deleteInventoryFolder(_agent_1_id); - } - - /// - /// Test of folder hierarchy - /// - [Test] - public void T03_TestRootFolder() - { - InventoryFolderBase root = new InventoryFolderBase(); - root.agentID = _agent_1_id; - root.folderID = _agent_1_id; - root.name = "Root folder"; - root.parentID = LLUUID.Zero; - root.type = 2; - root.version = 2; - _dbPlugin.addInventoryFolder(root); - - List folders = _dbPlugin.getInventoryFolders(_agent_1_id); - Assert.IsNotNull(folders, "null was returned, but an empty list of subfolders were expected"); - Assert.IsEmpty(folders, "non empty collection was returned, even though the list of sub-folders should be empty"); - - InventoryFolderBase child1 = new InventoryFolderBase(); - child1.agentID = _agent_1_id; - child1.folderID = LLUUID.Random(); - child1.name = "Child 1"; - child1.parentID = root.folderID; - child1.type = 3; - child1.version = 3; - _dbPlugin.addInventoryFolder(child1); - - InventoryFolderBase child2 = new InventoryFolderBase(); - child2.agentID = _agent_1_id; - child2.folderID = LLUUID.Random(); - child2.name = "Child 2"; - child2.parentID = root.folderID; - child2.type = 4; - child2.version = 4; - _dbPlugin.addInventoryFolder(child2); - - folders = _dbPlugin.getInventoryFolders(_agent_1_id); - Assert.IsNotNull(folders, "null was returned, but an empty list of subfolders were expected"); - Assert.AreEqual(folders.Count, 2, "two children were reported as inserted into the root folder"); - - bool foundChild1 = false; - bool foundChild2 = false; - - foreach (InventoryFolderBase f in folders) - { - if (f.folderID == child1.folderID) - { - Assert.IsTrue(AreFoldersIdentical(child1, f), "Difference between stored and retrieved folder data"); - foundChild1 = true; - } - else if (f.folderID == child2.folderID) - { - Assert.IsTrue(AreFoldersIdentical(child2, f), "Difference between stored and retrieved folder data"); - foundChild2 = true; - } - else - { - Assert.Fail("found unknown child folder"); - } - } - - if (foundChild1 == false || foundChild2 == false) - { - Assert.Fail("one of the two child folders was not returned"); - } - - _dbPlugin.deleteInventoryFolder(child2.folderID); - _dbPlugin.deleteInventoryFolder(child1.folderID); - _dbPlugin.deleteInventoryFolder(_agent_1_id); - } - - /// - /// Test of folder hierarchy, and deletion - /// - [Test] - public void T04_TestRootFolder() - { - InventoryFolderBase root = new InventoryFolderBase(); - root.agentID = _agent_1_id; - root.folderID = _agent_1_id; - root.name = "Root folder"; - root.parentID = LLUUID.Zero; - root.type = 2; - root.version = 2; - _dbPlugin.addInventoryFolder(root); - - InventoryFolderBase child1 = new InventoryFolderBase(); - child1.agentID = _agent_1_id; - child1.folderID = LLUUID.Random(); - child1.name = "Child 1"; - child1.parentID = root.folderID; - child1.type = 3; - child1.version = 3; - _dbPlugin.addInventoryFolder(child1); - - InventoryFolderBase child2 = new InventoryFolderBase(); - child2.agentID = _agent_1_id; - child2.folderID = LLUUID.Random(); - child2.name = "Child 2"; - child2.parentID = root.folderID; - child2.type = 4; - child2.version = 4; - _dbPlugin.addInventoryFolder(child2); - - _dbPlugin.deleteInventoryFolder(_agent_1_id); - - List folders = _dbPlugin.getInventoryFolders(_agent_1_id); - Assert.IsNotNull(folders, "null was returned, but an empty list of subfolders were expected"); - Assert.IsEmpty(folders, "non empty collection was returned, even though the list of sub-folders should be empty"); - - InventoryFolderBase f = _dbPlugin.getInventoryFolder(_agent_1_id); - Assert.IsNull(f, "Folder was returned, even though is has been deleted"); - - f = _dbPlugin.getInventoryFolder(child1.folderID); - Assert.IsNull(f, "Folder was returned, even though is has been deleted"); - - f = _dbPlugin.getInventoryFolder(child2.folderID); - Assert.IsNull(f, "Folder was returned, even though is has been deleted"); - } - - /// - /// Folder update - /// - [Test] - public void T05_UpdateFolder() - { - InventoryFolderBase root = new InventoryFolderBase(); - root.agentID = _agent_1_id; - root.folderID = _agent_1_id; - root.name = "Root folder"; - root.parentID = LLUUID.Zero; - root.type = 2; - root.version = 2; - _dbPlugin.addInventoryFolder(root); - - InventoryFolderBase f = _dbPlugin.getInventoryFolder(_agent_1_id); - Assert.IsTrue(AreFoldersIdentical(root, f), "Difference between stored and retrieved folder data"); - - root.agentID = LLUUID.Random(); - _dbPlugin.updateInventoryFolder(root); - f = _dbPlugin.getInventoryFolder(root.folderID); - Assert.IsTrue(AreFoldersIdentical(root, f), "Difference between stored and retrieved folder data"); - - root.folderID = LLUUID.Random(); - _dbPlugin.updateInventoryFolder(root); - f = _dbPlugin.getInventoryFolder(root.folderID); - Assert.IsTrue(AreFoldersIdentical(root, f), "Difference between stored and retrieved folder data"); - - root.name = "Root folder 2"; - _dbPlugin.updateInventoryFolder(root); - f = _dbPlugin.getInventoryFolder(root.folderID); - Assert.IsTrue(AreFoldersIdentical(root, f), "Difference between stored and retrieved folder data"); - - root.parentID = LLUUID.Random(); - _dbPlugin.updateInventoryFolder(root); - f = _dbPlugin.getInventoryFolder(root.folderID); - Assert.IsTrue(AreFoldersIdentical(root, f), "Difference between stored and retrieved folder data"); - - root.type = (short)(root.type + 1); - _dbPlugin.updateInventoryFolder(root); - f = _dbPlugin.getInventoryFolder(root.folderID); - Assert.IsTrue(AreFoldersIdentical(root, f), "Difference between stored and retrieved folder data"); - - root.version = (ushort)(root.version + 1); - _dbPlugin.updateInventoryFolder(root); - f = _dbPlugin.getInventoryFolder(root.folderID); - Assert.IsTrue(AreFoldersIdentical(root, f), "Difference between stored and retrieved folder data"); - - _dbPlugin.deleteInventoryFolder(_agent_1_id); - _dbPlugin.deleteInventoryFolder(root.folderID); - } - - /// - /// Test that we can insert a root folder - /// - [Test] - public void T06_SetupInventoryWithItems() - { - - // Setup inventory - InventoryFolderBase root = new InventoryFolderBase(); - root.agentID = _agent_1_id; - root.folderID = _agent_1_id; - root.name = "Root folder"; - root.parentID = LLUUID.Zero; - root.type = 2; - root.version = 2; - _dbPlugin.addInventoryFolder(root); - - InventoryFolderBase child1 = new InventoryFolderBase(); - child1.agentID = _agent_1_id; - child1.folderID = LLUUID.Random(); - child1.name = "Child 1"; - child1.parentID = root.folderID; - child1.type = 3; - child1.version = 3; - _dbPlugin.addInventoryFolder(child1); - - InventoryFolderBase child1Child = new InventoryFolderBase(); - child1Child.agentID = _agent_1_id; - child1Child.folderID = LLUUID.Random(); - child1Child.name = "Child 1 child"; - child1Child.parentID = child1.folderID; - child1Child.type = 4; - child1Child.version = 4; - _dbPlugin.addInventoryFolder(child1Child); - - InventoryFolderBase child2 = new InventoryFolderBase(); - child2.agentID = _agent_1_id; - child2.folderID = LLUUID.Random(); - child2.name = "Child 2"; - child2.parentID = root.folderID; - child2.type = 5; - child2.version = 5; - _dbPlugin.addInventoryFolder(child2); - - InventoryFolderBase child2Child = new InventoryFolderBase(); - child2Child.agentID = _agent_1_id; - child2Child.folderID = LLUUID.Random(); - child2Child.name = "Child 2 child"; - child2Child.parentID = child2.folderID; - child2Child.type = 6; - child2Child.version = 6; - _dbPlugin.addInventoryFolder(child2Child); - - InventoryItemBase rootItem = new InventoryItemBase(); - rootItem.assetID = LLUUID.Random(); - rootItem.assetType = _rnd.Next(1, 1000); - rootItem.avatarID = _agent_1_id; - rootItem.creatorsID = LLUUID.Random(); - rootItem.inventoryBasePermissions = (uint)_rnd.Next(1,1000000); - rootItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); - rootItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); - rootItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); - rootItem.inventoryID = LLUUID.Random(); - rootItem.inventoryDescription = "Root item, Description"; - rootItem.inventoryName = "Root item"; - rootItem.invType = _rnd.Next(1, 1000); - rootItem.parentFolderID = root.folderID; - _dbPlugin.addInventoryItem(rootItem); - - InventoryItemBase child1Item = new InventoryItemBase(); - child1Item.assetID = LLUUID.Random(); - child1Item.assetType = _rnd.Next(1, 1000); - child1Item.avatarID = _agent_1_id; - child1Item.creatorsID = LLUUID.Random(); - child1Item.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); - child1Item.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); - child1Item.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); - child1Item.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); - child1Item.inventoryID = LLUUID.Random(); - child1Item.inventoryDescription = "child1 item, Description"; - child1Item.inventoryName = "child1 item"; - child1Item.invType = _rnd.Next(1, 1000); - child1Item.parentFolderID = child1.folderID; - _dbPlugin.addInventoryItem(child1Item); - - InventoryItemBase child1ChildItem = new InventoryItemBase(); - child1ChildItem.assetID = LLUUID.Random(); - child1ChildItem.assetType = _rnd.Next(1, 1000); - child1ChildItem.avatarID = _agent_1_id; - child1ChildItem.creatorsID = LLUUID.Random(); - child1ChildItem.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); - child1ChildItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); - child1ChildItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); - child1ChildItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); - child1ChildItem.inventoryID = LLUUID.Random(); - child1ChildItem.inventoryDescription = "child1Child item, Description"; - child1ChildItem.inventoryName = "child1Child item"; - child1ChildItem.invType = _rnd.Next(1, 1000); - child1ChildItem.parentFolderID = child1Child.folderID; - _dbPlugin.addInventoryItem(child1ChildItem); - - InventoryItemBase child2Item = new InventoryItemBase(); - child2Item.assetID = LLUUID.Random(); - child2Item.assetType = _rnd.Next(1, 1000); - child2Item.avatarID = _agent_1_id; - child2Item.creatorsID = LLUUID.Random(); - child2Item.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); - child2Item.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); - child2Item.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); - child2Item.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); - child2Item.inventoryID = LLUUID.Random(); - child2Item.inventoryDescription = "child2 item, Description"; - child2Item.inventoryName = "child2 item"; - child2Item.invType = _rnd.Next(1, 1000); - child2Item.parentFolderID = child2.folderID; - _dbPlugin.addInventoryItem(child2Item); - - InventoryItemBase child2ChildItem = new InventoryItemBase(); - child2ChildItem.assetID = LLUUID.Random(); - child2ChildItem.assetType = _rnd.Next(1, 1000); - child2ChildItem.avatarID = _agent_1_id; - child2ChildItem.creatorsID = LLUUID.Random(); - child2ChildItem.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); - child2ChildItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); - child2ChildItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); - child2ChildItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); - child2ChildItem.inventoryID = LLUUID.Random(); - child2ChildItem.inventoryDescription = "child2Child item, Description"; - child2ChildItem.inventoryName = "child2Child item"; - child2ChildItem.invType = _rnd.Next(1, 1000); - child2ChildItem.parentFolderID = child2Child.folderID; - _dbPlugin.addInventoryItem(child2ChildItem); - - // test read of items - - InventoryItemBase item = _dbPlugin.getInventoryItem(rootItem.inventoryID); - Assert.IsTrue(AreItemsIdentical(rootItem, item)); - - item = _dbPlugin.getInventoryItem(child1Item.inventoryID); - Assert.IsTrue(AreItemsIdentical(child1Item, item)); - - item = _dbPlugin.getInventoryItem(child1ChildItem.inventoryID); - Assert.IsTrue(AreItemsIdentical(child1ChildItem, item)); - - item = _dbPlugin.getInventoryItem(child2Item.inventoryID); - Assert.IsTrue(AreItemsIdentical(child2Item, item)); - - item = _dbPlugin.getInventoryItem(child2ChildItem.inventoryID); - Assert.IsTrue(AreItemsIdentical(child2ChildItem, item)); - - _dbPlugin.deleteInventoryItem(rootItem.inventoryID); - _dbPlugin.deleteInventoryItem(child1Item.inventoryID); - _dbPlugin.deleteInventoryItem(child1ChildItem.inventoryID); - _dbPlugin.deleteInventoryItem(child2Item.inventoryID); - _dbPlugin.deleteInventoryItem(child2ChildItem.inventoryID); - } - - /// - /// Test that we can insert a root folder - /// - [Test] - public void T07_DeleteInventoryWithItems() - { - - // Setup inventory - InventoryFolderBase root = new InventoryFolderBase(); - root.agentID = _agent_1_id; - root.folderID = _agent_1_id; - root.name = "Root folder"; - root.parentID = LLUUID.Zero; - root.type = 2; - root.version = 2; - _dbPlugin.addInventoryFolder(root); - - InventoryFolderBase child1 = new InventoryFolderBase(); - child1.agentID = _agent_1_id; - child1.folderID = LLUUID.Random(); - child1.name = "Child 1"; - child1.parentID = root.folderID; - child1.type = 3; - child1.version = 3; - _dbPlugin.addInventoryFolder(child1); - - InventoryFolderBase child1Child = new InventoryFolderBase(); - child1Child.agentID = _agent_1_id; - child1Child.folderID = LLUUID.Random(); - child1Child.name = "Child 1 child"; - child1Child.parentID = child1.folderID; - child1Child.type = 4; - child1Child.version = 4; - _dbPlugin.addInventoryFolder(child1Child); - - InventoryFolderBase child2 = new InventoryFolderBase(); - child2.agentID = _agent_1_id; - child2.folderID = LLUUID.Random(); - child2.name = "Child 2"; - child2.parentID = root.folderID; - child2.type = 5; - child2.version = 5; - _dbPlugin.addInventoryFolder(child2); - - InventoryFolderBase child2Child = new InventoryFolderBase(); - child2Child.agentID = _agent_1_id; - child2Child.folderID = LLUUID.Random(); - child2Child.name = "Child 2 child"; - child2Child.parentID = child2.folderID; - child2Child.type = 6; - child2Child.version = 6; - _dbPlugin.addInventoryFolder(child2Child); - - InventoryItemBase rootItem = new InventoryItemBase(); - rootItem.assetID = LLUUID.Random(); - rootItem.assetType = _rnd.Next(1, 1000); - rootItem.avatarID = _agent_1_id; - rootItem.creatorsID = LLUUID.Random(); - rootItem.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); - rootItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); - rootItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); - rootItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); - rootItem.inventoryID = LLUUID.Random(); - rootItem.inventoryDescription = "Root item, Description"; - rootItem.inventoryName = "Root item"; - rootItem.invType = _rnd.Next(1, 1000); - rootItem.parentFolderID = root.folderID; - _dbPlugin.addInventoryItem(rootItem); - - InventoryItemBase child1Item = new InventoryItemBase(); - child1Item.assetID = LLUUID.Random(); - child1Item.assetType = _rnd.Next(1, 1000); - child1Item.avatarID = _agent_1_id; - child1Item.creatorsID = LLUUID.Random(); - child1Item.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); - child1Item.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); - child1Item.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); - child1Item.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); - child1Item.inventoryID = LLUUID.Random(); - child1Item.inventoryDescription = "child1 item, Description"; - child1Item.inventoryName = "child1 item"; - child1Item.invType = _rnd.Next(1, 1000); - child1Item.parentFolderID = child1.folderID; - _dbPlugin.addInventoryItem(child1Item); - - InventoryItemBase child1ChildItem = new InventoryItemBase(); - child1ChildItem.assetID = LLUUID.Random(); - child1ChildItem.assetType = _rnd.Next(1, 1000); - child1ChildItem.avatarID = _agent_1_id; - child1ChildItem.creatorsID = LLUUID.Random(); - child1ChildItem.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); - child1ChildItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); - child1ChildItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); - child1ChildItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); - child1ChildItem.inventoryID = LLUUID.Random(); - child1ChildItem.inventoryDescription = "child1Child item, Description"; - child1ChildItem.inventoryName = "child1Child item"; - child1ChildItem.invType = _rnd.Next(1, 1000); - child1ChildItem.parentFolderID = child1Child.folderID; - _dbPlugin.addInventoryItem(child1ChildItem); - - InventoryItemBase child2Item = new InventoryItemBase(); - child2Item.assetID = LLUUID.Random(); - child2Item.assetType = _rnd.Next(1, 1000); - child2Item.avatarID = _agent_1_id; - child2Item.creatorsID = LLUUID.Random(); - child2Item.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); - child2Item.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); - child2Item.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); - child2Item.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); - child2Item.inventoryID = LLUUID.Random(); - child2Item.inventoryDescription = "child2 item, Description"; - child2Item.inventoryName = "child2 item"; - child2Item.invType = _rnd.Next(1, 1000); - child2Item.parentFolderID = child2.folderID; - _dbPlugin.addInventoryItem(child2Item); - - InventoryItemBase child2ChildItem = new InventoryItemBase(); - child2ChildItem.assetID = LLUUID.Random(); - child2ChildItem.assetType = _rnd.Next(1, 1000); - child2ChildItem.avatarID = _agent_1_id; - child2ChildItem.creatorsID = LLUUID.Random(); - child2ChildItem.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); - child2ChildItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); - child2ChildItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); - child2ChildItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); - child2ChildItem.inventoryID = LLUUID.Random(); - child2ChildItem.inventoryDescription = "child2Child item, Description"; - child2ChildItem.inventoryName = "child2Child item"; - child2ChildItem.invType = _rnd.Next(1, 1000); - child2ChildItem.parentFolderID = child2Child.folderID; - _dbPlugin.addInventoryItem(child2ChildItem); - - // test deletetion of items - - _dbPlugin.deleteInventoryItem(rootItem.inventoryID); - _dbPlugin.deleteInventoryItem(child1Item.inventoryID); - _dbPlugin.deleteInventoryItem(child1ChildItem.inventoryID); - _dbPlugin.deleteInventoryItem(child2Item.inventoryID); - _dbPlugin.deleteInventoryItem(child2ChildItem.inventoryID); - - InventoryItemBase item = _dbPlugin.getInventoryItem(rootItem.inventoryID); - Assert.IsNull(item); - - item = _dbPlugin.getInventoryItem(child1Item.inventoryID); - Assert.IsNull(item); - - item = _dbPlugin.getInventoryItem(child1ChildItem.inventoryID); - Assert.IsNull(item); - - item = _dbPlugin.getInventoryItem(child2Item.inventoryID); - Assert.IsNull(item); - - item = _dbPlugin.getInventoryItem(child2ChildItem.inventoryID); - Assert.IsNull(item); - - _dbPlugin.deleteInventoryFolder(_agent_1_id); - } - - - /// - /// Test that we can insert a root folder - /// - [Test] - public void T08_DeleteInventoryWithItems() - { - - // Setup inventory - InventoryFolderBase root = new InventoryFolderBase(); - root.agentID = _agent_1_id; - root.folderID = _agent_1_id; - root.name = "Root folder"; - root.parentID = LLUUID.Zero; - root.type = 2; - root.version = 2; - _dbPlugin.addInventoryFolder(root); - - InventoryFolderBase child1 = new InventoryFolderBase(); - child1.agentID = _agent_1_id; - child1.folderID = LLUUID.Random(); - child1.name = "Child 1"; - child1.parentID = root.folderID; - child1.type = 3; - child1.version = 3; - _dbPlugin.addInventoryFolder(child1); - - InventoryFolderBase child1Child = new InventoryFolderBase(); - child1Child.agentID = _agent_1_id; - child1Child.folderID = LLUUID.Random(); - child1Child.name = "Child 1 child"; - child1Child.parentID = child1.folderID; - child1Child.type = 4; - child1Child.version = 4; - _dbPlugin.addInventoryFolder(child1Child); - - InventoryFolderBase child2 = new InventoryFolderBase(); - child2.agentID = _agent_1_id; - child2.folderID = LLUUID.Random(); - child2.name = "Child 2"; - child2.parentID = root.folderID; - child2.type = 5; - child2.version = 5; - _dbPlugin.addInventoryFolder(child2); - - InventoryFolderBase child2Child = new InventoryFolderBase(); - child2Child.agentID = _agent_1_id; - child2Child.folderID = LLUUID.Random(); - child2Child.name = "Child 2 child"; - child2Child.parentID = child2.folderID; - child2Child.type = 6; - child2Child.version = 6; - _dbPlugin.addInventoryFolder(child2Child); - - InventoryItemBase rootItem = new InventoryItemBase(); - rootItem.assetID = LLUUID.Random(); - rootItem.assetType = _rnd.Next(1, 1000); - rootItem.avatarID = _agent_1_id; - rootItem.creatorsID = LLUUID.Random(); - rootItem.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); - rootItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); - rootItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); - rootItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); - rootItem.inventoryID = LLUUID.Random(); - rootItem.inventoryDescription = "Root item, Description"; - rootItem.inventoryName = "Root item"; - rootItem.invType = _rnd.Next(1, 1000); - rootItem.parentFolderID = root.folderID; - _dbPlugin.addInventoryItem(rootItem); - - InventoryItemBase child1Item = new InventoryItemBase(); - child1Item.assetID = LLUUID.Random(); - child1Item.assetType = _rnd.Next(1, 1000); - child1Item.avatarID = _agent_1_id; - child1Item.creatorsID = LLUUID.Random(); - child1Item.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); - child1Item.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); - child1Item.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); - child1Item.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); - child1Item.inventoryID = LLUUID.Random(); - child1Item.inventoryDescription = "child1 item, Description"; - child1Item.inventoryName = "child1 item"; - child1Item.invType = _rnd.Next(1, 1000); - child1Item.parentFolderID = child1.folderID; - _dbPlugin.addInventoryItem(child1Item); - - InventoryItemBase child1ChildItem = new InventoryItemBase(); - child1ChildItem.assetID = LLUUID.Random(); - child1ChildItem.assetType = _rnd.Next(1, 1000); - child1ChildItem.avatarID = _agent_1_id; - child1ChildItem.creatorsID = LLUUID.Random(); - child1ChildItem.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); - child1ChildItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); - child1ChildItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); - child1ChildItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); - child1ChildItem.inventoryID = LLUUID.Random(); - child1ChildItem.inventoryDescription = "child1Child item, Description"; - child1ChildItem.inventoryName = "child1Child item"; - child1ChildItem.invType = _rnd.Next(1, 1000); - child1ChildItem.parentFolderID = child1Child.folderID; - _dbPlugin.addInventoryItem(child1ChildItem); - - InventoryItemBase child2Item = new InventoryItemBase(); - child2Item.assetID = LLUUID.Random(); - child2Item.assetType = _rnd.Next(1, 1000); - child2Item.avatarID = _agent_1_id; - child2Item.creatorsID = LLUUID.Random(); - child2Item.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); - child2Item.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); - child2Item.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); - child2Item.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); - child2Item.inventoryID = LLUUID.Random(); - child2Item.inventoryDescription = "child2 item, Description"; - child2Item.inventoryName = "child2 item"; - child2Item.invType = _rnd.Next(1, 1000); - child2Item.parentFolderID = child2.folderID; - _dbPlugin.addInventoryItem(child2Item); - - InventoryItemBase child2ChildItem = new InventoryItemBase(); - child2ChildItem.assetID = LLUUID.Random(); - child2ChildItem.assetType = _rnd.Next(1, 1000); - child2ChildItem.avatarID = _agent_1_id; - child2ChildItem.creatorsID = LLUUID.Random(); - child2ChildItem.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); - child2ChildItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); - child2ChildItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); - child2ChildItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); - child2ChildItem.inventoryID = LLUUID.Random(); - child2ChildItem.inventoryDescription = "child2Child item, Description"; - child2ChildItem.inventoryName = "child2Child item"; - child2ChildItem.invType = _rnd.Next(1, 1000); - child2ChildItem.parentFolderID = child2Child.folderID; - _dbPlugin.addInventoryItem(child2ChildItem); - - // test deletetion of items - - _dbPlugin.deleteInventoryFolder(_agent_1_id); - - InventoryItemBase item = _dbPlugin.getInventoryItem(rootItem.inventoryID); - Assert.IsNull(item); - - item = _dbPlugin.getInventoryItem(child1Item.inventoryID); - Assert.IsNull(item); - - item = _dbPlugin.getInventoryItem(child1ChildItem.inventoryID); - Assert.IsNull(item); - - item = _dbPlugin.getInventoryItem(child2Item.inventoryID); - Assert.IsNull(item); - - item = _dbPlugin.getInventoryItem(child2ChildItem.inventoryID); - Assert.IsNull(item); - - } - - /// - /// Test that we can update items - /// - [Test] - public void T09_UpdateItem() - { - - // Setup inventory - InventoryFolderBase root = new InventoryFolderBase(); - root.agentID = _agent_1_id; - root.folderID = _agent_1_id; - root.name = "Root folder"; - root.parentID = LLUUID.Zero; - root.type = 2; - root.version = 2; - _dbPlugin.addInventoryFolder(root); - - InventoryItemBase rootItem = new InventoryItemBase(); - rootItem.assetID = LLUUID.Random(); - rootItem.assetType = _rnd.Next(1, 1000); - rootItem.avatarID = _agent_1_id; - rootItem.creatorsID = LLUUID.Random(); - rootItem.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); - rootItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); - rootItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); - rootItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); - rootItem.inventoryID = LLUUID.Random(); - rootItem.inventoryDescription = "Root item, Description"; - rootItem.inventoryName = "Root item"; - rootItem.invType = _rnd.Next(1, 1000); - rootItem.parentFolderID = root.folderID; - _dbPlugin.addInventoryItem(rootItem); - - rootItem.assetID = LLUUID.Random(); - _dbPlugin.updateInventoryItem(rootItem); - InventoryItemBase item = _dbPlugin.getInventoryItem(rootItem.inventoryID); - Assert.IsTrue(AreItemsIdentical(rootItem, item)); - - rootItem.assetType = rootItem.assetType+1; - _dbPlugin.updateInventoryItem(rootItem); - item = _dbPlugin.getInventoryItem(rootItem.inventoryID); - Assert.IsTrue(AreItemsIdentical(rootItem, item)); - - rootItem.avatarID = LLUUID.Random(); - _dbPlugin.updateInventoryItem(rootItem); - item = _dbPlugin.getInventoryItem(rootItem.inventoryID); - Assert.IsTrue(AreItemsIdentical(rootItem, item)); - - rootItem.creatorsID = LLUUID.Random(); - _dbPlugin.updateInventoryItem(rootItem); - item = _dbPlugin.getInventoryItem(rootItem.inventoryID); - Assert.IsTrue(AreItemsIdentical(rootItem, item)); - - rootItem.inventoryBasePermissions = rootItem.inventoryBasePermissions+1; - _dbPlugin.updateInventoryItem(rootItem); - item = _dbPlugin.getInventoryItem(rootItem.inventoryID); - Assert.IsTrue(AreItemsIdentical(rootItem, item)); - - rootItem.inventoryCurrentPermissions = rootItem.inventoryCurrentPermissions+1; - _dbPlugin.updateInventoryItem(rootItem); - item = _dbPlugin.getInventoryItem(rootItem.inventoryID); - Assert.IsTrue(AreItemsIdentical(rootItem, item)); - - rootItem.inventoryDescription = "New description"; - _dbPlugin.updateInventoryItem(rootItem); - item = _dbPlugin.getInventoryItem(rootItem.inventoryID); - Assert.IsTrue(AreItemsIdentical(rootItem, item)); - - rootItem.inventoryEveryOnePermissions = rootItem.inventoryEveryOnePermissions+1; - _dbPlugin.updateInventoryItem(rootItem); - item = _dbPlugin.getInventoryItem(rootItem.inventoryID); - Assert.IsTrue(AreItemsIdentical(rootItem, item)); - - rootItem.inventoryName = "New name"; - _dbPlugin.updateInventoryItem(rootItem); - item = _dbPlugin.getInventoryItem(rootItem.inventoryID); - Assert.IsTrue(AreItemsIdentical(rootItem, item)); - - rootItem.inventoryNextPermissions = rootItem.inventoryNextPermissions+1; - _dbPlugin.updateInventoryItem(rootItem); - item = _dbPlugin.getInventoryItem(rootItem.inventoryID); - Assert.IsTrue(AreItemsIdentical(rootItem, item)); - - rootItem.invType = rootItem.invType+1; - _dbPlugin.updateInventoryItem(rootItem); - item = _dbPlugin.getInventoryItem(rootItem.inventoryID); - Assert.IsTrue(AreItemsIdentical(rootItem, item)); - - rootItem.parentFolderID = LLUUID.Zero; - _dbPlugin.updateInventoryItem(rootItem); - item = _dbPlugin.getInventoryItem(rootItem.inventoryID); - Assert.IsTrue(AreItemsIdentical(rootItem, item)); - - _dbPlugin.deleteInventoryFolder(_agent_1_id); - _dbPlugin.deleteInventoryItem(rootItem.inventoryID); - } - - - /// - /// Test that we can insert a root folder - /// - [Test] - public void T10_GetListOfItemsInFolder() - { - - // Setup inventory - InventoryFolderBase root = new InventoryFolderBase(); - root.agentID = _agent_1_id; - root.folderID = _agent_1_id; - root.name = "Root folder"; - root.parentID = LLUUID.Zero; - root.type = 2; - root.version = 2; - _dbPlugin.addInventoryFolder(root); - - InventoryFolderBase child1 = new InventoryFolderBase(); - child1.agentID = _agent_1_id; - child1.folderID = LLUUID.Random(); - child1.name = "Child 1"; - child1.parentID = root.folderID; - child1.type = 3; - child1.version = 3; - _dbPlugin.addInventoryFolder(child1); - - InventoryFolderBase child1Child = new InventoryFolderBase(); - child1Child.agentID = _agent_1_id; - child1Child.folderID = LLUUID.Random(); - child1Child.name = "Child 1 child"; - child1Child.parentID = child1.folderID; - child1Child.type = 4; - child1Child.version = 4; - _dbPlugin.addInventoryFolder(child1Child); - - - InventoryItemBase item1 = new InventoryItemBase(); - item1.assetID = LLUUID.Random(); - item1.assetType = _rnd.Next(1, 1000); - item1.avatarID = _agent_1_id; - item1.creatorsID = LLUUID.Random(); - item1.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); - item1.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); - item1.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); - item1.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); - item1.inventoryID = LLUUID.Random(); - item1.inventoryDescription = "Item 1, description"; - item1.inventoryName = "Item 1"; - item1.invType = _rnd.Next(1, 1000); - item1.parentFolderID = child1Child.folderID; - _dbPlugin.addInventoryItem(item1); - - InventoryItemBase item2 = new InventoryItemBase(); - item2.assetID = LLUUID.Random(); - item2.assetType = _rnd.Next(1, 1000); - item2.avatarID = _agent_1_id; - item2.creatorsID = LLUUID.Random(); - item2.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); - item2.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); - item2.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); - item2.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); - item2.inventoryID = LLUUID.Random(); - item2.inventoryDescription = "Item 1, description"; - item2.inventoryName = "Item 1"; - item2.invType = _rnd.Next(1, 1000); - item2.parentFolderID = child1Child.folderID; - _dbPlugin.addInventoryItem(item2); - - List items = _dbPlugin.getInventoryInFolder(child1Child.folderID); - Assert.IsNotNull(items); - Assert.IsNotEmpty(items); - - bool foundItem1 = false; - bool foundItem2 = false; - - foreach (InventoryItemBase i in items) - { - if (i.inventoryID == item1.inventoryID) - { - foundItem1 = true; - Assert.IsTrue(AreItemsIdentical(item1, i)); - } - else if (i.inventoryID == item2.inventoryID) - { - foundItem2 = true; - Assert.IsTrue(AreItemsIdentical(item2, i)); - } - else - { - Assert.Fail("Unknown inventory item found"); - } - } - - Assert.IsTrue(foundItem1 && foundItem2, "not all items were returned"); - _dbPlugin.deleteInventoryFolder(_agent_1_id); - } - } -} +/* +* Copyright (c) Contributors, http://opensimulator.org/ +* See CONTRIBUTORS.TXT for a full list of copyright holders. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* * Neither the name of the OpenSim Project nor the +* names of its contributors may be used to endorse or promote products +* derived from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ + +using System; +using System.Collections.Generic; +using System.Text; +using NUnit.Framework; + +using libsecondlife; +using OpenSim.Framework.Types; +using OpenSim.Framework.Data; +using OpenSim.Framework.Data.SQLite; +using OpenSim.Framework.Data.MySQL; +using OpenSim.Framework.Console; + +namespace OpenSim.Test.Inventory +{ + [TestFixture] + public class TestInventory + { + IInventoryData _dbPlugin; + LLUUID _agent_1_id; + public static LLUUID LibraryFolderRootUuid = new LLUUID("5926de2a-c2d7-4c11-ac4e-74512ffeb6d1"); + + Random _rnd = new Random((int)DateTime.Now.Ticks); + + [TestFixtureSetUp] + public void SetupInventoryTest() + { + + _agent_1_id = LLUUID.Random(); + + MainLog.Instance = new LogBase("UnitTest.log", "TEST", null, true); +// _dbPlugin = new SQLiteInventoryStore(); + _dbPlugin = new MySQLInventoryData(); + _dbPlugin.Initialise(); + } + + [TestFixtureTearDown] + public void TeardownInventoryTest() + { + _dbPlugin.Close(); + } + + private bool AreFoldersIdentical(InventoryFolderBase a, InventoryFolderBase b) + { + if (a.agentID != b.agentID) return false; + if (a.folderID != b.folderID) return false; + if (a.name != b.name) return false; + if (a.parentID != b.parentID) return false; + if (a.type != b.type) return false; + if (a.version != b.version) return false; + return true; + } + + private bool AreItemsIdentical(InventoryItemBase a, InventoryItemBase b) + { + if (a.assetID != b.assetID) return false; + if (a.assetType != b.assetType) return false; + if (a.avatarID != b.avatarID) return false; + if (a.creatorsID != b.creatorsID) return false; + if (a.inventoryBasePermissions != b.inventoryBasePermissions) return false; + if (a.inventoryCurrentPermissions != b.inventoryCurrentPermissions) return false; + if (a.inventoryEveryOnePermissions != b.inventoryEveryOnePermissions) return false; + if (a.inventoryNextPermissions != b.inventoryNextPermissions) return false; + if (a.inventoryID != b.inventoryID) return false; + if (a.inventoryDescription != b.inventoryDescription) return false; + if (a.inventoryName != b.inventoryName) return false; + if (a.invType != b.invType) return false; + if (a.parentFolderID != b.parentFolderID) return false; + return true; + } + + /// + /// Test that we can insert a root folder + /// + [Test] + public void T01_SetupRootFolder() + { + InventoryFolderBase root = new InventoryFolderBase(); + root.agentID = _agent_1_id; + root.folderID = _agent_1_id; + root.name = "Root folder"; + root.parentID = LLUUID.Zero; + root.type = 2; + root.version = 2; + _dbPlugin.addInventoryFolder(root); + + InventoryFolderBase f = _dbPlugin.getInventoryFolder(root.folderID); + Assert.IsNotNull(f, "Failed to get existing folder"); + Assert.IsTrue(AreFoldersIdentical(root, f), "Difference between stored and retrieved folder data"); + + // Test that we only get the root folder, based on it's id, i.e. any other gui will not find the folder + f = _dbPlugin.getInventoryFolder(LLUUID.Zero); + Assert.IsNull(f, "get folder returned a folder, but shouldn't find one"); + + f = _dbPlugin.getInventoryFolder(LLUUID.Random()); + Assert.IsNull(f, "get folder returned a folder, but shouldn't find one"); + + // test that we can delete the folder + + _dbPlugin.deleteInventoryFolder(_agent_1_id); + f = _dbPlugin.getInventoryFolder(root.folderID); + Assert.IsNull(f, "get folder returned a folder, but it should have been deleted"); + } + + /// + /// Make sure that all folders reported as root folders are root folders + /// + [Test] + public void T02_TestRootFolder() + { + InventoryFolderBase root = new InventoryFolderBase(); + root.agentID = _agent_1_id; + root.folderID = _agent_1_id; + root.name = "Root folder"; + root.parentID = LLUUID.Zero; + root.type = 2; + root.version = 2; + _dbPlugin.addInventoryFolder(root); + + List folders = _dbPlugin.getUserRootFolders(_agent_1_id); + Assert.IsNotNull(folders, "Failed to get rootfolders for user"); + + bool foundRoot = false; + foreach(InventoryFolderBase f in folders) { + + // a root folder has a zero valued LLUUID + Assert.AreEqual(f.parentID, LLUUID.Zero, "non root folder returned"); + + + if(f.agentID == root.agentID) + { + // we cannot have two different user specific root folders + Assert.IsFalse(foundRoot, "Two different user specific root folders returned"); + + Assert.IsTrue(AreFoldersIdentical(root, f), "Difference between stored and retrieved folder data"); + foundRoot = false; + } + } + _dbPlugin.deleteInventoryFolder(_agent_1_id); + } + + /// + /// Test of folder hierarchy + /// + [Test] + public void T03_TestRootFolder() + { + InventoryFolderBase root = new InventoryFolderBase(); + root.agentID = _agent_1_id; + root.folderID = _agent_1_id; + root.name = "Root folder"; + root.parentID = LLUUID.Zero; + root.type = 2; + root.version = 2; + _dbPlugin.addInventoryFolder(root); + + List folders = _dbPlugin.getInventoryFolders(_agent_1_id); + Assert.IsNotNull(folders, "null was returned, but an empty list of subfolders were expected"); + Assert.IsEmpty(folders, "non empty collection was returned, even though the list of sub-folders should be empty"); + + InventoryFolderBase child1 = new InventoryFolderBase(); + child1.agentID = _agent_1_id; + child1.folderID = LLUUID.Random(); + child1.name = "Child 1"; + child1.parentID = root.folderID; + child1.type = 3; + child1.version = 3; + _dbPlugin.addInventoryFolder(child1); + + InventoryFolderBase child2 = new InventoryFolderBase(); + child2.agentID = _agent_1_id; + child2.folderID = LLUUID.Random(); + child2.name = "Child 2"; + child2.parentID = root.folderID; + child2.type = 4; + child2.version = 4; + _dbPlugin.addInventoryFolder(child2); + + folders = _dbPlugin.getInventoryFolders(_agent_1_id); + Assert.IsNotNull(folders, "null was returned, but an empty list of subfolders were expected"); + Assert.AreEqual(folders.Count, 2, "two children were reported as inserted into the root folder"); + + bool foundChild1 = false; + bool foundChild2 = false; + + foreach (InventoryFolderBase f in folders) + { + if (f.folderID == child1.folderID) + { + Assert.IsTrue(AreFoldersIdentical(child1, f), "Difference between stored and retrieved folder data"); + foundChild1 = true; + } + else if (f.folderID == child2.folderID) + { + Assert.IsTrue(AreFoldersIdentical(child2, f), "Difference between stored and retrieved folder data"); + foundChild2 = true; + } + else + { + Assert.Fail("found unknown child folder"); + } + } + + if (foundChild1 == false || foundChild2 == false) + { + Assert.Fail("one of the two child folders was not returned"); + } + + _dbPlugin.deleteInventoryFolder(child2.folderID); + _dbPlugin.deleteInventoryFolder(child1.folderID); + _dbPlugin.deleteInventoryFolder(_agent_1_id); + } + + /// + /// Test of folder hierarchy, and deletion + /// + [Test] + public void T04_TestRootFolder() + { + InventoryFolderBase root = new InventoryFolderBase(); + root.agentID = _agent_1_id; + root.folderID = _agent_1_id; + root.name = "Root folder"; + root.parentID = LLUUID.Zero; + root.type = 2; + root.version = 2; + _dbPlugin.addInventoryFolder(root); + + InventoryFolderBase child1 = new InventoryFolderBase(); + child1.agentID = _agent_1_id; + child1.folderID = LLUUID.Random(); + child1.name = "Child 1"; + child1.parentID = root.folderID; + child1.type = 3; + child1.version = 3; + _dbPlugin.addInventoryFolder(child1); + + InventoryFolderBase child2 = new InventoryFolderBase(); + child2.agentID = _agent_1_id; + child2.folderID = LLUUID.Random(); + child2.name = "Child 2"; + child2.parentID = root.folderID; + child2.type = 4; + child2.version = 4; + _dbPlugin.addInventoryFolder(child2); + + _dbPlugin.deleteInventoryFolder(_agent_1_id); + + List folders = _dbPlugin.getInventoryFolders(_agent_1_id); + Assert.IsNotNull(folders, "null was returned, but an empty list of subfolders were expected"); + Assert.IsEmpty(folders, "non empty collection was returned, even though the list of sub-folders should be empty"); + + InventoryFolderBase f = _dbPlugin.getInventoryFolder(_agent_1_id); + Assert.IsNull(f, "Folder was returned, even though is has been deleted"); + + f = _dbPlugin.getInventoryFolder(child1.folderID); + Assert.IsNull(f, "Folder was returned, even though is has been deleted"); + + f = _dbPlugin.getInventoryFolder(child2.folderID); + Assert.IsNull(f, "Folder was returned, even though is has been deleted"); + } + + /// + /// Folder update + /// + [Test] + public void T05_UpdateFolder() + { + InventoryFolderBase root = new InventoryFolderBase(); + root.agentID = _agent_1_id; + root.folderID = _agent_1_id; + root.name = "Root folder"; + root.parentID = LLUUID.Zero; + root.type = 2; + root.version = 2; + _dbPlugin.addInventoryFolder(root); + + InventoryFolderBase f = _dbPlugin.getInventoryFolder(_agent_1_id); + Assert.IsTrue(AreFoldersIdentical(root, f), "Difference between stored and retrieved folder data"); + + root.agentID = LLUUID.Random(); + _dbPlugin.updateInventoryFolder(root); + f = _dbPlugin.getInventoryFolder(root.folderID); + Assert.IsTrue(AreFoldersIdentical(root, f), "Difference between stored and retrieved folder data"); + + root.folderID = LLUUID.Random(); + _dbPlugin.updateInventoryFolder(root); + f = _dbPlugin.getInventoryFolder(root.folderID); + Assert.IsTrue(AreFoldersIdentical(root, f), "Difference between stored and retrieved folder data"); + + root.name = "Root folder 2"; + _dbPlugin.updateInventoryFolder(root); + f = _dbPlugin.getInventoryFolder(root.folderID); + Assert.IsTrue(AreFoldersIdentical(root, f), "Difference between stored and retrieved folder data"); + + root.parentID = LLUUID.Random(); + _dbPlugin.updateInventoryFolder(root); + f = _dbPlugin.getInventoryFolder(root.folderID); + Assert.IsTrue(AreFoldersIdentical(root, f), "Difference between stored and retrieved folder data"); + + root.type = (short)(root.type + 1); + _dbPlugin.updateInventoryFolder(root); + f = _dbPlugin.getInventoryFolder(root.folderID); + Assert.IsTrue(AreFoldersIdentical(root, f), "Difference between stored and retrieved folder data"); + + root.version = (ushort)(root.version + 1); + _dbPlugin.updateInventoryFolder(root); + f = _dbPlugin.getInventoryFolder(root.folderID); + Assert.IsTrue(AreFoldersIdentical(root, f), "Difference between stored and retrieved folder data"); + + _dbPlugin.deleteInventoryFolder(_agent_1_id); + _dbPlugin.deleteInventoryFolder(root.folderID); + } + + /// + /// Test that we can insert a root folder + /// + [Test] + public void T06_SetupInventoryWithItems() + { + + // Setup inventory + InventoryFolderBase root = new InventoryFolderBase(); + root.agentID = _agent_1_id; + root.folderID = _agent_1_id; + root.name = "Root folder"; + root.parentID = LLUUID.Zero; + root.type = 2; + root.version = 2; + _dbPlugin.addInventoryFolder(root); + + InventoryFolderBase child1 = new InventoryFolderBase(); + child1.agentID = _agent_1_id; + child1.folderID = LLUUID.Random(); + child1.name = "Child 1"; + child1.parentID = root.folderID; + child1.type = 3; + child1.version = 3; + _dbPlugin.addInventoryFolder(child1); + + InventoryFolderBase child1Child = new InventoryFolderBase(); + child1Child.agentID = _agent_1_id; + child1Child.folderID = LLUUID.Random(); + child1Child.name = "Child 1 child"; + child1Child.parentID = child1.folderID; + child1Child.type = 4; + child1Child.version = 4; + _dbPlugin.addInventoryFolder(child1Child); + + InventoryFolderBase child2 = new InventoryFolderBase(); + child2.agentID = _agent_1_id; + child2.folderID = LLUUID.Random(); + child2.name = "Child 2"; + child2.parentID = root.folderID; + child2.type = 5; + child2.version = 5; + _dbPlugin.addInventoryFolder(child2); + + InventoryFolderBase child2Child = new InventoryFolderBase(); + child2Child.agentID = _agent_1_id; + child2Child.folderID = LLUUID.Random(); + child2Child.name = "Child 2 child"; + child2Child.parentID = child2.folderID; + child2Child.type = 6; + child2Child.version = 6; + _dbPlugin.addInventoryFolder(child2Child); + + InventoryItemBase rootItem = new InventoryItemBase(); + rootItem.assetID = LLUUID.Random(); + rootItem.assetType = _rnd.Next(1, 1000); + rootItem.avatarID = _agent_1_id; + rootItem.creatorsID = LLUUID.Random(); + rootItem.inventoryBasePermissions = (uint)_rnd.Next(1,1000000); + rootItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); + rootItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); + rootItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); + rootItem.inventoryID = LLUUID.Random(); + rootItem.inventoryDescription = "Root item, Description"; + rootItem.inventoryName = "Root item"; + rootItem.invType = _rnd.Next(1, 1000); + rootItem.parentFolderID = root.folderID; + _dbPlugin.addInventoryItem(rootItem); + + InventoryItemBase child1Item = new InventoryItemBase(); + child1Item.assetID = LLUUID.Random(); + child1Item.assetType = _rnd.Next(1, 1000); + child1Item.avatarID = _agent_1_id; + child1Item.creatorsID = LLUUID.Random(); + child1Item.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); + child1Item.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); + child1Item.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); + child1Item.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); + child1Item.inventoryID = LLUUID.Random(); + child1Item.inventoryDescription = "child1 item, Description"; + child1Item.inventoryName = "child1 item"; + child1Item.invType = _rnd.Next(1, 1000); + child1Item.parentFolderID = child1.folderID; + _dbPlugin.addInventoryItem(child1Item); + + InventoryItemBase child1ChildItem = new InventoryItemBase(); + child1ChildItem.assetID = LLUUID.Random(); + child1ChildItem.assetType = _rnd.Next(1, 1000); + child1ChildItem.avatarID = _agent_1_id; + child1ChildItem.creatorsID = LLUUID.Random(); + child1ChildItem.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); + child1ChildItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); + child1ChildItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); + child1ChildItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); + child1ChildItem.inventoryID = LLUUID.Random(); + child1ChildItem.inventoryDescription = "child1Child item, Description"; + child1ChildItem.inventoryName = "child1Child item"; + child1ChildItem.invType = _rnd.Next(1, 1000); + child1ChildItem.parentFolderID = child1Child.folderID; + _dbPlugin.addInventoryItem(child1ChildItem); + + InventoryItemBase child2Item = new InventoryItemBase(); + child2Item.assetID = LLUUID.Random(); + child2Item.assetType = _rnd.Next(1, 1000); + child2Item.avatarID = _agent_1_id; + child2Item.creatorsID = LLUUID.Random(); + child2Item.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); + child2Item.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); + child2Item.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); + child2Item.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); + child2Item.inventoryID = LLUUID.Random(); + child2Item.inventoryDescription = "child2 item, Description"; + child2Item.inventoryName = "child2 item"; + child2Item.invType = _rnd.Next(1, 1000); + child2Item.parentFolderID = child2.folderID; + _dbPlugin.addInventoryItem(child2Item); + + InventoryItemBase child2ChildItem = new InventoryItemBase(); + child2ChildItem.assetID = LLUUID.Random(); + child2ChildItem.assetType = _rnd.Next(1, 1000); + child2ChildItem.avatarID = _agent_1_id; + child2ChildItem.creatorsID = LLUUID.Random(); + child2ChildItem.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); + child2ChildItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); + child2ChildItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); + child2ChildItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); + child2ChildItem.inventoryID = LLUUID.Random(); + child2ChildItem.inventoryDescription = "child2Child item, Description"; + child2ChildItem.inventoryName = "child2Child item"; + child2ChildItem.invType = _rnd.Next(1, 1000); + child2ChildItem.parentFolderID = child2Child.folderID; + _dbPlugin.addInventoryItem(child2ChildItem); + + // test read of items + + InventoryItemBase item = _dbPlugin.getInventoryItem(rootItem.inventoryID); + Assert.IsTrue(AreItemsIdentical(rootItem, item)); + + item = _dbPlugin.getInventoryItem(child1Item.inventoryID); + Assert.IsTrue(AreItemsIdentical(child1Item, item)); + + item = _dbPlugin.getInventoryItem(child1ChildItem.inventoryID); + Assert.IsTrue(AreItemsIdentical(child1ChildItem, item)); + + item = _dbPlugin.getInventoryItem(child2Item.inventoryID); + Assert.IsTrue(AreItemsIdentical(child2Item, item)); + + item = _dbPlugin.getInventoryItem(child2ChildItem.inventoryID); + Assert.IsTrue(AreItemsIdentical(child2ChildItem, item)); + + _dbPlugin.deleteInventoryItem(rootItem.inventoryID); + _dbPlugin.deleteInventoryItem(child1Item.inventoryID); + _dbPlugin.deleteInventoryItem(child1ChildItem.inventoryID); + _dbPlugin.deleteInventoryItem(child2Item.inventoryID); + _dbPlugin.deleteInventoryItem(child2ChildItem.inventoryID); + } + + /// + /// Test that we can insert a root folder + /// + [Test] + public void T07_DeleteInventoryWithItems() + { + + // Setup inventory + InventoryFolderBase root = new InventoryFolderBase(); + root.agentID = _agent_1_id; + root.folderID = _agent_1_id; + root.name = "Root folder"; + root.parentID = LLUUID.Zero; + root.type = 2; + root.version = 2; + _dbPlugin.addInventoryFolder(root); + + InventoryFolderBase child1 = new InventoryFolderBase(); + child1.agentID = _agent_1_id; + child1.folderID = LLUUID.Random(); + child1.name = "Child 1"; + child1.parentID = root.folderID; + child1.type = 3; + child1.version = 3; + _dbPlugin.addInventoryFolder(child1); + + InventoryFolderBase child1Child = new InventoryFolderBase(); + child1Child.agentID = _agent_1_id; + child1Child.folderID = LLUUID.Random(); + child1Child.name = "Child 1 child"; + child1Child.parentID = child1.folderID; + child1Child.type = 4; + child1Child.version = 4; + _dbPlugin.addInventoryFolder(child1Child); + + InventoryFolderBase child2 = new InventoryFolderBase(); + child2.agentID = _agent_1_id; + child2.folderID = LLUUID.Random(); + child2.name = "Child 2"; + child2.parentID = root.folderID; + child2.type = 5; + child2.version = 5; + _dbPlugin.addInventoryFolder(child2); + + InventoryFolderBase child2Child = new InventoryFolderBase(); + child2Child.agentID = _agent_1_id; + child2Child.folderID = LLUUID.Random(); + child2Child.name = "Child 2 child"; + child2Child.parentID = child2.folderID; + child2Child.type = 6; + child2Child.version = 6; + _dbPlugin.addInventoryFolder(child2Child); + + InventoryItemBase rootItem = new InventoryItemBase(); + rootItem.assetID = LLUUID.Random(); + rootItem.assetType = _rnd.Next(1, 1000); + rootItem.avatarID = _agent_1_id; + rootItem.creatorsID = LLUUID.Random(); + rootItem.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); + rootItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); + rootItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); + rootItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); + rootItem.inventoryID = LLUUID.Random(); + rootItem.inventoryDescription = "Root item, Description"; + rootItem.inventoryName = "Root item"; + rootItem.invType = _rnd.Next(1, 1000); + rootItem.parentFolderID = root.folderID; + _dbPlugin.addInventoryItem(rootItem); + + InventoryItemBase child1Item = new InventoryItemBase(); + child1Item.assetID = LLUUID.Random(); + child1Item.assetType = _rnd.Next(1, 1000); + child1Item.avatarID = _agent_1_id; + child1Item.creatorsID = LLUUID.Random(); + child1Item.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); + child1Item.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); + child1Item.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); + child1Item.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); + child1Item.inventoryID = LLUUID.Random(); + child1Item.inventoryDescription = "child1 item, Description"; + child1Item.inventoryName = "child1 item"; + child1Item.invType = _rnd.Next(1, 1000); + child1Item.parentFolderID = child1.folderID; + _dbPlugin.addInventoryItem(child1Item); + + InventoryItemBase child1ChildItem = new InventoryItemBase(); + child1ChildItem.assetID = LLUUID.Random(); + child1ChildItem.assetType = _rnd.Next(1, 1000); + child1ChildItem.avatarID = _agent_1_id; + child1ChildItem.creatorsID = LLUUID.Random(); + child1ChildItem.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); + child1ChildItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); + child1ChildItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); + child1ChildItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); + child1ChildItem.inventoryID = LLUUID.Random(); + child1ChildItem.inventoryDescription = "child1Child item, Description"; + child1ChildItem.inventoryName = "child1Child item"; + child1ChildItem.invType = _rnd.Next(1, 1000); + child1ChildItem.parentFolderID = child1Child.folderID; + _dbPlugin.addInventoryItem(child1ChildItem); + + InventoryItemBase child2Item = new InventoryItemBase(); + child2Item.assetID = LLUUID.Random(); + child2Item.assetType = _rnd.Next(1, 1000); + child2Item.avatarID = _agent_1_id; + child2Item.creatorsID = LLUUID.Random(); + child2Item.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); + child2Item.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); + child2Item.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); + child2Item.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); + child2Item.inventoryID = LLUUID.Random(); + child2Item.inventoryDescription = "child2 item, Description"; + child2Item.inventoryName = "child2 item"; + child2Item.invType = _rnd.Next(1, 1000); + child2Item.parentFolderID = child2.folderID; + _dbPlugin.addInventoryItem(child2Item); + + InventoryItemBase child2ChildItem = new InventoryItemBase(); + child2ChildItem.assetID = LLUUID.Random(); + child2ChildItem.assetType = _rnd.Next(1, 1000); + child2ChildItem.avatarID = _agent_1_id; + child2ChildItem.creatorsID = LLUUID.Random(); + child2ChildItem.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); + child2ChildItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); + child2ChildItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); + child2ChildItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); + child2ChildItem.inventoryID = LLUUID.Random(); + child2ChildItem.inventoryDescription = "child2Child item, Description"; + child2ChildItem.inventoryName = "child2Child item"; + child2ChildItem.invType = _rnd.Next(1, 1000); + child2ChildItem.parentFolderID = child2Child.folderID; + _dbPlugin.addInventoryItem(child2ChildItem); + + // test deletetion of items + + _dbPlugin.deleteInventoryItem(rootItem.inventoryID); + _dbPlugin.deleteInventoryItem(child1Item.inventoryID); + _dbPlugin.deleteInventoryItem(child1ChildItem.inventoryID); + _dbPlugin.deleteInventoryItem(child2Item.inventoryID); + _dbPlugin.deleteInventoryItem(child2ChildItem.inventoryID); + + InventoryItemBase item = _dbPlugin.getInventoryItem(rootItem.inventoryID); + Assert.IsNull(item); + + item = _dbPlugin.getInventoryItem(child1Item.inventoryID); + Assert.IsNull(item); + + item = _dbPlugin.getInventoryItem(child1ChildItem.inventoryID); + Assert.IsNull(item); + + item = _dbPlugin.getInventoryItem(child2Item.inventoryID); + Assert.IsNull(item); + + item = _dbPlugin.getInventoryItem(child2ChildItem.inventoryID); + Assert.IsNull(item); + + _dbPlugin.deleteInventoryFolder(_agent_1_id); + } + + + /// + /// Test that we can insert a root folder + /// + [Test] + public void T08_DeleteInventoryWithItems() + { + + // Setup inventory + InventoryFolderBase root = new InventoryFolderBase(); + root.agentID = _agent_1_id; + root.folderID = _agent_1_id; + root.name = "Root folder"; + root.parentID = LLUUID.Zero; + root.type = 2; + root.version = 2; + _dbPlugin.addInventoryFolder(root); + + InventoryFolderBase child1 = new InventoryFolderBase(); + child1.agentID = _agent_1_id; + child1.folderID = LLUUID.Random(); + child1.name = "Child 1"; + child1.parentID = root.folderID; + child1.type = 3; + child1.version = 3; + _dbPlugin.addInventoryFolder(child1); + + InventoryFolderBase child1Child = new InventoryFolderBase(); + child1Child.agentID = _agent_1_id; + child1Child.folderID = LLUUID.Random(); + child1Child.name = "Child 1 child"; + child1Child.parentID = child1.folderID; + child1Child.type = 4; + child1Child.version = 4; + _dbPlugin.addInventoryFolder(child1Child); + + InventoryFolderBase child2 = new InventoryFolderBase(); + child2.agentID = _agent_1_id; + child2.folderID = LLUUID.Random(); + child2.name = "Child 2"; + child2.parentID = root.folderID; + child2.type = 5; + child2.version = 5; + _dbPlugin.addInventoryFolder(child2); + + InventoryFolderBase child2Child = new InventoryFolderBase(); + child2Child.agentID = _agent_1_id; + child2Child.folderID = LLUUID.Random(); + child2Child.name = "Child 2 child"; + child2Child.parentID = child2.folderID; + child2Child.type = 6; + child2Child.version = 6; + _dbPlugin.addInventoryFolder(child2Child); + + InventoryItemBase rootItem = new InventoryItemBase(); + rootItem.assetID = LLUUID.Random(); + rootItem.assetType = _rnd.Next(1, 1000); + rootItem.avatarID = _agent_1_id; + rootItem.creatorsID = LLUUID.Random(); + rootItem.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); + rootItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); + rootItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); + rootItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); + rootItem.inventoryID = LLUUID.Random(); + rootItem.inventoryDescription = "Root item, Description"; + rootItem.inventoryName = "Root item"; + rootItem.invType = _rnd.Next(1, 1000); + rootItem.parentFolderID = root.folderID; + _dbPlugin.addInventoryItem(rootItem); + + InventoryItemBase child1Item = new InventoryItemBase(); + child1Item.assetID = LLUUID.Random(); + child1Item.assetType = _rnd.Next(1, 1000); + child1Item.avatarID = _agent_1_id; + child1Item.creatorsID = LLUUID.Random(); + child1Item.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); + child1Item.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); + child1Item.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); + child1Item.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); + child1Item.inventoryID = LLUUID.Random(); + child1Item.inventoryDescription = "child1 item, Description"; + child1Item.inventoryName = "child1 item"; + child1Item.invType = _rnd.Next(1, 1000); + child1Item.parentFolderID = child1.folderID; + _dbPlugin.addInventoryItem(child1Item); + + InventoryItemBase child1ChildItem = new InventoryItemBase(); + child1ChildItem.assetID = LLUUID.Random(); + child1ChildItem.assetType = _rnd.Next(1, 1000); + child1ChildItem.avatarID = _agent_1_id; + child1ChildItem.creatorsID = LLUUID.Random(); + child1ChildItem.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); + child1ChildItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); + child1ChildItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); + child1ChildItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); + child1ChildItem.inventoryID = LLUUID.Random(); + child1ChildItem.inventoryDescription = "child1Child item, Description"; + child1ChildItem.inventoryName = "child1Child item"; + child1ChildItem.invType = _rnd.Next(1, 1000); + child1ChildItem.parentFolderID = child1Child.folderID; + _dbPlugin.addInventoryItem(child1ChildItem); + + InventoryItemBase child2Item = new InventoryItemBase(); + child2Item.assetID = LLUUID.Random(); + child2Item.assetType = _rnd.Next(1, 1000); + child2Item.avatarID = _agent_1_id; + child2Item.creatorsID = LLUUID.Random(); + child2Item.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); + child2Item.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); + child2Item.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); + child2Item.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); + child2Item.inventoryID = LLUUID.Random(); + child2Item.inventoryDescription = "child2 item, Description"; + child2Item.inventoryName = "child2 item"; + child2Item.invType = _rnd.Next(1, 1000); + child2Item.parentFolderID = child2.folderID; + _dbPlugin.addInventoryItem(child2Item); + + InventoryItemBase child2ChildItem = new InventoryItemBase(); + child2ChildItem.assetID = LLUUID.Random(); + child2ChildItem.assetType = _rnd.Next(1, 1000); + child2ChildItem.avatarID = _agent_1_id; + child2ChildItem.creatorsID = LLUUID.Random(); + child2ChildItem.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); + child2ChildItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); + child2ChildItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); + child2ChildItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); + child2ChildItem.inventoryID = LLUUID.Random(); + child2ChildItem.inventoryDescription = "child2Child item, Description"; + child2ChildItem.inventoryName = "child2Child item"; + child2ChildItem.invType = _rnd.Next(1, 1000); + child2ChildItem.parentFolderID = child2Child.folderID; + _dbPlugin.addInventoryItem(child2ChildItem); + + // test deletetion of items + + _dbPlugin.deleteInventoryFolder(_agent_1_id); + + InventoryItemBase item = _dbPlugin.getInventoryItem(rootItem.inventoryID); + Assert.IsNull(item); + + item = _dbPlugin.getInventoryItem(child1Item.inventoryID); + Assert.IsNull(item); + + item = _dbPlugin.getInventoryItem(child1ChildItem.inventoryID); + Assert.IsNull(item); + + item = _dbPlugin.getInventoryItem(child2Item.inventoryID); + Assert.IsNull(item); + + item = _dbPlugin.getInventoryItem(child2ChildItem.inventoryID); + Assert.IsNull(item); + + } + + /// + /// Test that we can update items + /// + [Test] + public void T09_UpdateItem() + { + + // Setup inventory + InventoryFolderBase root = new InventoryFolderBase(); + root.agentID = _agent_1_id; + root.folderID = _agent_1_id; + root.name = "Root folder"; + root.parentID = LLUUID.Zero; + root.type = 2; + root.version = 2; + _dbPlugin.addInventoryFolder(root); + + InventoryItemBase rootItem = new InventoryItemBase(); + rootItem.assetID = LLUUID.Random(); + rootItem.assetType = _rnd.Next(1, 1000); + rootItem.avatarID = _agent_1_id; + rootItem.creatorsID = LLUUID.Random(); + rootItem.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); + rootItem.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); + rootItem.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); + rootItem.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); + rootItem.inventoryID = LLUUID.Random(); + rootItem.inventoryDescription = "Root item, Description"; + rootItem.inventoryName = "Root item"; + rootItem.invType = _rnd.Next(1, 1000); + rootItem.parentFolderID = root.folderID; + _dbPlugin.addInventoryItem(rootItem); + + rootItem.assetID = LLUUID.Random(); + _dbPlugin.updateInventoryItem(rootItem); + InventoryItemBase item = _dbPlugin.getInventoryItem(rootItem.inventoryID); + Assert.IsTrue(AreItemsIdentical(rootItem, item)); + + rootItem.assetType = rootItem.assetType+1; + _dbPlugin.updateInventoryItem(rootItem); + item = _dbPlugin.getInventoryItem(rootItem.inventoryID); + Assert.IsTrue(AreItemsIdentical(rootItem, item)); + + rootItem.avatarID = LLUUID.Random(); + _dbPlugin.updateInventoryItem(rootItem); + item = _dbPlugin.getInventoryItem(rootItem.inventoryID); + Assert.IsTrue(AreItemsIdentical(rootItem, item)); + + rootItem.creatorsID = LLUUID.Random(); + _dbPlugin.updateInventoryItem(rootItem); + item = _dbPlugin.getInventoryItem(rootItem.inventoryID); + Assert.IsTrue(AreItemsIdentical(rootItem, item)); + + rootItem.inventoryBasePermissions = rootItem.inventoryBasePermissions+1; + _dbPlugin.updateInventoryItem(rootItem); + item = _dbPlugin.getInventoryItem(rootItem.inventoryID); + Assert.IsTrue(AreItemsIdentical(rootItem, item)); + + rootItem.inventoryCurrentPermissions = rootItem.inventoryCurrentPermissions+1; + _dbPlugin.updateInventoryItem(rootItem); + item = _dbPlugin.getInventoryItem(rootItem.inventoryID); + Assert.IsTrue(AreItemsIdentical(rootItem, item)); + + rootItem.inventoryDescription = "New description"; + _dbPlugin.updateInventoryItem(rootItem); + item = _dbPlugin.getInventoryItem(rootItem.inventoryID); + Assert.IsTrue(AreItemsIdentical(rootItem, item)); + + rootItem.inventoryEveryOnePermissions = rootItem.inventoryEveryOnePermissions+1; + _dbPlugin.updateInventoryItem(rootItem); + item = _dbPlugin.getInventoryItem(rootItem.inventoryID); + Assert.IsTrue(AreItemsIdentical(rootItem, item)); + + rootItem.inventoryName = "New name"; + _dbPlugin.updateInventoryItem(rootItem); + item = _dbPlugin.getInventoryItem(rootItem.inventoryID); + Assert.IsTrue(AreItemsIdentical(rootItem, item)); + + rootItem.inventoryNextPermissions = rootItem.inventoryNextPermissions+1; + _dbPlugin.updateInventoryItem(rootItem); + item = _dbPlugin.getInventoryItem(rootItem.inventoryID); + Assert.IsTrue(AreItemsIdentical(rootItem, item)); + + rootItem.invType = rootItem.invType+1; + _dbPlugin.updateInventoryItem(rootItem); + item = _dbPlugin.getInventoryItem(rootItem.inventoryID); + Assert.IsTrue(AreItemsIdentical(rootItem, item)); + + rootItem.parentFolderID = LLUUID.Zero; + _dbPlugin.updateInventoryItem(rootItem); + item = _dbPlugin.getInventoryItem(rootItem.inventoryID); + Assert.IsTrue(AreItemsIdentical(rootItem, item)); + + _dbPlugin.deleteInventoryFolder(_agent_1_id); + _dbPlugin.deleteInventoryItem(rootItem.inventoryID); + } + + + /// + /// Test that we can insert a root folder + /// + [Test] + public void T10_GetListOfItemsInFolder() + { + + // Setup inventory + InventoryFolderBase root = new InventoryFolderBase(); + root.agentID = _agent_1_id; + root.folderID = _agent_1_id; + root.name = "Root folder"; + root.parentID = LLUUID.Zero; + root.type = 2; + root.version = 2; + _dbPlugin.addInventoryFolder(root); + + InventoryFolderBase child1 = new InventoryFolderBase(); + child1.agentID = _agent_1_id; + child1.folderID = LLUUID.Random(); + child1.name = "Child 1"; + child1.parentID = root.folderID; + child1.type = 3; + child1.version = 3; + _dbPlugin.addInventoryFolder(child1); + + InventoryFolderBase child1Child = new InventoryFolderBase(); + child1Child.agentID = _agent_1_id; + child1Child.folderID = LLUUID.Random(); + child1Child.name = "Child 1 child"; + child1Child.parentID = child1.folderID; + child1Child.type = 4; + child1Child.version = 4; + _dbPlugin.addInventoryFolder(child1Child); + + + InventoryItemBase item1 = new InventoryItemBase(); + item1.assetID = LLUUID.Random(); + item1.assetType = _rnd.Next(1, 1000); + item1.avatarID = _agent_1_id; + item1.creatorsID = LLUUID.Random(); + item1.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); + item1.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); + item1.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); + item1.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); + item1.inventoryID = LLUUID.Random(); + item1.inventoryDescription = "Item 1, description"; + item1.inventoryName = "Item 1"; + item1.invType = _rnd.Next(1, 1000); + item1.parentFolderID = child1Child.folderID; + _dbPlugin.addInventoryItem(item1); + + InventoryItemBase item2 = new InventoryItemBase(); + item2.assetID = LLUUID.Random(); + item2.assetType = _rnd.Next(1, 1000); + item2.avatarID = _agent_1_id; + item2.creatorsID = LLUUID.Random(); + item2.inventoryBasePermissions = (uint)_rnd.Next(1, 1000000); + item2.inventoryCurrentPermissions = (uint)_rnd.Next(1, 1000000); + item2.inventoryEveryOnePermissions = (uint)_rnd.Next(1, 1000000); + item2.inventoryNextPermissions = (uint)_rnd.Next(1, 1000000); + item2.inventoryID = LLUUID.Random(); + item2.inventoryDescription = "Item 1, description"; + item2.inventoryName = "Item 1"; + item2.invType = _rnd.Next(1, 1000); + item2.parentFolderID = child1Child.folderID; + _dbPlugin.addInventoryItem(item2); + + List items = _dbPlugin.getInventoryInFolder(child1Child.folderID); + Assert.IsNotNull(items); + Assert.IsNotEmpty(items); + + bool foundItem1 = false; + bool foundItem2 = false; + + foreach (InventoryItemBase i in items) + { + if (i.inventoryID == item1.inventoryID) + { + foundItem1 = true; + Assert.IsTrue(AreItemsIdentical(item1, i)); + } + else if (i.inventoryID == item2.inventoryID) + { + foundItem2 = true; + Assert.IsTrue(AreItemsIdentical(item2, i)); + } + else + { + Assert.Fail("Unknown inventory item found"); + } + } + + Assert.IsTrue(foundItem1 && foundItem2, "not all items were returned"); + _dbPlugin.deleteInventoryFolder(_agent_1_id); + } + } +}