diff options
Diffstat (limited to 'OpenSim/Capabilities/Handlers/GetTexture')
3 files changed, 15 insertions, 9 deletions
diff --git a/OpenSim/Capabilities/Handlers/GetTexture/GetTextureHandler.cs b/OpenSim/Capabilities/Handlers/GetTexture/GetTextureHandler.cs index b497fde..828e943 100644 --- a/OpenSim/Capabilities/Handlers/GetTexture/GetTextureHandler.cs +++ b/OpenSim/Capabilities/Handlers/GetTexture/GetTextureHandler.cs | |||
@@ -56,15 +56,18 @@ namespace OpenSim.Capabilities.Handlers | |||
56 | public const string DefaultFormat = "x-j2c"; | 56 | public const string DefaultFormat = "x-j2c"; |
57 | 57 | ||
58 | // TODO: Change this to a config option | 58 | // TODO: Change this to a config option |
59 | const string REDIRECT_URL = null; | 59 | private string m_RedirectURL = null; |
60 | 60 | ||
61 | public GetTextureHandler(string path, IAssetService assService, string name, string description) | 61 | public GetTextureHandler(string path, IAssetService assService, string name, string description, string redirectURL) |
62 | : base("GET", path, name, description) | 62 | : base("GET", path, name, description) |
63 | { | 63 | { |
64 | m_assetService = assService; | 64 | m_assetService = assService; |
65 | m_RedirectURL = redirectURL; | ||
66 | if (m_RedirectURL != null && !m_RedirectURL.EndsWith("/")) | ||
67 | m_RedirectURL += "/"; | ||
65 | } | 68 | } |
66 | 69 | ||
67 | public override byte[] Handle(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) | 70 | protected override byte[] ProcessRequest(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) |
68 | { | 71 | { |
69 | // Try to parse the texture ID from the request URL | 72 | // Try to parse the texture ID from the request URL |
70 | NameValueCollection query = HttpUtility.ParseQueryString(httpRequest.Url.Query); | 73 | NameValueCollection query = HttpUtility.ParseQueryString(httpRequest.Url.Query); |
@@ -85,7 +88,7 @@ namespace OpenSim.Capabilities.Handlers | |||
85 | // m_log.DebugFormat("[GETTEXTURE]: Received request for texture id {0}", textureID); | 88 | // m_log.DebugFormat("[GETTEXTURE]: Received request for texture id {0}", textureID); |
86 | 89 | ||
87 | string[] formats; | 90 | string[] formats; |
88 | if (format != null && format != string.Empty) | 91 | if (!string.IsNullOrEmpty(format)) |
89 | { | 92 | { |
90 | formats = new string[1] { format.ToLower() }; | 93 | formats = new string[1] { format.ToLower() }; |
91 | } | 94 | } |
@@ -134,7 +137,7 @@ namespace OpenSim.Capabilities.Handlers | |||
134 | if (format != DefaultFormat) | 137 | if (format != DefaultFormat) |
135 | fullID = fullID + "-" + format; | 138 | fullID = fullID + "-" + format; |
136 | 139 | ||
137 | if (!String.IsNullOrEmpty(REDIRECT_URL)) | 140 | if (!String.IsNullOrEmpty(m_RedirectURL)) |
138 | { | 141 | { |
139 | // Only try to fetch locally cached textures. Misses are redirected | 142 | // Only try to fetch locally cached textures. Misses are redirected |
140 | texture = m_assetService.GetCached(fullID); | 143 | texture = m_assetService.GetCached(fullID); |
@@ -150,8 +153,9 @@ namespace OpenSim.Capabilities.Handlers | |||
150 | } | 153 | } |
151 | else | 154 | else |
152 | { | 155 | { |
153 | string textureUrl = REDIRECT_URL + textureID.ToString(); | 156 | string textureUrl = m_RedirectURL + "?texture_id="+ textureID.ToString(); |
154 | m_log.Debug("[GETTEXTURE]: Redirecting texture request to " + textureUrl); | 157 | m_log.Debug("[GETTEXTURE]: Redirecting texture request to " + textureUrl); |
158 | httpResponse.StatusCode = (int)OSHttpStatusCode.RedirectMovedPermanently; | ||
155 | httpResponse.RedirectLocation = textureUrl; | 159 | httpResponse.RedirectLocation = textureUrl; |
156 | return true; | 160 | return true; |
157 | } | 161 | } |
@@ -189,6 +193,7 @@ namespace OpenSim.Capabilities.Handlers | |||
189 | 193 | ||
190 | newTexture.Flags = AssetFlags.Collectable; | 194 | newTexture.Flags = AssetFlags.Collectable; |
191 | newTexture.Temporary = true; | 195 | newTexture.Temporary = true; |
196 | newTexture.Local = true; | ||
192 | m_assetService.Store(newTexture); | 197 | m_assetService.Store(newTexture); |
193 | WriteTextureData(httpRequest, httpResponse, newTexture, format); | 198 | WriteTextureData(httpRequest, httpResponse, newTexture, format); |
194 | return true; | 199 | return true; |
diff --git a/OpenSim/Capabilities/Handlers/GetTexture/GetTextureServerConnector.cs b/OpenSim/Capabilities/Handlers/GetTexture/GetTextureServerConnector.cs index 71cf033..fa0b228 100644 --- a/OpenSim/Capabilities/Handlers/GetTexture/GetTextureServerConnector.cs +++ b/OpenSim/Capabilities/Handlers/GetTexture/GetTextureServerConnector.cs | |||
@@ -62,8 +62,10 @@ namespace OpenSim.Capabilities.Handlers | |||
62 | if (m_AssetService == null) | 62 | if (m_AssetService == null) |
63 | throw new Exception(String.Format("Failed to load AssetService from {0}; config is {1}", assetService, m_ConfigName)); | 63 | throw new Exception(String.Format("Failed to load AssetService from {0}; config is {1}", assetService, m_ConfigName)); |
64 | 64 | ||
65 | string rurl = serverConfig.GetString("GetTextureRedirectURL"); | ||
66 | ; | ||
65 | server.AddStreamHandler( | 67 | server.AddStreamHandler( |
66 | new GetTextureHandler("/CAPS/GetTexture/" /*+ UUID.Random() */, m_AssetService, "GetTexture", null)); | 68 | new GetTextureHandler("/CAPS/GetTexture/" /*+ UUID.Random() */, m_AssetService, "GetTexture", null, rurl)); |
67 | } | 69 | } |
68 | } | 70 | } |
69 | } \ No newline at end of file | 71 | } \ No newline at end of file |
diff --git a/OpenSim/Capabilities/Handlers/GetTexture/Tests/GetTextureHandlerTests.cs b/OpenSim/Capabilities/Handlers/GetTexture/Tests/GetTextureHandlerTests.cs index d4d6d10..e5d9618 100644 --- a/OpenSim/Capabilities/Handlers/GetTexture/Tests/GetTextureHandlerTests.cs +++ b/OpenSim/Capabilities/Handlers/GetTexture/Tests/GetTextureHandlerTests.cs | |||
@@ -37,7 +37,6 @@ using OpenSim.Framework; | |||
37 | using OpenSim.Framework.Servers.HttpServer; | 37 | using OpenSim.Framework.Servers.HttpServer; |
38 | using OpenSim.Region.Framework.Scenes; | 38 | using OpenSim.Region.Framework.Scenes; |
39 | using OpenSim.Tests.Common; | 39 | using OpenSim.Tests.Common; |
40 | using OpenSim.Tests.Common.Mock; | ||
41 | 40 | ||
42 | namespace OpenSim.Capabilities.Handlers.GetTexture.Tests | 41 | namespace OpenSim.Capabilities.Handlers.GetTexture.Tests |
43 | { | 42 | { |
@@ -52,7 +51,7 @@ namespace OpenSim.Capabilities.Handlers.GetTexture.Tests | |||
52 | // Overkill - we only really need the asset service, not a whole scene. | 51 | // Overkill - we only really need the asset service, not a whole scene. |
53 | Scene scene = new SceneHelpers().SetupScene(); | 52 | Scene scene = new SceneHelpers().SetupScene(); |
54 | 53 | ||
55 | GetTextureHandler handler = new GetTextureHandler(null, scene.AssetService, "TestGetTexture", null); | 54 | GetTextureHandler handler = new GetTextureHandler("/gettexture", scene.AssetService, "TestGetTexture", null, null); |
56 | TestOSHttpRequest req = new TestOSHttpRequest(); | 55 | TestOSHttpRequest req = new TestOSHttpRequest(); |
57 | TestOSHttpResponse resp = new TestOSHttpResponse(); | 56 | TestOSHttpResponse resp = new TestOSHttpResponse(); |
58 | req.Url = new Uri("http://localhost/?texture_id=00000000-0000-1111-9999-000000000012"); | 57 | req.Url = new Uri("http://localhost/?texture_id=00000000-0000-1111-9999-000000000012"); |