diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Framework/Servers/BaseGetAssetStreamHandler.cs | 392 |
1 files changed, 196 insertions, 196 deletions
diff --git a/OpenSim/Framework/Servers/BaseGetAssetStreamHandler.cs b/OpenSim/Framework/Servers/BaseGetAssetStreamHandler.cs index 6e03ea8..fc4eed7 100644 --- a/OpenSim/Framework/Servers/BaseGetAssetStreamHandler.cs +++ b/OpenSim/Framework/Servers/BaseGetAssetStreamHandler.cs | |||
@@ -1,196 +1,196 @@ | |||
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 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using System.IO; | 30 | using System.IO; |
31 | using System.Net; | 31 | using System.Net; |
32 | using System.Reflection; | 32 | using System.Reflection; |
33 | using System.Text; | 33 | using System.Text; |
34 | using System.Text.RegularExpressions; | 34 | using System.Text.RegularExpressions; |
35 | using System.Xml; | 35 | using System.Xml; |
36 | using System.Xml.Serialization; | 36 | using System.Xml.Serialization; |
37 | using log4net; | 37 | using log4net; |
38 | using OpenMetaverse; | 38 | using OpenMetaverse; |
39 | using OpenSim.Framework.Servers.HttpServer; | 39 | using OpenSim.Framework.Servers.HttpServer; |
40 | using OpenSim.Framework.Statistics; | 40 | using OpenSim.Framework.Statistics; |
41 | 41 | ||
42 | namespace OpenSim.Framework.Servers | 42 | namespace OpenSim.Framework.Servers |
43 | { | 43 | { |
44 | public abstract class BaseGetAssetStreamHandler : BaseStreamHandler | 44 | public abstract class BaseGetAssetStreamHandler : BaseStreamHandler |
45 | { | 45 | { |
46 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 46 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
47 | 47 | ||
48 | protected BaseGetAssetStreamHandler(string httpMethod, string path) : base(httpMethod, path) | 48 | protected BaseGetAssetStreamHandler(string httpMethod, string path) : base(httpMethod, path) |
49 | { | 49 | { |
50 | } | 50 | } |
51 | 51 | ||
52 | protected abstract AssetBase GetAsset(UUID assetID); | 52 | protected abstract AssetBase GetAsset(UUID assetID); |
53 | 53 | ||
54 | public override byte[] Handle(string path, Stream request, | 54 | public override byte[] Handle(string path, Stream request, |
55 | OSHttpRequest httpRequest, OSHttpResponse httpResponse) | 55 | OSHttpRequest httpRequest, OSHttpResponse httpResponse) |
56 | { | 56 | { |
57 | byte[] result = new byte[] { }; | 57 | byte[] result = new byte[] { }; |
58 | 58 | ||
59 | string[] p = SplitParams(path); | 59 | string[] p = SplitParams(path); |
60 | 60 | ||
61 | if (p.Length > 0) | 61 | if (p.Length > 0) |
62 | { | 62 | { |
63 | UUID assetID = UUID.Zero; | 63 | UUID assetID = UUID.Zero; |
64 | 64 | ||
65 | if (!UUID.TryParse(p[0], out assetID)) | 65 | if (!UUID.TryParse(p[0], out assetID)) |
66 | { | 66 | { |
67 | m_log.InfoFormat( | 67 | m_log.InfoFormat( |
68 | "[REST]: GET:/asset ignoring request with malformed UUID {0}", p[0]); | 68 | "[REST]: GET:/asset ignoring request with malformed UUID {0}", p[0]); |
69 | return result; | 69 | return result; |
70 | } | 70 | } |
71 | 71 | ||
72 | if (StatsManager.AssetStats != null) | 72 | if (StatsManager.AssetStats != null) |
73 | StatsManager.AssetStats.AddRequest(); | 73 | StatsManager.AssetStats.AddRequest(); |
74 | 74 | ||
75 | AssetBase asset = GetAsset(assetID); | 75 | AssetBase asset = GetAsset(assetID); |
76 | 76 | ||
77 | if (asset != null) | 77 | if (asset != null) |
78 | { | 78 | { |
79 | // if (asset.ContainsReferences) | 79 | // if (asset.ContainsReferences) |
80 | // { | 80 | // { |
81 | // asset.Data = ProcessOutgoingAssetData(asset.Data); | 81 | // asset.Data = ProcessOutgoingAssetData(asset.Data); |
82 | // } | 82 | // } |
83 | if (p.Length > 1 && p[1] == "data") | 83 | if (p.Length > 1 && p[1] == "data") |
84 | { | 84 | { |
85 | httpResponse.StatusCode = (int)HttpStatusCode.OK; | 85 | httpResponse.StatusCode = (int)HttpStatusCode.OK; |
86 | httpResponse.ContentType = SLAssetTypeToContentType(asset.Type); | 86 | httpResponse.ContentType = SLAssetTypeToContentType(asset.Type); |
87 | result = asset.Data; | 87 | result = asset.Data; |
88 | } | 88 | } |
89 | else | 89 | else |
90 | { | 90 | { |
91 | XmlSerializer xs = new XmlSerializer(typeof(AssetBase)); | 91 | XmlSerializer xs = new XmlSerializer(typeof(AssetBase)); |
92 | MemoryStream ms = new MemoryStream(); | 92 | MemoryStream ms = new MemoryStream(); |
93 | XmlTextWriter xw = new XmlTextWriter(ms, Encoding.UTF8); | 93 | XmlTextWriter xw = new XmlTextWriter(ms, Encoding.UTF8); |
94 | xw.Formatting = Formatting.Indented; | 94 | xw.Formatting = Formatting.Indented; |
95 | xs.Serialize(xw, asset); | 95 | xs.Serialize(xw, asset); |
96 | xw.Flush(); | 96 | xw.Flush(); |
97 | 97 | ||
98 | ms.Seek(0, SeekOrigin.Begin); | 98 | ms.Seek(0, SeekOrigin.Begin); |
99 | //StreamReader sr = new StreamReader(ms); | 99 | //StreamReader sr = new StreamReader(ms); |
100 | 100 | ||
101 | result = ms.GetBuffer(); | 101 | result = ms.GetBuffer(); |
102 | 102 | ||
103 | Array.Resize<byte>(ref result, (int)ms.Length); | 103 | Array.Resize<byte>(ref result, (int)ms.Length); |
104 | } | 104 | } |
105 | } | 105 | } |
106 | else | 106 | else |
107 | { | 107 | { |
108 | if (StatsManager.AssetStats != null) | 108 | if (StatsManager.AssetStats != null) |
109 | StatsManager.AssetStats.AddNotFoundRequest(); | 109 | StatsManager.AssetStats.AddNotFoundRequest(); |
110 | 110 | ||
111 | m_log.InfoFormat("[REST]: GET:/asset failed to find {0}", assetID); | 111 | m_log.InfoFormat("[REST]: GET:/asset failed to find {0}", assetID); |
112 | } | 112 | } |
113 | } | 113 | } |
114 | 114 | ||
115 | return result; | 115 | return result; |
116 | } | 116 | } |
117 | 117 | ||
118 | public string ProcessAssetDataString(string data) | 118 | public string ProcessAssetDataString(string data) |
119 | { | 119 | { |
120 | Regex regex = new Regex("(creator_id|owner_id)\\s+(\\S+)"); | 120 | Regex regex = new Regex("(creator_id|owner_id)\\s+(\\S+)"); |
121 | 121 | ||
122 | // IUserService userService = null; | 122 | // IUserService userService = null; |
123 | 123 | ||
124 | data = regex.Replace(data, delegate(Match m) | 124 | data = regex.Replace(data, delegate(Match m) |
125 | { | 125 | { |
126 | string result = String.Empty; | 126 | string result = String.Empty; |
127 | 127 | ||
128 | // string key = m.Groups[1].Captures[0].Value; | 128 | // string key = m.Groups[1].Captures[0].Value; |
129 | // | 129 | // |
130 | // string value = m.Groups[2].Captures[0].Value; | 130 | // string value = m.Groups[2].Captures[0].Value; |
131 | // | 131 | // |
132 | // Guid userUri; | 132 | // Guid userUri; |
133 | // | 133 | // |
134 | // switch (key) | 134 | // switch (key) |
135 | // { | 135 | // { |
136 | // case "creator_id": | 136 | // case "creator_id": |
137 | // userUri = new Guid(value); | 137 | // userUri = new Guid(value); |
138 | // // result = "creator_url " + userService(userService, userUri); | 138 | // // result = "creator_url " + userService(userService, userUri); |
139 | // break; | 139 | // break; |
140 | // | 140 | // |
141 | // case "owner_id": | 141 | // case "owner_id": |
142 | // userUri = new Guid(value); | 142 | // userUri = new Guid(value); |
143 | // // result = "owner_url " + ResolveUserUri(userService, userUri); | 143 | // // result = "owner_url " + ResolveUserUri(userService, userUri); |
144 | // break; | 144 | // break; |
145 | // } | 145 | // } |
146 | 146 | ||
147 | return result; | 147 | return result; |
148 | }); | 148 | }); |
149 | 149 | ||
150 | return data; | 150 | return data; |
151 | } | 151 | } |
152 | 152 | ||
153 | private string SLAssetTypeToContentType(int assetType) | 153 | private string SLAssetTypeToContentType(int assetType) |
154 | { | 154 | { |
155 | switch (assetType) | 155 | switch (assetType) |
156 | { | 156 | { |
157 | case 0: | 157 | case 0: |
158 | return "image/jp2"; | 158 | return "image/jp2"; |
159 | case 1: | 159 | case 1: |
160 | return "application/ogg"; | 160 | return "application/ogg"; |
161 | case 2: | 161 | case 2: |
162 | return "application/x-metaverse-callingcard"; | 162 | return "application/x-metaverse-callingcard"; |
163 | case 3: | 163 | case 3: |
164 | return "application/x-metaverse-landmark"; | 164 | return "application/x-metaverse-landmark"; |
165 | case 5: | 165 | case 5: |
166 | return "application/x-metaverse-clothing"; | 166 | return "application/x-metaverse-clothing"; |
167 | case 6: | 167 | case 6: |
168 | return "application/x-metaverse-primitive"; | 168 | return "application/x-metaverse-primitive"; |
169 | case 7: | 169 | case 7: |
170 | return "application/x-metaverse-notecard"; | 170 | return "application/x-metaverse-notecard"; |
171 | case 8: | 171 | case 8: |
172 | return "application/x-metaverse-folder"; | 172 | return "application/x-metaverse-folder"; |
173 | case 10: | 173 | case 10: |
174 | return "application/x-metaverse-lsl"; | 174 | return "application/x-metaverse-lsl"; |
175 | case 11: | 175 | case 11: |
176 | return "application/x-metaverse-lso"; | 176 | return "application/x-metaverse-lso"; |
177 | case 12: | 177 | case 12: |
178 | return "image/tga"; | 178 | return "image/tga"; |
179 | case 13: | 179 | case 13: |
180 | return "application/x-metaverse-bodypart"; | 180 | return "application/x-metaverse-bodypart"; |
181 | case 17: | 181 | case 17: |
182 | return "audio/x-wav"; | 182 | return "audio/x-wav"; |
183 | case 19: | 183 | case 19: |
184 | return "image/jpeg"; | 184 | return "image/jpeg"; |
185 | case 20: | 185 | case 20: |
186 | return "application/x-metaverse-animation"; | 186 | return "application/x-metaverse-animation"; |
187 | case 21: | 187 | case 21: |
188 | return "application/x-metaverse-gesture"; | 188 | return "application/x-metaverse-gesture"; |
189 | case 22: | 189 | case 22: |
190 | return "application/x-metaverse-simstate"; | 190 | return "application/x-metaverse-simstate"; |
191 | default: | 191 | default: |
192 | return "application/octet-stream"; | 192 | return "application/octet-stream"; |
193 | } | 193 | } |
194 | } | 194 | } |
195 | } | 195 | } |
196 | } | 196 | } |