Don't serve texture preview from other people's objects if you
havenever seen that texture before.0.6.1-post-fixes
							parent
							
								
									bb982ab57f
								
							
						
					
					
						commit
						fba9e3f513
					
				|  | @ -141,6 +141,14 @@ namespace OpenSim.Data.MySQL | |||
|             Migration m = new Migration(m_connection, assem, "RegionStore"); | ||||
|             m.Update(); | ||||
| 
 | ||||
|             PrepareConnection(); | ||||
|         } | ||||
| 
 | ||||
|         public void Dispose() {} | ||||
| 
 | ||||
|         private void PrepareConnection() | ||||
|         { | ||||
|             GetWaitTimeout(); | ||||
| 
 | ||||
|             MySqlCommand primSelectCmd = new MySqlCommand(m_primSelect, m_connection); | ||||
|             m_primDataAdapter = new MySqlDataAdapter(primSelectCmd); | ||||
|  | @ -203,8 +211,6 @@ namespace OpenSim.Data.MySQL | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public void Dispose() {} | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Get the wait_timeout value for our connection | ||||
|         /// </summary> | ||||
|  | @ -254,6 +260,8 @@ namespace OpenSim.Data.MySQL | |||
|                     m_connection.Close(); | ||||
|                     m_connection = new MySqlConnection(m_connectionString); | ||||
|                     m_connection.Open(); | ||||
| 
 | ||||
|                     PrepareConnection(); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|  | @ -308,22 +316,40 @@ namespace OpenSim.Data.MySQL | |||
|         /// <param name="regionUUID">The region UUID</param> | ||||
|         public void StoreObject(SceneObjectGroup obj, UUID regionUUID) | ||||
|         { | ||||
|             lock (m_dataSet) | ||||
|             int tries = 3; | ||||
|             while (tries > 0) | ||||
|             { | ||||
|                 foreach (SceneObjectPart prim in obj.Children.Values) | ||||
|                 tries--; | ||||
| 
 | ||||
|                 try | ||||
|                 { | ||||
|                     if ((prim.GetEffectiveObjectFlags() & (uint)PrimFlags.Temporary) == 0 | ||||
|                         && (prim.GetEffectiveObjectFlags() & (uint)PrimFlags.TemporaryOnRez) == 0) | ||||
|                     lock (m_dataSet) | ||||
|                     { | ||||
|                         //m_log.Info("[REGION DB]: Adding obj: " + obj.UUID + " to region: " + regionUUID); | ||||
|                         addPrim(prim, obj.UUID, regionUUID); | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         // m_log.Info("[DATASTORE]: Ignoring Physical obj: " + obj.UUID + " in region: " + regionUUID); | ||||
|                         foreach (SceneObjectPart prim in obj.Children.Values) | ||||
|                         { | ||||
|                             if ((prim.GetEffectiveObjectFlags() & (uint)PrimFlags.Temporary) == 0 | ||||
|                                 && (prim.GetEffectiveObjectFlags() & (uint)PrimFlags.TemporaryOnRez) == 0) | ||||
|                             { | ||||
|                                 //m_log.Info("[REGION DB]: Adding obj: " + obj.UUID + " to region: " + regionUUID); | ||||
|                                 addPrim(prim, obj.UUID, regionUUID); | ||||
|                             } | ||||
|                             else | ||||
|                             { | ||||
|                                 // m_log.Info("[DATASTORE]: Ignoring Physical obj: " + obj.UUID + " in region: " + regionUUID); | ||||
|                             } | ||||
|                         } | ||||
|                         Commit(); | ||||
|                         return; | ||||
|                     } | ||||
|                 } | ||||
|                 Commit(); | ||||
|                 catch(MySqlException) | ||||
|                 { | ||||
|                     m_connection.Close(); | ||||
|                     m_connection = new MySqlConnection(m_connectionString); | ||||
|                     m_connection.Open(); | ||||
| 
 | ||||
|                     PrepareConnection(); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
|  | @ -138,6 +138,33 @@ namespace OpenSim.Framework.Communications.Cache | |||
|             return null; | ||||
|         } | ||||
| 
 | ||||
|         public InventoryItemBase FindAsset(UUID assetID) | ||||
|         { | ||||
|             lock (Items) | ||||
|             { | ||||
|                 foreach (InventoryItemBase item in Items.Values) | ||||
|                 { | ||||
|                     if (item.AssetID == assetID) | ||||
|                         return item; | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             lock (SubFolders) | ||||
|             { | ||||
|                 foreach (InventoryFolderImpl folder in SubFolders.Values) | ||||
|                 { | ||||
|                     InventoryItemBase item = folder.FindAsset(assetID); | ||||
| 
 | ||||
|                     if (item != null) | ||||
|                     { | ||||
|                         return item; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             return null; | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Deletes an item if it exists in this folder or any children | ||||
|         /// </summary> | ||||
|  |  | |||
|  | @ -33,6 +33,7 @@ using Nini.Config; | |||
| using OpenSim.Framework; | ||||
| using OpenSim.Region.Environment.Interfaces; | ||||
| using OpenSim.Region.Environment.Scenes; | ||||
| using OpenSim.Framework.Communications.Cache; | ||||
| using BlockingQueue = OpenSim.Framework.BlockingQueue<OpenSim.Region.Environment.Interfaces.ITextureSender>; | ||||
| 
 | ||||
| namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload | ||||
|  | @ -161,6 +162,27 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload | |||
|         public void TextureRequest(Object sender, TextureRequestArgs e) | ||||
|         { | ||||
|             IClientAPI client = (IClientAPI) sender; | ||||
| 
 | ||||
|             if (e.Priority == 1016001f) // Preview | ||||
|             { | ||||
|                 if (client.Scene is Scene) | ||||
|                 { | ||||
|                     Scene scene = (Scene)client.Scene; | ||||
|                      | ||||
|                     CachedUserInfo profile = scene.CommsManager.UserProfileCacheService.GetUserDetails(client.AgentId); | ||||
|                     if (profile == null) // Deny unknown user | ||||
|                         return; | ||||
| 
 | ||||
|                     if (profile.RootFolder == null) // Deny no inventory | ||||
|                         return; | ||||
| 
 | ||||
|                     if (profile.UserProfile.GodLevel < 200 && profile.RootFolder.FindAsset(e.RequestedAssetID) == null) // Deny if not owned | ||||
|                         return; | ||||
| 
 | ||||
|                     m_log.Debug("Texture preview"); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             UserTextureDownloadService textureService; | ||||
| 
 | ||||
|             if (TryGetUserTextureService(client, out textureService)) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Melanie Thielker
						Melanie Thielker