aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Framework/Servers/CachedGetAssetStreamHandler.cs434
1 files changed, 217 insertions, 217 deletions
diff --git a/OpenSim/Framework/Servers/CachedGetAssetStreamHandler.cs b/OpenSim/Framework/Servers/CachedGetAssetStreamHandler.cs
index 7a9030c..d7150e0 100644
--- a/OpenSim/Framework/Servers/CachedGetAssetStreamHandler.cs
+++ b/OpenSim/Framework/Servers/CachedGetAssetStreamHandler.cs
@@ -1,217 +1,217 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright 7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright 9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution. 11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the 12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products 13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission. 14 * derived from this software without specific prior written permission.
15 * 15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY 16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28using System; 28using System;
29using System.IO; 29using System.IO;
30using System.Reflection; 30using System.Reflection;
31using System.Text; 31using System.Text;
32using System.Text.RegularExpressions; 32using System.Text.RegularExpressions;
33using System.Xml; 33using System.Xml;
34using System.Xml.Serialization; 34using System.Xml.Serialization;
35using log4net; 35using log4net;
36using OpenMetaverse; 36using OpenMetaverse;
37using OpenSim.Data; 37using OpenSim.Data;
38using OpenSim.Framework; 38using OpenSim.Framework;
39using OpenSim.Framework.Servers; 39using OpenSim.Framework.Servers;
40using OpenSim.Framework.Statistics; 40using OpenSim.Framework.Statistics;
41using System.Net; 41using System.Net;
42 42
43namespace OpenSim.Framework.Servers 43namespace OpenSim.Framework.Servers
44{ 44{
45 public class CachedGetAssetStreamHandler : BaseStreamHandler 45 public class CachedGetAssetStreamHandler : BaseStreamHandler
46 { 46 {
47 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 47 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
48 48
49 // private OpenAsset_Main m_assetManager; 49 // private OpenAsset_Main m_assetManager;
50 private IAssetCache m_assetProvider; 50 private IAssetCache m_assetProvider;
51 51
52 /// <summary> 52 /// <summary>
53 /// Constructor. 53 /// Constructor.
54 /// </summary> 54 /// </summary>
55 /// <param name="assetManager"></param> 55 /// <param name="assetManager"></param>
56 /// <param name="assetProvider"></param> 56 /// <param name="assetProvider"></param>
57 public CachedGetAssetStreamHandler(IAssetCache assetProvider) 57 public CachedGetAssetStreamHandler(IAssetCache assetProvider)
58 : base("GET", "/assets") 58 : base("GET", "/assets")
59 { 59 {
60 m_log.Info("[REST]: In Get Request"); 60 m_log.Info("[REST]: In Get Request");
61 // m_assetManager = assetManager; 61 // m_assetManager = assetManager;
62 m_assetProvider = assetProvider; 62 m_assetProvider = assetProvider;
63 } 63 }
64 64
65 public override byte[] Handle(string path, Stream request, 65 public override byte[] Handle(string path, Stream request,
66 OSHttpRequest httpRequest, OSHttpResponse httpResponse) 66 OSHttpRequest httpRequest, OSHttpResponse httpResponse)
67 { 67 {
68 string param = GetParam(path); 68 string param = GetParam(path);
69 byte[] result = new byte[] { }; 69 byte[] result = new byte[] { };
70 70
71 string[] p = param.Split(new char[] { '/', '?', '&' }, StringSplitOptions.RemoveEmptyEntries); 71 string[] p = param.Split(new char[] { '/', '?', '&' }, StringSplitOptions.RemoveEmptyEntries);
72 72
73 if (p.Length > 0) 73 if (p.Length > 0)
74 { 74 {
75 UUID assetID = UUID.Zero; 75 UUID assetID = UUID.Zero;
76 76
77 if (!UUID.TryParse(p[0], out assetID)) 77 if (!UUID.TryParse(p[0], out assetID))
78 { 78 {
79 m_log.InfoFormat( 79 m_log.InfoFormat(
80 "[REST]: GET:/asset ignoring request with malformed UUID {0}", p[0]); 80 "[REST]: GET:/asset ignoring request with malformed UUID {0}", p[0]);
81 return result; 81 return result;
82 } 82 }
83 83
84 if (StatsManager.AssetStats != null) 84 if (StatsManager.AssetStats != null)
85 StatsManager.AssetStats.AddRequest(); 85 StatsManager.AssetStats.AddRequest();
86 86
87 AssetBase asset = m_assetProvider.GetAsset(assetID,true); // TODO IsTexture should be deduced from loaded asset. It is not used in this case. 87 AssetBase asset = m_assetProvider.GetAsset(assetID,true); // TODO IsTexture should be deduced from loaded asset. It is not used in this case.
88 88
89 if (asset != null) 89 if (asset != null)
90 { 90 {
91// if (asset.ContainsReferences) 91// if (asset.ContainsReferences)
92// { 92// {
93// asset.Data = ProcessOutgoingAssetData(asset.Data); 93// asset.Data = ProcessOutgoingAssetData(asset.Data);
94// } 94// }
95 if (p.Length > 1 && p[1] == "data") 95 if (p.Length > 1 && p[1] == "data")
96 { 96 {
97 httpResponse.StatusCode = (int)HttpStatusCode.OK; 97 httpResponse.StatusCode = (int)HttpStatusCode.OK;
98 httpResponse.ContentType = SLAssetTypeToContentType(asset.Type); 98 httpResponse.ContentType = SLAssetTypeToContentType(asset.Type);
99 result = asset.Data; 99 result = asset.Data;
100 } 100 }
101 else 101 else
102 { 102 {
103 XmlSerializer xs = new XmlSerializer(typeof(AssetBase)); 103 XmlSerializer xs = new XmlSerializer(typeof(AssetBase));
104 MemoryStream ms = new MemoryStream(); 104 MemoryStream ms = new MemoryStream();
105 XmlTextWriter xw = new XmlTextWriter(ms, Encoding.UTF8); 105 XmlTextWriter xw = new XmlTextWriter(ms, Encoding.UTF8);
106 xw.Formatting = Formatting.Indented; 106 xw.Formatting = Formatting.Indented;
107 xs.Serialize(xw, asset); 107 xs.Serialize(xw, asset);
108 xw.Flush(); 108 xw.Flush();
109 109
110 ms.Seek(0, SeekOrigin.Begin); 110 ms.Seek(0, SeekOrigin.Begin);
111 //StreamReader sr = new StreamReader(ms); 111 //StreamReader sr = new StreamReader(ms);
112 112
113 result = ms.GetBuffer(); 113 result = ms.GetBuffer();
114 114
115 Array.Resize<byte>(ref result, (int)ms.Length); 115 Array.Resize<byte>(ref result, (int)ms.Length);
116 } 116 }
117 } 117 }
118 else 118 else
119 { 119 {
120 if (StatsManager.AssetStats != null) 120 if (StatsManager.AssetStats != null)
121 StatsManager.AssetStats.AddNotFoundRequest(); 121 StatsManager.AssetStats.AddNotFoundRequest();
122 122
123 m_log.InfoFormat("[REST]: GET:/asset failed to find {0}", assetID); 123 m_log.InfoFormat("[REST]: GET:/asset failed to find {0}", assetID);
124 } 124 }
125 } 125 }
126 126
127 return result; 127 return result;
128 } 128 }
129 129
130 // private byte[] ProcessOutgoingAssetData(byte[] assetData) 130 // private byte[] ProcessOutgoingAssetData(byte[] assetData)
131 // { 131 // {
132 // string data = Encoding.ASCII.GetString(assetData); 132 // string data = Encoding.ASCII.GetString(assetData);
133 133
134 // data = ProcessAssetDataString(data); 134 // data = ProcessAssetDataString(data);
135 135
136 // return Encoding.ASCII.GetBytes(data); 136 // return Encoding.ASCII.GetBytes(data);
137 // } 137 // }
138 138
139 public string ProcessAssetDataString(string data) 139 public string ProcessAssetDataString(string data)
140 { 140 {
141 Regex regex = new Regex("(creator_id|owner_id)\\s+(\\S+)"); 141 Regex regex = new Regex("(creator_id|owner_id)\\s+(\\S+)");
142 142
143 // IUserService userService = null; 143 // IUserService userService = null;
144 144
145 data = regex.Replace(data, delegate(Match m) 145 data = regex.Replace(data, delegate(Match m)
146 { 146 {
147 string result = String.Empty; 147 string result = String.Empty;
148 148
149// string key = m.Groups[1].Captures[0].Value; 149// string key = m.Groups[1].Captures[0].Value;
150// 150//
151// string value = m.Groups[2].Captures[0].Value; 151// string value = m.Groups[2].Captures[0].Value;
152// 152//
153// Guid userUri; 153// Guid userUri;
154// 154//
155// switch (key) 155// switch (key)
156// { 156// {
157// case "creator_id": 157// case "creator_id":
158// userUri = new Guid(value); 158// userUri = new Guid(value);
159// // result = "creator_url " + userService(userService, userUri); 159// // result = "creator_url " + userService(userService, userUri);
160// break; 160// break;
161// 161//
162// case "owner_id": 162// case "owner_id":
163// userUri = new Guid(value); 163// userUri = new Guid(value);
164// // result = "owner_url " + ResolveUserUri(userService, userUri); 164// // result = "owner_url " + ResolveUserUri(userService, userUri);
165// break; 165// break;
166// } 166// }
167 167
168 return result; 168 return result;
169 }); 169 });
170 170
171 return data; 171 return data;
172 } 172 }
173 173
174 private string SLAssetTypeToContentType(int assetType) 174 private string SLAssetTypeToContentType(int assetType)
175 { 175 {
176 switch (assetType) 176 switch (assetType)
177 { 177 {
178 case 0: 178 case 0:
179 return "image/jp2"; 179 return "image/jp2";
180 case 1: 180 case 1:
181 return "application/ogg"; 181 return "application/ogg";
182 case 2: 182 case 2:
183 return "application/x-metaverse-callingcard"; 183 return "application/x-metaverse-callingcard";
184 case 3: 184 case 3:
185 return "application/x-metaverse-landmark"; 185 return "application/x-metaverse-landmark";
186 case 5: 186 case 5:
187 return "application/x-metaverse-clothing"; 187 return "application/x-metaverse-clothing";
188 case 6: 188 case 6:
189 return "application/x-metaverse-primitive"; 189 return "application/x-metaverse-primitive";
190 case 7: 190 case 7:
191 return "application/x-metaverse-notecard"; 191 return "application/x-metaverse-notecard";
192 case 8: 192 case 8:
193 return "application/x-metaverse-folder"; 193 return "application/x-metaverse-folder";
194 case 10: 194 case 10:
195 return "application/x-metaverse-lsl"; 195 return "application/x-metaverse-lsl";
196 case 11: 196 case 11:
197 return "application/x-metaverse-lso"; 197 return "application/x-metaverse-lso";
198 case 12: 198 case 12:
199 return "image/tga"; 199 return "image/tga";
200 case 13: 200 case 13:
201 return "application/x-metaverse-bodypart"; 201 return "application/x-metaverse-bodypart";
202 case 17: 202 case 17:
203 return "audio/x-wav"; 203 return "audio/x-wav";
204 case 19: 204 case 19:
205 return "image/jpeg"; 205 return "image/jpeg";
206 case 20: 206 case 20:
207 return "application/x-metaverse-animation"; 207 return "application/x-metaverse-animation";
208 case 21: 208 case 21:
209 return "application/x-metaverse-gesture"; 209 return "application/x-metaverse-gesture";
210 case 22: 210 case 22:
211 return "application/x-metaverse-simstate"; 211 return "application/x-metaverse-simstate";
212 default: 212 default:
213 return "application/octet-stream"; 213 return "application/octet-stream";
214 } 214 }
215 } 215 }
216 } 216 }
217} 217}