From 6d825d7ea22f5accd1324a4ef8800eddb8dc86da Mon Sep 17 00:00:00 2001
From: Mic Bowman
Date: Fri, 8 Feb 2013 15:46:42 -0800
Subject: Broaden the internal OSD type checks to parse JSON that has non
string values.
---
.../Scripting/JsonStore/JsonStore.cs | 31 ++++++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region/OptionalModules')
diff --git a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStore.cs b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStore.cs
index 088d0cd..5c89717 100644
--- a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStore.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStore.cs
@@ -145,7 +145,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
if (result == null)
return false;
- if (useJson || result.Type == OSDType.String)
+ if (useJson || OSDBaseType(result.Type))
return true;
return false;
@@ -531,7 +531,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
return true;
}
- if (result.Type == OSDType.String)
+ if (OSDBaseType(result.Type))
{
value = result.AsString();
return true;
@@ -562,6 +562,33 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
///
///
// -----------------------------------------------------------------
+ protected static bool OSDBaseType(OSDType type)
+ {
+ // Should be the list of base types for which AsString() returns
+ // something useful
+ if (type == OSDType.Boolean)
+ return true;
+ if (type == OSDType.Integer)
+ return true;
+ if (type == OSDType.Real)
+ return true;
+ if (type == OSDType.String)
+ return true;
+ if (type == OSDType.UUID)
+ return true;
+ if (type == OSDType.Date)
+ return true;
+ if (type == OSDType.URI)
+ return true;
+
+ return false;
+ }
+
+ // -----------------------------------------------------------------
+ ///
+ ///
+ ///
+ // -----------------------------------------------------------------
protected static int ComputeSizeOf(OSD value)
{
string sval;
--
cgit v1.1
From d92eb803734956c1e0b260eb7740910e1fa3b891 Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Thu, 7 Feb 2013 21:57:46 -0800
Subject: BulletSim: add initial instance of the ExtendedPhysics region module
which adds new LSL commands for extended physics functions. Uses the
modInvoke system. Disabled by default.
---
.../Scripting/ExtendedPhysics/ExtendedPhysics.cs | 163 +++++++++++++++++++++
1 file changed, 163 insertions(+)
create mode 100755 OpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs
(limited to 'OpenSim/Region/OptionalModules')
diff --git a/OpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs b/OpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs
new file mode 100755
index 0000000..aaa349f
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyrightD
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSimulator Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+
+using OpenSim.Framework;
+using OpenSim.Region.Framework;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+using OpenSim.Region.CoreModules;
+
+using Mono.Addins;
+using Nini.Config;
+using log4net;
+using OpenMetaverse;
+
+namespace OpenSim.Region.OptionalModules.Scripting
+{
+[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
+public class ExtendedPhysics : INonSharedRegionModule
+{
+ private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+ private static string LogHeader = "[EXTENDED PHYSICS]";
+
+ private IConfig Configuration { get; set; }
+ private bool Enabled { get; set; }
+ private Scene BaseScene { get; set; }
+ private IScriptModuleComms Comms { get; set; }
+
+ #region INonSharedRegionModule
+
+ public string Name { get { return this.GetType().Name; } }
+
+ public void Initialise(IConfigSource config)
+ {
+ BaseScene = null;
+ Enabled = false;
+ Configuration = null;
+ Comms = null;
+
+ try
+ {
+ if ((Configuration = config.Configs["ExtendedPhysics"]) != null)
+ {
+ Enabled = Configuration.GetBoolean("Enabled", Enabled);
+ }
+ }
+ catch (Exception e)
+ {
+ m_log.ErrorFormat("{0} Initialization error: {0}", LogHeader, e);
+ }
+
+ m_log.ErrorFormat("{0} module {1} enabled", LogHeader, (Enabled ? "is" : "is not"));
+ }
+
+ public void Close()
+ {
+ if (BaseScene != null)
+ {
+ BaseScene.EventManager.OnSceneObjectPartUpdated -= EventManager_OnSceneObjectPartUpdated;
+ BaseScene = null;
+ }
+ }
+
+ public void AddRegion(Scene scene)
+ {
+ }
+
+ public void RemoveRegion(Scene scene)
+ {
+ if (BaseScene != null && BaseScene == scene)
+ {
+ Close();
+ }
+ }
+
+ public void RegionLoaded(Scene scene)
+ {
+ if (!Enabled) return;
+
+ BaseScene = scene;
+
+ Comms = BaseScene.RequestModuleInterface();
+ if (Comms == null)
+ {
+ m_log.WarnFormat("{0} ScriptModuleComms interface not defined", LogHeader);
+ Enabled = false;
+
+ return;
+ }
+
+ // Register as LSL functions all the [ScriptInvocation] marked methods.
+ Comms.RegisterScriptInvocations(this);
+
+ // When an object is modified, we might need to update its extended physics parameters
+ BaseScene.EventManager.OnSceneObjectPartUpdated += EventManager_OnSceneObjectPartUpdated;
+ }
+
+ public Type ReplaceableInterface { get { return null; } }
+
+ #endregion // INonSharedRegionModule
+
+ // Event generated when some property of a prim changes.
+ private void EventManager_OnSceneObjectPartUpdated(SceneObjectPart sop, bool isFullUpdate)
+ {
+ }
+
+ [ScriptConstant]
+ public static int PHYS_CENTER_OF_MASS = 1 << 0;
+
+ [ScriptConstant]
+ public static int PHYS_LINKSET_TYPE_CONSTRAINT = 1;
+ [ScriptConstant]
+ public static int PHYS_LINKSET_TYPE_COMPOUND = 2;
+ [ScriptConstant]
+ public static int PHYS_LINKSET_TYPE_MANUAL = 3;
+
+ [ScriptInvocation]
+ public string physGetEngineType(UUID hostID, UUID scriptID)
+ {
+ string ret = string.Empty;
+
+ if (BaseScene.PhysicsScene != null)
+ {
+ ret = BaseScene.PhysicsScene.EngineType;
+ }
+
+ return ret;
+ }
+
+ [ScriptInvocation]
+ public void physSetLinksetType(UUID hostID, UUID scriptID, int linksetType)
+ {
+ }
+}
+}
--
cgit v1.1
From 1b55a9d81e66972312fdc801d17da697466f9ed4 Mon Sep 17 00:00:00 2001
From: Robert Adams
Date: Fri, 8 Feb 2013 15:25:57 -0800
Subject: BulletSim: fix avatar bobbing or jiggling while stationary flying.
Various comments and debugging message mods.
---
.../Scripting/ExtendedPhysics/ExtendedPhysics.cs | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Region/OptionalModules')
diff --git a/OpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs b/OpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs
index aaa349f..6009dc5 100755
--- a/OpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs
@@ -77,13 +77,14 @@ public class ExtendedPhysics : INonSharedRegionModule
m_log.ErrorFormat("{0} Initialization error: {0}", LogHeader, e);
}
- m_log.ErrorFormat("{0} module {1} enabled", LogHeader, (Enabled ? "is" : "is not"));
+ m_log.InfoFormat("{0} module {1} enabled", LogHeader, (Enabled ? "is" : "is not"));
}
public void Close()
{
if (BaseScene != null)
{
+ BaseScene.EventManager.OnObjectAddedToScene -= EventManager_OnObjectAddedToScene;
BaseScene.EventManager.OnSceneObjectPartUpdated -= EventManager_OnSceneObjectPartUpdated;
BaseScene = null;
}
@@ -120,13 +121,20 @@ public class ExtendedPhysics : INonSharedRegionModule
Comms.RegisterScriptInvocations(this);
// When an object is modified, we might need to update its extended physics parameters
+ BaseScene.EventManager.OnObjectAddedToScene += EventManager_OnObjectAddedToScene;
BaseScene.EventManager.OnSceneObjectPartUpdated += EventManager_OnSceneObjectPartUpdated;
+
}
public Type ReplaceableInterface { get { return null; } }
#endregion // INonSharedRegionModule
+ private void EventManager_OnObjectAddedToScene(SceneObjectGroup obj)
+ {
+ throw new NotImplementedException();
+ }
+
// Event generated when some property of a prim changes.
private void EventManager_OnSceneObjectPartUpdated(SceneObjectPart sop, bool isFullUpdate)
{
--
cgit v1.1
From a8bc08ebe6523a2e66bb2e1d1d226d3159eba30c Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sat, 9 Feb 2013 01:10:53 +0000
Subject: Change TestDestroyStore() and TestJsonRemoveValue() to reflect the
fact that the return values have changed.
---
.../Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
(limited to 'OpenSim/Region/OptionalModules')
diff --git a/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs b/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs
index ca88d1a..af97ac7 100644
--- a/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs
@@ -144,8 +144,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore.Tests
int dsrv = (int)InvokeOp("JsonDestroyStore", fakeStoreId);
- // XXX: Current returns 'true' even though no such store existed. Need to ask if this is best behaviour.
- Assert.That(dsrv, Is.EqualTo(1));
+ Assert.That(dsrv, Is.EqualTo(0));
}
[Test]
@@ -211,9 +210,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore.Tests
// Test remove of non-existing value
int fakeValueRemove = (int)InvokeOp("JsonRemoveValue", storeId, "Hello");
-
- // XXX: Is this the best response to removing a value that isn't there?
- Assert.That(fakeValueRemove, Is.EqualTo(1));
+ Assert.That(fakeValueRemove, Is.EqualTo(0));
// Test get from non-existing store
UUID fakeStoreId = TestHelpers.ParseTail(0x500);
--
cgit v1.1
From 7bb82c8f2ed987410342c1367dde24b695593eec Mon Sep 17 00:00:00 2001
From: Mic Bowman
Date: Fri, 8 Feb 2013 22:43:15 -0800
Subject: Make JsonStore path parsing more robust. Should fix the invalid path
problem.
---
.../Scripting/JsonStore/JsonStore.cs | 68 +++++++++++++++-------
.../Scripting/JsonStore/JsonStoreScriptModule.cs | 12 +++-
2 files changed, 59 insertions(+), 21 deletions(-)
(limited to 'OpenSim/Region/OptionalModules')
diff --git a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStore.cs b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStore.cs
index 5c89717..3d715cc 100644
--- a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStore.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStore.cs
@@ -81,7 +81,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
protected static Regex m_ParsePassFour = new Regex("\\.+");
// expression used to validate the full path, this is canonical representation
- protected static Regex m_ValidatePath = new Regex("^\\.(({[^}]+}|\\[[0-9]+\\]|\\[\\+\\])\\.)+$");
+ protected static Regex m_ValidatePath = new Regex("^\\.(({[^}]+}|\\[[0-9]+\\]|\\[\\+\\])\\.)*$");
// expression used to match path components
protected static Regex m_PathComponent = new Regex("\\.({[^}]+}|\\[[0-9]+\\]|\\[\\+\\]+)");
@@ -107,9 +107,17 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
///
///
// -----------------------------------------------------------------
- public static string CanonicalPathExpression(string path)
+ public static bool CanonicalPathExpression(string ipath, out string opath)
{
- return PathExpressionToKey(ParsePathExpression(path));
+ Stack path;
+ if (! ParsePathExpression(ipath,out path))
+ {
+ opath = "";
+ return false;
+ }
+
+ opath = PathExpressionToKey(path);
+ return true;
}
// -----------------------------------------------------------------
@@ -139,7 +147,10 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
// -----------------------------------------------------------------
public bool TestPath(string expr, bool useJson)
{
- Stack path = ParsePathExpression(expr);
+ Stack path;
+ if (! ParsePathExpression(expr,out path))
+ return false;
+
OSD result = ProcessPathExpression(ValueStore,path);
if (result == null)
@@ -158,7 +169,13 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
// -----------------------------------------------------------------
public bool GetValue(string expr, out string value, bool useJson)
{
- Stack path = ParsePathExpression(expr);
+ Stack path;
+ if (! ParsePathExpression(expr,out path))
+ {
+ value = "";
+ return false;
+ }
+
OSD result = ProcessPathExpression(ValueStore,path);
return ConvertOutputValue(result,out value,useJson);
}
@@ -192,7 +209,10 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
// -----------------------------------------------------------------
public bool TakeValue(string expr, bool useJson, TakeValueCallback cback)
{
- Stack path = ParsePathExpression(expr);
+ Stack path;
+ if (! ParsePathExpression(expr,out path))
+ return false;
+
string pexpr = PathExpressionToKey(path);
OSD result = ProcessPathExpression(ValueStore,path);
@@ -223,7 +243,10 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
// -----------------------------------------------------------------
public bool ReadValue(string expr, bool useJson, TakeValueCallback cback)
{
- Stack path = ParsePathExpression(expr);
+ Stack path;
+ if (! ParsePathExpression(expr,out path))
+ return false;
+
string pexpr = PathExpressionToKey(path);
OSD result = ProcessPathExpression(ValueStore,path);
@@ -253,7 +276,10 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
// -----------------------------------------------------------------
protected bool SetValueFromExpression(string expr, OSD ovalue)
{
- Stack path = ParsePathExpression(expr);
+ Stack path;
+ if (! ParsePathExpression(expr,out path))
+ return false;
+
if (path.Count == 0)
{
ValueStore = ovalue;
@@ -399,34 +425,36 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
/// use a stack because we process the path in inverse order later
///
// -----------------------------------------------------------------
- protected static Stack ParsePathExpression(string path)
+ protected static bool ParsePathExpression(string expr, out Stack path)
{
- Stack m_path = new Stack();
+ path = new Stack();
// add front and rear separators
- path = "." + path + ".";
+ expr = "." + expr + ".";
- // add separators for quoted paths
- path = m_ParsePassOne.Replace(path,".$0.",-1,0);
+ // add separators for quoted exprs
+ expr = m_ParsePassOne.Replace(expr,".$0.",-1,0);
// add separators for array references
- path = m_ParsePassTwo.Replace(path,".$0.",-1,0);
+ expr = m_ParsePassTwo.Replace(expr,".$0.",-1,0);
// add quotes to bare identifier
- path = m_ParsePassThree.Replace(path,".{$1}",-1,0);
+ expr = m_ParsePassThree.Replace(expr,".{$1}",-1,0);
// remove extra separators
- path = m_ParsePassFour.Replace(path,".",-1,0);
+ expr = m_ParsePassFour.Replace(expr,".",-1,0);
// validate the results (catches extra quote characters for example)
- if (m_ValidatePath.IsMatch(path))
+ if (m_ValidatePath.IsMatch(expr))
{
- MatchCollection matches = m_PathComponent.Matches(path,0);
+ MatchCollection matches = m_PathComponent.Matches(expr,0);
foreach (Match match in matches)
- m_path.Push(match.Groups[1].Value);
+ path.Push(match.Groups[1].Value);
+
+ return true;
}
- return m_path;
+ return false;
}
// -----------------------------------------------------------------
diff --git a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreScriptModule.cs b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreScriptModule.cs
index d75cd32..e436304 100644
--- a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreScriptModule.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreScriptModule.cs
@@ -301,7 +301,16 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
[ScriptInvocation]
public string JsonList2Path(UUID hostID, UUID scriptID, object[] pathlist)
{
- return JsonStore.CanonicalPathExpression(ConvertList2Path(pathlist));
+ string ipath = ConvertList2Path(pathlist);
+ string opath;
+
+ if (JsonStore.CanonicalPathExpression(ipath,out opath))
+ return opath;
+
+ // This won't parse if passed to the other routines as opposed to
+ // returning an empty string which is a valid path and would overwrite
+ // the entire store
+ return "**INVALID**";
}
// -----------------------------------------------------------------
@@ -421,6 +430,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
// -----------------------------------------------------------------
protected void GenerateRuntimeError(string msg)
{
+ m_log.InfoFormat("[JsonStore] runtime error: {0}",msg);
throw new Exception("JsonStore Runtime Error: " + msg);
}
--
cgit v1.1