Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
commit
f676408e2a
|
@ -85,16 +85,26 @@ namespace OpenSim.ApplicationPlugins.RegionModulesController
|
|||
if (modulesConfig == null)
|
||||
modulesConfig = m_openSim.ConfigSource.Source.AddConfig("Modules");
|
||||
|
||||
Dictionary<RuntimeAddin, IList<int>> loadedModules = new Dictionary<RuntimeAddin, IList<int>>();
|
||||
|
||||
// Scan modules and load all that aren't disabled
|
||||
foreach (TypeExtensionNode node in
|
||||
AddinManager.GetExtensionNodes("/OpenSim/RegionModules"))
|
||||
{
|
||||
IList<int> loadedModuleData;
|
||||
|
||||
if (!loadedModules.ContainsKey(node.Addin))
|
||||
loadedModules.Add(node.Addin, new List<int> { 0, 0, 0 });
|
||||
|
||||
loadedModuleData = loadedModules[node.Addin];
|
||||
|
||||
if (node.Type.GetInterface(typeof(ISharedRegionModule).ToString()) != null)
|
||||
{
|
||||
if (CheckModuleEnabled(node, modulesConfig))
|
||||
{
|
||||
m_log.DebugFormat("[REGIONMODULES]: Found shared region module {0}, class {1}", node.Id, node.Type);
|
||||
m_sharedModules.Add(node);
|
||||
loadedModuleData[0]++;
|
||||
}
|
||||
}
|
||||
else if (node.Type.GetInterface(typeof(INonSharedRegionModule).ToString()) != null)
|
||||
|
@ -103,14 +113,26 @@ namespace OpenSim.ApplicationPlugins.RegionModulesController
|
|||
{
|
||||
m_log.DebugFormat("[REGIONMODULES]: Found non-shared region module {0}, class {1}", node.Id, node.Type);
|
||||
m_nonSharedModules.Add(node);
|
||||
loadedModuleData[1]++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_log.DebugFormat("[REGIONMODULES]: Found unknown type of module {0}, class {1}", node.Id, node.Type);
|
||||
m_log.WarnFormat("[REGIONMODULES]: Found unknown type of module {0}, class {1}", node.Id, node.Type);
|
||||
loadedModuleData[2]++;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (KeyValuePair<RuntimeAddin, IList<int>> loadedModuleData in loadedModules)
|
||||
{
|
||||
m_log.InfoFormat(
|
||||
"[REGIONMODULES]: From plugin {0}, (version {1}), loaded {2} modules, {3} shared, {4} non-shared {5} unknown",
|
||||
loadedModuleData.Key.Id,
|
||||
loadedModuleData.Key.Version,
|
||||
loadedModuleData.Value[0] + loadedModuleData.Value[1] + loadedModuleData.Value[2],
|
||||
loadedModuleData.Value[0], loadedModuleData.Value[1], loadedModuleData.Value[2]);
|
||||
}
|
||||
|
||||
// Load and init the module. We try a constructor with a port
|
||||
// if a port was given, fall back to one without if there is
|
||||
// no port or the more specific constructor fails.
|
||||
|
|
|
@ -108,6 +108,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
private int _bufferLength;
|
||||
private bool _closing;
|
||||
private bool _upgraded;
|
||||
private int _maxPayloadBytes = 41943040;
|
||||
|
||||
private const string HandshakeAcceptText =
|
||||
"HTTP/1.1 101 Switching Protocols\r\n" +
|
||||
|
@ -195,6 +196,15 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
HandshakeAndUpgrade();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Max Payload Size in bytes. Defaults to 40MB, but could be set upon connection before calling handshake and upgrade.
|
||||
/// </summary>
|
||||
public int MaxPayloadSize
|
||||
{
|
||||
get { return _maxPayloadBytes; }
|
||||
set { _maxPayloadBytes = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This triggers the websocket start the upgrade process
|
||||
/// </summary>
|
||||
|
@ -367,7 +377,12 @@ namespace OpenSim.Framework.Servers.HttpServer
|
|||
if (headerread)
|
||||
{
|
||||
_socketState.FrameComplete = false;
|
||||
if (pheader.PayloadLen > (ulong) _maxPayloadBytes)
|
||||
{
|
||||
Close("Invalid Payload size");
|
||||
|
||||
return;
|
||||
}
|
||||
if (pheader.PayloadLen > 0)
|
||||
{
|
||||
if ((int) pheader.PayloadLen > _bufferPosition - offset)
|
||||
|
|
|
@ -134,6 +134,10 @@ namespace OpenSim
|
|||
/// <param name="configSource"></param>
|
||||
public OpenSimBase(IConfigSource configSource) : base()
|
||||
{
|
||||
// FIXME: This should be done down in ServerBase but we need to sort out and refactor the log4net
|
||||
// XmlConfigurator calls first accross servers.
|
||||
m_log.InfoFormat("[SERVER BASE]: Starting in {0}", m_startupDirectory);
|
||||
|
||||
LoadConfigSettings(configSource);
|
||||
}
|
||||
|
||||
|
|
|
@ -57,7 +57,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
public bool Enabled { get; private set; }
|
||||
|
||||
private Scene m_scene;
|
||||
private UUID m_agentID;
|
||||
|
||||
#region ISharedRegionModule Members
|
||||
|
||||
|
@ -118,25 +117,26 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
public void RegisterCaps(UUID agentID, Caps caps)
|
||||
{
|
||||
IRequestHandler reqHandler
|
||||
= new RestHTTPHandler("GET", "/CAPS/" + UUID.Random(), MeshUploadFlag, "MeshUploadFlag", agentID.ToString());
|
||||
= new RestHTTPHandler(
|
||||
"GET", "/CAPS/" + UUID.Random(), ht => MeshUploadFlag(ht, agentID), "MeshUploadFlag", agentID.ToString());
|
||||
|
||||
caps.RegisterHandler("MeshUploadFlag", reqHandler);
|
||||
m_agentID = agentID;
|
||||
|
||||
}
|
||||
|
||||
private Hashtable MeshUploadFlag(Hashtable mDhttpMethod)
|
||||
private Hashtable MeshUploadFlag(Hashtable mDhttpMethod, UUID agentID)
|
||||
{
|
||||
// m_log.DebugFormat("[MESH UPLOAD FLAG MODULE]: MeshUploadFlag request");
|
||||
|
||||
OSDMap data = new OSDMap();
|
||||
ScenePresence sp = m_scene.GetScenePresence(m_agentID);
|
||||
ScenePresence sp = m_scene.GetScenePresence(agentID);
|
||||
data["username"] = sp.Firstname + "." + sp.Lastname;
|
||||
data["display_name_next_update"] = new OSDDate(DateTime.Now);
|
||||
data["legacy_first_name"] = sp.Firstname;
|
||||
data["mesh_upload_status"] = "valid";
|
||||
data["display_name"] = sp.Firstname + " " + sp.Lastname;
|
||||
data["legacy_last_name"] = sp.Lastname;
|
||||
data["id"] = m_agentID;
|
||||
data["id"] = agentID;
|
||||
data["is_display_name_default"] = true;
|
||||
|
||||
//Send back data
|
||||
|
|
|
@ -790,6 +790,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
handshake.RegionInfo3.ColoName = Utils.EmptyBytes;
|
||||
handshake.RegionInfo3.ProductName = Util.StringToBytes256(regionInfo.RegionType);
|
||||
handshake.RegionInfo3.ProductSKU = Utils.EmptyBytes;
|
||||
handshake.RegionInfo4 = new RegionHandshakePacket.RegionInfo4Block[0];
|
||||
|
||||
OutPacket(handshake, ThrottleOutPacketType.Task);
|
||||
}
|
||||
|
@ -3571,6 +3572,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
|
||||
avp.Sender.IsTrial = false;
|
||||
avp.Sender.ID = agentID;
|
||||
avp.AppearanceData = new AvatarAppearancePacket.AppearanceDataBlock[0];
|
||||
//m_log.DebugFormat("[CLIENT]: Sending appearance for {0} to {1}", agentID.ToString(), AgentId.ToString());
|
||||
OutPacket(avp, ThrottleOutPacketType.Task);
|
||||
}
|
||||
|
@ -4192,7 +4194,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
pack.Stat = stats.StatsBlock;
|
||||
|
||||
pack.Header.Reliable = false;
|
||||
|
||||
pack.RegionInfo = new SimStatsPacket.RegionInfoBlock[0];
|
||||
OutPacket(pack, ThrottleOutPacketType.Task);
|
||||
}
|
||||
|
||||
|
|
|
@ -156,9 +156,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
|||
|
||||
public void Initialise(IConfigSource config)
|
||||
{
|
||||
IConfig myConfig = config.Configs["Startup"];
|
||||
|
||||
string permissionModules = myConfig.GetString("permissionmodules", "DefaultPermissionsModule");
|
||||
string permissionModules = Util.GetConfigVarFromSections<string>(config, "permissionmodules",
|
||||
new string[] { "Startup", "Permissions" }, "DefaultPermissionsModule");
|
||||
|
||||
List<string> modules = new List<string>(permissionModules.Split(','));
|
||||
|
||||
|
@ -167,26 +166,34 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
|||
|
||||
m_Enabled = true;
|
||||
|
||||
m_allowGridGods = myConfig.GetBoolean("allow_grid_gods", false);
|
||||
m_bypassPermissions = !myConfig.GetBoolean("serverside_object_permissions", true);
|
||||
m_propagatePermissions = myConfig.GetBoolean("propagate_permissions", true);
|
||||
m_RegionOwnerIsGod = myConfig.GetBoolean("region_owner_is_god", true);
|
||||
m_RegionManagerIsGod = myConfig.GetBoolean("region_manager_is_god", false);
|
||||
m_ParcelOwnerIsGod = myConfig.GetBoolean("parcel_owner_is_god", true);
|
||||
m_allowGridGods = Util.GetConfigVarFromSections<bool>(config, "allow_grid_gods",
|
||||
new string[] { "Startup", "Permissions" }, false);
|
||||
m_bypassPermissions = !Util.GetConfigVarFromSections<bool>(config, "serverside_object_permissions",
|
||||
new string[] { "Startup", "Permissions" }, true);
|
||||
m_propagatePermissions = Util.GetConfigVarFromSections<bool>(config, "propagate_permissions",
|
||||
new string[] { "Startup", "Permissions" }, true);
|
||||
m_RegionOwnerIsGod = Util.GetConfigVarFromSections<bool>(config, "region_owner_is_god",
|
||||
new string[] { "Startup", "Permissions" }, true);
|
||||
m_RegionManagerIsGod = Util.GetConfigVarFromSections<bool>(config, "region_manager_is_god",
|
||||
new string[] { "Startup", "Permissions" }, false);
|
||||
m_ParcelOwnerIsGod = Util.GetConfigVarFromSections<bool>(config, "parcel_owner_is_god",
|
||||
new string[] { "Startup", "Permissions" }, true);
|
||||
|
||||
m_SimpleBuildPermissions = myConfig.GetBoolean("simple_build_permissions", false);
|
||||
m_SimpleBuildPermissions = Util.GetConfigVarFromSections<bool>(config, "simple_build_permissions",
|
||||
new string[] { "Startup", "Permissions" }, false);
|
||||
|
||||
m_allowedScriptCreators
|
||||
= ParseUserSetConfigSetting(myConfig, "allowed_script_creators", m_allowedScriptCreators);
|
||||
= ParseUserSetConfigSetting(config, "allowed_script_creators", m_allowedScriptCreators);
|
||||
m_allowedScriptEditors
|
||||
= ParseUserSetConfigSetting(myConfig, "allowed_script_editors", m_allowedScriptEditors);
|
||||
= ParseUserSetConfigSetting(config, "allowed_script_editors", m_allowedScriptEditors);
|
||||
|
||||
if (m_bypassPermissions)
|
||||
m_log.Info("[PERMISSIONS]: serverside_object_permissions = false in ini file so disabling all region service permission checks");
|
||||
else
|
||||
m_log.Debug("[PERMISSIONS]: Enabling all region service permission checks");
|
||||
|
||||
string grant = myConfig.GetString("GrantLSL", "");
|
||||
string grant = Util.GetConfigVarFromSections<string>(config, "GrantLSL",
|
||||
new string[] { "Startup", "Permissions" }, string.Empty);
|
||||
if (grant.Length > 0)
|
||||
{
|
||||
foreach (string uuidl in grant.Split(','))
|
||||
|
@ -196,7 +203,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
|||
}
|
||||
}
|
||||
|
||||
grant = myConfig.GetString("GrantCS", "");
|
||||
grant = Util.GetConfigVarFromSections<string>(config, "GrantCS",
|
||||
new string[] { "Startup", "Permissions" }, string.Empty);
|
||||
if (grant.Length > 0)
|
||||
{
|
||||
foreach (string uuidl in grant.Split(','))
|
||||
|
@ -206,7 +214,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
|||
}
|
||||
}
|
||||
|
||||
grant = myConfig.GetString("GrantVB", "");
|
||||
grant = Util.GetConfigVarFromSections<string>(config, "GrantVB",
|
||||
new string[] { "Startup", "Permissions" }, string.Empty);
|
||||
if (grant.Length > 0)
|
||||
{
|
||||
foreach (string uuidl in grant.Split(','))
|
||||
|
@ -216,7 +225,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
|||
}
|
||||
}
|
||||
|
||||
grant = myConfig.GetString("GrantJS", "");
|
||||
grant = Util.GetConfigVarFromSections<string>(config, "GrantJS",
|
||||
new string[] { "Startup", "Permissions" }, string.Empty);
|
||||
if (grant.Length > 0)
|
||||
{
|
||||
foreach (string uuidl in grant.Split(','))
|
||||
|
@ -226,7 +236,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
|||
}
|
||||
}
|
||||
|
||||
grant = myConfig.GetString("GrantYP", "");
|
||||
grant = Util.GetConfigVarFromSections<string>(config, "GrantYP",
|
||||
new string[] { "Startup", "Permissions" }, string.Empty);
|
||||
if (grant.Length > 0)
|
||||
{
|
||||
foreach (string uuidl in grant.Split(','))
|
||||
|
@ -464,11 +475,12 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
|||
/// <param name="settingName"></param>
|
||||
/// <param name="defaultValue">The default value for this attribute</param>
|
||||
/// <returns>The parsed value</returns>
|
||||
private static UserSet ParseUserSetConfigSetting(IConfig config, string settingName, UserSet defaultValue)
|
||||
private static UserSet ParseUserSetConfigSetting(IConfigSource config, string settingName, UserSet defaultValue)
|
||||
{
|
||||
UserSet userSet = defaultValue;
|
||||
|
||||
string rawSetting = config.GetString(settingName, defaultValue.ToString());
|
||||
string rawSetting = Util.GetConfigVarFromSections<string>(config, settingName,
|
||||
new string[] {"Startup", "Permissions"}, defaultValue.ToString());
|
||||
|
||||
// Temporary measure to allow 'gods' to be specified in config for consistency's sake. In the long term
|
||||
// this should disappear.
|
||||
|
|
|
@ -148,8 +148,6 @@ namespace OpenSim.Region.DataSnapshot
|
|||
return;
|
||||
}
|
||||
|
||||
if (m_enabled)
|
||||
m_snapStore = new SnapshotStore(m_snapsDir, m_gridinfo, m_listener_port, m_hostname);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -163,8 +161,22 @@ namespace OpenSim.Region.DataSnapshot
|
|||
|
||||
m_log.DebugFormat("[DATASNAPSHOT]: Module added to Scene {0}.", scene.RegionInfo.RegionName);
|
||||
|
||||
m_snapStore.AddScene(scene);
|
||||
if (!m_servicesNotified)
|
||||
{
|
||||
m_hostname = scene.RegionInfo.ExternalHostName;
|
||||
m_snapStore = new SnapshotStore(m_snapsDir, m_gridinfo, m_listener_port, m_hostname);
|
||||
|
||||
//Hand it the first scene, assuming that all scenes have the same BaseHTTPServer
|
||||
new DataRequestHandler(scene, this);
|
||||
|
||||
if (m_dataServices != "" && m_dataServices != "noservices")
|
||||
NotifyDataServices(m_dataServices, "online");
|
||||
|
||||
m_servicesNotified = true;
|
||||
}
|
||||
|
||||
m_scenes.Add(scene);
|
||||
m_snapStore.AddScene(scene);
|
||||
|
||||
Assembly currentasm = Assembly.GetExecutingAssembly();
|
||||
|
||||
|
@ -189,22 +201,6 @@ namespace OpenSim.Region.DataSnapshot
|
|||
}
|
||||
}
|
||||
|
||||
// Must be done here because on shared modules, PostInitialise() will run
|
||||
// BEFORE any scenes are registered. There is no "all scenes have been loaded"
|
||||
// kind of callback because scenes may be created dynamically, so we cannot
|
||||
// have that info, ever.
|
||||
if (!m_servicesNotified)
|
||||
{
|
||||
//Hand it the first scene, assuming that all scenes have the same BaseHTTPServer
|
||||
new DataRequestHandler(m_scenes[0], this);
|
||||
|
||||
m_hostname = m_scenes[0].RegionInfo.ExternalHostName;
|
||||
|
||||
if (m_dataServices != "" && m_dataServices != "noservices")
|
||||
NotifyDataServices(m_dataServices, "online");
|
||||
|
||||
m_servicesNotified = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
|
|
|
@ -932,7 +932,12 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
}
|
||||
|
||||
string grant = startupConfig.GetString("AllowedClients", String.Empty);
|
||||
string[] possibleAccessControlConfigSections = new string[] { "AccessControl", "Startup" };
|
||||
|
||||
string grant
|
||||
= Util.GetConfigVarFromSections<string>(
|
||||
config, "AllowedClients", possibleAccessControlConfigSections, "");
|
||||
|
||||
if (grant.Length > 0)
|
||||
{
|
||||
foreach (string viewer in grant.Split('|'))
|
||||
|
@ -941,7 +946,10 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
}
|
||||
|
||||
grant = startupConfig.GetString("BannedClients", String.Empty);
|
||||
grant
|
||||
= Util.GetConfigVarFromSections<string>(
|
||||
config, "BannedClients", possibleAccessControlConfigSections, "");
|
||||
|
||||
if (grant.Length > 0)
|
||||
{
|
||||
foreach (string viewer in grant.Split('|'))
|
||||
|
|
|
@ -130,7 +130,7 @@ namespace OpenSim.Region.Framework.Tests
|
|||
SceneObjectPart sop1 = sog1.RootPart;
|
||||
TaskInventoryItem sopItem1
|
||||
= TaskInventoryHelpers.AddNotecard(
|
||||
scene, sop1, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900));
|
||||
scene, sop1, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900), "Hello World!");
|
||||
|
||||
InventoryFolderBase folder
|
||||
= InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, user1.PrincipalID, "Objects")[0];
|
||||
|
@ -162,7 +162,7 @@ namespace OpenSim.Region.Framework.Tests
|
|||
SceneObjectPart sop1 = sog1.RootPart;
|
||||
TaskInventoryItem sopItem1
|
||||
= TaskInventoryHelpers.AddNotecard(
|
||||
scene, sop1, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900));
|
||||
scene, sop1, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900), "Hello World!");
|
||||
|
||||
// Perform test
|
||||
scene.MoveTaskInventoryItem(user1.PrincipalID, UUID.Zero, sop1, sopItem1.ItemID);
|
||||
|
|
|
@ -76,7 +76,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments
|
|||
|
||||
if (m_console != null)
|
||||
{
|
||||
m_console.AddCommand("TempATtachModule", false, "set auto_grant_attach_perms", "set auto_grant_attach_perms true|false", "Allow objects owned by the region owner os estate managers to obtain attach permissions without asking the user", SetAutoGrantAttachPerms);
|
||||
m_console.AddCommand("TempAttachModule", false, "set auto_grant_attach_perms", "set auto_grant_attach_perms true|false", "Allow objects owned by the region owner or estate managers to obtain attach permissions without asking the user", SetAutoGrantAttachPerms);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -33,10 +33,11 @@ using Nini.Config;
|
|||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
|
||||
// You will need to uncomment this line if you are adding a region module to some other assembly which does not already
|
||||
// You will need to uncomment these lines if you are adding a region module to some other assembly which does not already
|
||||
// specify its assembly. Otherwise, the region modules in the assembly will not be picked up when OpenSimulator scans
|
||||
// the available DLLs
|
||||
//[assembly: Addin("MyModule", "1.0")]
|
||||
//[assembly: AddinDependency("OpenSim", "0.5")]
|
||||
|
||||
namespace OpenSim.Region.OptionalModules.Example.BareBonesNonShared
|
||||
{
|
||||
|
|
|
@ -33,10 +33,11 @@ using Nini.Config;
|
|||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
|
||||
// You will need to uncomment this line if you are adding a region module to some other assembly which does not already
|
||||
// You will need to uncomment these lines if you are adding a region module to some other assembly which does not already
|
||||
// specify its assembly. Otherwise, the region modules in the assembly will not be picked up when OpenSimulator scans
|
||||
// the available DLLs
|
||||
//[assembly: Addin("MyModule", "1.0")]
|
||||
//[assembly: AddinDependency("OpenSim", "0.5")]
|
||||
|
||||
namespace OpenSim.Region.OptionalModules.Example.BareBonesShared
|
||||
{
|
||||
|
|
|
@ -45,6 +45,7 @@ namespace OpenSim.Region.OptionalModules.WebSocketEchoModule
|
|||
public class WebSocketEchoModule : ISharedRegionModule
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
private bool enabled;
|
||||
public string Name { get { return "WebSocketEchoModule"; } }
|
||||
|
||||
|
@ -55,9 +56,9 @@ namespace OpenSim.Region.OptionalModules.WebSocketEchoModule
|
|||
|
||||
public void Initialise(IConfigSource pConfig)
|
||||
{
|
||||
enabled =(pConfig.Configs["WebSocketEcho"] != null);
|
||||
if (enabled)
|
||||
m_log.DebugFormat("[WebSocketEchoModule]: INITIALIZED MODULE");
|
||||
enabled = (pConfig.Configs["WebSocketEcho"] != null);
|
||||
// if (enabled)
|
||||
// m_log.DebugFormat("[WebSocketEchoModule]: INITIALIZED MODULE");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -158,17 +159,17 @@ namespace OpenSim.Region.OptionalModules.WebSocketEchoModule
|
|||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
m_log.DebugFormat("[WebSocketEchoModule]: REGION {0} ADDED", scene.RegionInfo.RegionName);
|
||||
// m_log.DebugFormat("[WebSocketEchoModule]: REGION {0} ADDED", scene.RegionInfo.RegionName);
|
||||
}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
m_log.DebugFormat("[WebSocketEchoModule]: REGION {0} REMOVED", scene.RegionInfo.RegionName);
|
||||
// m_log.DebugFormat("[WebSocketEchoModule]: REGION {0} REMOVED", scene.RegionInfo.RegionName);
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
m_log.DebugFormat("[WebSocketEchoModule]: REGION {0} LOADED", scene.RegionInfo.RegionName);
|
||||
// m_log.DebugFormat("[WebSocketEchoModule]: REGION {0} LOADED", scene.RegionInfo.RegionName);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -57,9 +57,10 @@ namespace OpenSim.Region.OptionalModules
|
|||
|
||||
public void Initialise(IConfigSource config)
|
||||
{
|
||||
IConfig myConfig = config.Configs["Startup"];
|
||||
//IConfig myConfig = config.Configs["Startup"];
|
||||
|
||||
string permissionModules = myConfig.GetString("permissionmodules", "DefaultPermissionsModule");
|
||||
string permissionModules = Util.GetConfigVarFromSections<string>(config, "permissionmodules",
|
||||
new string[] { "Startup", "Permissions" }, "DefaultPermissionsModule");
|
||||
|
||||
List<string> modules=new List<string>(permissionModules.Split(','));
|
||||
|
||||
|
|
|
@ -961,13 +961,13 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
|||
// ==================================================================
|
||||
// Clamp high or low velocities
|
||||
float newVelocityLengthSq = VehicleVelocity.LengthSquared();
|
||||
if (newVelocityLengthSq > BSParam.VehicleMaxLinearVelocitySq)
|
||||
if (newVelocityLengthSq > BSParam.VehicleMaxLinearVelocitySquared)
|
||||
{
|
||||
Vector3 origVelW = VehicleVelocity; // DEBUG DEBUG
|
||||
VehicleVelocity /= VehicleVelocity.Length();
|
||||
VehicleVelocity *= BSParam.VehicleMaxLinearVelocity;
|
||||
VDetailLog("{0}, MoveLinear,clampMax,origVelW={1},lenSq={2},maxVelSq={3},,newVelW={4}",
|
||||
Prim.LocalID, origVelW, newVelocityLengthSq, BSParam.VehicleMaxLinearVelocitySq, VehicleVelocity);
|
||||
Prim.LocalID, origVelW, newVelocityLengthSq, BSParam.VehicleMaxLinearVelocitySquared, VehicleVelocity);
|
||||
}
|
||||
else if (newVelocityLengthSq < 0.001f)
|
||||
VehicleVelocity = Vector3.Zero;
|
||||
|
|
|
@ -47,12 +47,16 @@ public static class BSParam
|
|||
public static float SculptLOD { get; private set; }
|
||||
|
||||
public static int CrossingFailuresBeforeOutOfBounds { get; private set; }
|
||||
public static float UpdateVelocityChangeThreshold { get; private set; }
|
||||
|
||||
public static float MinimumObjectMass { get; private set; }
|
||||
public static float MaximumObjectMass { get; private set; }
|
||||
public static float MaxLinearVelocity { get; private set; }
|
||||
public static float MaxLinearVelocitySquared { get; private set; }
|
||||
public static float MaxAngularVelocity { get; private set; }
|
||||
public static float MaxAngularVelocitySquared { get; private set; }
|
||||
public static float MaxAddForceMagnitude { get; private set; }
|
||||
public static float MaxAddForceMagnitudeSquared { get; private set; }
|
||||
public static float DensityScaleFactor { get; private set; }
|
||||
|
||||
public static float LinearDamping { get; private set; }
|
||||
|
@ -109,7 +113,7 @@ public static class BSParam
|
|||
|
||||
// Vehicle parameters
|
||||
public static float VehicleMaxLinearVelocity { get; private set; }
|
||||
public static float VehicleMaxLinearVelocitySq { get; private set; }
|
||||
public static float VehicleMaxLinearVelocitySquared { get; private set; }
|
||||
public static float VehicleMaxAngularVelocity { get; private set; }
|
||||
public static float VehicleMaxAngularVelocitySq { get; private set; }
|
||||
public static float VehicleAngularDamping { get; private set; }
|
||||
|
@ -265,7 +269,7 @@ public static class BSParam
|
|||
// The single letter parameters for the delegates are:
|
||||
// s = BSScene
|
||||
// o = BSPhysObject
|
||||
// v = value (float)
|
||||
// v = value (appropriate type)
|
||||
private static ParameterDefnBase[] ParameterDefinitions =
|
||||
{
|
||||
new ParameterDefn<bool>("MeshSculptedPrim", "Whether to create meshes for sculpties",
|
||||
|
@ -289,6 +293,10 @@ public static class BSParam
|
|||
5,
|
||||
(s) => { return CrossingFailuresBeforeOutOfBounds; },
|
||||
(s,v) => { CrossingFailuresBeforeOutOfBounds = v; } ),
|
||||
new ParameterDefn<float>("UpdateVelocityChangeThreshold", "Change in updated velocity required before reporting change to simulator",
|
||||
0.1f,
|
||||
(s) => { return UpdateVelocityChangeThreshold; },
|
||||
(s,v) => { UpdateVelocityChangeThreshold = v; } ),
|
||||
|
||||
new ParameterDefn<float>("MeshLevelOfDetail", "Level of detail to render meshes (32, 16, 8 or 4. 32=most detailed)",
|
||||
32f,
|
||||
|
@ -343,16 +351,16 @@ public static class BSParam
|
|||
new ParameterDefn<float>("MaxLinearVelocity", "Maximum velocity magnitude that can be assigned to an object",
|
||||
1000.0f,
|
||||
(s) => { return MaxLinearVelocity; },
|
||||
(s,v) => { MaxLinearVelocity = v; } ),
|
||||
(s,v) => { MaxLinearVelocity = v; MaxLinearVelocitySquared = v * v; } ),
|
||||
new ParameterDefn<float>("MaxAngularVelocity", "Maximum rotational velocity magnitude that can be assigned to an object",
|
||||
1000.0f,
|
||||
(s) => { return MaxAngularVelocity; },
|
||||
(s,v) => { MaxAngularVelocity = v; } ),
|
||||
(s,v) => { MaxAngularVelocity = v; MaxAngularVelocitySquared = v * v; } ),
|
||||
// LL documentation says thie number should be 20f for llApplyImpulse and 200f for llRezObject
|
||||
new ParameterDefn<float>("MaxAddForceMagnitude", "Maximum force that can be applied by llApplyImpulse (SL says 20f)",
|
||||
20000.0f,
|
||||
(s) => { return MaxAddForceMagnitude; },
|
||||
(s,v) => { MaxAddForceMagnitude = v; } ),
|
||||
(s,v) => { MaxAddForceMagnitude = v; MaxAddForceMagnitudeSquared = v * v; } ),
|
||||
// Density is passed around as 100kg/m3. This scales that to 1kg/m3.
|
||||
new ParameterDefn<float>("DensityScaleFactor", "Conversion for simulator/viewer density (100kg/m3) to physical density (1kg/m3)",
|
||||
0.01f,
|
||||
|
@ -505,7 +513,7 @@ public static class BSParam
|
|||
new ParameterDefn<float>("VehicleMaxLinearVelocity", "Maximum velocity magnitude that can be assigned to a vehicle",
|
||||
1000.0f,
|
||||
(s) => { return (float)VehicleMaxLinearVelocity; },
|
||||
(s,v) => { VehicleMaxLinearVelocity = v; VehicleMaxLinearVelocitySq = v * v; } ),
|
||||
(s,v) => { VehicleMaxLinearVelocity = v; VehicleMaxLinearVelocitySquared = v * v; } ),
|
||||
new ParameterDefn<float>("VehicleMaxAngularVelocity", "Maximum rotational velocity magnitude that can be assigned to a vehicle",
|
||||
12.0f,
|
||||
(s) => { return (float)VehicleMaxAngularVelocity; },
|
||||
|
|
|
@ -108,6 +108,9 @@ public class BSPrim : BSPhysObject
|
|||
// do the actual object creation at taint time
|
||||
PhysicsScene.TaintedObject("BSPrim.create", delegate()
|
||||
{
|
||||
// Make sure the object is being created with some sanity.
|
||||
ExtremeSanityCheck(true /* inTaintTime */);
|
||||
|
||||
CreateGeomAndObject(true);
|
||||
|
||||
CurrentCollisionFlags = PhysicsScene.PE.GetCollisionFlags(PhysBody);
|
||||
|
@ -450,6 +453,38 @@ public class BSPrim : BSPhysObject
|
|||
return ret;
|
||||
}
|
||||
|
||||
// Occasionally things will fly off and really get lost.
|
||||
// Find the wanderers and bring them back.
|
||||
// Return 'true' if some parameter need some sanity.
|
||||
private bool ExtremeSanityCheck(bool inTaintTime)
|
||||
{
|
||||
bool ret = false;
|
||||
|
||||
uint wayOutThere = Constants.RegionSize * Constants.RegionSize;
|
||||
// There have been instances of objects getting thrown way out of bounds and crashing
|
||||
// the border crossing code.
|
||||
if ( _position.X < -Constants.RegionSize || _position.X > wayOutThere
|
||||
|| _position.Y < -Constants.RegionSize || _position.Y > wayOutThere
|
||||
|| _position.Z < -Constants.RegionSize || _position.Z > wayOutThere)
|
||||
{
|
||||
_position = new OMV.Vector3(10, 10, 50);
|
||||
ZeroMotion(inTaintTime);
|
||||
ret = true;
|
||||
}
|
||||
if (_velocity.LengthSquared() > BSParam.MaxLinearVelocity)
|
||||
{
|
||||
_velocity = Util.ClampV(_velocity, BSParam.MaxLinearVelocity);
|
||||
ret = true;
|
||||
}
|
||||
if (_rotationalVelocity.LengthSquared() > BSParam.MaxAngularVelocitySquared)
|
||||
{
|
||||
_rotationalVelocity = Util.ClampV(_rotationalVelocity, BSParam.MaxAngularVelocity);
|
||||
ret = true;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Return the effective mass of the object.
|
||||
// The definition of this call is to return the mass of the prim.
|
||||
// If the simulator cares about the mass of the linkset, it will sum it itself.
|
||||
|
@ -585,12 +620,12 @@ public class BSPrim : BSPhysObject
|
|||
if (VehicleController.Type == Vehicle.TYPE_NONE)
|
||||
{
|
||||
UnRegisterPreStepAction("BSPrim.Vehicle", LocalID);
|
||||
PhysicsScene.AfterStep -= VehicleController.PostStep;
|
||||
UnRegisterPostStepAction("BSPrim.Vehicle", LocalID);
|
||||
}
|
||||
else
|
||||
{
|
||||
RegisterPreStepAction("BSPrim.Vehicle", LocalID, VehicleController.Step);
|
||||
PhysicsScene.AfterStep += VehicleController.PostStep;
|
||||
RegisterPostStepAction("BSPrim.Vehicle", LocalID, VehicleController.PostStep);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -732,7 +767,7 @@ public class BSPrim : BSPhysObject
|
|||
set {
|
||||
PhysicsScene.AssertInTaintTime("BSPrim.ForceVelocity");
|
||||
|
||||
_velocity = value;
|
||||
_velocity = Util.ClampV(value, BSParam.MaxLinearVelocity);
|
||||
if (PhysBody.HasPhysicalBody)
|
||||
{
|
||||
DetailLog("{0},BSPrim.ForceVelocity,taint,vel={1}", LocalID, _velocity);
|
||||
|
@ -1098,7 +1133,7 @@ public class BSPrim : BSPhysObject
|
|||
return _rotationalVelocity;
|
||||
}
|
||||
set {
|
||||
_rotationalVelocity = value;
|
||||
_rotationalVelocity = Util.ClampV(value, BSParam.MaxAngularVelocity);
|
||||
if (PhysBody.HasPhysicalBody)
|
||||
{
|
||||
DetailLog("{0},BSPrim.ForceRotationalVel,taint,rotvel={1}", LocalID, _rotationalVelocity);
|
||||
|
@ -1230,6 +1265,7 @@ public class BSPrim : BSPhysObject
|
|||
|
||||
RegisterPreStepAction("BSPrim.Hover", LocalID, delegate(float timeStep)
|
||||
{
|
||||
// Don't do hovering while the object is selected.
|
||||
if (!IsPhysicallyActive)
|
||||
return;
|
||||
|
||||
|
@ -1737,10 +1773,9 @@ public class BSPrim : BSPhysObject
|
|||
// Assign directly to the local variables so the normal set actions do not happen
|
||||
_position = entprop.Position;
|
||||
_orientation = entprop.Rotation;
|
||||
// _velocity = entprop.Velocity;
|
||||
// DEBUG DEBUG DEBUG -- smooth velocity changes a bit. The simulator seems to be
|
||||
// very sensitive to velocity changes.
|
||||
if (entprop.Velocity == OMV.Vector3.Zero || !entprop.Velocity.ApproxEquals(_velocity, 0.1f))
|
||||
if (entprop.Velocity == OMV.Vector3.Zero || !entprop.Velocity.ApproxEquals(_velocity, BSParam.UpdateVelocityChangeThreshold))
|
||||
_velocity = entprop.Velocity;
|
||||
_acceleration = entprop.Acceleration;
|
||||
_rotationalVelocity = entprop.RotationalVelocity;
|
||||
|
|
|
@ -9,6 +9,9 @@ Enable vehicle border crossings (at least as poorly as ODE)
|
|||
Lock axis
|
||||
Deleting a linkset while standing on the root will leave the physical shape of the root behind.
|
||||
Not sure if it is because standing on it. Done with large prim linksets.
|
||||
Linkset child rotations.
|
||||
Nebadon spiral tube has middle sections which are rotated wrong.
|
||||
Select linked spiral tube. Delink and note where the middle section ends up.
|
||||
Vehicle angular vertical attraction
|
||||
vehicle angular banking
|
||||
Center-of-gravity
|
||||
|
@ -68,6 +71,8 @@ Vehicle attributes are not restored when a vehicle is rezzed on region creation
|
|||
|
||||
GENERAL TODO LIST:
|
||||
=================================================
|
||||
Explore btGImpactMeshShape as alternative to convex hulls for simplified physical objects.
|
||||
Regular triangle meshes don't do physical collisions.
|
||||
Resitution of a prim works on another prim but not on terrain.
|
||||
The dropped prim doesn't bounce properly on the terrain.
|
||||
Add a sanity check for PIDTarget location.
|
||||
|
|
|
@ -10806,14 +10806,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
return UUID.Zero.ToString();
|
||||
}
|
||||
|
||||
string reqIdentifier = UUID.Random().ToString();
|
||||
|
||||
// was: UUID tid = tid = AsyncCommands.
|
||||
UUID tid = AsyncCommands.DataserverPlugin.RegisterRequest(m_host.LocalId, m_item.ItemID, assetID.ToString());
|
||||
UUID tid = AsyncCommands.DataserverPlugin.RegisterRequest(m_host.LocalId, m_item.ItemID, reqIdentifier);
|
||||
|
||||
if (NotecardCache.IsCached(assetID))
|
||||
{
|
||||
AsyncCommands.
|
||||
DataserverPlugin.DataserverReply(assetID.ToString(),
|
||||
NotecardCache.GetLines(assetID).ToString());
|
||||
AsyncCommands.DataserverPlugin.DataserverReply(reqIdentifier, NotecardCache.GetLines(assetID).ToString());
|
||||
|
||||
ScriptSleep(100);
|
||||
return tid.ToString();
|
||||
}
|
||||
|
@ -10829,9 +10830,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
string data = Encoding.UTF8.GetString(a.Data);
|
||||
//m_log.Debug(data);
|
||||
NotecardCache.Cache(id, data);
|
||||
AsyncCommands.
|
||||
DataserverPlugin.DataserverReply(id.ToString(),
|
||||
NotecardCache.GetLines(id).ToString());
|
||||
AsyncCommands.DataserverPlugin.DataserverReply(reqIdentifier, NotecardCache.GetLines(id).ToString());
|
||||
});
|
||||
|
||||
ScriptSleep(100);
|
||||
|
@ -10860,13 +10859,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
return UUID.Zero.ToString();
|
||||
}
|
||||
|
||||
string reqIdentifier = UUID.Random().ToString();
|
||||
|
||||
// was: UUID tid = tid = AsyncCommands.
|
||||
UUID tid = AsyncCommands.DataserverPlugin.RegisterRequest(m_host.LocalId, m_item.ItemID, assetID.ToString());
|
||||
UUID tid = AsyncCommands.DataserverPlugin.RegisterRequest(m_host.LocalId, m_item.ItemID, reqIdentifier);
|
||||
|
||||
if (NotecardCache.IsCached(assetID))
|
||||
{
|
||||
AsyncCommands.DataserverPlugin.DataserverReply(assetID.ToString(),
|
||||
NotecardCache.GetLine(assetID, line, m_notecardLineReadCharsMax));
|
||||
AsyncCommands.DataserverPlugin.DataserverReply(
|
||||
reqIdentifier, NotecardCache.GetLine(assetID, line, m_notecardLineReadCharsMax));
|
||||
|
||||
ScriptSleep(100);
|
||||
return tid.ToString();
|
||||
}
|
||||
|
@ -10882,8 +10884,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
string data = Encoding.UTF8.GetString(a.Data);
|
||||
//m_log.Debug(data);
|
||||
NotecardCache.Cache(id, data);
|
||||
AsyncCommands.DataserverPlugin.DataserverReply(id.ToString(),
|
||||
NotecardCache.GetLine(id, line, m_notecardLineReadCharsMax));
|
||||
AsyncCommands.DataserverPlugin.DataserverReply(
|
||||
reqIdentifier, NotecardCache.GetLine(assetID, line, m_notecardLineReadCharsMax));
|
||||
});
|
||||
|
||||
ScriptSleep(100);
|
||||
|
@ -11687,7 +11689,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
|
||||
public static void Cache(UUID assetID, string text)
|
||||
{
|
||||
CacheCheck();
|
||||
CheckCache();
|
||||
|
||||
lock (m_Notecards)
|
||||
{
|
||||
|
@ -11772,7 +11774,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
return line;
|
||||
}
|
||||
|
||||
public static void CacheCheck()
|
||||
public static void CheckCache()
|
||||
{
|
||||
lock (m_Notecards)
|
||||
{
|
||||
foreach (UUID key in new List<UUID>(m_Notecards.Keys))
|
||||
{
|
||||
|
@ -11782,4 +11786,5 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -93,7 +93,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
// FIXME: This should really be a script item (with accompanying script)
|
||||
TaskInventoryItem grp1Item
|
||||
= TaskInventoryHelpers.AddNotecard(
|
||||
m_scene, grp1.RootPart, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900));
|
||||
m_scene, grp1.RootPart, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900), "Hello World!");
|
||||
grp1Item.PermsMask |= ScriptBaseClass.PERMISSION_CHANGE_LINKS;
|
||||
|
||||
SceneObjectGroup grp2 = SceneHelpers.CreateSceneObject(2, ownerId, "grp2-", 0x20);
|
||||
|
@ -127,7 +127,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
// FIXME: This should really be a script item (with accompanying script)
|
||||
TaskInventoryItem grp1Item
|
||||
= TaskInventoryHelpers.AddNotecard(
|
||||
m_scene, grp1.RootPart, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900));
|
||||
m_scene, grp1.RootPart, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900), "Hello World!");
|
||||
|
||||
grp1Item.PermsMask |= ScriptBaseClass.PERMISSION_CHANGE_LINKS;
|
||||
|
||||
|
|
|
@ -0,0 +1,270 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using log4net;
|
||||
using Nini.Config;
|
||||
using NUnit.Framework;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Framework.Servers;
|
||||
using OpenSim.Framework.Servers.HttpServer;
|
||||
using OpenSim.Region.CoreModules.Scripting.LSLHttp;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenSim.Region.ScriptEngine.Shared;
|
||||
using OpenSim.Region.ScriptEngine.Shared.Api;
|
||||
using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
|
||||
using OpenSim.Services.Interfaces;
|
||||
using OpenSim.Tests.Common;
|
||||
using OpenSim.Tests.Common.Mock;
|
||||
|
||||
namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
||||
{
|
||||
/// <summary>
|
||||
/// Tests for notecard related functions in LSL
|
||||
/// </summary>
|
||||
[TestFixture]
|
||||
public class LSL_ApiNotecardTests : OpenSimTestCase
|
||||
{
|
||||
private Scene m_scene;
|
||||
private MockScriptEngine m_engine;
|
||||
|
||||
private SceneObjectGroup m_so;
|
||||
private TaskInventoryItem m_scriptItem;
|
||||
private LSL_Api m_lslApi;
|
||||
|
||||
[TestFixtureSetUp]
|
||||
public void TestFixtureSetUp()
|
||||
{
|
||||
// Don't allow tests to be bamboozled by asynchronous events. Execute everything on the same thread.
|
||||
Util.FireAndForgetMethod = FireAndForgetMethod.RegressionTest;
|
||||
}
|
||||
|
||||
[TestFixtureTearDown]
|
||||
public void TestFixureTearDown()
|
||||
{
|
||||
// We must set this back afterwards, otherwise later tests will fail since they're expecting multiple
|
||||
// threads. Possibly, later tests should be rewritten so none of them require async stuff (which regression
|
||||
// tests really shouldn't).
|
||||
Util.FireAndForgetMethod = Util.DefaultFireAndForgetMethod;
|
||||
}
|
||||
|
||||
[SetUp]
|
||||
public override void SetUp()
|
||||
{
|
||||
base.SetUp();
|
||||
|
||||
m_engine = new MockScriptEngine();
|
||||
|
||||
m_scene = new SceneHelpers().SetupScene();
|
||||
SceneHelpers.SetupSceneModules(m_scene, new IniConfigSource(), m_engine);
|
||||
|
||||
m_so = SceneHelpers.AddSceneObject(m_scene);
|
||||
m_scriptItem = TaskInventoryHelpers.AddScript(m_scene, m_so.RootPart);
|
||||
|
||||
// This is disconnected from the actual script - the mock engine does not set up any LSL_Api atm.
|
||||
// Possibly this could be done and we could obtain it directly from the MockScriptEngine.
|
||||
m_lslApi = new LSL_Api();
|
||||
m_lslApi.Initialize(m_engine, m_so.RootPart, m_scriptItem, null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestLlGetNotecardLine()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
|
||||
string[] ncLines = { "One", "Two", "Three" };
|
||||
|
||||
TaskInventoryItem ncItem
|
||||
= TaskInventoryHelpers.AddNotecard(m_scene, m_so.RootPart, "nc", "1", "10", string.Join("\n", ncLines));
|
||||
|
||||
AssertValidNotecardLine(ncItem.Name, 0, ncLines[0]);
|
||||
AssertValidNotecardLine(ncItem.Name, 2, ncLines[2]);
|
||||
AssertValidNotecardLine(ncItem.Name, 3, ScriptBaseClass.EOF);
|
||||
AssertValidNotecardLine(ncItem.Name, 4, ScriptBaseClass.EOF);
|
||||
|
||||
// XXX: Is this correct or do we really expect no dataserver event to fire at all?
|
||||
AssertValidNotecardLine(ncItem.Name, -1, "");
|
||||
AssertValidNotecardLine(ncItem.Name, -2, "");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestLlGetNotecardLine_NoNotecard()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
|
||||
AssertInValidNotecardLine("nc", 0);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestLlGetNotecardLine_NotANotecard()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
|
||||
TaskInventoryItem ncItem = TaskInventoryHelpers.AddScript(m_scene, m_so.RootPart, "nc1", "Not important");
|
||||
|
||||
AssertInValidNotecardLine(ncItem.Name, 0);
|
||||
}
|
||||
|
||||
private void AssertValidNotecardLine(string ncName, int lineNumber, string assertLine)
|
||||
{
|
||||
string key = m_lslApi.llGetNotecardLine(ncName, lineNumber);
|
||||
Assert.That(key, Is.Not.EqualTo(UUID.Zero.ToString()));
|
||||
|
||||
Assert.That(m_engine.PostedEvents.Count, Is.EqualTo(1));
|
||||
Assert.That(m_engine.PostedEvents.ContainsKey(m_scriptItem.ItemID));
|
||||
|
||||
List<EventParams> events = m_engine.PostedEvents[m_scriptItem.ItemID];
|
||||
Assert.That(events.Count, Is.EqualTo(1));
|
||||
EventParams eventParams = events[0];
|
||||
|
||||
Assert.That(eventParams.EventName, Is.EqualTo("dataserver"));
|
||||
Assert.That(eventParams.Params[0].ToString(), Is.EqualTo(key));
|
||||
Assert.That(eventParams.Params[1].ToString(), Is.EqualTo(assertLine));
|
||||
|
||||
m_engine.ClearPostedEvents();
|
||||
}
|
||||
|
||||
private void AssertInValidNotecardLine(string ncName, int lineNumber)
|
||||
{
|
||||
string key = m_lslApi.llGetNotecardLine(ncName, lineNumber);
|
||||
Assert.That(key, Is.EqualTo(UUID.Zero.ToString()));
|
||||
|
||||
Assert.That(m_engine.PostedEvents.Count, Is.EqualTo(0));
|
||||
}
|
||||
|
||||
// [Test]
|
||||
// public void TestLlReleaseUrl()
|
||||
// {
|
||||
// TestHelpers.InMethod();
|
||||
//
|
||||
// m_lslApi.llRequestURL();
|
||||
// string returnedUri = m_engine.PostedEvents[m_scriptItem.ItemID][0].Params[2].ToString();
|
||||
//
|
||||
// {
|
||||
// // Check that the initial number of URLs is correct
|
||||
// Assert.That(m_lslApi.llGetFreeURLs().value, Is.EqualTo(m_urlModule.TotalUrls - 1));
|
||||
// }
|
||||
//
|
||||
// {
|
||||
// // Check releasing a non-url
|
||||
// m_lslApi.llReleaseURL("GARBAGE");
|
||||
// Assert.That(m_lslApi.llGetFreeURLs().value, Is.EqualTo(m_urlModule.TotalUrls - 1));
|
||||
// }
|
||||
//
|
||||
// {
|
||||
// // Check releasing a non-existing url
|
||||
// m_lslApi.llReleaseURL("http://example.com");
|
||||
// Assert.That(m_lslApi.llGetFreeURLs().value, Is.EqualTo(m_urlModule.TotalUrls - 1));
|
||||
// }
|
||||
//
|
||||
// {
|
||||
// // Check URL release
|
||||
// m_lslApi.llReleaseURL(returnedUri);
|
||||
// Assert.That(m_lslApi.llGetFreeURLs().value, Is.EqualTo(m_urlModule.TotalUrls));
|
||||
//
|
||||
// HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(returnedUri);
|
||||
//
|
||||
// bool gotExpectedException = false;
|
||||
//
|
||||
// try
|
||||
// {
|
||||
// using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
|
||||
// {}
|
||||
// }
|
||||
// catch (WebException e)
|
||||
// {
|
||||
// using (HttpWebResponse response = (HttpWebResponse)e.Response)
|
||||
// gotExpectedException = response.StatusCode == HttpStatusCode.NotFound;
|
||||
// }
|
||||
//
|
||||
// Assert.That(gotExpectedException, Is.True);
|
||||
// }
|
||||
//
|
||||
// {
|
||||
// // Check releasing the same URL again
|
||||
// m_lslApi.llReleaseURL(returnedUri);
|
||||
// Assert.That(m_lslApi.llGetFreeURLs().value, Is.EqualTo(m_urlModule.TotalUrls));
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// [Test]
|
||||
// public void TestLlRequestUrl()
|
||||
// {
|
||||
// TestHelpers.InMethod();
|
||||
//
|
||||
// string requestId = m_lslApi.llRequestURL();
|
||||
// Assert.That(requestId, Is.Not.EqualTo(UUID.Zero.ToString()));
|
||||
// string returnedUri;
|
||||
//
|
||||
// {
|
||||
// // Check that URL is correctly set up
|
||||
// Assert.That(m_lslApi.llGetFreeURLs().value, Is.EqualTo(m_urlModule.TotalUrls - 1));
|
||||
//
|
||||
// Assert.That(m_engine.PostedEvents.ContainsKey(m_scriptItem.ItemID));
|
||||
//
|
||||
// List<EventParams> events = m_engine.PostedEvents[m_scriptItem.ItemID];
|
||||
// Assert.That(events.Count, Is.EqualTo(1));
|
||||
// EventParams eventParams = events[0];
|
||||
// Assert.That(eventParams.EventName, Is.EqualTo("http_request"));
|
||||
//
|
||||
// UUID returnKey;
|
||||
// string rawReturnKey = eventParams.Params[0].ToString();
|
||||
// string method = eventParams.Params[1].ToString();
|
||||
// returnedUri = eventParams.Params[2].ToString();
|
||||
//
|
||||
// Assert.That(UUID.TryParse(rawReturnKey, out returnKey), Is.True);
|
||||
// Assert.That(method, Is.EqualTo(ScriptBaseClass.URL_REQUEST_GRANTED));
|
||||
// Assert.That(Uri.IsWellFormedUriString(returnedUri, UriKind.Absolute), Is.True);
|
||||
// }
|
||||
//
|
||||
// {
|
||||
// // Check that request to URL works.
|
||||
// string testResponse = "Hello World";
|
||||
//
|
||||
// m_engine.ClearPostedEvents();
|
||||
// m_engine.PostEventHook
|
||||
// += (itemId, evp) => m_lslApi.llHTTPResponse(evp.Params[0].ToString(), 200, testResponse);
|
||||
//
|
||||
//// Console.WriteLine("Trying {0}", returnedUri);
|
||||
// HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(returnedUri);
|
||||
//
|
||||
// AssertHttpResponse(returnedUri, testResponse);
|
||||
//
|
||||
// Assert.That(m_engine.PostedEvents.ContainsKey(m_scriptItem.ItemID));
|
||||
//
|
||||
// List<EventParams> events = m_engine.PostedEvents[m_scriptItem.ItemID];
|
||||
// Assert.That(events.Count, Is.EqualTo(1));
|
||||
// EventParams eventParams = events[0];
|
||||
// Assert.That(eventParams.EventName, Is.EqualTo("http_request"));
|
||||
//
|
||||
// UUID returnKey;
|
||||
// string rawReturnKey = eventParams.Params[0].ToString();
|
||||
// string method = eventParams.Params[1].ToString();
|
||||
// string body = eventParams.Params[2].ToString();
|
||||
//
|
||||
// Assert.That(UUID.TryParse(rawReturnKey, out returnKey), Is.True);
|
||||
// Assert.That(method, Is.EqualTo("GET"));
|
||||
// Assert.That(body, Is.EqualTo(""));
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// private void AssertHttpResponse(string uri, string expectedResponse)
|
||||
// {
|
||||
// HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri);
|
||||
//
|
||||
// using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
|
||||
// {
|
||||
// using (Stream stream = webResponse.GetResponseStream())
|
||||
// {
|
||||
// using (StreamReader reader = new StreamReader(stream))
|
||||
// {
|
||||
// Assert.That(reader.ReadToEnd(), Is.EqualTo(expectedResponse));
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
|
@ -151,7 +151,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
|
||||
// Create an object embedded inside the first
|
||||
TaskInventoryHelpers.AddNotecard(
|
||||
m_scene, inWorldObj.RootPart, taskInvObjItemName, taskInvObjItemId, TestHelpers.ParseTail(0x900));
|
||||
m_scene, inWorldObj.RootPart, taskInvObjItemName, taskInvObjItemId, TestHelpers.ParseTail(0x900), "Hello World!");
|
||||
|
||||
bool exceptionCaught = false;
|
||||
|
||||
|
|
|
@ -186,6 +186,10 @@ namespace OpenSim.Server.Base
|
|||
XmlConfigurator.Configure();
|
||||
}
|
||||
|
||||
// FIXME: This should be done down in ServerBase but we need to sort out and refactor the log4net
|
||||
// XmlConfigurator calls first accross servers.
|
||||
m_log.InfoFormat("[SERVER BASE]: Starting in {0}", m_startupDirectory);
|
||||
|
||||
RegisterCommonAppenders(startupConfig);
|
||||
|
||||
if (startupConfig.GetString("PIDFile", String.Empty) != String.Empty)
|
||||
|
|
|
@ -40,6 +40,23 @@ namespace OpenSim.Tests.Common
|
|||
///
|
||||
public static class TaskInventoryHelpers
|
||||
{
|
||||
/// <summary>
|
||||
/// Add a notecard item to the given part.
|
||||
/// </summary>
|
||||
/// <param name="scene"></param>
|
||||
/// <param name="part"></param>
|
||||
/// <param name="itemName"></param>
|
||||
/// <param name="itemIDFrag">UUID or UUID stem</param>
|
||||
/// <param name="assetIDFrag">UUID or UUID stem</param>
|
||||
/// <param name="text">The tex to put in the notecard.</param>
|
||||
/// <returns>The item that was added</returns>
|
||||
public static TaskInventoryItem AddNotecard(
|
||||
Scene scene, SceneObjectPart part, string itemName, string itemIDStem, string assetIDStem, string text)
|
||||
{
|
||||
return AddNotecard(
|
||||
scene, part, itemName, TestHelpers.ParseStem(itemIDStem), TestHelpers.ParseStem(assetIDStem), text);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add a notecard item to the given part.
|
||||
/// </summary>
|
||||
|
@ -48,11 +65,13 @@ namespace OpenSim.Tests.Common
|
|||
/// <param name="itemName"></param>
|
||||
/// <param name="itemID"></param>
|
||||
/// <param name="assetID"></param>
|
||||
/// <param name="text">The tex to put in the notecard.</param>
|
||||
/// <returns>The item that was added</returns>
|
||||
public static TaskInventoryItem AddNotecard(Scene scene, SceneObjectPart part, string itemName, UUID itemID, UUID assetID)
|
||||
public static TaskInventoryItem AddNotecard(
|
||||
Scene scene, SceneObjectPart part, string itemName, UUID itemID, UUID assetID, string text)
|
||||
{
|
||||
AssetNotecard nc = new AssetNotecard();
|
||||
nc.BodyText = "Hello World!";
|
||||
nc.BodyText = text;
|
||||
nc.Encode();
|
||||
|
||||
AssetBase ncAsset
|
||||
|
@ -87,8 +106,8 @@ namespace OpenSim.Tests.Common
|
|||
/// Add a simple script to the given part.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// TODO: Accept input for item and asset IDs to avoid mysterious script failures that try to use any of these
|
||||
/// functions more than once in a test.
|
||||
/// TODO: Accept input for item and asset IDs so that we have completely replicatable regression tests rather
|
||||
/// than a random component.
|
||||
/// </remarks>
|
||||
/// <param name="scene"></param>
|
||||
/// <param name="part"></param>
|
||||
|
@ -102,8 +121,9 @@ namespace OpenSim.Tests.Common
|
|||
ast.Source = scriptSource;
|
||||
ast.Encode();
|
||||
|
||||
UUID assetUuid = new UUID("00000000-0000-0000-1000-000000000000");
|
||||
UUID itemUuid = new UUID("00000000-0000-0000-1100-000000000000");
|
||||
UUID assetUuid = UUID.Random();
|
||||
UUID itemUuid = UUID.Random();
|
||||
|
||||
AssetBase asset
|
||||
= AssetHelpers.CreateAsset(assetUuid, AssetType.LSLText, ast.AssetData, UUID.Zero);
|
||||
scene.AssetService.Store(asset);
|
||||
|
|
|
@ -31,6 +31,7 @@ using System.Collections.Generic;
|
|||
using System.Reflection;
|
||||
using Nini.Config;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenSim.Region.ScriptEngine.Interfaces;
|
||||
|
@ -110,8 +111,11 @@ namespace OpenSim.Tests.Common
|
|||
{
|
||||
// Console.WriteLine("Posting event {0} for {1}", name, itemID);
|
||||
|
||||
EventParams evParams = new EventParams(name, args, null);
|
||||
return PostScriptEvent(itemID, new EventParams(name, args, null));
|
||||
}
|
||||
|
||||
public bool PostScriptEvent(UUID itemID, EventParams evParams)
|
||||
{
|
||||
List<EventParams> eventsForItem;
|
||||
|
||||
if (!PostedEvents.ContainsKey(itemID))
|
||||
|
@ -132,9 +136,22 @@ namespace OpenSim.Tests.Common
|
|||
return true;
|
||||
}
|
||||
|
||||
public bool PostObjectEvent(uint localID, EventParams evParams)
|
||||
{
|
||||
return PostObjectEvent(m_scene.GetSceneObjectPart(localID), evParams);
|
||||
}
|
||||
|
||||
public bool PostObjectEvent(UUID itemID, string name, object[] args)
|
||||
{
|
||||
throw new System.NotImplementedException ();
|
||||
return PostObjectEvent(m_scene.GetSceneObjectPart(itemID), new EventParams(name, args, null));
|
||||
}
|
||||
|
||||
private bool PostObjectEvent(SceneObjectPart part, EventParams evParams)
|
||||
{
|
||||
foreach (TaskInventoryItem item in part.Inventory.GetInventoryItems(InventoryType.LSL))
|
||||
PostScriptEvent(item.ItemID, evParams);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void SuspendScript(UUID itemID)
|
||||
|
@ -187,16 +204,6 @@ namespace OpenSim.Tests.Common
|
|||
throw new System.NotImplementedException ();
|
||||
}
|
||||
|
||||
public bool PostScriptEvent(UUID itemID,EventParams parms)
|
||||
{
|
||||
throw new System.NotImplementedException ();
|
||||
}
|
||||
|
||||
public bool PostObjectEvent (uint localID, EventParams parms)
|
||||
{
|
||||
throw new System.NotImplementedException ();
|
||||
}
|
||||
|
||||
public DetectParams GetDetectParams(UUID item, int number)
|
||||
{
|
||||
throw new System.NotImplementedException ();
|
||||
|
|
|
@ -113,6 +113,27 @@ namespace OpenSim.Tests.Common
|
|||
DisableLoggingConfigStream.Position = 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parse a UUID stem into a full UUID.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Yes, this is completely inconsistent with ParseTail but this is probably a better way to do it,
|
||||
/// UUIDs are conceptually not hexadecmial numbers.
|
||||
/// The fragment will come at the start of the UUID. The rest will be 0s
|
||||
/// </remarks>
|
||||
/// <returns></returns>
|
||||
/// <param name='frag'>
|
||||
/// A UUID fragment that will be parsed into a full UUID. Therefore, it can only contain
|
||||
/// cahracters which are valid in a UUID, except for "-" which is currently only allowed if a full UUID is
|
||||
/// given as the 'fragment'.
|
||||
/// </param>
|
||||
public static UUID ParseStem(string stem)
|
||||
{
|
||||
string rawUuid = stem.PadRight(32, '0');
|
||||
|
||||
return UUID.Parse(rawUuid);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parse tail section into full UUID.
|
||||
/// </summary>
|
||||
|
|
|
@ -45,7 +45,7 @@ namespace OpenSim.Tests
|
|||
/// Set up a test directory.
|
||||
/// </summary>
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
public override void SetUp()
|
||||
{
|
||||
base.SetUp();
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -220,6 +220,101 @@
|
|||
; physics = basicphysics
|
||||
; physics = POS
|
||||
|
||||
;# {DefaultScriptEngine} {} {Default script engine} {XEngine} XEngine
|
||||
;; Default script engine to use. Currently, we only have XEngine
|
||||
; DefaultScriptEngine = "XEngine"
|
||||
|
||||
;# {HttpProxy} {} {Proxy URL for llHTTPRequest and dynamic texture loading} {} http://proxy.com:8080
|
||||
;; Http proxy setting for llHTTPRequest and dynamic texture loading, if
|
||||
;; required
|
||||
; HttpProxy = "http://proxy.com:8080"
|
||||
|
||||
;# {HttpProxyExceptions} {HttpProxy} {Set of regular expressions defining URL that should not be proxied} {}
|
||||
;; If you're using HttpProxy, then you can set HttpProxyExceptions to a
|
||||
;; list of regular expressions for URLs that you don't want to go through
|
||||
;; the proxy.
|
||||
;; For example, servers inside your firewall.
|
||||
;; Separate patterns with a ';'
|
||||
; HttpProxyExceptions = ".mydomain.com;localhost"
|
||||
|
||||
;# {emailmodule} {} {Provide llEmail and llGetNextEmail functionality? (requires SMTP server)} {true false} false
|
||||
;; The email module requires some configuration. It needs an SMTP
|
||||
;; server to send mail through.
|
||||
; emailmodule = DefaultEmailModule
|
||||
|
||||
;# {SpawnPointRouting} {} {Set routing method for Telehub Spawnpoints} {closest random sequence} closest
|
||||
;; SpawnPointRouting adjusts the landing for incoming avatars.
|
||||
;; "closest" will place the avatar at the SpawnPoint located in the closest
|
||||
;; available spot to the destination (typically map click/landmark).
|
||||
;; "random" will place the avatar on a randomly selected spawnpoint;
|
||||
;; "sequence" will place the avatar on the next sequential SpawnPoint
|
||||
; SpawnPointRouting = closest
|
||||
|
||||
;# {TelehubAllowLandmark} {} {Allow users with landmarks to override telehub routing} {true false} false
|
||||
;; TelehubAllowLandmark allows users with landmarks to override telehub
|
||||
;; routing and land at the landmark coordinates when set to true
|
||||
;; default is false
|
||||
; TelehubAllowLandmark = false
|
||||
|
||||
|
||||
[AccessControl]
|
||||
;# {AllowedClients} {} {Bar (|) separated list of allowed clients} {}
|
||||
;; Bar (|) separated list of viewers which may gain access to the regions.
|
||||
;; One can use a substring of the viewer name to enable only certain
|
||||
;; versions
|
||||
;; Example: Agent uses the viewer "Imprudence 1.3.2.0"
|
||||
;; - "Imprudence" has access
|
||||
;; - "Imprudence 1.3" has access
|
||||
;; - "Imprudence 1.3.1" has no access
|
||||
; AllowedClients =
|
||||
|
||||
;# {BannedClients} {} {Bar (|) separated list of banned clients} {}
|
||||
;# Bar (|) separated list of viewers which may not gain access to the regions.
|
||||
;; One can use a Substring of the viewer name to disable only certain
|
||||
;; versions
|
||||
;; Example: Agent uses the viewer "Imprudence 1.3.2.0"
|
||||
;; - "Imprudence" has no access
|
||||
;; - "Imprudence 1.3" has no access
|
||||
;; - "Imprudence 1.3.1" has access
|
||||
; BannedClients =
|
||||
|
||||
|
||||
[Map]
|
||||
;# {GenerateMaptiles} {} {Generate map tiles?} {true false} true
|
||||
;; Map tile options.
|
||||
;; If true, then maptiles are generated using the MapImageModule below.
|
||||
;; If false then the texture referenced by MaptileStaticUUID is used instead, which can also be overriden
|
||||
;; in individual region config file(s). If you do not want to upload map tiles at all, then you will need
|
||||
;; both to set this to false and comment out the [Modules] MapImageServiceModule setting in config-include/
|
||||
; GenerateMaptiles = true
|
||||
|
||||
;# {MapImageModule} [] {The map image module to use} {MapImageModule Warp3DImageModule} MapImageModule
|
||||
;; The module to use in order to generate map images.
|
||||
;; MapImageModule is the default. Warp3DImageModule is an alternative experimental module that can
|
||||
;; generate better images.
|
||||
;MapImageModule = "MapImageModule"
|
||||
|
||||
;# {MaptileRefresh} {GenerateMaptiles} {Maptile refresh period?} {} 0
|
||||
;; If desired, a running region can update the map tiles periodically
|
||||
;; to reflect building activity. This names no sense of you don't have
|
||||
;; prims on maptiles. Value is in seconds.
|
||||
; MaptileRefresh = 0
|
||||
|
||||
;# {MaptileStaticUUID} {} {Asset ID for static map texture} {} 00000000-0000-0000-0000-000000000000
|
||||
;; If not generating maptiles, use this static texture asset ID
|
||||
; MaptileStaticUUID = "00000000-0000-0000-0000-000000000000"
|
||||
|
||||
;# {TextureOnMapTile} {} {Use terrain textures for map tiles?} {true false} true
|
||||
;; Use terrain texture for maptiles if true, use shaded green if false
|
||||
; TextureOnMapTile = true
|
||||
|
||||
;# {DrawPrimOnMapTile} {} {Draw prim shapes on map tiles?} {true false} false
|
||||
;; Draw objects on maptile. This step might take a long time if you've
|
||||
;; got a large number of objects, so you can turn it off here if you'd like.
|
||||
; DrawPrimOnMapTile = true
|
||||
|
||||
|
||||
[Permissions]
|
||||
;# {permissionmodules} {} {Permission modules to use (may specify multiple modules, separated by comma} {} DefaultPermissionsModule
|
||||
;; Permission modules to use, separated by comma.
|
||||
;; Possible modules are DefaultPermissionsModule, PrimLimitsModule
|
||||
|
@ -264,97 +359,6 @@
|
|||
; simple_build_permissions = false
|
||||
|
||||
|
||||
;# {DefaultScriptEngine} {} {Default script engine} {XEngine} XEngine
|
||||
;; Default script engine to use. Currently, we only have XEngine
|
||||
; DefaultScriptEngine = "XEngine"
|
||||
|
||||
;# {HttpProxy} {} {Proxy URL for llHTTPRequest and dynamic texture loading} {} http://proxy.com:8080
|
||||
;; Http proxy setting for llHTTPRequest and dynamic texture loading, if
|
||||
;; required
|
||||
; HttpProxy = "http://proxy.com:8080"
|
||||
|
||||
;# {HttpProxyExceptions} {HttpProxy} {Set of regular expressions defining URL that should not be proxied} {}
|
||||
;; If you're using HttpProxy, then you can set HttpProxyExceptions to a
|
||||
;; list of regular expressions for URLs that you don't want to go through
|
||||
;; the proxy.
|
||||
;; For example, servers inside your firewall.
|
||||
;; Separate patterns with a ';'
|
||||
; HttpProxyExceptions = ".mydomain.com;localhost"
|
||||
|
||||
;# {emailmodule} {} {Provide llEmail and llGetNextEmail functionality? (requires SMTP server)} {true false} false
|
||||
;; The email module requires some configuration. It needs an SMTP
|
||||
;; server to send mail through.
|
||||
; emailmodule = DefaultEmailModule
|
||||
|
||||
;# {SpawnPointRouting} {} {Set routing method for Telehub Spawnpoints} {closest random sequence} closest
|
||||
;; SpawnPointRouting adjusts the landing for incoming avatars.
|
||||
;; "closest" will place the avatar at the SpawnPoint located in the closest
|
||||
;; available spot to the destination (typically map click/landmark).
|
||||
;; "random" will place the avatar on a randomly selected spawnpoint;
|
||||
;; "sequence" will place the avatar on the next sequential SpawnPoint
|
||||
; SpawnPointRouting = closest
|
||||
|
||||
;# {TelehubAllowLandmark} {} {Allow users with landmarks to override telehub routing} {true false} false
|
||||
;; TelehubAllowLandmark allows users with landmarks to override telehub
|
||||
;; routing and land at the landmark coordinates when set to true
|
||||
;; default is false
|
||||
; TelehubAllowLandmark = false
|
||||
|
||||
;# {AllowedClients} {} {Bar (|) separated list of allowed clients} {}
|
||||
;; Bar (|) separated list of viewers which may gain access to the regions.
|
||||
;; One can use a substring of the viewer name to enable only certain
|
||||
;; versions
|
||||
;; Example: Agent uses the viewer "Imprudence 1.3.2.0"
|
||||
;; - "Imprudence" has access
|
||||
;; - "Imprudence 1.3" has access
|
||||
;; - "Imprudence 1.3.1" has no access
|
||||
; AllowedViewerList =
|
||||
|
||||
;# {BannedClients} {} {Bar (|) separated list of banned clients} {}
|
||||
;# Bar (|) separated list of viewers which may not gain access to the regions.
|
||||
;; One can use a Substring of the viewer name to disable only certain
|
||||
;; versions
|
||||
;; Example: Agent uses the viewer "Imprudence 1.3.2.0"
|
||||
;; - "Imprudence" has no access
|
||||
;; - "Imprudence 1.3" has no access
|
||||
;; - "Imprudence 1.3.1" has access
|
||||
; BannedViewerList =
|
||||
|
||||
[Map]
|
||||
;# {GenerateMaptiles} {} {Generate map tiles?} {true false} true
|
||||
;; Map tile options.
|
||||
;; If true, then maptiles are generated using the MapImageModule below.
|
||||
;; If false then the texture referenced by MaptileStaticUUID is used instead, which can also be overriden
|
||||
;; in individual region config file(s). If you do not want to upload map tiles at all, then you will need
|
||||
;; both to set this to false and comment out the [Modules] MapImageServiceModule setting in config-include/
|
||||
; GenerateMaptiles = true
|
||||
|
||||
;# {MapImageModule} [] {The map image module to use} {MapImageModule Warp3DImageModule} MapImageModule
|
||||
;; The module to use in order to generate map images.
|
||||
;; MapImageModule is the default. Warp3DImageModule is an alternative experimental module that can
|
||||
;; generate better images.
|
||||
;MapImageModule = "MapImageModule"
|
||||
|
||||
;# {MaptileRefresh} {GenerateMaptiles} {Maptile refresh period?} {} 0
|
||||
;; If desired, a running region can update the map tiles periodically
|
||||
;; to reflect building activity. This names no sense of you don't have
|
||||
;; prims on maptiles. Value is in seconds.
|
||||
; MaptileRefresh = 0
|
||||
|
||||
;# {MaptileStaticUUID} {} {Asset ID for static map texture} {} 00000000-0000-0000-0000-000000000000
|
||||
;; If not generating maptiles, use this static texture asset ID
|
||||
; MaptileStaticUUID = "00000000-0000-0000-0000-000000000000"
|
||||
|
||||
;# {TextureOnMapTile} {} {Use terrain textures for map tiles?} {true false} true
|
||||
;; Use terrain texture for maptiles if true, use shaded green if false
|
||||
; TextureOnMapTile = true
|
||||
|
||||
;# {DrawPrimOnMapTile} {} {Draw prim shapes on map tiles?} {true false} false
|
||||
;; Draw objects on maptile. This step might take a long time if you've
|
||||
;; got a large number of objects, so you can turn it off here if you'd like.
|
||||
; DrawPrimOnMapTile = true
|
||||
|
||||
|
||||
[Estates]
|
||||
; If these values are commented out then the user will be asked for estate details when required (this is the normal case).
|
||||
; If these values are uncommented then they will be used to create a default estate as necessary.
|
||||
|
|
|
@ -230,54 +230,6 @@
|
|||
;physics = modified_BulletX
|
||||
;physics = BulletSim
|
||||
|
||||
; ##
|
||||
; ## PERMISSIONS
|
||||
; ##
|
||||
|
||||
;permissionmodules = "DefaultPermissionsModule"
|
||||
|
||||
; If set to false, then, in theory, the server never carries out permission checks (allowing anybody to copy
|
||||
; any item, etc. This may not yet be implemented uniformally.
|
||||
; If set to true, then all permissions checks are carried out
|
||||
; Default is true
|
||||
serverside_object_permissions = true
|
||||
|
||||
allow_grid_gods = false
|
||||
|
||||
; This allows somne control over permissions
|
||||
; please note that this still doesn't duplicate SL, and is not intended to
|
||||
;region_owner_is_god = true
|
||||
;region_manager_is_god = false
|
||||
;parcel_owner_is_god = true
|
||||
|
||||
; Control user types that are allowed to create new scripts
|
||||
; Only enforced if serviceside_object_permissions is true
|
||||
;
|
||||
; Current possible values are
|
||||
; all - anyone can create scripts (subject to normal permissions)
|
||||
; gods - only administrators can create scripts (as long as allow_grid_gods is true)
|
||||
; Default value is all
|
||||
; allowed_script_creators = all
|
||||
|
||||
; Control user types that are allowed to edit (save) scripts
|
||||
; Only enforced if serviceside_object_permissions is true
|
||||
;
|
||||
; Current possible values are
|
||||
; all - anyone can edit scripts (subject to normal permissions)
|
||||
; gods - only administrators can edit scripts (as long as allow_grid_gods is true)
|
||||
; Default value is all
|
||||
; allowed_script_editors = all
|
||||
|
||||
; Provides a simple control for land owners to give build rights to specific avatars
|
||||
; in publicly accessible parcels that disallow object creation in general.
|
||||
; Owners specific avatars by adding them to the Access List of the parcel
|
||||
; without having to use the Groups feature
|
||||
; Disabled by default
|
||||
; simple_build_permissions = False
|
||||
|
||||
; Minimum user level required to upload assets
|
||||
;LevelUpload = 0
|
||||
|
||||
; ##
|
||||
; ## SCRIPT ENGINE
|
||||
; ##
|
||||
|
@ -344,6 +296,55 @@
|
|||
; Use terrain texture for maptiles if true, use shaded green if false
|
||||
TextureOnMapTile = true
|
||||
|
||||
[Permissions]
|
||||
; ##
|
||||
; ## PERMISSIONS
|
||||
; ##
|
||||
|
||||
;permissionmodules = "DefaultPermissionsModule"
|
||||
|
||||
; If set to false, then, in theory, the server never carries out permission checks (allowing anybody to copy
|
||||
; any item, etc. This may not yet be implemented uniformally.
|
||||
; If set to true, then all permissions checks are carried out
|
||||
; Default is true
|
||||
serverside_object_permissions = true
|
||||
|
||||
allow_grid_gods = false
|
||||
|
||||
; This allows somne control over permissions
|
||||
; please note that this still doesn't duplicate SL, and is not intended to
|
||||
;region_owner_is_god = true
|
||||
;region_manager_is_god = false
|
||||
;parcel_owner_is_god = true
|
||||
|
||||
; Control user types that are allowed to create new scripts
|
||||
; Only enforced if serviceside_object_permissions is true
|
||||
;
|
||||
; Current possible values are
|
||||
; all - anyone can create scripts (subject to normal permissions)
|
||||
; gods - only administrators can create scripts (as long as allow_grid_gods is true)
|
||||
; Default value is all
|
||||
; allowed_script_creators = all
|
||||
|
||||
; Control user types that are allowed to edit (save) scripts
|
||||
; Only enforced if serviceside_object_permissions is true
|
||||
;
|
||||
; Current possible values are
|
||||
; all - anyone can edit scripts (subject to normal permissions)
|
||||
; gods - only administrators can edit scripts (as long as allow_grid_gods is true)
|
||||
; Default value is all
|
||||
; allowed_script_editors = all
|
||||
|
||||
; Provides a simple control for land owners to give build rights to specific avatars
|
||||
; in publicly accessible parcels that disallow object creation in general.
|
||||
; Owners specific avatars by adding them to the Access List of the parcel
|
||||
; without having to use the Groups feature
|
||||
; Disabled by default
|
||||
; simple_build_permissions = False
|
||||
|
||||
; Minimum user level required to upload assets
|
||||
;LevelUpload = 0
|
||||
|
||||
|
||||
[RegionReady]
|
||||
; Enable this module to get notified once all items and scripts in the region have been completely loaded and compiled
|
||||
|
@ -1399,6 +1400,10 @@
|
|||
; up the system to malicious scripters
|
||||
; NotecardLineReadCharsMax = 255
|
||||
|
||||
; Minimum settable timer interval. Any timer setting less than this is
|
||||
; rounded up to this minimum interval.
|
||||
; MinTimerInterval = 0.5
|
||||
|
||||
; Sensor settings
|
||||
SensorMaxRange = 96.0
|
||||
SensorMaxResults = 16
|
||||
|
|
|
@ -431,6 +431,7 @@ HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:Asset
|
|||
UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService"
|
||||
UserAgentService = "OpenSim.Services.HypergridService.dll:UserAgentService"
|
||||
PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService"
|
||||
GridUserService = "OpenSim.Services.UserAccountService.dll:GridUserService"
|
||||
GridService = "OpenSim.Services.GridService.dll:GridService"
|
||||
AuthenticationService = "OpenSim.Services.Connectors.dll:AuthenticationServicesConnector"
|
||||
SimulationService ="OpenSim.Services.Connectors.dll:SimulationServiceConnector"
|
||||
|
|
|
@ -3387,6 +3387,7 @@
|
|||
|
||||
<ReferencePath>../../../bin/</ReferencePath>
|
||||
<Reference name="System"/>
|
||||
<Reference name="System.Core"/>
|
||||
<Reference name="System.Xml"/>
|
||||
<Reference name="OpenSim.Framework"/>
|
||||
<Reference name="OpenSim.Framework.Communications"/>
|
||||
|
|
Loading…
Reference in New Issue