diff options
* Some more experimental work on distributed assets. Nothing hotwired yet.
* Introduced preprocess step in FetchAsset (Might revert this later)
* Some minor CCC
* Added actual implementation of GetUserProfile( uri ) and the corresponding handler to OGS1.
* Introduced non-functioning GetUserUri( userProfile) awaiting user server wireup (this might move elsewhere)
Diffstat (limited to 'OpenSim/Framework/Servers/GetAssetStreamHandler.cs')
-rw-r--r-- | OpenSim/Framework/Servers/GetAssetStreamHandler.cs | 67 |
1 files changed, 55 insertions, 12 deletions
diff --git a/OpenSim/Framework/Servers/GetAssetStreamHandler.cs b/OpenSim/Framework/Servers/GetAssetStreamHandler.cs index 91d1a28..ffd7ef4 100644 --- a/OpenSim/Framework/Servers/GetAssetStreamHandler.cs +++ b/OpenSim/Framework/Servers/GetAssetStreamHandler.cs | |||
@@ -29,6 +29,7 @@ using System; | |||
29 | using System.IO; | 29 | using System.IO; |
30 | using System.Reflection; | 30 | using System.Reflection; |
31 | using System.Text; | 31 | using System.Text; |
32 | using System.Text.RegularExpressions; | ||
32 | using System.Xml; | 33 | using System.Xml; |
33 | using System.Xml.Serialization; | 34 | using System.Xml.Serialization; |
34 | using log4net; | 35 | using log4net; |
@@ -64,9 +65,9 @@ namespace OpenSim.Framework.Servers | |||
64 | OSHttpRequest httpRequest, OSHttpResponse httpResponse) | 65 | OSHttpRequest httpRequest, OSHttpResponse httpResponse) |
65 | { | 66 | { |
66 | string param = GetParam(path); | 67 | string param = GetParam(path); |
67 | byte[] result = new byte[] {}; | 68 | byte[] result = new byte[] { }; |
68 | 69 | ||
69 | string[] p = param.Split(new char[] {'/', '?', '&'}, StringSplitOptions.RemoveEmptyEntries); | 70 | string[] p = param.Split(new char[] { '/', '?', '&' }, StringSplitOptions.RemoveEmptyEntries); |
70 | 71 | ||
71 | if (p.Length > 0) | 72 | if (p.Length > 0) |
72 | { | 73 | { |
@@ -85,7 +86,12 @@ namespace OpenSim.Framework.Servers | |||
85 | AssetBase asset = m_assetProvider.FetchAsset(assetID); | 86 | AssetBase asset = m_assetProvider.FetchAsset(assetID); |
86 | if (asset != null) | 87 | if (asset != null) |
87 | { | 88 | { |
88 | XmlSerializer xs = new XmlSerializer(typeof (AssetBase)); | 89 | if (asset.ContainsReferences && false) |
90 | { | ||
91 | asset.Data = ProcessOutgoingAssetData(asset.Data); | ||
92 | } | ||
93 | |||
94 | XmlSerializer xs = new XmlSerializer(typeof(AssetBase)); | ||
89 | MemoryStream ms = new MemoryStream(); | 95 | MemoryStream ms = new MemoryStream(); |
90 | XmlTextWriter xw = new XmlTextWriter(ms, Encoding.UTF8); | 96 | XmlTextWriter xw = new XmlTextWriter(ms, Encoding.UTF8); |
91 | xw.Formatting = Formatting.Indented; | 97 | xw.Formatting = Formatting.Indented; |
@@ -97,15 +103,7 @@ namespace OpenSim.Framework.Servers | |||
97 | 103 | ||
98 | result = ms.GetBuffer(); | 104 | result = ms.GetBuffer(); |
99 | 105 | ||
100 | //Ckrinke 1/11/09 Commenting out the succesful REST message as under heavy use there | 106 | Array.Resize<byte>(ref result, (int)ms.Length); |
101 | //are multiple messages in a second and that is usually (in my experience) meaning | ||
102 | //the logging itself is slowing down the program. Leaving the unsuccesful message | ||
103 | //as we need to know about that path. | ||
104 | // m_log.InfoFormat( | ||
105 | // "[REST]: GET:/asset found {0} with name {1}, size {2} bytes", | ||
106 | // assetID, asset.Name, result.Length); | ||
107 | |||
108 | Array.Resize<byte>(ref result, (int) ms.Length); | ||
109 | } | 107 | } |
110 | else | 108 | else |
111 | { | 109 | { |
@@ -118,5 +116,50 @@ namespace OpenSim.Framework.Servers | |||
118 | 116 | ||
119 | return result; | 117 | return result; |
120 | } | 118 | } |
119 | |||
120 | private byte[] ProcessOutgoingAssetData(byte[] assetData) | ||
121 | { | ||
122 | string data = Encoding.ASCII.GetString(assetData); | ||
123 | |||
124 | data = ProcessAssetDataString(data); | ||
125 | |||
126 | return Encoding.ASCII.GetBytes(data); | ||
127 | } | ||
128 | |||
129 | public string ProcessAssetDataString(string data) | ||
130 | { | ||
131 | Regex regex = new Regex("(creator_id|owner_id)\\s+(\\S+)"); | ||
132 | |||
133 | // IUserService userService = null; | ||
134 | |||
135 | data = regex.Replace(data, delegate(Match m) | ||
136 | { | ||
137 | string result = String.Empty; | ||
138 | |||
139 | string key = m.Groups[1].Captures[0].Value; | ||
140 | |||
141 | string value = m.Groups[2].Captures[0].Value; | ||
142 | |||
143 | Guid userUri; | ||
144 | |||
145 | switch (key) | ||
146 | { | ||
147 | case "creator_id": | ||
148 | userUri = new Guid(value); | ||
149 | // result = "creator_url " + userService(userService, userUri); | ||
150 | break; | ||
151 | |||
152 | case "owner_id": | ||
153 | userUri = new Guid(value); | ||
154 | // result = "owner_url " + ResolveUserUri(userService, userUri); | ||
155 | break; | ||
156 | } | ||
157 | |||
158 | return result; | ||
159 | }); | ||
160 | |||
161 | return data; | ||
162 | } | ||
163 | |||
121 | } | 164 | } |
122 | } \ No newline at end of file | 165 | } \ No newline at end of file |