Can now turn on/off server side permission checking (on prim editing etc) from the opensim.ini file. Just add a line to the Startup section like : serverside_object_permissions = true
Changes /editing that are made to clothing/ body parts in your inventory should now be saved between logins/ restarts.afrisby
							parent
							
								
									18d1031a88
								
							
						
					
					
						commit
						252b48fb3e
					
				|  | @ -103,6 +103,15 @@ namespace OpenSim.Framework.Communications.Caches | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public AssetBase GetTransactionAsset(LLUUID transactionID) | ||||
|         { | ||||
|             if (this.XferUploaders.ContainsKey(transactionID)) | ||||
|             { | ||||
|                 return XferUploaders[transactionID].GetAssetData(); | ||||
|             } | ||||
|             return null; | ||||
|         } | ||||
| 
 | ||||
|         // Nested Types | ||||
|         public class AssetCapsUploader | ||||
|         { | ||||
|  | @ -298,6 +307,7 @@ namespace OpenSim.Framework.Communications.Caches | |||
| 
 | ||||
|             private void DoCreateItem() | ||||
|             { | ||||
|                 //really need to fix this call, if lbsa71 saw this he would die.  | ||||
|                 this.m_userTransactions.Manager.CommsManager.AssetCache.AddAsset(this.Asset); | ||||
|                 CachedUserInfo userInfo = m_userTransactions.Manager.CommsManager.UserProfiles.GetUserDetails(ourClient.AgentId); | ||||
|                 if (userInfo != null) | ||||
|  | @ -324,6 +334,15 @@ namespace OpenSim.Framework.Communications.Caches | |||
|             { | ||||
| 
 | ||||
|             } | ||||
| 
 | ||||
|             public AssetBase GetAssetData() | ||||
|             { | ||||
|                 if (m_finished) | ||||
|                 { | ||||
|                     return this.Asset; | ||||
|                 } | ||||
|                 return null; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public class NoteCardCapsUpdate | ||||
|  |  | |||
|  | @ -9,6 +9,10 @@ using Nini.Config; | |||
| 
 | ||||
| namespace OpenSim.Framework.Communications.Caches | ||||
| { | ||||
|     /// <summary> | ||||
|     /// Basically a hack to give us a Inventory library while we don't have a inventory server | ||||
|     /// once the server is fully implemented then should read the data from that | ||||
|     /// </summary> | ||||
|     public class LibraryRootFolder : InventoryFolder | ||||
|     { | ||||
|         private LLUUID libOwner = new LLUUID("11111111-1111-0000-0000-000100bba000"); | ||||
|  |  | |||
|  | @ -182,17 +182,6 @@ namespace OpenSim.Framework.Communications.Caches | |||
|         private void RequestInventoryForUser(LLUUID userID, CachedUserInfo userInfo) | ||||
|         { | ||||
|              this.m_parent.InventoryServer.RequestInventoryForUser(userID, userInfo.FolderReceive, userInfo.ItemReceive); | ||||
| 
 | ||||
|             //for now we manually create the root folder, | ||||
|             // but should be requesting all inventory from inventory server. | ||||
|            /* InventoryFolder folderInfo = new InventoryFolder(); | ||||
|             folderInfo.agentID = userID; | ||||
|             folderInfo.folderID = userInfo.UserProfile.rootInventoryFolderID; | ||||
|             folderInfo.name = "My Inventory"; | ||||
|             folderInfo.parentID = LLUUID.Zero; | ||||
|             folderInfo.type = 8; | ||||
|             folderInfo.version = 1; | ||||
|             userInfo.FolderReceive(userID, folderInfo);*/ | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|  |  | |||
|  | @ -87,6 +87,7 @@ namespace OpenSim.Framework.Interfaces | |||
|     public delegate void FetchInventoryDescendents(IClientAPI remoteClient, LLUUID folderID, LLUUID ownerID, bool fetchFolders, bool fetchItems, int sortOrder); | ||||
|     public delegate void FetchInventory(IClientAPI remoteClient, LLUUID itemID, LLUUID ownerID); | ||||
|     public delegate void RequestTaskInventory(IClientAPI remoteClient, uint localID); | ||||
|     public delegate void UpdateInventoryItemTransaction(IClientAPI remoteClient, LLUUID transactionID, LLUUID assetID, LLUUID itemID); | ||||
| 
 | ||||
|     public delegate void UDPAssetUploadRequest(IClientAPI remoteClient, LLUUID assetID, LLUUID transaction, sbyte type, byte[] data); | ||||
|     public delegate void XferReceive(IClientAPI remoteClient, ulong xferID, uint packetID, byte[] data); | ||||
|  | @ -141,6 +142,7 @@ namespace OpenSim.Framework.Interfaces | |||
|         event FetchInventoryDescendents OnFetchInventoryDescendents; | ||||
|         event FetchInventory OnFetchInventory; | ||||
|         event RequestTaskInventory OnRequestTaskInventory; | ||||
|         event UpdateInventoryItemTransaction OnUpdateInventoryItem; | ||||
|         event UDPAssetUploadRequest OnAssetUploadRequest; | ||||
|         event XferReceive OnXferReceive; | ||||
|         event RequestXfer OnRequestXfer; | ||||
|  |  | |||
|  | @ -58,6 +58,7 @@ namespace OpenSim.Framework | |||
|        public event FetchInventoryDescendents OnFetchInventoryDescendents; | ||||
|        public event FetchInventory OnFetchInventory; | ||||
|        public event RequestTaskInventory OnRequestTaskInventory; | ||||
|        public event UpdateInventoryItemTransaction OnUpdateInventoryItem; | ||||
|        public event UDPAssetUploadRequest OnAssetUploadRequest; | ||||
|        public event XferReceive OnXferReceive; | ||||
|        public event RequestXfer OnRequestXfer; | ||||
|  |  | |||
|  | @ -71,11 +71,13 @@ namespace OpenSim | |||
| 
 | ||||
|         private bool m_silent; | ||||
|         private string m_logFilename = ("region-console.log"); | ||||
|         private bool m_permissions = false; | ||||
| 
 | ||||
|         private bool standaloneAuthenticate = false; | ||||
|         private string standaloneWelcomeMessage = null; | ||||
|         private string standaloneInventoryPlugin = ""; | ||||
|         private string standaloneUserPlugin = ""; | ||||
|          | ||||
| 
 | ||||
|         public ConsoleCommand CreateAccount = null; | ||||
| 
 | ||||
|  | @ -106,6 +108,7 @@ namespace OpenSim | |||
|             m_sandbox = !configSource.Configs["Startup"].GetBoolean("gridmode", false); | ||||
|             m_physicsEngine = configSource.Configs["Startup"].GetString("physics", "basicphysics"); | ||||
|             m_silent = configSource.Configs["Startup"].GetBoolean("noverbose", false); | ||||
|             m_permissions = configSource.Configs["Startup"].GetBoolean("serverside_object_permissions", false); | ||||
| 
 | ||||
|             m_storageDLL = configSource.Configs["Startup"].GetString("storage_plugin", "OpenSim.DataStore.NullStorage.dll"); | ||||
| 
 | ||||
|  | @ -182,7 +185,12 @@ namespace OpenSim | |||
|                 scene.AddScriptEngine(ScriptEngine, m_log); | ||||
|                 // TODO: TEMP load default script | ||||
|                 ScriptEngine.StartScript(Path.Combine("ScriptEngines", "Default.lsl"), new OpenSim.Region.Environment.Scenes.Scripting.NullScriptHost()); | ||||
| 
 | ||||
|                  | ||||
|                 //Server side object editing permissions checking | ||||
|                 if (m_permissions) | ||||
|                     scene.PermissionsMngr.EnablePermissions(); | ||||
|                 else | ||||
|                     scene.PermissionsMngr.DisablePermissions(); | ||||
| 
 | ||||
|                 m_localScenes.Add(scene); | ||||
| 
 | ||||
|  |  | |||
|  | @ -87,6 +87,7 @@ namespace OpenSim.Region.ClientStack | |||
|         public event FetchInventoryDescendents OnFetchInventoryDescendents; | ||||
|         public event FetchInventory OnFetchInventory; | ||||
|         public event RequestTaskInventory OnRequestTaskInventory; | ||||
|         public event UpdateInventoryItemTransaction OnUpdateInventoryItem; | ||||
|         public event UDPAssetUploadRequest OnAssetUploadRequest; | ||||
|         public event XferReceive OnXferReceive; | ||||
|         public event RequestXfer OnRequestXfer; | ||||
|  |  | |||
|  | @ -418,6 +418,16 @@ namespace OpenSim.Region.ClientStack | |||
|                         break; | ||||
|                     case PacketType.UpdateInventoryItem: | ||||
|                         UpdateInventoryItemPacket update = (UpdateInventoryItemPacket)Pack; | ||||
|                         if (OnUpdateInventoryItem != null) | ||||
|                         { | ||||
|                             for (int i = 0; i < update.InventoryData.Length; i++) | ||||
|                             { | ||||
|                                 if (update.InventoryData[i].TransactionID != LLUUID.Zero) | ||||
|                                 { | ||||
|                                     OnUpdateInventoryItem(this, update.InventoryData[i].TransactionID, update.InventoryData[i].TransactionID.Combine(this.SecureSessionID), update.InventoryData[i].ItemID); | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                         //Console.WriteLine(Pack.ToString()); | ||||
|                         /*for (int i = 0; i < update.InventoryData.Length; i++) | ||||
|                         { | ||||
|  | @ -457,7 +467,7 @@ namespace OpenSim.Region.ClientStack | |||
|                         } | ||||
|                         break; | ||||
|                     case PacketType.UpdateTaskInventory: | ||||
|                          //Console.WriteLine(Pack.ToString()); | ||||
|                         //Console.WriteLine(Pack.ToString()); | ||||
|                         UpdateTaskInventoryPacket updatetask = (UpdateTaskInventoryPacket)Pack; | ||||
|                         break; | ||||
|                     case PacketType.RezScript: | ||||
|  |  | |||
|  | @ -0,0 +1,325 @@ | |||
| using System; | ||||
| using System.IO; | ||||
| using System.Collections.Generic; | ||||
| using libsecondlife; | ||||
| using libsecondlife.Packets; | ||||
| using OpenSim.Framework.Interfaces; | ||||
| using OpenSim.Framework.Types; | ||||
| using OpenSim.Framework.Communications.Caches; | ||||
| using OpenSim.Framework.Data; | ||||
| using OpenSim.Framework.Utilities; | ||||
| 
 | ||||
| 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 userID, InventoryItemBase item) | ||||
|         { | ||||
|             if (this.Avatars.ContainsKey(userID)) | ||||
|             { | ||||
|                 this.AddInventoryItem(this.Avatars[userID].ControllingClient, item); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public void AddInventoryItem(IClientAPI remoteClient, InventoryItemBase item) | ||||
|         { | ||||
|             CachedUserInfo userInfo = commsManager.UserProfiles.GetUserDetails(remoteClient.AgentId); | ||||
|             if (userInfo != null) | ||||
|             { | ||||
|                 userInfo.AddItem(remoteClient.AgentId, item); | ||||
|                 remoteClient.SendInventoryItemUpdate(item); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public LLUUID CapsUpdateInventoryItemAsset(LLUUID userID, LLUUID itemID, byte[] data) | ||||
|         { | ||||
|             if (this.Avatars.ContainsKey(userID)) | ||||
|             { | ||||
|                 return this.CapsUpdateInventoryItemAsset(this.Avatars[userID].ControllingClient, itemID, data); | ||||
|             } | ||||
|             return LLUUID.Zero; | ||||
|         } | ||||
| 
 | ||||
|         public LLUUID CapsUpdateInventoryItemAsset(IClientAPI remoteClient, LLUUID itemID, byte[] data) | ||||
|         { | ||||
|             CachedUserInfo userInfo = commsManager.UserProfiles.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.UserProfiles.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); | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// temporary method to test out creating new inventory items | ||||
|         /// </summary> | ||||
|         /// <param name="remoteClient"></param> | ||||
|         /// <param name="transActionID"></param> | ||||
|         /// <param name="folderID"></param> | ||||
|         /// <param name="callbackID"></param> | ||||
|         /// <param name="description"></param> | ||||
|         /// <param name="name"></param> | ||||
|         /// <param name="invType"></param> | ||||
|         /// <param name="type"></param> | ||||
|         /// <param name="wearableType"></param> | ||||
|         /// <param name="nextOwnerMask"></param> | ||||
|         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.UserProfiles.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]; | ||||
|                     this.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); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         ///  | ||||
|         /// </summary> | ||||
|         /// <param name="remoteClient"></param> | ||||
|         /// <param name="primLocalID"></param> | ||||
|         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) | ||||
|                     { | ||||
|                         ((SceneObjectGroup)ent).GetPartInventoryFileName(remoteClient, primLocalID); | ||||
|                         break; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         ///  | ||||
|         /// </summary> | ||||
|         /// <param name="packet"></param> | ||||
|         /// <param name="simClient"></param> | ||||
|         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 this.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.UserProfiles.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); | ||||
|                             } | ||||
| 
 | ||||
|                             storageManager.DataStore.RemoveObject(((SceneObjectGroup)selectedEnt).UUID, m_regInfo.SimUUID); | ||||
|                             ((SceneObjectGroup)selectedEnt).DeleteGroup(); | ||||
| 
 | ||||
|                             lock (Entities) | ||||
|                             { | ||||
|                                 Entities.Remove(((SceneObjectGroup)selectedEnt).UUID); | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public void RezObject(IClientAPI remoteClient, LLUUID itemID, LLVector3 pos) | ||||
|         { | ||||
|             CachedUserInfo userInfo = commsManager.UserProfiles.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) | ||||
|                         { | ||||
|                             this.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) | ||||
|                             { | ||||
|                                 this.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, this.m_regionHandle, xmlData); | ||||
|             this.AddEntity(group); | ||||
|             group.AbsolutePosition = pos; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -207,120 +207,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
|                                               }); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         ///  | ||||
|         /// </summary> | ||||
|         /// <param name="packet"></param> | ||||
|         /// <param name="simClient"></param> | ||||
|         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 this.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.UserProfiles.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); | ||||
|                                 this.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); | ||||
|                             } | ||||
| 
 | ||||
|                             storageManager.DataStore.RemoveObject(((SceneObjectGroup)selectedEnt).UUID, m_regInfo.SimUUID); | ||||
|                             ((SceneObjectGroup)selectedEnt).DeleteGroup(); | ||||
| 
 | ||||
|                             lock (Entities) | ||||
|                             { | ||||
|                                 Entities.Remove(((SceneObjectGroup) selectedEnt).UUID); | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public void RezObject(IClientAPI remoteClient, LLUUID itemID, LLVector3 pos) | ||||
|         { | ||||
|             CachedUserInfo userInfo = commsManager.UserProfiles.GetUserDetails(remoteClient.AgentId); | ||||
|             if (userInfo != null) | ||||
|             { | ||||
|                 if(userInfo.RootFolder != null) | ||||
|                 { | ||||
|                     InventoryItemBase item = userInfo.RootFolder.HasItem(itemID); | ||||
|                     if (item != null) | ||||
|                     { | ||||
|                         AssetBase rezAsset = this.assetCache.GetAsset(item.assetID, false); | ||||
|                         if (rezAsset != null) | ||||
|                         { | ||||
|                             this.AddRezObject(Util.FieldToString(rezAsset.Data), pos); | ||||
|                             userInfo.DeleteItem(remoteClient.AgentId, item); | ||||
|                             remoteClient.SendRemoveInventoryItem(itemID); | ||||
|                         } | ||||
|                         else | ||||
|                         {                | ||||
|                             rezAsset = this.assetCache.GetAsset(item.assetID, false); | ||||
|                             if (rezAsset != null) | ||||
|                             { | ||||
|                                 this.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, this.m_regionHandle, xmlData); | ||||
|             this.AddEntity(group); | ||||
|             group.AbsolutePosition = pos; | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         ///  | ||||
|  | @ -456,29 +342,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         ///  | ||||
|         /// </summary> | ||||
|         /// <param name="remoteClient"></param> | ||||
|         /// <param name="primLocalID"></param> | ||||
|         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) | ||||
|                     { | ||||
|                         ((SceneObjectGroup)ent).GetPartInventoryFileName(remoteClient, primLocalID); | ||||
|                         break; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         ///  | ||||
|         /// </summary> | ||||
|  | @ -790,59 +653,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
|             }*/ | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// temporary method to test out creating new inventory items | ||||
|         /// </summary> | ||||
|         /// <param name="remoteClient"></param> | ||||
|         /// <param name="transActionID"></param> | ||||
|         /// <param name="folderID"></param> | ||||
|         /// <param name="callbackID"></param> | ||||
|         /// <param name="description"></param> | ||||
|         /// <param name="name"></param> | ||||
|         /// <param name="invType"></param> | ||||
|         /// <param name="type"></param> | ||||
|         /// <param name="wearableType"></param> | ||||
|         /// <param name="nextOwnerMask"></param> | ||||
|         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.UserProfiles.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]; | ||||
|                     this.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 virtual void ProcessObjectGrab(uint localID, LLVector3 offsetPos, IClientAPI remoteClient) | ||||
|         { | ||||
|             this.EventManager.TriggerObjectGrab(localID, offsetPos, remoteClient); | ||||
|  |  | |||
|  | @ -180,8 +180,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
|             ScenePresence.LoadAnims(); | ||||
| 
 | ||||
|             httpListener = httpServer; | ||||
| 
 | ||||
|              | ||||
|         } | ||||
| 
 | ||||
|         #endregion | ||||
|  | @ -486,7 +484,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
|             asset.Data = data; | ||||
|             asset.Name = "terrainImage"; | ||||
|             asset.Type = 0; | ||||
|             assetCache.AddAsset(asset); | ||||
|             commsManager.AssetCache.AddAsset(asset); | ||||
|         } | ||||
| 
 | ||||
|         #endregion | ||||
|  | @ -707,6 +705,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
|             client.OnFetchInventoryDescendents += commsManager.UserProfiles.HandleFecthInventoryDescendents; | ||||
|             client.OnRequestTaskInventory += RequestTaskInventory; | ||||
|             client.OnFetchInventory += commsManager.UserProfiles.HandleFetchInventory; | ||||
|             client.OnUpdateInventoryItem += UDPUpdateInventoryItemAsset; | ||||
|             client.OnAssetUploadRequest += commsManager.TransactionsManager.HandleUDPUploadRequest; | ||||
|             client.OnXferReceive += commsManager.TransactionsManager.HandleXfer; | ||||
|             // client.OnRequestXfer += RequestXfer; | ||||
|  | @ -921,11 +920,11 @@ namespace OpenSim.Region.Environment.Scenes | |||
|                 if (agent.CapsPath != "") | ||||
|                 { | ||||
|                     //Console.WriteLine("new user, so creating caps handler for it"); | ||||
|                     Caps cap = new Caps(assetCache, httpListener, m_regInfo.ExternalHostName, m_regInfo.ExternalEndPoint.Port, agent.CapsPath, agent.AgentID); | ||||
|                     Caps cap = new Caps(commsManager.AssetCache, httpListener, m_regInfo.ExternalHostName, m_regInfo.ExternalEndPoint.Port, agent.CapsPath, agent.AgentID); | ||||
|                     Util.SetCapsURL(agent.AgentID, "http://" + m_regInfo.ExternalHostName + ":" + httpListener.Port.ToString() + "/CAPS/" + agent.CapsPath + "0000/"); | ||||
|                     cap.RegisterHandlers(); | ||||
|                     cap.AddNewInventoryItem = this.AddInventoryItem; | ||||
|                     cap.ItemUpdatedCall = this.UpdateInventoryItemAsset; | ||||
|                     cap.ItemUpdatedCall = this.CapsUpdateInventoryItemAsset; | ||||
|                     if (capsHandlers.ContainsKey(agent.AgentID)) | ||||
|                     { | ||||
|                         MainLog.Instance.Warn("client", "Adding duplicate CAPS entry for user " + | ||||
|  | @ -1149,72 +1148,5 @@ namespace OpenSim.Region.Environment.Scenes | |||
|             } | ||||
|             return LLUUID.Zero; | ||||
|         } | ||||
| 
 | ||||
|         public void AddInventoryItem(LLUUID userID, InventoryItemBase item) | ||||
|         { | ||||
|             if (this.Avatars.ContainsKey(userID)) | ||||
|             { | ||||
|                 this.AddInventoryItem(this.Avatars[userID].ControllingClient, item); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public void AddInventoryItem(IClientAPI remoteClient, InventoryItemBase item) | ||||
|         { | ||||
|             CachedUserInfo userInfo = commsManager.UserProfiles.GetUserDetails(remoteClient.AgentId); | ||||
|             if (userInfo != null) | ||||
|             { | ||||
|                 userInfo.AddItem(remoteClient.AgentId, item); | ||||
|                 remoteClient.SendInventoryItemUpdate(item); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public LLUUID UpdateInventoryItemAsset(LLUUID userID, LLUUID itemID, byte[] data) | ||||
|         { | ||||
|             if (this.Avatars.ContainsKey(userID)) | ||||
|             { | ||||
|                 return this.UpdateInventoryItemAsset(this.Avatars[userID].ControllingClient, itemID, data); | ||||
|             } | ||||
|             return LLUUID.Zero; | ||||
|         } | ||||
| 
 | ||||
|         public LLUUID UpdateInventoryItemAsset(IClientAPI remoteClient, LLUUID itemID, byte[] data) | ||||
|         { | ||||
|             CachedUserInfo userInfo = commsManager.UserProfiles.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; | ||||
|                         this.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; | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -72,6 +72,7 @@ namespace SimpleApp | |||
|         public event FetchInventoryDescendents OnFetchInventoryDescendents; | ||||
|         public event FetchInventory OnFetchInventory; | ||||
|         public event RequestTaskInventory OnRequestTaskInventory; | ||||
|         public event UpdateInventoryItemTransaction OnUpdateInventoryItem; | ||||
|         public event UDPAssetUploadRequest OnAssetUploadRequest; | ||||
|         public event XferReceive OnXferReceive; | ||||
|         public event RequestXfer OnRequestXfer; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 MW
						MW