diff options
author | Melanie Thielker | 2008-11-23 20:39:51 +0000 |
---|---|---|
committer | Melanie Thielker | 2008-11-23 20:39:51 +0000 |
commit | fba9e3f513a0d9b4e0ccaf5a9fe24899d96e98c8 (patch) | |
tree | f5e20ebb72cb0e7cb1c9b2ae29f9db464eda726e | |
parent | Try to keep autoreturn from IM spamming users if the prims take a bit (diff) | |
download | opensim-SC-fba9e3f513a0d9b4e0ccaf5a9fe24899d96e98c8.zip opensim-SC-fba9e3f513a0d9b4e0ccaf5a9fe24899d96e98c8.tar.gz opensim-SC-fba9e3f513a0d9b4e0ccaf5a9fe24899d96e98c8.tar.bz2 opensim-SC-fba9e3f513a0d9b4e0ccaf5a9fe24899d96e98c8.tar.xz |
Don't serve texture preview from other people's objects if you
havenever seen that texture before.
Diffstat (limited to '')
3 files changed, 88 insertions, 13 deletions
diff --git a/OpenSim/Data/MySQL/MySQLRegionData.cs b/OpenSim/Data/MySQL/MySQLRegionData.cs index 2e36123..f57d485 100644 --- a/OpenSim/Data/MySQL/MySQLRegionData.cs +++ b/OpenSim/Data/MySQL/MySQLRegionData.cs | |||
@@ -141,6 +141,14 @@ namespace OpenSim.Data.MySQL | |||
141 | Migration m = new Migration(m_connection, assem, "RegionStore"); | 141 | Migration m = new Migration(m_connection, assem, "RegionStore"); |
142 | m.Update(); | 142 | m.Update(); |
143 | 143 | ||
144 | PrepareConnection(); | ||
145 | } | ||
146 | |||
147 | public void Dispose() {} | ||
148 | |||
149 | private void PrepareConnection() | ||
150 | { | ||
151 | GetWaitTimeout(); | ||
144 | 152 | ||
145 | MySqlCommand primSelectCmd = new MySqlCommand(m_primSelect, m_connection); | 153 | MySqlCommand primSelectCmd = new MySqlCommand(m_primSelect, m_connection); |
146 | m_primDataAdapter = new MySqlDataAdapter(primSelectCmd); | 154 | m_primDataAdapter = new MySqlDataAdapter(primSelectCmd); |
@@ -203,8 +211,6 @@ namespace OpenSim.Data.MySQL | |||
203 | } | 211 | } |
204 | } | 212 | } |
205 | 213 | ||
206 | public void Dispose() {} | ||
207 | |||
208 | /// <summary> | 214 | /// <summary> |
209 | /// Get the wait_timeout value for our connection | 215 | /// Get the wait_timeout value for our connection |
210 | /// </summary> | 216 | /// </summary> |
@@ -254,6 +260,8 @@ namespace OpenSim.Data.MySQL | |||
254 | m_connection.Close(); | 260 | m_connection.Close(); |
255 | m_connection = new MySqlConnection(m_connectionString); | 261 | m_connection = new MySqlConnection(m_connectionString); |
256 | m_connection.Open(); | 262 | m_connection.Open(); |
263 | |||
264 | PrepareConnection(); | ||
257 | } | 265 | } |
258 | } | 266 | } |
259 | 267 | ||
@@ -308,22 +316,40 @@ namespace OpenSim.Data.MySQL | |||
308 | /// <param name="regionUUID">The region UUID</param> | 316 | /// <param name="regionUUID">The region UUID</param> |
309 | public void StoreObject(SceneObjectGroup obj, UUID regionUUID) | 317 | public void StoreObject(SceneObjectGroup obj, UUID regionUUID) |
310 | { | 318 | { |
311 | lock (m_dataSet) | 319 | int tries = 3; |
320 | while (tries > 0) | ||
312 | { | 321 | { |
313 | foreach (SceneObjectPart prim in obj.Children.Values) | 322 | tries--; |
323 | |||
324 | try | ||
314 | { | 325 | { |
315 | if ((prim.GetEffectiveObjectFlags() & (uint)PrimFlags.Temporary) == 0 | 326 | lock (m_dataSet) |
316 | && (prim.GetEffectiveObjectFlags() & (uint)PrimFlags.TemporaryOnRez) == 0) | ||
317 | { | ||
318 | //m_log.Info("[REGION DB]: Adding obj: " + obj.UUID + " to region: " + regionUUID); | ||
319 | addPrim(prim, obj.UUID, regionUUID); | ||
320 | } | ||
321 | else | ||
322 | { | 327 | { |
323 | // m_log.Info("[DATASTORE]: Ignoring Physical obj: " + obj.UUID + " in region: " + regionUUID); | 328 | foreach (SceneObjectPart prim in obj.Children.Values) |
329 | { | ||
330 | if ((prim.GetEffectiveObjectFlags() & (uint)PrimFlags.Temporary) == 0 | ||
331 | && (prim.GetEffectiveObjectFlags() & (uint)PrimFlags.TemporaryOnRez) == 0) | ||
332 | { | ||
333 | //m_log.Info("[REGION DB]: Adding obj: " + obj.UUID + " to region: " + regionUUID); | ||
334 | addPrim(prim, obj.UUID, regionUUID); | ||
335 | } | ||
336 | else | ||
337 | { | ||
338 | // m_log.Info("[DATASTORE]: Ignoring Physical obj: " + obj.UUID + " in region: " + regionUUID); | ||
339 | } | ||
340 | } | ||
341 | Commit(); | ||
342 | return; | ||
324 | } | 343 | } |
325 | } | 344 | } |
326 | Commit(); | 345 | catch(MySqlException) |
346 | { | ||
347 | m_connection.Close(); | ||
348 | m_connection = new MySqlConnection(m_connectionString); | ||
349 | m_connection.Open(); | ||
350 | |||
351 | PrepareConnection(); | ||
352 | } | ||
327 | } | 353 | } |
328 | } | 354 | } |
329 | 355 | ||
diff --git a/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs b/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs index f78cdee..8e624f9 100644 --- a/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs +++ b/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs | |||
@@ -138,6 +138,33 @@ namespace OpenSim.Framework.Communications.Cache | |||
138 | return null; | 138 | return null; |
139 | } | 139 | } |
140 | 140 | ||
141 | public InventoryItemBase FindAsset(UUID assetID) | ||
142 | { | ||
143 | lock (Items) | ||
144 | { | ||
145 | foreach (InventoryItemBase item in Items.Values) | ||
146 | { | ||
147 | if (item.AssetID == assetID) | ||
148 | return item; | ||
149 | } | ||
150 | } | ||
151 | |||
152 | lock (SubFolders) | ||
153 | { | ||
154 | foreach (InventoryFolderImpl folder in SubFolders.Values) | ||
155 | { | ||
156 | InventoryItemBase item = folder.FindAsset(assetID); | ||
157 | |||
158 | if (item != null) | ||
159 | { | ||
160 | return item; | ||
161 | } | ||
162 | } | ||
163 | } | ||
164 | |||
165 | return null; | ||
166 | } | ||
167 | |||
141 | /// <summary> | 168 | /// <summary> |
142 | /// Deletes an item if it exists in this folder or any children | 169 | /// Deletes an item if it exists in this folder or any children |
143 | /// </summary> | 170 | /// </summary> |
diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs index af51df6..8e56afb 100644 --- a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs +++ b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs | |||
@@ -33,6 +33,7 @@ using Nini.Config; | |||
33 | using OpenSim.Framework; | 33 | using OpenSim.Framework; |
34 | using OpenSim.Region.Environment.Interfaces; | 34 | using OpenSim.Region.Environment.Interfaces; |
35 | using OpenSim.Region.Environment.Scenes; | 35 | using OpenSim.Region.Environment.Scenes; |
36 | using OpenSim.Framework.Communications.Cache; | ||
36 | using BlockingQueue = OpenSim.Framework.BlockingQueue<OpenSim.Region.Environment.Interfaces.ITextureSender>; | 37 | using BlockingQueue = OpenSim.Framework.BlockingQueue<OpenSim.Region.Environment.Interfaces.ITextureSender>; |
37 | 38 | ||
38 | namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload | 39 | namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload |
@@ -161,6 +162,27 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload | |||
161 | public void TextureRequest(Object sender, TextureRequestArgs e) | 162 | public void TextureRequest(Object sender, TextureRequestArgs e) |
162 | { | 163 | { |
163 | IClientAPI client = (IClientAPI) sender; | 164 | IClientAPI client = (IClientAPI) sender; |
165 | |||
166 | if (e.Priority == 1016001f) // Preview | ||
167 | { | ||
168 | if (client.Scene is Scene) | ||
169 | { | ||
170 | Scene scene = (Scene)client.Scene; | ||
171 | |||
172 | CachedUserInfo profile = scene.CommsManager.UserProfileCacheService.GetUserDetails(client.AgentId); | ||
173 | if (profile == null) // Deny unknown user | ||
174 | return; | ||
175 | |||
176 | if (profile.RootFolder == null) // Deny no inventory | ||
177 | return; | ||
178 | |||
179 | if (profile.UserProfile.GodLevel < 200 && profile.RootFolder.FindAsset(e.RequestedAssetID) == null) // Deny if not owned | ||
180 | return; | ||
181 | |||
182 | m_log.Debug("Texture preview"); | ||
183 | } | ||
184 | } | ||
185 | |||
164 | UserTextureDownloadService textureService; | 186 | UserTextureDownloadService textureService; |
165 | 187 | ||
166 | if (TryGetUserTextureService(client, out textureService)) | 188 | if (TryGetUserTextureService(client, out textureService)) |