add initial test support for cap LSLSyntax. This does not seem to work for Opensimulator on viewers, In particular with FireStorm seems impossible to replace its own definitions, viwers do note revert to defaults on tp to a region that does not suport this cap, etc. So possible just a dead end. Disabled by default
parent
db255c97d6
commit
6569f12d40
|
@ -28,7 +28,9 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
using log4net;
|
using log4net;
|
||||||
using Nini.Config;
|
using Nini.Config;
|
||||||
using Mono.Addins;
|
using Mono.Addins;
|
||||||
|
@ -75,12 +77,16 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
private string m_GridName = string.Empty;
|
private string m_GridName = string.Empty;
|
||||||
private string m_GridURL = string.Empty;
|
private string m_GridURL = string.Empty;
|
||||||
|
|
||||||
|
static private UUID m_scriptSyntaxeID = UUID.Zero;
|
||||||
|
static private string m_scriptSyntaxeXML;
|
||||||
|
private bool m_doScriptSyntax;
|
||||||
|
|
||||||
#region ISharedRegionModule Members
|
#region ISharedRegionModule Members
|
||||||
|
|
||||||
public void Initialise(IConfigSource source)
|
public void Initialise(IConfigSource source)
|
||||||
{
|
{
|
||||||
IConfig config = source.Configs["SimulatorFeatures"];
|
IConfig config = source.Configs["SimulatorFeatures"];
|
||||||
|
m_doScriptSyntax = false;
|
||||||
if (config != null)
|
if (config != null)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
|
@ -103,8 +109,10 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
if (m_GridName == string.Empty)
|
if (m_GridName == string.Empty)
|
||||||
m_GridName = Util.GetConfigVarFromSections<string>(
|
m_GridName = Util.GetConfigVarFromSections<string>(
|
||||||
source, "gridname", new string[] { "GridInfo", "SimulatorFeatures" }, String.Empty);
|
source, "gridname", new string[] { "GridInfo", "SimulatorFeatures" }, String.Empty);
|
||||||
|
m_doScriptSyntax = config.GetBoolean("ScriptSyntaxe", m_doScriptSyntax);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ReadScriptSyntaxe();
|
||||||
AddDefaultFeatures();
|
AddDefaultFeatures();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,6 +168,9 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
typesMap["prim"] = true;
|
typesMap["prim"] = true;
|
||||||
m_features["PhysicsShapeTypes"] = typesMap;
|
m_features["PhysicsShapeTypes"] = typesMap;
|
||||||
|
|
||||||
|
if(m_doScriptSyntax && m_scriptSyntaxeID != UUID.Zero)
|
||||||
|
m_features["LSLSyntaxId"] = OSD.FromUUID(m_scriptSyntaxeID);
|
||||||
|
|
||||||
// Extra information for viewers that want to use it
|
// Extra information for viewers that want to use it
|
||||||
// TODO: Take these out of here into their respective modules, like map-server-url
|
// TODO: Take these out of here into their respective modules, like map-server-url
|
||||||
OSDMap extrasMap;
|
OSDMap extrasMap;
|
||||||
|
@ -192,12 +203,20 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
public void RegisterCaps(UUID agentID, Caps caps)
|
public void RegisterCaps(UUID agentID, Caps caps)
|
||||||
{
|
{
|
||||||
IRequestHandler reqHandler
|
IRequestHandler reqHandler = new RestHTTPHandler(
|
||||||
= new RestHTTPHandler(
|
|
||||||
"GET", "/CAPS/" + UUID.Random(),
|
"GET", "/CAPS/" + UUID.Random(),
|
||||||
x => { return HandleSimulatorFeaturesRequest(x, agentID); }, "SimulatorFeatures", agentID.ToString());
|
x => { return HandleSimulatorFeaturesRequest(x, agentID); },
|
||||||
|
"SimulatorFeatures", agentID.ToString());
|
||||||
caps.RegisterHandler("SimulatorFeatures", reqHandler);
|
caps.RegisterHandler("SimulatorFeatures", reqHandler);
|
||||||
|
|
||||||
|
if (m_doScriptSyntax && m_scriptSyntaxeID != UUID.Zero && !String.IsNullOrEmpty(m_scriptSyntaxeXML))
|
||||||
|
{
|
||||||
|
IRequestHandler sreqHandler = new RestHTTPHandler(
|
||||||
|
"GET", "/CAPS/" + UUID.Random(),
|
||||||
|
x => { return HandleSyntaxeRequest(x, agentID); },
|
||||||
|
"LSLSyntax", agentID.ToString());
|
||||||
|
caps.RegisterHandler("LSLSyntax", sreqHandler);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddFeature(string name, OSD value)
|
public void AddFeature(string name, OSD value)
|
||||||
|
@ -259,12 +278,21 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
return responsedata;
|
return responsedata;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Hashtable HandleSyntaxeRequest(Hashtable mDhttpMethod, UUID agentID)
|
||||||
|
{
|
||||||
|
Hashtable responsedata = new Hashtable();
|
||||||
|
responsedata["int_response_code"] = 200;
|
||||||
|
responsedata["str_response_string"] = m_scriptSyntaxeXML;
|
||||||
|
return responsedata;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the grid extra features.
|
/// Gets the grid extra features.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name='featuresURI'>
|
/// <param name='featuresURI'>
|
||||||
/// The URI Robust uses to handle the get_extra_features request
|
/// The URI Robust uses to handle the get_extra_features request
|
||||||
/// </param>
|
/// </param>
|
||||||
|
|
||||||
private void GetGridExtraFeatures(Scene scene)
|
private void GetGridExtraFeatures(Scene scene)
|
||||||
{
|
{
|
||||||
Dictionary<string, object> extraFeatures = scene.GridService.GetExtraFeatures();
|
Dictionary<string, object> extraFeatures = scene.GridService.GetExtraFeatures();
|
||||||
|
@ -299,5 +327,44 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ReadScriptSyntaxe()
|
||||||
|
{
|
||||||
|
if(!m_doScriptSyntax || m_scriptSyntaxeID != UUID.Zero)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(!File.Exists("ScriptSyntaxe.xml"))
|
||||||
|
return;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (StreamReader sr = File.OpenText("ScriptSyntaxe.xml"))
|
||||||
|
{
|
||||||
|
string version = sr.ReadLine();
|
||||||
|
if(string.IsNullOrEmpty(version))
|
||||||
|
return;
|
||||||
|
if(!UUID.TryParse(version, out m_scriptSyntaxeID))
|
||||||
|
return;
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder(400*1024);
|
||||||
|
string s="";
|
||||||
|
char[] trimc = new char[] {' ','\t', '\n', '\r'};
|
||||||
|
while((s = sr.ReadLine()) != null)
|
||||||
|
{
|
||||||
|
s = s.Trim(trimc);
|
||||||
|
if(String.IsNullOrEmpty(s) || s.StartsWith("<--"))
|
||||||
|
continue;
|
||||||
|
sb.Append(s);
|
||||||
|
}
|
||||||
|
m_scriptSyntaxeXML = sb.ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
m_log.Error("[SIMULATOR FEATURES MODULE] fail read ScriptSyntaxe.xml file");
|
||||||
|
m_scriptSyntaxeID = UUID.Zero;
|
||||||
|
m_scriptSyntaxeXML = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue