From a0d0d65c7090f90b870d2bc3d011f2d50a2591b2 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 10 Mar 2018 20:50:24 +0000 Subject: mantis 7885: robust asset services have no cache and only accept a asset ID that is a uuid, so regions hack to cache several image formats is not possible. Robut GetTexture is very heavy unless image format is the default (j2k mime type x-j2k), since with no cache image convertions is performed on every request. Adicionally it does expose all textures if the tcp port is public. Avoid using it. --- .../Handlers/GetTexture/GetTextureRobustHandler.cs | 99 +++++++--------------- 1 file changed, 31 insertions(+), 68 deletions(-) (limited to 'OpenSim/Capabilities/Handlers/GetTexture') diff --git a/OpenSim/Capabilities/Handlers/GetTexture/GetTextureRobustHandler.cs b/OpenSim/Capabilities/Handlers/GetTexture/GetTextureRobustHandler.cs index c339ec5..0685c5e 100644 --- a/OpenSim/Capabilities/Handlers/GetTexture/GetTextureRobustHandler.cs +++ b/OpenSim/Capabilities/Handlers/GetTexture/GetTextureRobustHandler.cs @@ -131,87 +131,50 @@ namespace OpenSim.Capabilities.Handlers /// False for "caller try another codec"; true otherwise private bool FetchTexture(IOSHttpRequest httpRequest, IOSHttpResponse httpResponse, UUID textureID, string format) { -// m_log.DebugFormat("[GETTEXTURE]: {0} with requested format {1}", textureID, format); + // m_log.DebugFormat("[GETTEXTURE]: {0} with requested format {1}", textureID, format); AssetBase texture; - string fullID = textureID.ToString(); - if (format != DefaultFormat) - fullID = fullID + "-" + format; - - if (!String.IsNullOrEmpty(m_RedirectURL)) + if(!String.IsNullOrEmpty(m_RedirectURL)) { - // Only try to fetch locally cached textures. Misses are redirected - texture = m_assetService.GetCached(fullID); - - if (texture != null) + string textureUrl = m_RedirectURL + "?texture_id=" + textureID.ToString(); + m_log.Debug("[GETTEXTURE]: Redirecting texture request to " + textureUrl); + httpResponse.StatusCode = (int)OSHttpStatusCode.RedirectMovedPermanently; + httpResponse.RedirectLocation = textureUrl; + return true; + } + else // no redirect + { + texture = m_assetService.Get(textureID.ToString()); + if(texture != null) { - if (texture.Type != (sbyte)AssetType.Texture) + if(texture.Type != (sbyte)AssetType.Texture) { httpResponse.StatusCode = (int)System.Net.HttpStatusCode.NotFound; return true; } - WriteTextureData(httpRequest, httpResponse, texture, format); - return true; - } - else - { - string textureUrl = m_RedirectURL + "?texture_id="+ textureID.ToString(); - m_log.Debug("[GETTEXTURE]: Redirecting texture request to " + textureUrl); - httpResponse.StatusCode = (int)OSHttpStatusCode.RedirectMovedPermanently; - httpResponse.RedirectLocation = textureUrl; - return true; - } - } - else // no redirect - { - // try the cache - texture = m_assetService.GetCached(fullID); - - if (texture == null) - { -// m_log.DebugFormat("[GETTEXTURE]: texture was not in the cache"); - - // Fetch locally or remotely. Misses return a 404 - texture = m_assetService.Get(textureID.ToString()); - - if (texture != null) + if(format == DefaultFormat) { - if (texture.Type != (sbyte)AssetType.Texture) - { - httpResponse.StatusCode = (int)System.Net.HttpStatusCode.NotFound; - return true; - } - if (format == DefaultFormat) - { - WriteTextureData(httpRequest, httpResponse, texture, format); - return true; - } - else - { - AssetBase newTexture = new AssetBase(texture.ID + "-" + format, texture.Name, (sbyte)AssetType.Texture, texture.Metadata.CreatorID); - newTexture.Data = ConvertTextureData(texture, format); - if (newTexture.Data.Length == 0) - return false; // !!! Caller try another codec, please! - - newTexture.Flags = AssetFlags.Collectable; - newTexture.Temporary = true; - newTexture.Local = true; - m_assetService.Store(newTexture); - WriteTextureData(httpRequest, httpResponse, newTexture, format); - return true; - } + WriteTextureData(httpRequest, httpResponse, texture, format); + return true; } - } - else // it was on the cache - { -// m_log.DebugFormat("[GETTEXTURE]: texture was in the cache"); - WriteTextureData(httpRequest, httpResponse, texture, format); - return true; - } + else + { + AssetBase newTexture = new AssetBase(texture.ID + "-" + format, texture.Name, (sbyte)AssetType.Texture, texture.Metadata.CreatorID); + newTexture.Data = ConvertTextureData(texture, format); + if(newTexture.Data.Length == 0) + return false; // !!! Caller try another codec, please! + + newTexture.Flags = AssetFlags.Collectable; + newTexture.Temporary = true; + newTexture.Local = true; + WriteTextureData(httpRequest, httpResponse, newTexture, format); + return true; + } + } } // not found -// m_log.Warn("[GETTEXTURE]: Texture " + textureID + " not found"); + // m_log.Warn("[GETTEXTURE]: Texture " + textureID + " not found"); httpResponse.StatusCode = (int)System.Net.HttpStatusCode.NotFound; return true; } -- cgit v1.1