Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
						commit
						f4cba27105
					
				| 
						 | 
				
			
			@ -127,6 +127,7 @@ what it is today.
 | 
			
		|||
* maimedleech
 | 
			
		||||
* Mana Janus
 | 
			
		||||
* MarcelEdward
 | 
			
		||||
* Matt Lehmann
 | 
			
		||||
* Mic Bowman
 | 
			
		||||
* Michelle Argus
 | 
			
		||||
* Michael Cortez (The Flotsam Project, http://osflotsam.org/)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -496,12 +496,13 @@ namespace OpenSim.Groups
 | 
			
		|||
                    Util.ParseUniversalUserIdentifier(notice.noticeData.AttachmentOwnerID, out giver, out tmp, out tmp, out tmp, out tmp);
 | 
			
		||||
 | 
			
		||||
                    m_log.DebugFormat("[Groups]: Giving inventory from {0} to {1}", giver, remoteClient.AgentId);
 | 
			
		||||
                    string message;
 | 
			
		||||
                    InventoryItemBase itemCopy = ((Scene)(remoteClient.Scene)).GiveInventoryItem(remoteClient.AgentId, 
 | 
			
		||||
                        giver, notice.noticeData.AttachmentItemID);
 | 
			
		||||
                        giver, notice.noticeData.AttachmentItemID, out message);
 | 
			
		||||
 | 
			
		||||
                    if (itemCopy == null)
 | 
			
		||||
                    {
 | 
			
		||||
                        remoteClient.SendAgentAlertMessage("Can't find item to give. Nothing given.", false);
 | 
			
		||||
                        remoteClient.SendAgentAlertMessage(message, false);
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,6 +35,10 @@ namespace OpenSim.Framework
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class InventoryItemBase : InventoryNodeBase, ICloneable
 | 
			
		||||
    {
 | 
			
		||||
        public static readonly string SUITCASE_FOLDER_NAME = "My Suitcase";
 | 
			
		||||
        public static readonly sbyte SUITCASE_FOLDER_TYPE = 100;
 | 
			
		||||
        public static readonly sbyte SUITCASE_FOLDER_FAKE_TYPE = 8;
 | 
			
		||||
        
 | 
			
		||||
        /// <value>
 | 
			
		||||
        /// The inventory type of the item.  This is slightly different from the asset type in some situations.
 | 
			
		||||
        /// </value>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -272,6 +272,7 @@ namespace OpenSim
 | 
			
		|||
                                             + " [--no-objects]"
 | 
			
		||||
                                             + " [--rotation degrees] [--rotation-center \"<x,y,z>\"]"
 | 
			
		||||
                                             + " [--displacement \"<x,y,z>\"]"
 | 
			
		||||
                                             + " [--default-user \"User Name\"]"
 | 
			
		||||
                                             + " [<OAR path>]",
 | 
			
		||||
                                          "Load a region's data from an OAR archive.",
 | 
			
		||||
                                          "--merge will merge the OAR with the existing scene (suppresses terrain and parcel info loading)." + Environment.NewLine
 | 
			
		||||
| 
						 | 
				
			
			@ -401,6 +402,12 @@ namespace OpenSim
 | 
			
		|||
                                          "Delete a region from disk", 
 | 
			
		||||
                                          RunCommand);
 | 
			
		||||
 | 
			
		||||
            m_console.Commands.AddCommand("Estates", false, "estate create",
 | 
			
		||||
                                          "estate create <owner UUID> <estate name>",
 | 
			
		||||
                                          "Creates a new estate with the specified name, owned by the specified user."
 | 
			
		||||
                                          + " Estate name must be unique.",
 | 
			
		||||
                                          CreateEstateCommand);
 | 
			
		||||
 | 
			
		||||
            m_console.Commands.AddCommand("Estates", false, "estate set owner",
 | 
			
		||||
                                          "estate set owner <estate-id>[ <UUID> | <Firstname> <Lastname> ]",
 | 
			
		||||
                                          "Sets the owner of the specified estate to the specified UUID or user. ",
 | 
			
		||||
| 
						 | 
				
			
			@ -410,6 +417,11 @@ namespace OpenSim
 | 
			
		|||
                                          "estate set name <estate-id> <new name>",
 | 
			
		||||
                                          "Sets the name of the specified estate to the specified value. New name must be unique.",
 | 
			
		||||
                                          SetEstateNameCommand);
 | 
			
		||||
 | 
			
		||||
            m_console.Commands.AddCommand("Estates", false, "estate link region",
 | 
			
		||||
                                          "estate link region <estate ID> <region ID>",
 | 
			
		||||
                                          "Attaches the specified region to the specified estate.",
 | 
			
		||||
                                          EstateLinkRegionCommand);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override void ShutdownSpecific()
 | 
			
		||||
| 
						 | 
				
			
			@ -1176,6 +1188,58 @@ namespace OpenSim
 | 
			
		|||
            SceneManager.SaveCurrentSceneToArchive(cmdparams);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected void CreateEstateCommand(string module, string[] args)
 | 
			
		||||
        {
 | 
			
		||||
            string response = null;
 | 
			
		||||
            UUID userID;
 | 
			
		||||
 | 
			
		||||
            if (args.Length == 2)
 | 
			
		||||
            {
 | 
			
		||||
                response = "No user specified.";
 | 
			
		||||
            }
 | 
			
		||||
            else if (!UUID.TryParse(args[2], out userID))
 | 
			
		||||
            {
 | 
			
		||||
                response = String.Format("{0} is not a valid UUID", args[2]);
 | 
			
		||||
            }
 | 
			
		||||
            else if (args.Length == 3)
 | 
			
		||||
            {
 | 
			
		||||
                response = "No estate name specified.";
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                Scene scene = SceneManager.CurrentOrFirstScene;
 | 
			
		||||
 | 
			
		||||
                // TODO: Is there a better choice here?
 | 
			
		||||
                UUID scopeID = UUID.Zero;
 | 
			
		||||
                UserAccount account = scene.UserAccountService.GetUserAccount(scopeID, userID);
 | 
			
		||||
                if (account == null)
 | 
			
		||||
                {
 | 
			
		||||
                    response = String.Format("Could not find user {0}", userID);
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    // concatenate it all to "name"
 | 
			
		||||
                    StringBuilder sb = new StringBuilder(args[3]);
 | 
			
		||||
                    for (int i = 4; i < args.Length; i++)
 | 
			
		||||
                        sb.Append (" " + args[i]);
 | 
			
		||||
                    string estateName = sb.ToString().Trim();
 | 
			
		||||
 | 
			
		||||
                    // send it off for processing.
 | 
			
		||||
                    IEstateModule estateModule = scene.RequestModuleInterface<IEstateModule>();
 | 
			
		||||
                    response = estateModule.CreateEstate(estateName, userID);
 | 
			
		||||
                    if (response == String.Empty)
 | 
			
		||||
                    {
 | 
			
		||||
                        List<int> estates = scene.EstateDataService.GetEstates(estateName);
 | 
			
		||||
                        response = String.Format("Estate {0} created as \"{1}\"", estates.ElementAt(0), estateName);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // give the user some feedback
 | 
			
		||||
            if (response != null)
 | 
			
		||||
                MainConsole.Instance.Output(response);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected void SetEstateOwnerCommand(string module, string[] args)
 | 
			
		||||
        {
 | 
			
		||||
            string response = null;
 | 
			
		||||
| 
						 | 
				
			
			@ -1298,6 +1362,56 @@ namespace OpenSim
 | 
			
		|||
                MainConsole.Instance.Output(response);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void EstateLinkRegionCommand(string module, string[] args)
 | 
			
		||||
        {
 | 
			
		||||
            int estateId =-1;
 | 
			
		||||
            UUID regionId = UUID.Zero;
 | 
			
		||||
            Scene scene = null;
 | 
			
		||||
            string response = null;
 | 
			
		||||
 | 
			
		||||
            if (args.Length == 3)
 | 
			
		||||
            {
 | 
			
		||||
                response = "No estate specified.";
 | 
			
		||||
            }
 | 
			
		||||
            else if (!int.TryParse(args [3], out estateId))
 | 
			
		||||
            {
 | 
			
		||||
                response = String.Format("\"{0}\" is not a valid ID for an Estate", args [3]);
 | 
			
		||||
            }
 | 
			
		||||
            else if (args.Length == 4)
 | 
			
		||||
            {
 | 
			
		||||
                response = "No region specified.";
 | 
			
		||||
            }
 | 
			
		||||
            else if (!UUID.TryParse(args[4], out regionId))
 | 
			
		||||
            {
 | 
			
		||||
                response = String.Format("\"{0}\" is not a valid UUID for a Region", args [4]);
 | 
			
		||||
            }
 | 
			
		||||
            else if (!SceneManager.TryGetScene(regionId, out scene))
 | 
			
		||||
            {
 | 
			
		||||
                // region may exist, but on a different sim.
 | 
			
		||||
                response = String.Format("No access to Region \"{0}\"", args [4]);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (response != null)
 | 
			
		||||
            {
 | 
			
		||||
                MainConsole.Instance.Output(response);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // send it off for processing.
 | 
			
		||||
            IEstateModule estateModule = scene.RequestModuleInterface<IEstateModule>();
 | 
			
		||||
            response = estateModule.SetRegionEstate(scene.RegionInfo, estateId);
 | 
			
		||||
            if (response == String.Empty)
 | 
			
		||||
            {
 | 
			
		||||
                estateModule.TriggerRegionInfoChange();
 | 
			
		||||
                estateModule.sendRegionHandshakeToAll();
 | 
			
		||||
                response = String.Format ("Region {0} is now attached to estate {1}", regionId, estateId);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // give the user some feedback
 | 
			
		||||
            if (response != null)
 | 
			
		||||
                MainConsole.Instance.Output (response);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        private static string CombineParams(string[] commandParams, int pos)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -865,18 +865,26 @@ namespace OpenSim.Region.ClientStack.Linden
 | 
			
		|||
                item = m_Scene.InventoryService.GetItem(new InventoryItemBase(itemID));
 | 
			
		||||
                if (item != null)
 | 
			
		||||
                {
 | 
			
		||||
                    copyItem = m_Scene.GiveInventoryItem(m_HostCapsObj.AgentID, item.Owner, itemID, folderID);
 | 
			
		||||
                    if (copyItem != null && client != null)
 | 
			
		||||
                    string message;
 | 
			
		||||
                    copyItem = m_Scene.GiveInventoryItem(m_HostCapsObj.AgentID, item.Owner, itemID, folderID, out message);
 | 
			
		||||
                    if (client != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        m_log.InfoFormat("[CAPS]: CopyInventoryFromNotecard, ItemID:{0}, FolderID:{1}", copyItem.ID, copyItem.Folder);
 | 
			
		||||
                        client.SendBulkUpdateInventory(copyItem);
 | 
			
		||||
                        if (copyItem != null)
 | 
			
		||||
                        {
 | 
			
		||||
                            m_log.InfoFormat("[CAPS]: CopyInventoryFromNotecard, ItemID:{0}, FolderID:{1}", copyItem.ID, copyItem.Folder);
 | 
			
		||||
                            client.SendBulkUpdateInventory(copyItem);
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            client.SendAgentAlertMessage(message, false);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.ErrorFormat("[CAPS]: CopyInventoryFromNotecard - Failed to retrieve item {0} from notecard {1}", itemID, notecardID);
 | 
			
		||||
                    if (client != null)
 | 
			
		||||
                        client.SendAlertMessage("Failed to retrieve item");
 | 
			
		||||
                        client.SendAgentAlertMessage("Failed to retrieve item", false);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -129,12 +129,12 @@ namespace OpenSim.Region.ClientStack.Linden
 | 
			
		|||
            m_BakedTextureModule = m_scene.RequestModuleInterface<IBakedTextureModule>();
 | 
			
		||||
            if (cacheItems.Length > 0)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.Debug("[Cacheitems]: " + cacheItems.Length);
 | 
			
		||||
                for (int iter = 0; iter < maxCacheitemsLoop; iter++)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.Debug("[Cacheitems] {" + iter + "/" + cacheItems[iter].TextureIndex + "}: c-" + cacheItems[iter].CacheId + ", t-" +
 | 
			
		||||
                                      cacheItems[iter].TextureID);
 | 
			
		||||
                }
 | 
			
		||||
//                m_log.Debug("[Cacheitems]: " + cacheItems.Length);
 | 
			
		||||
//                for (int iter = 0; iter < maxCacheitemsLoop; iter++)
 | 
			
		||||
//                {
 | 
			
		||||
//                    m_log.Debug("[Cacheitems] {" + iter + "/" + cacheItems[iter].TextureIndex + "}: c-" + cacheItems[iter].CacheId + ", t-" +
 | 
			
		||||
//                                      cacheItems[iter].TextureID);
 | 
			
		||||
//                }
 | 
			
		||||
               
 | 
			
		||||
                ScenePresence p = null;
 | 
			
		||||
                if (m_scene.TryGetScenePresence(remoteClient.AgentId, out p))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1761,6 +1761,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
 | 
			
		|||
            newBlock.Name = Util.StringToBytes256(folder.Name);
 | 
			
		||||
            newBlock.ParentID = folder.ParentID;
 | 
			
		||||
            newBlock.Type = (sbyte)folder.Type;
 | 
			
		||||
            if (newBlock.Type == InventoryItemBase.SUITCASE_FOLDER_TYPE)
 | 
			
		||||
                newBlock.Type = InventoryItemBase.SUITCASE_FOLDER_FAKE_TYPE;
 | 
			
		||||
 | 
			
		||||
            return newBlock;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -2010,8 +2012,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
 | 
			
		|||
 | 
			
		||||
            folderBlock.FolderID = folder.ID;
 | 
			
		||||
            folderBlock.ParentID = folder.ParentID;
 | 
			
		||||
            //folderBlock.Type = -1;
 | 
			
		||||
            folderBlock.Type = (sbyte)folder.Type;
 | 
			
		||||
            if (folderBlock.Type == InventoryItemBase.SUITCASE_FOLDER_TYPE)
 | 
			
		||||
                folderBlock.Type = InventoryItemBase.SUITCASE_FOLDER_FAKE_TYPE;
 | 
			
		||||
            folderBlock.Name = Util.StringToBytes256(folder.Name);
 | 
			
		||||
 | 
			
		||||
            return folderBlock;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -180,8 +180,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
 | 
			
		|||
                        "[INVENTORY TRANSFER]: Inserting original folder {0} into agent {1}'s inventory",
 | 
			
		||||
                        folderID, new UUID(im.toAgentID));
 | 
			
		||||
                    
 | 
			
		||||
                    InventoryFolderBase folderCopy 
 | 
			
		||||
                        = scene.GiveInventoryFolder(receipientID, client.AgentId, folderID, UUID.Zero);
 | 
			
		||||
                    InventoryFolderBase folderCopy
 | 
			
		||||
                        = scene.GiveInventoryFolder(client, receipientID, client.AgentId, folderID, UUID.Zero);
 | 
			
		||||
                    
 | 
			
		||||
                    if (folderCopy == null)
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -217,13 +217,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
 | 
			
		|||
                            "into agent {1}'s inventory",
 | 
			
		||||
                            itemID, new UUID(im.toAgentID));
 | 
			
		||||
 | 
			
		||||
                    InventoryItemBase itemCopy = scene.GiveInventoryItem(
 | 
			
		||||
                            new UUID(im.toAgentID),
 | 
			
		||||
                            client.AgentId, itemID);
 | 
			
		||||
                    string message;
 | 
			
		||||
                    InventoryItemBase itemCopy = scene.GiveInventoryItem(new UUID(im.toAgentID), client.AgentId, itemID, out message);
 | 
			
		||||
 | 
			
		||||
                    if (itemCopy == null)
 | 
			
		||||
                    {
 | 
			
		||||
                        client.SendAgentAlertMessage("Can't find item to give. Nothing given.", false);
 | 
			
		||||
                        client.SendAgentAlertMessage(message, false);
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -160,10 +160,22 @@ namespace OpenSim.Region.CoreModules.World.Archiver
 | 
			
		|||
        private IAssetService m_assetService = null;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private UUID m_defaultUser;
 | 
			
		||||
 | 
			
		||||
        public ArchiveReadRequest(Scene scene, string loadPath, Guid requestId, Dictionary<string,object>options)
 | 
			
		||||
        {
 | 
			
		||||
            m_rootScene = scene;
 | 
			
		||||
 | 
			
		||||
            if (options.ContainsKey("default-user"))
 | 
			
		||||
            {
 | 
			
		||||
                m_defaultUser = (UUID)options["default-user"];
 | 
			
		||||
                m_log.InfoFormat("Using User {0} as default user", m_defaultUser.ToString());
 | 
			
		||||
            }
 | 
			
		||||
            else 
 | 
			
		||||
            {
 | 
			
		||||
                m_defaultUser = scene.RegionInfo.EstateSettings.EstateOwner;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            m_loadPath = loadPath;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -206,6 +218,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver
 | 
			
		|||
            m_merge = options.ContainsKey("merge");
 | 
			
		||||
            m_requestId = requestId;
 | 
			
		||||
 | 
			
		||||
            m_defaultUser = scene.RegionInfo.EstateSettings.EstateOwner;
 | 
			
		||||
     
 | 
			
		||||
            // Zero can never be a valid user id
 | 
			
		||||
            m_validUserUuids[UUID.Zero] = false;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -562,16 +576,16 @@ namespace OpenSim.Region.CoreModules.World.Archiver
 | 
			
		|||
                if (string.IsNullOrEmpty(part.CreatorData))
 | 
			
		||||
                {
 | 
			
		||||
                    if (!ResolveUserUuid(scene, part.CreatorID))
 | 
			
		||||
                        part.CreatorID = scene.RegionInfo.EstateSettings.EstateOwner;
 | 
			
		||||
                        part.CreatorID = m_defaultUser;
 | 
			
		||||
                }
 | 
			
		||||
                if (UserManager != null)
 | 
			
		||||
                    UserManager.AddUser(part.CreatorID, part.CreatorData);
 | 
			
		||||
 | 
			
		||||
                if (!(ResolveUserUuid(scene, part.OwnerID) || ResolveGroupUuid(part.OwnerID)))
 | 
			
		||||
                    part.OwnerID = scene.RegionInfo.EstateSettings.EstateOwner;
 | 
			
		||||
                    part.OwnerID = m_defaultUser;
 | 
			
		||||
 | 
			
		||||
                if (!(ResolveUserUuid(scene, part.LastOwnerID) || ResolveGroupUuid(part.LastOwnerID)))
 | 
			
		||||
                    part.LastOwnerID = scene.RegionInfo.EstateSettings.EstateOwner;
 | 
			
		||||
                    part.LastOwnerID = m_defaultUser;
 | 
			
		||||
 | 
			
		||||
                if (!ResolveGroupUuid(part.GroupID))
 | 
			
		||||
                    part.GroupID = UUID.Zero;
 | 
			
		||||
| 
						 | 
				
			
			@ -590,13 +604,13 @@ namespace OpenSim.Region.CoreModules.World.Archiver
 | 
			
		|||
                    {
 | 
			
		||||
                        if (!(ResolveUserUuid(scene, kvp.Value.OwnerID) || ResolveGroupUuid(kvp.Value.OwnerID)))
 | 
			
		||||
                        {
 | 
			
		||||
                            kvp.Value.OwnerID = scene.RegionInfo.EstateSettings.EstateOwner;
 | 
			
		||||
                            kvp.Value.OwnerID = m_defaultUser;
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        if (string.IsNullOrEmpty(kvp.Value.CreatorData))
 | 
			
		||||
                        {
 | 
			
		||||
                            if (!ResolveUserUuid(scene, kvp.Value.CreatorID))
 | 
			
		||||
                                kvp.Value.CreatorID = scene.RegionInfo.EstateSettings.EstateOwner;
 | 
			
		||||
                                kvp.Value.CreatorID = m_defaultUser;
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        if (UserManager != null)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -108,6 +108,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
 | 
			
		|||
            bool forceParcels = false;
 | 
			
		||||
            bool noObjects = false;
 | 
			
		||||
            Vector3 displacement = new Vector3(0f, 0f, 0f);
 | 
			
		||||
            String defaultUser = "";
 | 
			
		||||
            float rotation = 0f;
 | 
			
		||||
            Vector3 rotationCenter = new Vector3(Constants.RegionSize / 2f, Constants.RegionSize / 2f, 0);
 | 
			
		||||
            
 | 
			
		||||
| 
						 | 
				
			
			@ -119,6 +120,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
 | 
			
		|||
            options.Add("force-parcels", delegate (string v) { forceParcels = (v != null); });
 | 
			
		||||
            options.Add("forceparcels", delegate (string v) { forceParcels = (v != null); });   // downward compatibility
 | 
			
		||||
            options.Add("no-objects", delegate (string v) { noObjects = (v != null); });
 | 
			
		||||
            options.Add("default-user=", delegate(string v) { defaultUser = (v == null) ? "" : v; });
 | 
			
		||||
            options.Add("displacement=", delegate (string v) {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -131,7 +133,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver
 | 
			
		|||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
            options.Add("rotation=", delegate (string v) {
 | 
			
		||||
            options.Add("rotation=", delegate(string v)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    rotation = v == null ? 0f : float.Parse(v);
 | 
			
		||||
| 
						 | 
				
			
			@ -181,6 +184,27 @@ namespace OpenSim.Region.CoreModules.World.Archiver
 | 
			
		|||
            if (forceTerrain) archiveOptions.Add("force-terrain", null);
 | 
			
		||||
            if (forceParcels) archiveOptions.Add("force-parcels", null);
 | 
			
		||||
            if (noObjects) archiveOptions.Add("no-objects", null);
 | 
			
		||||
            if (defaultUser != "")
 | 
			
		||||
            {
 | 
			
		||||
                UUID defaultUserUUID = UUID.Zero;
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    defaultUserUUID = Scene.UserManagementModule.GetUserIdByName(defaultUser);
 | 
			
		||||
                }
 | 
			
		||||
                catch
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.ErrorFormat("[ARCHIVER MODULE] default user must be in format \"First Last\"", defaultUser);
 | 
			
		||||
                }
 | 
			
		||||
                if (defaultUserUUID == UUID.Zero)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.ErrorFormat("[ARCHIVER MODULE] cannot find specified default user {0}", defaultUser);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    archiveOptions.Add("default-user", defaultUserUUID);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            archiveOptions.Add("displacement", displacement);
 | 
			
		||||
            archiveOptions.Add("rotation", rotation);
 | 
			
		||||
            archiveOptions.Add("rotation-center", rotationCenter);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -313,6 +313,69 @@ namespace OpenSim.Region.CoreModules.World.Estate
 | 
			
		|||
            return response;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string SetRegionEstate(RegionInfo regionInfo, int estateID)
 | 
			
		||||
        {
 | 
			
		||||
            string response;
 | 
			
		||||
 | 
			
		||||
            if (regionInfo.EstateSettings.EstateID == estateID)
 | 
			
		||||
            {
 | 
			
		||||
                response = String.Format("\"{0}\" is already part of estate {1}", regionInfo.RegionName, estateID);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                // get the current settings from DB
 | 
			
		||||
                EstateSettings dbSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
 | 
			
		||||
                if (dbSettings.EstateID == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    response = String.Format("No estate found with ID {0}", estateID);
 | 
			
		||||
                }
 | 
			
		||||
                else if (Scene.EstateDataService.LinkRegion(regionInfo.RegionID, estateID))
 | 
			
		||||
                {
 | 
			
		||||
                    // make sure there's a log entry to document the change
 | 
			
		||||
                    m_log.InfoFormat("[ESTATE]: Region {0} ({1}) moved to Estate {2} ({3}).", regionInfo.RegionID, regionInfo.RegionName, estateID, dbSettings.EstateName);
 | 
			
		||||
 | 
			
		||||
                   // propagate the change
 | 
			
		||||
                    ChangeDelegate change = OnEstateInfoChange;
 | 
			
		||||
 | 
			
		||||
                    if (change != null)
 | 
			
		||||
                        change(regionInfo.RegionID);
 | 
			
		||||
 | 
			
		||||
                    response = String.Empty;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    response = String.Format("Could not move \"{0}\" to estate {1}", regionInfo.RegionName, estateID);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return response;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string CreateEstate(string estateName, UUID ownerID)
 | 
			
		||||
        {
 | 
			
		||||
            string response;
 | 
			
		||||
            if (string.IsNullOrEmpty(estateName))
 | 
			
		||||
            {
 | 
			
		||||
                response = "No estate name specified.";
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                List<int> estates = Scene.EstateDataService.GetEstates(estateName);
 | 
			
		||||
                if (estates.Count() > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    response = String.Format("An estate named \"{0}\" already exists.", estateName);
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    EstateSettings settings = Scene.EstateDataService.CreateNewEstate();
 | 
			
		||||
                    settings.EstateOwner = ownerID;
 | 
			
		||||
                    settings.EstateName = estateName;
 | 
			
		||||
                    settings.Save();
 | 
			
		||||
                    response = String.Empty;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return response;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Packet Data Responders
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,6 +26,7 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
using OpenMetaverse;
 | 
			
		||||
using OpenSim.Framework;
 | 
			
		||||
using OpenSim.Services.Interfaces;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.Framework.Interfaces
 | 
			
		||||
| 
						 | 
				
			
			@ -44,6 +45,8 @@ namespace OpenSim.Region.Framework.Interfaces
 | 
			
		|||
 | 
			
		||||
        string SetEstateOwner(int estateID, UserAccount account);
 | 
			
		||||
        string SetEstateName(int estateID, string newName);
 | 
			
		||||
        string SetRegionEstate(RegionInfo regionInfo, int estateID);
 | 
			
		||||
        string CreateEstate(string estateName, UUID ownerID);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Tell all clients about the current state of the region (terrain textures, water height, etc.).
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,7 +46,7 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
{
 | 
			
		||||
    public partial class Scene
 | 
			
		||||
    {
 | 
			
		||||
        private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
        private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
        private static readonly string LogHeader = "[SCENE INVENTORY]";
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -541,9 +541,9 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
        /// <param name="recipientClient"></param>
 | 
			
		||||
        /// <param name="senderId">ID of the sender of the item</param>
 | 
			
		||||
        /// <param name="itemId"></param>
 | 
			
		||||
        public virtual void GiveInventoryItem(IClientAPI recipientClient, UUID senderId, UUID itemId)
 | 
			
		||||
        public virtual void GiveInventoryItem(IClientAPI recipientClient, UUID senderId, UUID itemId, out string message)
 | 
			
		||||
        {
 | 
			
		||||
            InventoryItemBase itemCopy = GiveInventoryItem(recipientClient.AgentId, senderId, itemId);
 | 
			
		||||
            InventoryItemBase itemCopy = GiveInventoryItem(recipientClient.AgentId, senderId, itemId, out message);
 | 
			
		||||
 | 
			
		||||
            if (itemCopy != null)
 | 
			
		||||
                recipientClient.SendBulkUpdateInventory(itemCopy);
 | 
			
		||||
| 
						 | 
				
			
			@ -556,9 +556,9 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
        /// <param name="senderId">ID of the sender of the item</param>
 | 
			
		||||
        /// <param name="itemId"></param>
 | 
			
		||||
        /// <returns>The inventory item copy given, null if the give was unsuccessful</returns>
 | 
			
		||||
        public virtual InventoryItemBase GiveInventoryItem(UUID recipient, UUID senderId, UUID itemId)
 | 
			
		||||
        public virtual InventoryItemBase GiveInventoryItem(UUID recipient, UUID senderId, UUID itemId, out string message)
 | 
			
		||||
        {
 | 
			
		||||
            return GiveInventoryItem(recipient, senderId, itemId, UUID.Zero);
 | 
			
		||||
            return GiveInventoryItem(recipient, senderId, itemId, UUID.Zero, out message);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -575,12 +575,15 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
        /// The inventory item copy given, null if the give was unsuccessful
 | 
			
		||||
        /// </returns>
 | 
			
		||||
        public virtual InventoryItemBase GiveInventoryItem(
 | 
			
		||||
            UUID recipient, UUID senderId, UUID itemId, UUID recipientFolderId)
 | 
			
		||||
            UUID recipient, UUID senderId, UUID itemId, UUID recipientFolderId, out string message)
 | 
			
		||||
        {
 | 
			
		||||
            //Console.WriteLine("Scene.Inventory.cs: GiveInventoryItem");
 | 
			
		||||
 | 
			
		||||
            if (!Permissions.CanTransferUserInventory(itemId, senderId, recipient))
 | 
			
		||||
            {
 | 
			
		||||
                message = "Not allowed to transfer this item.";
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            InventoryItemBase item = new InventoryItemBase(itemId, senderId);
 | 
			
		||||
            item = InventoryService.GetItem(item);
 | 
			
		||||
| 
						 | 
				
			
			@ -589,6 +592,7 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
            {
 | 
			
		||||
                m_log.WarnFormat(
 | 
			
		||||
                    "[AGENT INVENTORY]: Failed to find item {0} sent by {1} to {2}", itemId, senderId, recipient);
 | 
			
		||||
                message = string.Format("Item not found: {0}.", itemId);
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -597,6 +601,7 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                m_log.WarnFormat(
 | 
			
		||||
                    "[AGENT INVENTORY]: Attempt to send item {0} {1} to {2} failed because sender {3} did not match item owner {4}",
 | 
			
		||||
                    item.Name, item.ID, recipient, senderId, item.Owner);
 | 
			
		||||
                message = "Sender did not match item owner.";
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -607,7 +612,10 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
            if (!Permissions.BypassPermissions())
 | 
			
		||||
            {
 | 
			
		||||
                if ((item.CurrentPermissions & (uint)PermissionMask.Transfer) == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    message = "Item doesn't have the Transfer permission.";
 | 
			
		||||
                    return null;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Insert a copy of the item into the recipient
 | 
			
		||||
| 
						 | 
				
			
			@ -743,9 +751,14 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                    InventoryFolderBase root = InventoryService.GetRootFolder(recipient);
 | 
			
		||||
 | 
			
		||||
                    if (root != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        itemCopy.Folder = root.ID;
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                        return null; // No destination
 | 
			
		||||
                    {
 | 
			
		||||
                        message = "Can't find a folder to add the item to.";
 | 
			
		||||
                        return null;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -770,6 +783,7 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            message = null;
 | 
			
		||||
            return itemCopy;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -787,7 +801,7 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
        /// <returns>
 | 
			
		||||
        /// The inventory folder copy given, null if the copy was unsuccessful
 | 
			
		||||
        /// </returns>
 | 
			
		||||
        public virtual InventoryFolderBase GiveInventoryFolder(
 | 
			
		||||
        public virtual InventoryFolderBase GiveInventoryFolder(IClientAPI client,
 | 
			
		||||
            UUID recipientId, UUID senderId, UUID folderId, UUID recipientParentFolderId)
 | 
			
		||||
        {
 | 
			
		||||
            //// Retrieve the folder from the sender
 | 
			
		||||
| 
						 | 
				
			
			@ -822,13 +836,18 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
            InventoryCollection contents = InventoryService.GetFolderContent(senderId, folderId);
 | 
			
		||||
            foreach (InventoryFolderBase childFolder in contents.Folders)
 | 
			
		||||
            {
 | 
			
		||||
                GiveInventoryFolder(recipientId, senderId, childFolder.ID, newFolder.ID);
 | 
			
		||||
                GiveInventoryFolder(client, recipientId, senderId, childFolder.ID, newFolder.ID);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Give all the items
 | 
			
		||||
            foreach (InventoryItemBase item in contents.Items)
 | 
			
		||||
            {
 | 
			
		||||
                GiveInventoryItem(recipientId, senderId, item.ID, newFolder.ID);
 | 
			
		||||
                string message;
 | 
			
		||||
                if (GiveInventoryItem(recipientId, senderId, item.ID, newFolder.ID, out message) == null)
 | 
			
		||||
                {
 | 
			
		||||
                    if (client != null)
 | 
			
		||||
                        client.SendAgentAlertMessage(message, false);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return newFolder;
 | 
			
		||||
| 
						 | 
				
			
			@ -1155,11 +1174,19 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
 | 
			
		||||
                InventoryFolderBase destFolder = InventoryService.GetFolderForType(remoteClient.AgentId, AssetType.TrashFolder);
 | 
			
		||||
 | 
			
		||||
                // Move the item to trash. If this is a copiable item, only
 | 
			
		||||
                // Move the item to trash. If this is a copyable item, only
 | 
			
		||||
                // a copy will be moved and we will still need to delete
 | 
			
		||||
                // the item from the prim. If it was no copy, is will be
 | 
			
		||||
                // the item from the prim. If it was no copy, it will be
 | 
			
		||||
                // deleted by this method.
 | 
			
		||||
                MoveTaskInventoryItem(remoteClient, destFolder.ID, part, itemID);
 | 
			
		||||
                string message;
 | 
			
		||||
                InventoryItemBase item2 = MoveTaskInventoryItem(remoteClient, destFolder.ID, part, itemID, out message);
 | 
			
		||||
 | 
			
		||||
                if (item2 == null)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.WarnFormat("[SCENE INVENTORY]: RemoveTaskInventory of item {0} failed: {1}", itemID, message);
 | 
			
		||||
                    remoteClient.SendAgentAlertMessage(message, false);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (group.GetInventoryItem(localID, itemID) != null)
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -1171,11 +1198,16 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
 | 
			
		||||
                    group.RemoveInventoryItem(localID, itemID);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                part.SendPropertiesToClient(remoteClient);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private InventoryItemBase CreateAgentInventoryItemFromTask(UUID destAgent, SceneObjectPart part, UUID itemId)
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Creates (in memory only) a user inventory item that will contain a copy of a task inventory item.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private InventoryItemBase CreateAgentInventoryItemFromTask(UUID destAgent, SceneObjectPart part, UUID itemId, out string message)
 | 
			
		||||
        {
 | 
			
		||||
            TaskInventoryItem taskItem = part.Inventory.GetInventoryItem(itemId);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1186,12 +1218,13 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                        + " inventory item from a prim's inventory item "
 | 
			
		||||
                        + " but the required item does not exist in the prim's inventory",
 | 
			
		||||
                    itemId, part.Name, part.UUID);
 | 
			
		||||
 | 
			
		||||
                message = "Item not found: " + itemId;
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ((destAgent != taskItem.OwnerID) && ((taskItem.CurrentPermissions & (uint)PermissionMask.Transfer) == 0))
 | 
			
		||||
            {
 | 
			
		||||
                message = "Item doesn't have the Transfer permission.";
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1237,11 +1270,24 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                agentItem.GroupPermissions = taskItem.GroupPermissions;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            message = null;
 | 
			
		||||
            return agentItem;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// If the task item is not-copyable then remove it from the prim.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private void RemoveNonCopyTaskItemFromPrim(SceneObjectPart part, UUID itemId)
 | 
			
		||||
        {
 | 
			
		||||
            TaskInventoryItem taskItem = part.Inventory.GetInventoryItem(itemId);
 | 
			
		||||
            if (taskItem == null)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            if (!Permissions.BypassPermissions())
 | 
			
		||||
            {
 | 
			
		||||
                if ((taskItem.CurrentPermissions & (uint)PermissionMask.Copy) == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    if (taskItem.Type == 10)
 | 
			
		||||
                    if (taskItem.Type == (int)AssetType.LSLText)
 | 
			
		||||
                    {
 | 
			
		||||
                        part.RemoveScriptEvents(itemId);
 | 
			
		||||
                        EventManager.TriggerRemoveScript(part.LocalId, itemId);
 | 
			
		||||
| 
						 | 
				
			
			@ -1250,8 +1296,6 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                    part.Inventory.RemoveInventoryItem(itemId);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return agentItem;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -1261,19 +1305,22 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
        /// <param name="folderID"></param>
 | 
			
		||||
        /// <param name="part"></param>
 | 
			
		||||
        /// <param name="itemID"></param>
 | 
			
		||||
        public InventoryItemBase MoveTaskInventoryItem(IClientAPI remoteClient, UUID folderId, SceneObjectPart part, UUID itemId)
 | 
			
		||||
        public InventoryItemBase MoveTaskInventoryItem(IClientAPI remoteClient, UUID folderId, SceneObjectPart part, UUID itemId, out string message)
 | 
			
		||||
        {
 | 
			
		||||
            m_log.DebugFormat(
 | 
			
		||||
                "[PRIM INVENTORY]: Adding item {0} from {1} to folder {2} for {3}", 
 | 
			
		||||
                itemId, part.Name, folderId, remoteClient.Name);
 | 
			
		||||
            
 | 
			
		||||
            InventoryItemBase agentItem = CreateAgentInventoryItemFromTask(remoteClient.AgentId, part, itemId);
 | 
			
		||||
 | 
			
		||||
            InventoryItemBase agentItem = CreateAgentInventoryItemFromTask(remoteClient.AgentId, part, itemId, out message);
 | 
			
		||||
            if (agentItem == null)
 | 
			
		||||
                return null;
 | 
			
		||||
 | 
			
		||||
            agentItem.Folder = folderId;
 | 
			
		||||
            AddInventoryItem(remoteClient, agentItem);
 | 
			
		||||
 | 
			
		||||
            RemoveNonCopyTaskItemFromPrim(part, itemId);
 | 
			
		||||
 | 
			
		||||
            message = null;
 | 
			
		||||
            return agentItem;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1324,7 +1371,11 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                    return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            MoveTaskInventoryItem(remoteClient, folderId, part, itemId);
 | 
			
		||||
            string message;
 | 
			
		||||
            InventoryItemBase item = MoveTaskInventoryItem(remoteClient, folderId, part, itemId, out message);
 | 
			
		||||
            
 | 
			
		||||
            if (item == null)
 | 
			
		||||
                remoteClient.SendAgentAlertMessage(message, false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -1338,17 +1389,17 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
        /// </param>
 | 
			
		||||
        /// <param name="part"></param>
 | 
			
		||||
        /// <param name="itemID"></param>
 | 
			
		||||
        public InventoryItemBase MoveTaskInventoryItem(UUID avatarId, UUID folderId, SceneObjectPart part, UUID itemId)
 | 
			
		||||
        public InventoryItemBase MoveTaskInventoryItem(UUID avatarId, UUID folderId, SceneObjectPart part, UUID itemId, out string message)
 | 
			
		||||
        {
 | 
			
		||||
            ScenePresence avatar;
 | 
			
		||||
 | 
			
		||||
            if (TryGetScenePresence(avatarId, out avatar))
 | 
			
		||||
            {
 | 
			
		||||
                return MoveTaskInventoryItem(avatar.ControllingClient, folderId, part, itemId);
 | 
			
		||||
                return MoveTaskInventoryItem(avatar.ControllingClient, folderId, part, itemId, out message);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                InventoryItemBase agentItem = CreateAgentInventoryItemFromTask(avatarId, part, itemId);
 | 
			
		||||
                InventoryItemBase agentItem = CreateAgentInventoryItemFromTask(avatarId, part, itemId, out message);
 | 
			
		||||
 | 
			
		||||
                if (agentItem == null)
 | 
			
		||||
                    return null;
 | 
			
		||||
| 
						 | 
				
			
			@ -1357,6 +1408,8 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
 | 
			
		||||
                AddInventoryItem(agentItem);
 | 
			
		||||
 | 
			
		||||
                RemoveNonCopyTaskItemFromPrim(part, itemId);
 | 
			
		||||
 | 
			
		||||
                return agentItem;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1462,6 +1515,11 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
 | 
			
		||||
        public UUID MoveTaskInventoryItems(UUID destID, string category, SceneObjectPart host, List<UUID> items)
 | 
			
		||||
        {
 | 
			
		||||
            ScenePresence avatar;
 | 
			
		||||
            IClientAPI remoteClient = null;
 | 
			
		||||
            if (TryGetScenePresence(destID, out avatar))
 | 
			
		||||
                remoteClient = avatar.ControllingClient;
 | 
			
		||||
 | 
			
		||||
            InventoryFolderBase rootFolder = InventoryService.GetRootFolder(destID);
 | 
			
		||||
 | 
			
		||||
            UUID newFolderID = UUID.Random();
 | 
			
		||||
| 
						 | 
				
			
			@ -1471,26 +1529,28 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
 | 
			
		||||
            foreach (UUID itemID in items)
 | 
			
		||||
            {
 | 
			
		||||
                InventoryItemBase agentItem = CreateAgentInventoryItemFromTask(destID, host, itemID);
 | 
			
		||||
                string message;
 | 
			
		||||
                InventoryItemBase agentItem = CreateAgentInventoryItemFromTask(destID, host, itemID, out message);
 | 
			
		||||
 | 
			
		||||
                if (agentItem != null)
 | 
			
		||||
                {
 | 
			
		||||
                    agentItem.Folder = newFolderID;
 | 
			
		||||
 | 
			
		||||
                    AddInventoryItem(agentItem);
 | 
			
		||||
 | 
			
		||||
                    RemoveNonCopyTaskItemFromPrim(host, itemID);
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    if (remoteClient != null)
 | 
			
		||||
                        remoteClient.SendAgentAlertMessage(message, false);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            ScenePresence avatar = null;
 | 
			
		||||
            if (TryGetScenePresence(destID, out avatar))
 | 
			
		||||
            if (remoteClient != null)
 | 
			
		||||
            {
 | 
			
		||||
                //profile.SendInventoryDecendents(avatar.ControllingClient,
 | 
			
		||||
                //        profile.RootFolder.ID, true, false);
 | 
			
		||||
                //profile.SendInventoryDecendents(avatar.ControllingClient,
 | 
			
		||||
                //        newFolderID, false, true);
 | 
			
		||||
 | 
			
		||||
                SendInventoryUpdate(avatar.ControllingClient, rootFolder, true, false);
 | 
			
		||||
                SendInventoryUpdate(avatar.ControllingClient, newFolder, false, true);
 | 
			
		||||
                SendInventoryUpdate(remoteClient, rootFolder, true, false);
 | 
			
		||||
                SendInventoryUpdate(remoteClient, newFolder, false, true);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return newFolderID;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1421,7 +1421,7 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
 | 
			
		||||
                Scene.ForEachScenePresence(sp =>
 | 
			
		||||
                {
 | 
			
		||||
                    if (!sp.IsChildAgent && sp.ParentID == LocalId)
 | 
			
		||||
                    if (!sp.IsChildAgent && sp.ParentID == part.LocalId)
 | 
			
		||||
                        sp.StandUp();
 | 
			
		||||
 | 
			
		||||
                    if (!silent)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -136,7 +136,8 @@ namespace OpenSim.Region.Framework.Tests
 | 
			
		|||
                = InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, user1.PrincipalID, "Objects")[0];
 | 
			
		||||
            
 | 
			
		||||
            // Perform test
 | 
			
		||||
            scene.MoveTaskInventoryItem(user1.PrincipalID, folder.ID, sop1, sopItem1.ItemID);
 | 
			
		||||
            string message;
 | 
			
		||||
            scene.MoveTaskInventoryItem(user1.PrincipalID, folder.ID, sop1, sopItem1.ItemID, out message);
 | 
			
		||||
                
 | 
			
		||||
            InventoryItemBase ncUserItem
 | 
			
		||||
                = InventoryArchiveUtils.FindItemByPath(scene.InventoryService, user1.PrincipalID, "Objects/ncItem");
 | 
			
		||||
| 
						 | 
				
			
			@ -165,7 +166,8 @@ namespace OpenSim.Region.Framework.Tests
 | 
			
		|||
                    scene, sop1, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900), "Hello World!");
 | 
			
		||||
            
 | 
			
		||||
            // Perform test
 | 
			
		||||
            scene.MoveTaskInventoryItem(user1.PrincipalID, UUID.Zero, sop1, sopItem1.ItemID);
 | 
			
		||||
            string message;
 | 
			
		||||
            scene.MoveTaskInventoryItem(user1.PrincipalID, UUID.Zero, sop1, sopItem1.ItemID, out message);
 | 
			
		||||
                
 | 
			
		||||
            InventoryItemBase ncUserItem
 | 
			
		||||
                = InventoryArchiveUtils.FindItemByPath(scene.InventoryService, user1.PrincipalID, "Notecards/ncItem");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -95,7 +95,9 @@ namespace OpenSim.Region.Framework.Tests
 | 
			
		|||
            UserAccount user2 = UserAccountHelpers.CreateUserWithInventory(scene, TestHelpers.ParseTail(1002));
 | 
			
		||||
            InventoryItemBase item1 = UserInventoryHelpers.CreateInventoryItem(scene, "item1", user1.PrincipalID);
 | 
			
		||||
 | 
			
		||||
            scene.GiveInventoryItem(user2.PrincipalID, user1.PrincipalID, item1.ID);
 | 
			
		||||
            string message;
 | 
			
		||||
 | 
			
		||||
            scene.GiveInventoryItem(user2.PrincipalID, user1.PrincipalID, item1.ID, out message);
 | 
			
		||||
 | 
			
		||||
            InventoryItemBase retrievedItem1
 | 
			
		||||
                = UserInventoryHelpers.GetInventoryItem(scene.InventoryService, user2.PrincipalID, "Notecards/item1");
 | 
			
		||||
| 
						 | 
				
			
			@ -103,7 +105,7 @@ namespace OpenSim.Region.Framework.Tests
 | 
			
		|||
            Assert.That(retrievedItem1, Is.Not.Null);
 | 
			
		||||
 | 
			
		||||
            // Try giving back the freshly received item
 | 
			
		||||
            scene.GiveInventoryItem(user1.PrincipalID, user2.PrincipalID, retrievedItem1.ID);
 | 
			
		||||
            scene.GiveInventoryItem(user1.PrincipalID, user2.PrincipalID, retrievedItem1.ID, out message);
 | 
			
		||||
 | 
			
		||||
            List<InventoryItemBase> reretrievedItems
 | 
			
		||||
                = UserInventoryHelpers.GetInventoryItems(scene.InventoryService, user1.PrincipalID, "Notecards/item1");
 | 
			
		||||
| 
						 | 
				
			
			@ -123,7 +125,7 @@ namespace OpenSim.Region.Framework.Tests
 | 
			
		|||
            InventoryFolderBase folder1
 | 
			
		||||
                = UserInventoryHelpers.CreateInventoryFolder(scene.InventoryService, user1.PrincipalID, "folder1", false);
 | 
			
		||||
 | 
			
		||||
            scene.GiveInventoryFolder(user2.PrincipalID, user1.PrincipalID, folder1.ID, UUID.Zero);
 | 
			
		||||
            scene.GiveInventoryFolder(null, user2.PrincipalID, user1.PrincipalID, folder1.ID, UUID.Zero);
 | 
			
		||||
 | 
			
		||||
            InventoryFolderBase retrievedFolder1
 | 
			
		||||
                = UserInventoryHelpers.GetInventoryFolder(scene.InventoryService, user2.PrincipalID, "folder1");
 | 
			
		||||
| 
						 | 
				
			
			@ -131,7 +133,7 @@ namespace OpenSim.Region.Framework.Tests
 | 
			
		|||
            Assert.That(retrievedFolder1, Is.Not.Null);
 | 
			
		||||
 | 
			
		||||
            // Try giving back the freshly received folder
 | 
			
		||||
            scene.GiveInventoryFolder(user1.PrincipalID, user2.PrincipalID, retrievedFolder1.ID, UUID.Zero);
 | 
			
		||||
            scene.GiveInventoryFolder(null, user1.PrincipalID, user2.PrincipalID, retrievedFolder1.ID, UUID.Zero);
 | 
			
		||||
 | 
			
		||||
            List<InventoryFolderBase> reretrievedFolders
 | 
			
		||||
                = UserInventoryHelpers.GetInventoryFolders(scene.InventoryService, user1.PrincipalID, "folder1");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -560,12 +560,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
 | 
			
		|||
                    if (m_debugEnabled)
 | 
			
		||||
                        m_log.DebugFormat("[Groups]: Giving inventory from {0} to {1}", giver, remoteClient.AgentId);
 | 
			
		||||
 | 
			
		||||
                    string message;
 | 
			
		||||
                    InventoryItemBase itemCopy = ((Scene)(remoteClient.Scene)).GiveInventoryItem(remoteClient.AgentId,
 | 
			
		||||
                        giver, attachmentUUID);
 | 
			
		||||
                        giver, attachmentUUID, out message);
 | 
			
		||||
 | 
			
		||||
                    if (itemCopy == null)
 | 
			
		||||
                    {
 | 
			
		||||
                        remoteClient.SendAgentAlertMessage("Can't find item to give. Nothing given.", false);
 | 
			
		||||
                        remoteClient.SendAgentAlertMessage(message, false);
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1884,9 +1884,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
                part.Shape.LightColorR = Util.Clip((float)color.x, 0.0f, 1.0f);
 | 
			
		||||
                part.Shape.LightColorG = Util.Clip((float)color.y, 0.0f, 1.0f);
 | 
			
		||||
                part.Shape.LightColorB = Util.Clip((float)color.z, 0.0f, 1.0f);
 | 
			
		||||
                part.Shape.LightIntensity = intensity;
 | 
			
		||||
                part.Shape.LightRadius = radius;
 | 
			
		||||
                part.Shape.LightFalloff = falloff;
 | 
			
		||||
                part.Shape.LightIntensity = Util.Clip((float)intensity, 0.0f, 1.0f);
 | 
			
		||||
                part.Shape.LightRadius = Util.Clip((float)radius, 0.1f, 20.0f);
 | 
			
		||||
                part.Shape.LightFalloff = Util.Clip((float)falloff, 0.01f, 2.0f);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -3162,6 +3162,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public LSL_Float llGetMassMKS()
 | 
			
		||||
        {
 | 
			
		||||
            // this is what the wiki says it does!
 | 
			
		||||
            // http://wiki.secondlife.com/wiki/LlGetMassMKS
 | 
			
		||||
            return llGetMass() * 100.0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void llCollisionFilter(string name, string id, int accept)
 | 
			
		||||
        {
 | 
			
		||||
            m_host.AddScriptLPS(1);
 | 
			
		||||
| 
						 | 
				
			
			@ -4127,10 +4134,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                // destination is an avatar
 | 
			
		||||
                InventoryItemBase agentItem = World.MoveTaskInventoryItem(destId, UUID.Zero, m_host, objId);
 | 
			
		||||
                string message;
 | 
			
		||||
                InventoryItemBase agentItem = World.MoveTaskInventoryItem(destId, UUID.Zero, m_host, objId, out message);
 | 
			
		||||
 | 
			
		||||
                if (agentItem == null)
 | 
			
		||||
                {
 | 
			
		||||
                    llSay(0, message); 
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (m_TransferModule != null)
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -6144,10 +6155,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
            if (UUID.TryParse(id, out key))
 | 
			
		||||
            {
 | 
			
		||||
                ScenePresence av = World.GetScenePresence(key);
 | 
			
		||||
                List<ScenePresence> sittingAvatars = m_host.ParentGroup.GetSittingAvatars();
 | 
			
		||||
 | 
			
		||||
                if (av != null)
 | 
			
		||||
                {
 | 
			
		||||
                    if (llAvatarOnSitTarget() == id)
 | 
			
		||||
                    if (sittingAvatars.Contains(av))
 | 
			
		||||
                    {
 | 
			
		||||
                        // if the avatar is sitting on this object, then
 | 
			
		||||
                        // we can unsit them.  We don't want random scripts unsitting random people
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3397,14 +3397,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
            if (sp == null)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            InventoryItemBase newItem = World.MoveTaskInventoryItem(sp.UUID, UUID.Zero, m_host, item.ItemID);
 | 
			
		||||
            string message;
 | 
			
		||||
            InventoryItemBase newItem = World.MoveTaskInventoryItem(sp.UUID, UUID.Zero, m_host, item.ItemID, out message);
 | 
			
		||||
 | 
			
		||||
            if (newItem == null)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat(
 | 
			
		||||
                    "[OSSL API]: Could not create user inventory item {0} for {1}, attach point {2} in {3}",
 | 
			
		||||
                    itemName, m_host.Name, attachmentPoint, World.Name);
 | 
			
		||||
 | 
			
		||||
                    "[OSSL API]: Could not create user inventory item {0} for {1}, attach point {2} in {3}: {4}",
 | 
			
		||||
                    itemName, m_host.Name, attachmentPoint, World.Name, message);
 | 
			
		||||
                ((LSL_Api)m_LSL_Api).llSay(0, message);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -149,6 +149,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
 | 
			
		|||
        LSL_Vector llGetLocalPos();
 | 
			
		||||
      LSL_Rotation llGetLocalRot();
 | 
			
		||||
         LSL_Float llGetMass();
 | 
			
		||||
         LSL_Float llGetMassMKS();
 | 
			
		||||
       LSL_Integer llGetMemoryLimit();
 | 
			
		||||
              void llGetNextEmail(string address, string subject);
 | 
			
		||||
        LSL_String llGetNotecardLine(string name, int line);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -584,6 +584,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
 | 
			
		|||
            return m_LSL_Functions.llGetMass();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public LSL_Float llGetMassMKS()
 | 
			
		||||
        {
 | 
			
		||||
            return m_LSL_Functions.llGetMassMKS();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public LSL_Integer llGetMemoryLimit()
 | 
			
		||||
        {
 | 
			
		||||
            return m_LSL_Functions.llGetMemoryLimit();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,7 +64,7 @@ namespace OpenSim.Server.Handlers.Asset
 | 
			
		|||
            {
 | 
			
		||||
                asset = (AssetBase)xs.Deserialize(request);
 | 
			
		||||
            }
 | 
			
		||||
            catch (XmlException)
 | 
			
		||||
            catch (Exception)
 | 
			
		||||
            {
 | 
			
		||||
                httpResponse.StatusCode = (int)HttpStatusCode.BadRequest;
 | 
			
		||||
                return null;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -156,9 +156,9 @@ namespace OpenSim.Services.HypergridService
 | 
			
		|||
            if (suitcase == null)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: User {0} does not have a Suitcase folder. Creating it...", principalID);
 | 
			
		||||
                // make one, and let's add it to the user's inventory as a direct child of the root folder
 | 
			
		||||
                // In the DB we tag it as type 100, but we use -1 (Unknown) outside
 | 
			
		||||
                suitcase = CreateFolder(principalID, root.folderID, 100, "My Suitcase");
 | 
			
		||||
                // Create the My Suitcase folder under the user's root folder.
 | 
			
		||||
                // In the DB we tag it as type 100, but we use type 8 (Folder) outside, as this affects the sort order.
 | 
			
		||||
                suitcase = CreateFolder(principalID, root.folderID, InventoryItemBase.SUITCASE_FOLDER_TYPE, InventoryItemBase.SUITCASE_FOLDER_NAME);
 | 
			
		||||
                if (suitcase == null)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.ErrorFormat("[HG SUITCASE INVENTORY SERVICE]: Unable to create suitcase folder");
 | 
			
		||||
| 
						 | 
				
			
			@ -248,7 +248,10 @@ namespace OpenSim.Services.HypergridService
 | 
			
		|||
            InventoryCollection coll = null;
 | 
			
		||||
 | 
			
		||||
            if (!IsWithinSuitcaseTree(principalID, folderID))
 | 
			
		||||
            {
 | 
			
		||||
                m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: GetFolderContent: folder {0} is not within Suitcase tree", folderID);
 | 
			
		||||
                return new InventoryCollection();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            coll = base.GetFolderContent(principalID, folderID);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -265,7 +268,10 @@ namespace OpenSim.Services.HypergridService
 | 
			
		|||
            // Let's do a bit of sanity checking, more than the base service does
 | 
			
		||||
            // make sure the given folder exists under the suitcase tree of this user
 | 
			
		||||
            if (!IsWithinSuitcaseTree(principalID, folderID))
 | 
			
		||||
            {
 | 
			
		||||
                m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: GetFolderItems: folder {0} is not within Suitcase tree", folderID);
 | 
			
		||||
                return new List<InventoryItemBase>();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return base.GetFolderItems(principalID, folderID);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -277,7 +283,10 @@ namespace OpenSim.Services.HypergridService
 | 
			
		|||
            // make sure the given folder's parent folder exists under the suitcase tree of this user
 | 
			
		||||
 | 
			
		||||
            if (!IsWithinSuitcaseTree(folder.Owner, folder.ParentID))
 | 
			
		||||
            {
 | 
			
		||||
                m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: AddFolder: folder {0} is not within Suitcase tree", folder.ParentID);
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // OK, it's legit
 | 
			
		||||
            if (base.AddFolder(folder))
 | 
			
		||||
| 
						 | 
				
			
			@ -297,7 +306,7 @@ namespace OpenSim.Services.HypergridService
 | 
			
		|||
            //m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: Update folder {0}, version {1}", folder.ID, folder.Version);
 | 
			
		||||
            if (!IsWithinSuitcaseTree(folder.Owner, folder.ID))
 | 
			
		||||
            {
 | 
			
		||||
                m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: folder {0} not within Suitcase tree", folder.Name);
 | 
			
		||||
                m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: UpdateFolder: folder {0}/{1} is not within Suitcase tree", folder.Name, folder.ID);
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -307,9 +316,17 @@ namespace OpenSim.Services.HypergridService
 | 
			
		|||
 | 
			
		||||
        public override bool MoveFolder(InventoryFolderBase folder)
 | 
			
		||||
        {
 | 
			
		||||
            if (!IsWithinSuitcaseTree(folder.Owner, folder.ID) || 
 | 
			
		||||
                !IsWithinSuitcaseTree(folder.Owner, folder.ParentID))
 | 
			
		||||
            if (!IsWithinSuitcaseTree(folder.Owner, folder.ID))
 | 
			
		||||
            {
 | 
			
		||||
                m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: MoveFolder: folder {0} is not within Suitcase tree", folder.ID);
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            if (!IsWithinSuitcaseTree(folder.Owner, folder.ParentID))
 | 
			
		||||
            {
 | 
			
		||||
                m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: MoveFolder: folder {0} is not within Suitcase tree", folder.ParentID);
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return base.MoveFolder(folder);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -331,7 +348,10 @@ namespace OpenSim.Services.HypergridService
 | 
			
		|||
            // Let's do a bit of sanity checking, more than the base service does
 | 
			
		||||
            // make sure the given folder's parent folder exists under the suitcase tree of this user
 | 
			
		||||
            if (!IsWithinSuitcaseTree(item.Owner, item.Folder))
 | 
			
		||||
            {
 | 
			
		||||
                m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: AddItem: folder {0} is not within Suitcase tree", item.Folder);
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // OK, it's legit
 | 
			
		||||
            return base.AddItem(item);
 | 
			
		||||
| 
						 | 
				
			
			@ -341,7 +361,10 @@ namespace OpenSim.Services.HypergridService
 | 
			
		|||
        public override bool UpdateItem(InventoryItemBase item)
 | 
			
		||||
        {
 | 
			
		||||
            if (!IsWithinSuitcaseTree(item.Owner, item.Folder))
 | 
			
		||||
            {
 | 
			
		||||
                m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: UpdateItem: folder {0} is not within Suitcase tree", item.Folder);
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return base.UpdateItem(item);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -350,11 +373,28 @@ namespace OpenSim.Services.HypergridService
 | 
			
		|||
        {
 | 
			
		||||
            // Principal is b0rked. *sigh*
 | 
			
		||||
 | 
			
		||||
            if (!IsWithinSuitcaseTree(items[0].Owner, items[0].Folder))
 | 
			
		||||
                return false;
 | 
			
		||||
            // Check the items' destination folders
 | 
			
		||||
            foreach (InventoryItemBase item in items)
 | 
			
		||||
            {
 | 
			
		||||
                if (!IsWithinSuitcaseTree(item.Owner, item.Folder))
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: MoveItems: folder {0} is not within Suitcase tree", item.Folder);
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Check the items' current folders
 | 
			
		||||
            foreach (InventoryItemBase item in items)
 | 
			
		||||
            {
 | 
			
		||||
                InventoryItemBase originalItem = base.GetItem(item);
 | 
			
		||||
                if (!IsWithinSuitcaseTree(originalItem.Owner, originalItem.Folder))
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: MoveItems: folder {0} is not within Suitcase tree", originalItem.Folder);
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return base.MoveItems(principalID, items);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override bool DeleteItems(UUID principalID, List<UUID> itemIDs)
 | 
			
		||||
| 
						 | 
				
			
			@ -374,8 +414,8 @@ namespace OpenSim.Services.HypergridService
 | 
			
		|||
 | 
			
		||||
            if (!IsWithinSuitcaseTree(it.Owner, it.Folder) && !IsPartOfAppearance(it.Owner, it.ID))
 | 
			
		||||
            {
 | 
			
		||||
                m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: Item {0} (folder {1}) is not within Suitcase",
 | 
			
		||||
                    it.Name, it.Folder);
 | 
			
		||||
                m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: Item {0}/{1} (folder {2}) is not within Suitcase tree or Appearance",
 | 
			
		||||
                    it.Name, it.ID, it.Folder);
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -396,7 +436,11 @@ namespace OpenSim.Services.HypergridService
 | 
			
		|||
            if (f != null)
 | 
			
		||||
            {
 | 
			
		||||
                if (!IsWithinSuitcaseTree(f.Owner, f.ID))
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.DebugFormat("[HG SUITCASE INVENTORY SERVICE]: Folder {0}/{1} is not within Suitcase tree",
 | 
			
		||||
                        f.Name, f.ID);
 | 
			
		||||
                    return null;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return f;
 | 
			
		||||
| 
						 | 
				
			
			@ -464,7 +508,7 @@ namespace OpenSim.Services.HypergridService
 | 
			
		|||
            // Warp! Root folder for travelers
 | 
			
		||||
            XInventoryFolder[] folders = m_Database.GetFolders(
 | 
			
		||||
                    new string[] { "agentID", "type" },
 | 
			
		||||
                    new string[] { principalID.ToString(), "100" }); // This is a special folder type...
 | 
			
		||||
                    new string[] { principalID.ToString(), InventoryItemBase.SUITCASE_FOLDER_TYPE.ToString() }); // This is a special folder type...
 | 
			
		||||
 | 
			
		||||
            if (folders != null && folders.Length > 0)
 | 
			
		||||
                return folders[0];
 | 
			
		||||
| 
						 | 
				
			
			@ -472,13 +516,13 @@ namespace OpenSim.Services.HypergridService
 | 
			
		|||
            // check to see if we have the old Suitcase folder
 | 
			
		||||
            folders = m_Database.GetFolders(
 | 
			
		||||
                    new string[] { "agentID", "folderName", "parentFolderID" },
 | 
			
		||||
                    new string[] { principalID.ToString(), "My Suitcase", UUID.Zero.ToString() });
 | 
			
		||||
                    new string[] { principalID.ToString(), InventoryItemBase.SUITCASE_FOLDER_NAME, UUID.Zero.ToString() });
 | 
			
		||||
            if (folders != null && folders.Length > 0)
 | 
			
		||||
            {
 | 
			
		||||
                // Move it to under the root folder
 | 
			
		||||
                XInventoryFolder root = GetRootXFolder(principalID);
 | 
			
		||||
                folders[0].parentFolderID = root.folderID;
 | 
			
		||||
                folders[0].type = 100;
 | 
			
		||||
                folders[0].type = InventoryItemBase.SUITCASE_FOLDER_TYPE;
 | 
			
		||||
                m_Database.StoreFolder(folders[0]);
 | 
			
		||||
                return folders[0];
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -488,7 +532,7 @@ namespace OpenSim.Services.HypergridService
 | 
			
		|||
 | 
			
		||||
        private void SetAsNormalFolder(XInventoryFolder suitcase)
 | 
			
		||||
        {
 | 
			
		||||
            suitcase.type = (short)AssetType.Folder;
 | 
			
		||||
            suitcase.type = InventoryItemBase.SUITCASE_FOLDER_FAKE_TYPE;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private List<XInventoryFolder> GetFolderTree(UUID principalID, UUID folder)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -631,8 +631,8 @@ namespace OpenSim.Services.InventoryService
 | 
			
		|||
            newFolder.ParentID = folder.parentFolderID;
 | 
			
		||||
            newFolder.Type = (short)folder.type;
 | 
			
		||||
            // Viewer can't understand anything that's not in it's LLFolderType enum
 | 
			
		||||
            if (newFolder.Type == 100)
 | 
			
		||||
                newFolder.Type = -1;
 | 
			
		||||
            if (newFolder.Type == InventoryItemBase.SUITCASE_FOLDER_TYPE)
 | 
			
		||||
                newFolder.Type = InventoryItemBase.SUITCASE_FOLDER_FAKE_TYPE;
 | 
			
		||||
            newFolder.Version = (ushort)folder.version;
 | 
			
		||||
            newFolder.Name = folder.folderName;
 | 
			
		||||
            newFolder.Owner = folder.agentID;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -204,11 +204,12 @@
 | 
			
		|||
    ; meshing = ZeroMesher
 | 
			
		||||
 | 
			
		||||
    ;; Choose one of the physics engines below
 | 
			
		||||
    ;# {physics} {} {Select physics engine} {OpenDynamicsEngine BulletSim basicphysics POS} OpenDynamicsEngine
 | 
			
		||||
    ;; OpenDynamicsEngine is by some distance the most developed physics engine
 | 
			
		||||
    ;; BulletSim is experimental and in active development.
 | 
			
		||||
    ;; basicphysics effectively does not model physics at all, making all
 | 
			
		||||
    ;; objects phantom.   
 | 
			
		||||
    ;# {physics} {} {Select physics engine} {OpenDynamicsEngine BulletSim basicphysics POS} BulletSim
 | 
			
		||||
    ;; BulletSim is the default physics engine.  It provides the best performance and most functionality.
 | 
			
		||||
    ;; BulletSim supports varregions.
 | 
			
		||||
    ;; OpenDynamicsEngine was the previous default physics engine in OpenSimulator 0.7.6.1 and before.  
 | 
			
		||||
    ;; It continues to provide a workable physics implementation.  It does not currently support varregions.
 | 
			
		||||
    ;; basicphysics effectively does not model physics at all, making all objects phantom.   
 | 
			
		||||
    ;; Default is OpenDynamicsEngine
 | 
			
		||||
    ; physics = OpenDynamicsEngine
 | 
			
		||||
    ; physics = BulletSim
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -234,9 +234,12 @@
 | 
			
		|||
    ; to false if you have compatibility problems.
 | 
			
		||||
    ;CacheSculptMaps = true
 | 
			
		||||
    
 | 
			
		||||
    ; Choose one of the physics engines below.
 | 
			
		||||
    ; BulletSim is a high performance physics engine.  It is the default OpenSimulator physics engine
 | 
			
		||||
    ; OpenDynamicsEngine is another developed physics engine that was the previous default in OpenSimulator 0.7.6 and before
 | 
			
		||||
    ;; BulletSim is the default physics engine.  It provides the best performance and most functionality.
 | 
			
		||||
    ;; BulletSim supports varregions.
 | 
			
		||||
    ;; OpenDynamicsEngine was the previous default physics engine in OpenSimulator 0.7.6.1 and before.  
 | 
			
		||||
    ;; It continues to provide a workable physics implementation.  It does not currently support varregions.
 | 
			
		||||
    ;; basicphysics effectively does not model physics at all, making all objects phantom.   
 | 
			
		||||
    ;; Default is OpenDynamicsEngine
 | 
			
		||||
    physics = BulletSim
 | 
			
		||||
    ;physics = modified_BulletX
 | 
			
		||||
    ;physics = OpenDynamicsEngine
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -163,8 +163,6 @@ HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:Asset
 | 
			
		|||
[GridService]
 | 
			
		||||
    LocalServiceModule = "OpenSim.Services.GridService.dll:GridService"
 | 
			
		||||
 | 
			
		||||
    HypergridLinker = true
 | 
			
		||||
 | 
			
		||||
    ; Realm = "regions"
 | 
			
		||||
    ; AllowDuplicateNames = "True"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -284,6 +282,7 @@ HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:Asset
 | 
			
		|||
    GridService = "OpenSim.Services.GridService.dll:GridService"
 | 
			
		||||
    InventoryService = "OpenSim.Services.InventoryService.dll:XInventoryService"
 | 
			
		||||
    AvatarService = "OpenSim.Services.AvatarService.dll:AvatarService"
 | 
			
		||||
    GridUserService = "OpenSim.Services.UserAccountService.dll:GridUserService"
 | 
			
		||||
 | 
			
		||||
    ;; This switch creates the minimum set of body parts and avatar entries for a viewer 2 
 | 
			
		||||
    ;; to show a default "Ruth" avatar rather than a cloud for a newly created user.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -240,6 +240,7 @@ MapGetServiceConnector = "8002/OpenSim.Server.Handlers.dll:MapGetServiceConnecto
 | 
			
		|||
    GridService = "OpenSim.Services.GridService.dll:GridService"
 | 
			
		||||
    InventoryService = "OpenSim.Services.InventoryService.dll:XInventoryService"
 | 
			
		||||
    AvatarService = "OpenSim.Services.AvatarService.dll:AvatarService"
 | 
			
		||||
    GridUserService = "OpenSim.Services.UserAccountService.dll:GridUserService"
 | 
			
		||||
 | 
			
		||||
    ;; This switch creates the minimum set of body parts and avatar entries for a viewer 2 
 | 
			
		||||
    ;; to show a default "Ruth" avatar rather than a cloud for a newly created user.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue