diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/Caps/SimulatorFeaturesModule.cs | 79 |
1 files changed, 73 insertions, 6 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/SimulatorFeaturesModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/SimulatorFeaturesModule.cs index cbcbd2d..8c7fb56 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/SimulatorFeaturesModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/SimulatorFeaturesModule.cs | |||
@@ -28,7 +28,9 @@ | |||
28 | using System; | 28 | using System; |
29 | using System.Collections; | 29 | using System.Collections; |
30 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
31 | using System.IO; | ||
31 | using System.Reflection; | 32 | using System.Reflection; |
33 | using System.Text; | ||
32 | using log4net; | 34 | using log4net; |
33 | using Nini.Config; | 35 | using Nini.Config; |
34 | using Mono.Addins; | 36 | using Mono.Addins; |
@@ -75,12 +77,16 @@ namespace OpenSim.Region.ClientStack.Linden | |||
75 | private string m_GridName = string.Empty; | 77 | private string m_GridName = string.Empty; |
76 | private string m_GridURL = string.Empty; | 78 | private string m_GridURL = string.Empty; |
77 | 79 | ||
80 | static private UUID m_scriptSyntaxeID = UUID.Zero; | ||
81 | static private string m_scriptSyntaxeXML; | ||
82 | private bool m_doScriptSyntax; | ||
83 | |||
78 | #region ISharedRegionModule Members | 84 | #region ISharedRegionModule Members |
79 | 85 | ||
80 | public void Initialise(IConfigSource source) | 86 | public void Initialise(IConfigSource source) |
81 | { | 87 | { |
82 | IConfig config = source.Configs["SimulatorFeatures"]; | 88 | IConfig config = source.Configs["SimulatorFeatures"]; |
83 | 89 | m_doScriptSyntax = false; | |
84 | if (config != null) | 90 | if (config != null) |
85 | { | 91 | { |
86 | // | 92 | // |
@@ -103,8 +109,10 @@ namespace OpenSim.Region.ClientStack.Linden | |||
103 | if (m_GridName == string.Empty) | 109 | if (m_GridName == string.Empty) |
104 | m_GridName = Util.GetConfigVarFromSections<string>( | 110 | m_GridName = Util.GetConfigVarFromSections<string>( |
105 | source, "gridname", new string[] { "GridInfo", "SimulatorFeatures" }, String.Empty); | 111 | source, "gridname", new string[] { "GridInfo", "SimulatorFeatures" }, String.Empty); |
112 | m_doScriptSyntax = config.GetBoolean("ScriptSyntaxe", m_doScriptSyntax); | ||
106 | } | 113 | } |
107 | 114 | ||
115 | ReadScriptSyntaxe(); | ||
108 | AddDefaultFeatures(); | 116 | AddDefaultFeatures(); |
109 | } | 117 | } |
110 | 118 | ||
@@ -160,6 +168,9 @@ namespace OpenSim.Region.ClientStack.Linden | |||
160 | typesMap["prim"] = true; | 168 | typesMap["prim"] = true; |
161 | m_features["PhysicsShapeTypes"] = typesMap; | 169 | m_features["PhysicsShapeTypes"] = typesMap; |
162 | 170 | ||
171 | if(m_doScriptSyntax && m_scriptSyntaxeID != UUID.Zero) | ||
172 | m_features["LSLSyntaxId"] = OSD.FromUUID(m_scriptSyntaxeID); | ||
173 | |||
163 | // Extra information for viewers that want to use it | 174 | // Extra information for viewers that want to use it |
164 | // TODO: Take these out of here into their respective modules, like map-server-url | 175 | // TODO: Take these out of here into their respective modules, like map-server-url |
165 | OSDMap extrasMap; | 176 | OSDMap extrasMap; |
@@ -192,12 +203,20 @@ namespace OpenSim.Region.ClientStack.Linden | |||
192 | 203 | ||
193 | public void RegisterCaps(UUID agentID, Caps caps) | 204 | public void RegisterCaps(UUID agentID, Caps caps) |
194 | { | 205 | { |
195 | IRequestHandler reqHandler | 206 | IRequestHandler reqHandler = new RestHTTPHandler( |
196 | = new RestHTTPHandler( | ||
197 | "GET", "/CAPS/" + UUID.Random(), | 207 | "GET", "/CAPS/" + UUID.Random(), |
198 | x => { return HandleSimulatorFeaturesRequest(x, agentID); }, "SimulatorFeatures", agentID.ToString()); | 208 | x => { return HandleSimulatorFeaturesRequest(x, agentID); }, |
199 | 209 | "SimulatorFeatures", agentID.ToString()); | |
200 | caps.RegisterHandler("SimulatorFeatures", reqHandler); | 210 | caps.RegisterHandler("SimulatorFeatures", reqHandler); |
211 | |||
212 | if (m_doScriptSyntax && m_scriptSyntaxeID != UUID.Zero && !String.IsNullOrEmpty(m_scriptSyntaxeXML)) | ||
213 | { | ||
214 | IRequestHandler sreqHandler = new RestHTTPHandler( | ||
215 | "GET", "/CAPS/" + UUID.Random(), | ||
216 | x => { return HandleSyntaxeRequest(x, agentID); }, | ||
217 | "LSLSyntax", agentID.ToString()); | ||
218 | caps.RegisterHandler("LSLSyntax", sreqHandler); | ||
219 | } | ||
201 | } | 220 | } |
202 | 221 | ||
203 | public void AddFeature(string name, OSD value) | 222 | public void AddFeature(string name, OSD value) |
@@ -236,7 +255,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
236 | 255 | ||
237 | private Hashtable HandleSimulatorFeaturesRequest(Hashtable mDhttpMethod, UUID agentID) | 256 | private Hashtable HandleSimulatorFeaturesRequest(Hashtable mDhttpMethod, UUID agentID) |
238 | { | 257 | { |
239 | // m_log.DebugFormat("[SIMULATOR FEATURES MODULE]: SimulatorFeatures request"); | 258 | // m_log.DebugFormat("[SIMULATOR FEATURES MODULE]: SimulatorFeatures request"); |
240 | 259 | ||
241 | OSDMap copy = DeepCopy(); | 260 | OSDMap copy = DeepCopy(); |
242 | 261 | ||
@@ -259,12 +278,21 @@ namespace OpenSim.Region.ClientStack.Linden | |||
259 | return responsedata; | 278 | return responsedata; |
260 | } | 279 | } |
261 | 280 | ||
281 | private Hashtable HandleSyntaxeRequest(Hashtable mDhttpMethod, UUID agentID) | ||
282 | { | ||
283 | Hashtable responsedata = new Hashtable(); | ||
284 | responsedata["int_response_code"] = 200; | ||
285 | responsedata["str_response_string"] = m_scriptSyntaxeXML; | ||
286 | return responsedata; | ||
287 | } | ||
288 | |||
262 | /// <summary> | 289 | /// <summary> |
263 | /// Gets the grid extra features. | 290 | /// Gets the grid extra features. |
264 | /// </summary> | 291 | /// </summary> |
265 | /// <param name='featuresURI'> | 292 | /// <param name='featuresURI'> |
266 | /// The URI Robust uses to handle the get_extra_features request | 293 | /// The URI Robust uses to handle the get_extra_features request |
267 | /// </param> | 294 | /// </param> |
295 | |||
268 | private void GetGridExtraFeatures(Scene scene) | 296 | private void GetGridExtraFeatures(Scene scene) |
269 | { | 297 | { |
270 | Dictionary<string, object> extraFeatures = scene.GridService.GetExtraFeatures(); | 298 | Dictionary<string, object> extraFeatures = scene.GridService.GetExtraFeatures(); |
@@ -299,5 +327,44 @@ namespace OpenSim.Region.ClientStack.Linden | |||
299 | 327 | ||
300 | return url; | 328 | return url; |
301 | } | 329 | } |
330 | |||
331 | private void ReadScriptSyntaxe() | ||
332 | { | ||
333 | if(!m_doScriptSyntax || m_scriptSyntaxeID != UUID.Zero) | ||
334 | return; | ||
335 | |||
336 | if(!File.Exists("ScriptSyntaxe.xml")) | ||
337 | return; | ||
338 | |||
339 | try | ||
340 | { | ||
341 | using (StreamReader sr = File.OpenText("ScriptSyntaxe.xml")) | ||
342 | { | ||
343 | string version = sr.ReadLine(); | ||
344 | if(string.IsNullOrEmpty(version)) | ||
345 | return; | ||
346 | if(!UUID.TryParse(version, out m_scriptSyntaxeID)) | ||
347 | return; | ||
348 | |||
349 | StringBuilder sb = new StringBuilder(400*1024); | ||
350 | string s=""; | ||
351 | char[] trimc = new char[] {' ','\t', '\n', '\r'}; | ||
352 | while((s = sr.ReadLine()) != null) | ||
353 | { | ||
354 | s = s.Trim(trimc); | ||
355 | if(String.IsNullOrEmpty(s) || s.StartsWith("<--")) | ||
356 | continue; | ||
357 | sb.Append(s); | ||
358 | } | ||
359 | m_scriptSyntaxeXML = sb.ToString(); | ||
360 | } | ||
361 | } | ||
362 | catch | ||
363 | { | ||
364 | m_log.Error("[SIMULATOR FEATURES MODULE] fail read ScriptSyntaxe.xml file"); | ||
365 | m_scriptSyntaxeID = UUID.Zero; | ||
366 | m_scriptSyntaxeXML = ""; | ||
367 | } | ||
368 | } | ||
302 | } | 369 | } |
303 | } | 370 | } |