Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
commit
f676408e2a
|
@ -85,16 +85,26 @@ namespace OpenSim.ApplicationPlugins.RegionModulesController
|
||||||
if (modulesConfig == null)
|
if (modulesConfig == null)
|
||||||
modulesConfig = m_openSim.ConfigSource.Source.AddConfig("Modules");
|
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
|
// Scan modules and load all that aren't disabled
|
||||||
foreach (TypeExtensionNode node in
|
foreach (TypeExtensionNode node in
|
||||||
AddinManager.GetExtensionNodes("/OpenSim/RegionModules"))
|
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 (node.Type.GetInterface(typeof(ISharedRegionModule).ToString()) != null)
|
||||||
{
|
{
|
||||||
if (CheckModuleEnabled(node, modulesConfig))
|
if (CheckModuleEnabled(node, modulesConfig))
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[REGIONMODULES]: Found shared region module {0}, class {1}", node.Id, node.Type);
|
m_log.DebugFormat("[REGIONMODULES]: Found shared region module {0}, class {1}", node.Id, node.Type);
|
||||||
m_sharedModules.Add(node);
|
m_sharedModules.Add(node);
|
||||||
|
loadedModuleData[0]++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (node.Type.GetInterface(typeof(INonSharedRegionModule).ToString()) != null)
|
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_log.DebugFormat("[REGIONMODULES]: Found non-shared region module {0}, class {1}", node.Id, node.Type);
|
||||||
m_nonSharedModules.Add(node);
|
m_nonSharedModules.Add(node);
|
||||||
|
loadedModuleData[1]++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
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
|
// 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
|
// if a port was given, fall back to one without if there is
|
||||||
// no port or the more specific constructor fails.
|
// no port or the more specific constructor fails.
|
||||||
|
|
|
@ -108,6 +108,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
private int _bufferLength;
|
private int _bufferLength;
|
||||||
private bool _closing;
|
private bool _closing;
|
||||||
private bool _upgraded;
|
private bool _upgraded;
|
||||||
|
private int _maxPayloadBytes = 41943040;
|
||||||
|
|
||||||
private const string HandshakeAcceptText =
|
private const string HandshakeAcceptText =
|
||||||
"HTTP/1.1 101 Switching Protocols\r\n" +
|
"HTTP/1.1 101 Switching Protocols\r\n" +
|
||||||
|
@ -195,6 +196,15 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
HandshakeAndUpgrade();
|
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>
|
/// <summary>
|
||||||
/// This triggers the websocket start the upgrade process
|
/// This triggers the websocket start the upgrade process
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -367,7 +377,12 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
if (headerread)
|
if (headerread)
|
||||||
{
|
{
|
||||||
_socketState.FrameComplete = false;
|
_socketState.FrameComplete = false;
|
||||||
|
if (pheader.PayloadLen > (ulong) _maxPayloadBytes)
|
||||||
|
{
|
||||||
|
Close("Invalid Payload size");
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (pheader.PayloadLen > 0)
|
if (pheader.PayloadLen > 0)
|
||||||
{
|
{
|
||||||
if ((int) pheader.PayloadLen > _bufferPosition - offset)
|
if ((int) pheader.PayloadLen > _bufferPosition - offset)
|
||||||
|
|
|
@ -134,6 +134,10 @@ namespace OpenSim
|
||||||
/// <param name="configSource"></param>
|
/// <param name="configSource"></param>
|
||||||
public OpenSimBase(IConfigSource configSource) : base()
|
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);
|
LoadConfigSettings(configSource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
public bool Enabled { get; private set; }
|
public bool Enabled { get; private set; }
|
||||||
|
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
private UUID m_agentID;
|
|
||||||
|
|
||||||
#region ISharedRegionModule Members
|
#region ISharedRegionModule Members
|
||||||
|
|
||||||
|
@ -118,25 +117,26 @@ 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("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);
|
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");
|
// m_log.DebugFormat("[MESH UPLOAD FLAG MODULE]: MeshUploadFlag request");
|
||||||
|
|
||||||
OSDMap data = new OSDMap();
|
OSDMap data = new OSDMap();
|
||||||
ScenePresence sp = m_scene.GetScenePresence(m_agentID);
|
ScenePresence sp = m_scene.GetScenePresence(agentID);
|
||||||
data["username"] = sp.Firstname + "." + sp.Lastname;
|
data["username"] = sp.Firstname + "." + sp.Lastname;
|
||||||
data["display_name_next_update"] = new OSDDate(DateTime.Now);
|
data["display_name_next_update"] = new OSDDate(DateTime.Now);
|
||||||
data["legacy_first_name"] = sp.Firstname;
|
data["legacy_first_name"] = sp.Firstname;
|
||||||
data["mesh_upload_status"] = "valid";
|
data["mesh_upload_status"] = "valid";
|
||||||
data["display_name"] = sp.Firstname + " " + sp.Lastname;
|
data["display_name"] = sp.Firstname + " " + sp.Lastname;
|
||||||
data["legacy_last_name"] = sp.Lastname;
|
data["legacy_last_name"] = sp.Lastname;
|
||||||
data["id"] = m_agentID;
|
data["id"] = agentID;
|
||||||
data["is_display_name_default"] = true;
|
data["is_display_name_default"] = true;
|
||||||
|
|
||||||
//Send back data
|
//Send back data
|
||||||
|
|
|
@ -790,6 +790,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
handshake.RegionInfo3.ColoName = Utils.EmptyBytes;
|
handshake.RegionInfo3.ColoName = Utils.EmptyBytes;
|
||||||
handshake.RegionInfo3.ProductName = Util.StringToBytes256(regionInfo.RegionType);
|
handshake.RegionInfo3.ProductName = Util.StringToBytes256(regionInfo.RegionType);
|
||||||
handshake.RegionInfo3.ProductSKU = Utils.EmptyBytes;
|
handshake.RegionInfo3.ProductSKU = Utils.EmptyBytes;
|
||||||
|
handshake.RegionInfo4 = new RegionHandshakePacket.RegionInfo4Block[0];
|
||||||
|
|
||||||
OutPacket(handshake, ThrottleOutPacketType.Task);
|
OutPacket(handshake, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
|
@ -3571,6 +3572,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
avp.Sender.IsTrial = false;
|
avp.Sender.IsTrial = false;
|
||||||
avp.Sender.ID = agentID;
|
avp.Sender.ID = agentID;
|
||||||
|
avp.AppearanceData = new AvatarAppearancePacket.AppearanceDataBlock[0];
|
||||||
//m_log.DebugFormat("[CLIENT]: Sending appearance for {0} to {1}", agentID.ToString(), AgentId.ToString());
|
//m_log.DebugFormat("[CLIENT]: Sending appearance for {0} to {1}", agentID.ToString(), AgentId.ToString());
|
||||||
OutPacket(avp, ThrottleOutPacketType.Task);
|
OutPacket(avp, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
|
@ -4192,7 +4194,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
pack.Stat = stats.StatsBlock;
|
pack.Stat = stats.StatsBlock;
|
||||||
|
|
||||||
pack.Header.Reliable = false;
|
pack.Header.Reliable = false;
|
||||||
|
pack.RegionInfo = new SimStatsPacket.RegionInfoBlock[0];
|
||||||
OutPacket(pack, ThrottleOutPacketType.Task);
|
OutPacket(pack, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -156,9 +156,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
|
|
||||||
public void Initialise(IConfigSource config)
|
public void Initialise(IConfigSource config)
|
||||||
{
|
{
|
||||||
IConfig myConfig = config.Configs["Startup"];
|
string permissionModules = Util.GetConfigVarFromSections<string>(config, "permissionmodules",
|
||||||
|
new string[] { "Startup", "Permissions" }, "DefaultPermissionsModule");
|
||||||
string permissionModules = myConfig.GetString("permissionmodules", "DefaultPermissionsModule");
|
|
||||||
|
|
||||||
List<string> modules = new List<string>(permissionModules.Split(','));
|
List<string> modules = new List<string>(permissionModules.Split(','));
|
||||||
|
|
||||||
|
@ -167,26 +166,34 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
|
|
||||||
m_Enabled = true;
|
m_Enabled = true;
|
||||||
|
|
||||||
m_allowGridGods = myConfig.GetBoolean("allow_grid_gods", false);
|
m_allowGridGods = Util.GetConfigVarFromSections<bool>(config, "allow_grid_gods",
|
||||||
m_bypassPermissions = !myConfig.GetBoolean("serverside_object_permissions", true);
|
new string[] { "Startup", "Permissions" }, false);
|
||||||
m_propagatePermissions = myConfig.GetBoolean("propagate_permissions", true);
|
m_bypassPermissions = !Util.GetConfigVarFromSections<bool>(config, "serverside_object_permissions",
|
||||||
m_RegionOwnerIsGod = myConfig.GetBoolean("region_owner_is_god", true);
|
new string[] { "Startup", "Permissions" }, true);
|
||||||
m_RegionManagerIsGod = myConfig.GetBoolean("region_manager_is_god", false);
|
m_propagatePermissions = Util.GetConfigVarFromSections<bool>(config, "propagate_permissions",
|
||||||
m_ParcelOwnerIsGod = myConfig.GetBoolean("parcel_owner_is_god", true);
|
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
|
m_allowedScriptCreators
|
||||||
= ParseUserSetConfigSetting(myConfig, "allowed_script_creators", m_allowedScriptCreators);
|
= ParseUserSetConfigSetting(config, "allowed_script_creators", m_allowedScriptCreators);
|
||||||
m_allowedScriptEditors
|
m_allowedScriptEditors
|
||||||
= ParseUserSetConfigSetting(myConfig, "allowed_script_editors", m_allowedScriptEditors);
|
= ParseUserSetConfigSetting(config, "allowed_script_editors", m_allowedScriptEditors);
|
||||||
|
|
||||||
if (m_bypassPermissions)
|
if (m_bypassPermissions)
|
||||||
m_log.Info("[PERMISSIONS]: serverside_object_permissions = false in ini file so disabling all region service permission checks");
|
m_log.Info("[PERMISSIONS]: serverside_object_permissions = false in ini file so disabling all region service permission checks");
|
||||||
else
|
else
|
||||||
m_log.Debug("[PERMISSIONS]: Enabling all region service permission checks");
|
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)
|
if (grant.Length > 0)
|
||||||
{
|
{
|
||||||
foreach (string uuidl in grant.Split(','))
|
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)
|
if (grant.Length > 0)
|
||||||
{
|
{
|
||||||
foreach (string uuidl in grant.Split(','))
|
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)
|
if (grant.Length > 0)
|
||||||
{
|
{
|
||||||
foreach (string uuidl in grant.Split(','))
|
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)
|
if (grant.Length > 0)
|
||||||
{
|
{
|
||||||
foreach (string uuidl in grant.Split(','))
|
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)
|
if (grant.Length > 0)
|
||||||
{
|
{
|
||||||
foreach (string uuidl in grant.Split(','))
|
foreach (string uuidl in grant.Split(','))
|
||||||
|
@ -464,11 +475,12 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
||||||
/// <param name="settingName"></param>
|
/// <param name="settingName"></param>
|
||||||
/// <param name="defaultValue">The default value for this attribute</param>
|
/// <param name="defaultValue">The default value for this attribute</param>
|
||||||
/// <returns>The parsed value</returns>
|
/// <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;
|
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
|
// Temporary measure to allow 'gods' to be specified in config for consistency's sake. In the long term
|
||||||
// this should disappear.
|
// this should disappear.
|
||||||
|
|
|
@ -148,8 +148,6 @@ namespace OpenSim.Region.DataSnapshot
|
||||||
return;
|
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_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_scenes.Add(scene);
|
||||||
|
m_snapStore.AddScene(scene);
|
||||||
|
|
||||||
Assembly currentasm = Assembly.GetExecutingAssembly();
|
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)
|
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)
|
if (grant.Length > 0)
|
||||||
{
|
{
|
||||||
foreach (string viewer in grant.Split('|'))
|
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)
|
if (grant.Length > 0)
|
||||||
{
|
{
|
||||||
foreach (string viewer in grant.Split('|'))
|
foreach (string viewer in grant.Split('|'))
|
||||||
|
|
|
@ -130,7 +130,7 @@ namespace OpenSim.Region.Framework.Tests
|
||||||
SceneObjectPart sop1 = sog1.RootPart;
|
SceneObjectPart sop1 = sog1.RootPart;
|
||||||
TaskInventoryItem sopItem1
|
TaskInventoryItem sopItem1
|
||||||
= TaskInventoryHelpers.AddNotecard(
|
= TaskInventoryHelpers.AddNotecard(
|
||||||
scene, sop1, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900));
|
scene, sop1, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900), "Hello World!");
|
||||||
|
|
||||||
InventoryFolderBase folder
|
InventoryFolderBase folder
|
||||||
= InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, user1.PrincipalID, "Objects")[0];
|
= InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, user1.PrincipalID, "Objects")[0];
|
||||||
|
@ -162,7 +162,7 @@ namespace OpenSim.Region.Framework.Tests
|
||||||
SceneObjectPart sop1 = sog1.RootPart;
|
SceneObjectPart sop1 = sog1.RootPart;
|
||||||
TaskInventoryItem sopItem1
|
TaskInventoryItem sopItem1
|
||||||
= TaskInventoryHelpers.AddNotecard(
|
= TaskInventoryHelpers.AddNotecard(
|
||||||
scene, sop1, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900));
|
scene, sop1, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900), "Hello World!");
|
||||||
|
|
||||||
// Perform test
|
// Perform test
|
||||||
scene.MoveTaskInventoryItem(user1.PrincipalID, UUID.Zero, sop1, sopItem1.ItemID);
|
scene.MoveTaskInventoryItem(user1.PrincipalID, UUID.Zero, sop1, sopItem1.ItemID);
|
||||||
|
|
|
@ -76,7 +76,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments
|
||||||
|
|
||||||
if (m_console != null)
|
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
|
else
|
||||||
|
|
|
@ -33,10 +33,11 @@ using Nini.Config;
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
using OpenSim.Region.Framework.Scenes;
|
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
|
// specify its assembly. Otherwise, the region modules in the assembly will not be picked up when OpenSimulator scans
|
||||||
// the available DLLs
|
// the available DLLs
|
||||||
//[assembly: Addin("MyModule", "1.0")]
|
//[assembly: Addin("MyModule", "1.0")]
|
||||||
|
//[assembly: AddinDependency("OpenSim", "0.5")]
|
||||||
|
|
||||||
namespace OpenSim.Region.OptionalModules.Example.BareBonesNonShared
|
namespace OpenSim.Region.OptionalModules.Example.BareBonesNonShared
|
||||||
{
|
{
|
||||||
|
|
|
@ -33,10 +33,11 @@ using Nini.Config;
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
using OpenSim.Region.Framework.Scenes;
|
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
|
// specify its assembly. Otherwise, the region modules in the assembly will not be picked up when OpenSimulator scans
|
||||||
// the available DLLs
|
// the available DLLs
|
||||||
//[assembly: Addin("MyModule", "1.0")]
|
//[assembly: Addin("MyModule", "1.0")]
|
||||||
|
//[assembly: AddinDependency("OpenSim", "0.5")]
|
||||||
|
|
||||||
namespace OpenSim.Region.OptionalModules.Example.BareBonesShared
|
namespace OpenSim.Region.OptionalModules.Example.BareBonesShared
|
||||||
{
|
{
|
||||||
|
|
|
@ -45,6 +45,7 @@ namespace OpenSim.Region.OptionalModules.WebSocketEchoModule
|
||||||
public class WebSocketEchoModule : ISharedRegionModule
|
public class WebSocketEchoModule : ISharedRegionModule
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private bool enabled;
|
private bool enabled;
|
||||||
public string Name { get { return "WebSocketEchoModule"; } }
|
public string Name { get { return "WebSocketEchoModule"; } }
|
||||||
|
|
||||||
|
@ -56,8 +57,8 @@ namespace OpenSim.Region.OptionalModules.WebSocketEchoModule
|
||||||
public void Initialise(IConfigSource pConfig)
|
public void Initialise(IConfigSource pConfig)
|
||||||
{
|
{
|
||||||
enabled = (pConfig.Configs["WebSocketEcho"] != null);
|
enabled = (pConfig.Configs["WebSocketEcho"] != null);
|
||||||
if (enabled)
|
// if (enabled)
|
||||||
m_log.DebugFormat("[WebSocketEchoModule]: INITIALIZED MODULE");
|
// m_log.DebugFormat("[WebSocketEchoModule]: INITIALIZED MODULE");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -158,17 +159,17 @@ namespace OpenSim.Region.OptionalModules.WebSocketEchoModule
|
||||||
|
|
||||||
public void AddRegion(Scene scene)
|
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)
|
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)
|
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)
|
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(','));
|
List<string> modules=new List<string>(permissionModules.Split(','));
|
||||||
|
|
||||||
|
|
|
@ -961,13 +961,13 @@ namespace OpenSim.Region.Physics.BulletSPlugin
|
||||||
// ==================================================================
|
// ==================================================================
|
||||||
// Clamp high or low velocities
|
// Clamp high or low velocities
|
||||||
float newVelocityLengthSq = VehicleVelocity.LengthSquared();
|
float newVelocityLengthSq = VehicleVelocity.LengthSquared();
|
||||||
if (newVelocityLengthSq > BSParam.VehicleMaxLinearVelocitySq)
|
if (newVelocityLengthSq > BSParam.VehicleMaxLinearVelocitySquared)
|
||||||
{
|
{
|
||||||
Vector3 origVelW = VehicleVelocity; // DEBUG DEBUG
|
Vector3 origVelW = VehicleVelocity; // DEBUG DEBUG
|
||||||
VehicleVelocity /= VehicleVelocity.Length();
|
VehicleVelocity /= VehicleVelocity.Length();
|
||||||
VehicleVelocity *= BSParam.VehicleMaxLinearVelocity;
|
VehicleVelocity *= BSParam.VehicleMaxLinearVelocity;
|
||||||
VDetailLog("{0}, MoveLinear,clampMax,origVelW={1},lenSq={2},maxVelSq={3},,newVelW={4}",
|
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)
|
else if (newVelocityLengthSq < 0.001f)
|
||||||
VehicleVelocity = Vector3.Zero;
|
VehicleVelocity = Vector3.Zero;
|
||||||
|
|
|
@ -47,12 +47,16 @@ public static class BSParam
|
||||||
public static float SculptLOD { get; private set; }
|
public static float SculptLOD { get; private set; }
|
||||||
|
|
||||||
public static int CrossingFailuresBeforeOutOfBounds { 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 MinimumObjectMass { get; private set; }
|
||||||
public static float MaximumObjectMass { get; private set; }
|
public static float MaximumObjectMass { get; private set; }
|
||||||
public static float MaxLinearVelocity { 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 MaxAngularVelocity { get; private set; }
|
||||||
|
public static float MaxAngularVelocitySquared { get; private set; }
|
||||||
public static float MaxAddForceMagnitude { 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 DensityScaleFactor { get; private set; }
|
||||||
|
|
||||||
public static float LinearDamping { get; private set; }
|
public static float LinearDamping { get; private set; }
|
||||||
|
@ -109,7 +113,7 @@ public static class BSParam
|
||||||
|
|
||||||
// Vehicle parameters
|
// Vehicle parameters
|
||||||
public static float VehicleMaxLinearVelocity { get; private set; }
|
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 VehicleMaxAngularVelocity { get; private set; }
|
||||||
public static float VehicleMaxAngularVelocitySq { get; private set; }
|
public static float VehicleMaxAngularVelocitySq { get; private set; }
|
||||||
public static float VehicleAngularDamping { 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:
|
// The single letter parameters for the delegates are:
|
||||||
// s = BSScene
|
// s = BSScene
|
||||||
// o = BSPhysObject
|
// o = BSPhysObject
|
||||||
// v = value (float)
|
// v = value (appropriate type)
|
||||||
private static ParameterDefnBase[] ParameterDefinitions =
|
private static ParameterDefnBase[] ParameterDefinitions =
|
||||||
{
|
{
|
||||||
new ParameterDefn<bool>("MeshSculptedPrim", "Whether to create meshes for sculpties",
|
new ParameterDefn<bool>("MeshSculptedPrim", "Whether to create meshes for sculpties",
|
||||||
|
@ -289,6 +293,10 @@ public static class BSParam
|
||||||
5,
|
5,
|
||||||
(s) => { return CrossingFailuresBeforeOutOfBounds; },
|
(s) => { return CrossingFailuresBeforeOutOfBounds; },
|
||||||
(s,v) => { CrossingFailuresBeforeOutOfBounds = v; } ),
|
(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)",
|
new ParameterDefn<float>("MeshLevelOfDetail", "Level of detail to render meshes (32, 16, 8 or 4. 32=most detailed)",
|
||||||
32f,
|
32f,
|
||||||
|
@ -343,16 +351,16 @@ public static class BSParam
|
||||||
new ParameterDefn<float>("MaxLinearVelocity", "Maximum velocity magnitude that can be assigned to an object",
|
new ParameterDefn<float>("MaxLinearVelocity", "Maximum velocity magnitude that can be assigned to an object",
|
||||||
1000.0f,
|
1000.0f,
|
||||||
(s) => { return MaxLinearVelocity; },
|
(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",
|
new ParameterDefn<float>("MaxAngularVelocity", "Maximum rotational velocity magnitude that can be assigned to an object",
|
||||||
1000.0f,
|
1000.0f,
|
||||||
(s) => { return MaxAngularVelocity; },
|
(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
|
// 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)",
|
new ParameterDefn<float>("MaxAddForceMagnitude", "Maximum force that can be applied by llApplyImpulse (SL says 20f)",
|
||||||
20000.0f,
|
20000.0f,
|
||||||
(s) => { return MaxAddForceMagnitude; },
|
(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.
|
// 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)",
|
new ParameterDefn<float>("DensityScaleFactor", "Conversion for simulator/viewer density (100kg/m3) to physical density (1kg/m3)",
|
||||||
0.01f,
|
0.01f,
|
||||||
|
@ -505,7 +513,7 @@ public static class BSParam
|
||||||
new ParameterDefn<float>("VehicleMaxLinearVelocity", "Maximum velocity magnitude that can be assigned to a vehicle",
|
new ParameterDefn<float>("VehicleMaxLinearVelocity", "Maximum velocity magnitude that can be assigned to a vehicle",
|
||||||
1000.0f,
|
1000.0f,
|
||||||
(s) => { return (float)VehicleMaxLinearVelocity; },
|
(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",
|
new ParameterDefn<float>("VehicleMaxAngularVelocity", "Maximum rotational velocity magnitude that can be assigned to a vehicle",
|
||||||
12.0f,
|
12.0f,
|
||||||
(s) => { return (float)VehicleMaxAngularVelocity; },
|
(s) => { return (float)VehicleMaxAngularVelocity; },
|
||||||
|
|
|
@ -108,6 +108,9 @@ public class BSPrim : BSPhysObject
|
||||||
// do the actual object creation at taint time
|
// do the actual object creation at taint time
|
||||||
PhysicsScene.TaintedObject("BSPrim.create", delegate()
|
PhysicsScene.TaintedObject("BSPrim.create", delegate()
|
||||||
{
|
{
|
||||||
|
// Make sure the object is being created with some sanity.
|
||||||
|
ExtremeSanityCheck(true /* inTaintTime */);
|
||||||
|
|
||||||
CreateGeomAndObject(true);
|
CreateGeomAndObject(true);
|
||||||
|
|
||||||
CurrentCollisionFlags = PhysicsScene.PE.GetCollisionFlags(PhysBody);
|
CurrentCollisionFlags = PhysicsScene.PE.GetCollisionFlags(PhysBody);
|
||||||
|
@ -450,6 +453,38 @@ public class BSPrim : BSPhysObject
|
||||||
return ret;
|
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.
|
// Return the effective mass of the object.
|
||||||
// The definition of this call is to return the mass of the prim.
|
// 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.
|
// 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)
|
if (VehicleController.Type == Vehicle.TYPE_NONE)
|
||||||
{
|
{
|
||||||
UnRegisterPreStepAction("BSPrim.Vehicle", LocalID);
|
UnRegisterPreStepAction("BSPrim.Vehicle", LocalID);
|
||||||
PhysicsScene.AfterStep -= VehicleController.PostStep;
|
UnRegisterPostStepAction("BSPrim.Vehicle", LocalID);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
RegisterPreStepAction("BSPrim.Vehicle", LocalID, VehicleController.Step);
|
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 {
|
set {
|
||||||
PhysicsScene.AssertInTaintTime("BSPrim.ForceVelocity");
|
PhysicsScene.AssertInTaintTime("BSPrim.ForceVelocity");
|
||||||
|
|
||||||
_velocity = value;
|
_velocity = Util.ClampV(value, BSParam.MaxLinearVelocity);
|
||||||
if (PhysBody.HasPhysicalBody)
|
if (PhysBody.HasPhysicalBody)
|
||||||
{
|
{
|
||||||
DetailLog("{0},BSPrim.ForceVelocity,taint,vel={1}", LocalID, _velocity);
|
DetailLog("{0},BSPrim.ForceVelocity,taint,vel={1}", LocalID, _velocity);
|
||||||
|
@ -1098,7 +1133,7 @@ public class BSPrim : BSPhysObject
|
||||||
return _rotationalVelocity;
|
return _rotationalVelocity;
|
||||||
}
|
}
|
||||||
set {
|
set {
|
||||||
_rotationalVelocity = value;
|
_rotationalVelocity = Util.ClampV(value, BSParam.MaxAngularVelocity);
|
||||||
if (PhysBody.HasPhysicalBody)
|
if (PhysBody.HasPhysicalBody)
|
||||||
{
|
{
|
||||||
DetailLog("{0},BSPrim.ForceRotationalVel,taint,rotvel={1}", LocalID, _rotationalVelocity);
|
DetailLog("{0},BSPrim.ForceRotationalVel,taint,rotvel={1}", LocalID, _rotationalVelocity);
|
||||||
|
@ -1230,6 +1265,7 @@ public class BSPrim : BSPhysObject
|
||||||
|
|
||||||
RegisterPreStepAction("BSPrim.Hover", LocalID, delegate(float timeStep)
|
RegisterPreStepAction("BSPrim.Hover", LocalID, delegate(float timeStep)
|
||||||
{
|
{
|
||||||
|
// Don't do hovering while the object is selected.
|
||||||
if (!IsPhysicallyActive)
|
if (!IsPhysicallyActive)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1737,10 +1773,9 @@ public class BSPrim : BSPhysObject
|
||||||
// Assign directly to the local variables so the normal set actions do not happen
|
// Assign directly to the local variables so the normal set actions do not happen
|
||||||
_position = entprop.Position;
|
_position = entprop.Position;
|
||||||
_orientation = entprop.Rotation;
|
_orientation = entprop.Rotation;
|
||||||
// _velocity = entprop.Velocity;
|
|
||||||
// DEBUG DEBUG DEBUG -- smooth velocity changes a bit. The simulator seems to be
|
// DEBUG DEBUG DEBUG -- smooth velocity changes a bit. The simulator seems to be
|
||||||
// very sensitive to velocity changes.
|
// 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;
|
_velocity = entprop.Velocity;
|
||||||
_acceleration = entprop.Acceleration;
|
_acceleration = entprop.Acceleration;
|
||||||
_rotationalVelocity = entprop.RotationalVelocity;
|
_rotationalVelocity = entprop.RotationalVelocity;
|
||||||
|
|
|
@ -9,6 +9,9 @@ Enable vehicle border crossings (at least as poorly as ODE)
|
||||||
Lock axis
|
Lock axis
|
||||||
Deleting a linkset while standing on the root will leave the physical shape of the root behind.
|
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.
|
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 vertical attraction
|
||||||
vehicle angular banking
|
vehicle angular banking
|
||||||
Center-of-gravity
|
Center-of-gravity
|
||||||
|
@ -68,6 +71,8 @@ Vehicle attributes are not restored when a vehicle is rezzed on region creation
|
||||||
|
|
||||||
GENERAL TODO LIST:
|
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.
|
Resitution of a prim works on another prim but not on terrain.
|
||||||
The dropped prim doesn't bounce properly on the terrain.
|
The dropped prim doesn't bounce properly on the terrain.
|
||||||
Add a sanity check for PIDTarget location.
|
Add a sanity check for PIDTarget location.
|
||||||
|
|
|
@ -10806,14 +10806,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
return UUID.Zero.ToString();
|
return UUID.Zero.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string reqIdentifier = UUID.Random().ToString();
|
||||||
|
|
||||||
// was: UUID tid = tid = AsyncCommands.
|
// 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))
|
if (NotecardCache.IsCached(assetID))
|
||||||
{
|
{
|
||||||
AsyncCommands.
|
AsyncCommands.DataserverPlugin.DataserverReply(reqIdentifier, NotecardCache.GetLines(assetID).ToString());
|
||||||
DataserverPlugin.DataserverReply(assetID.ToString(),
|
|
||||||
NotecardCache.GetLines(assetID).ToString());
|
|
||||||
ScriptSleep(100);
|
ScriptSleep(100);
|
||||||
return tid.ToString();
|
return tid.ToString();
|
||||||
}
|
}
|
||||||
|
@ -10829,9 +10830,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
string data = Encoding.UTF8.GetString(a.Data);
|
string data = Encoding.UTF8.GetString(a.Data);
|
||||||
//m_log.Debug(data);
|
//m_log.Debug(data);
|
||||||
NotecardCache.Cache(id, data);
|
NotecardCache.Cache(id, data);
|
||||||
AsyncCommands.
|
AsyncCommands.DataserverPlugin.DataserverReply(reqIdentifier, NotecardCache.GetLines(id).ToString());
|
||||||
DataserverPlugin.DataserverReply(id.ToString(),
|
|
||||||
NotecardCache.GetLines(id).ToString());
|
|
||||||
});
|
});
|
||||||
|
|
||||||
ScriptSleep(100);
|
ScriptSleep(100);
|
||||||
|
@ -10860,13 +10859,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
return UUID.Zero.ToString();
|
return UUID.Zero.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string reqIdentifier = UUID.Random().ToString();
|
||||||
|
|
||||||
// was: UUID tid = tid = AsyncCommands.
|
// 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))
|
if (NotecardCache.IsCached(assetID))
|
||||||
{
|
{
|
||||||
AsyncCommands.DataserverPlugin.DataserverReply(assetID.ToString(),
|
AsyncCommands.DataserverPlugin.DataserverReply(
|
||||||
NotecardCache.GetLine(assetID, line, m_notecardLineReadCharsMax));
|
reqIdentifier, NotecardCache.GetLine(assetID, line, m_notecardLineReadCharsMax));
|
||||||
|
|
||||||
ScriptSleep(100);
|
ScriptSleep(100);
|
||||||
return tid.ToString();
|
return tid.ToString();
|
||||||
}
|
}
|
||||||
|
@ -10882,8 +10884,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
string data = Encoding.UTF8.GetString(a.Data);
|
string data = Encoding.UTF8.GetString(a.Data);
|
||||||
//m_log.Debug(data);
|
//m_log.Debug(data);
|
||||||
NotecardCache.Cache(id, data);
|
NotecardCache.Cache(id, data);
|
||||||
AsyncCommands.DataserverPlugin.DataserverReply(id.ToString(),
|
AsyncCommands.DataserverPlugin.DataserverReply(
|
||||||
NotecardCache.GetLine(id, line, m_notecardLineReadCharsMax));
|
reqIdentifier, NotecardCache.GetLine(assetID, line, m_notecardLineReadCharsMax));
|
||||||
});
|
});
|
||||||
|
|
||||||
ScriptSleep(100);
|
ScriptSleep(100);
|
||||||
|
@ -11687,7 +11689,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
public static void Cache(UUID assetID, string text)
|
public static void Cache(UUID assetID, string text)
|
||||||
{
|
{
|
||||||
CacheCheck();
|
CheckCache();
|
||||||
|
|
||||||
lock (m_Notecards)
|
lock (m_Notecards)
|
||||||
{
|
{
|
||||||
|
@ -11772,7 +11774,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
return line;
|
return line;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void CacheCheck()
|
public static void CheckCache()
|
||||||
|
{
|
||||||
|
lock (m_Notecards)
|
||||||
{
|
{
|
||||||
foreach (UUID key in new List<UUID>(m_Notecards.Keys))
|
foreach (UUID key in new List<UUID>(m_Notecards.Keys))
|
||||||
{
|
{
|
||||||
|
@ -11783,3 +11787,4 @@ 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)
|
// FIXME: This should really be a script item (with accompanying script)
|
||||||
TaskInventoryItem grp1Item
|
TaskInventoryItem grp1Item
|
||||||
= TaskInventoryHelpers.AddNotecard(
|
= 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;
|
grp1Item.PermsMask |= ScriptBaseClass.PERMISSION_CHANGE_LINKS;
|
||||||
|
|
||||||
SceneObjectGroup grp2 = SceneHelpers.CreateSceneObject(2, ownerId, "grp2-", 0x20);
|
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)
|
// FIXME: This should really be a script item (with accompanying script)
|
||||||
TaskInventoryItem grp1Item
|
TaskInventoryItem grp1Item
|
||||||
= TaskInventoryHelpers.AddNotecard(
|
= 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;
|
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
|
// Create an object embedded inside the first
|
||||||
TaskInventoryHelpers.AddNotecard(
|
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;
|
bool exceptionCaught = false;
|
||||||
|
|
||||||
|
|
|
@ -186,6 +186,10 @@ namespace OpenSim.Server.Base
|
||||||
XmlConfigurator.Configure();
|
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);
|
RegisterCommonAppenders(startupConfig);
|
||||||
|
|
||||||
if (startupConfig.GetString("PIDFile", String.Empty) != String.Empty)
|
if (startupConfig.GetString("PIDFile", String.Empty) != String.Empty)
|
||||||
|
|
|
@ -40,6 +40,23 @@ namespace OpenSim.Tests.Common
|
||||||
///
|
///
|
||||||
public static class TaskInventoryHelpers
|
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>
|
/// <summary>
|
||||||
/// Add a notecard item to the given part.
|
/// Add a notecard item to the given part.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -48,11 +65,13 @@ namespace OpenSim.Tests.Common
|
||||||
/// <param name="itemName"></param>
|
/// <param name="itemName"></param>
|
||||||
/// <param name="itemID"></param>
|
/// <param name="itemID"></param>
|
||||||
/// <param name="assetID"></param>
|
/// <param name="assetID"></param>
|
||||||
|
/// <param name="text">The tex to put in the notecard.</param>
|
||||||
/// <returns>The item that was added</returns>
|
/// <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();
|
AssetNotecard nc = new AssetNotecard();
|
||||||
nc.BodyText = "Hello World!";
|
nc.BodyText = text;
|
||||||
nc.Encode();
|
nc.Encode();
|
||||||
|
|
||||||
AssetBase ncAsset
|
AssetBase ncAsset
|
||||||
|
@ -87,8 +106,8 @@ namespace OpenSim.Tests.Common
|
||||||
/// Add a simple script to the given part.
|
/// Add a simple script to the given part.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>
|
/// <remarks>
|
||||||
/// TODO: Accept input for item and asset IDs to avoid mysterious script failures that try to use any of these
|
/// TODO: Accept input for item and asset IDs so that we have completely replicatable regression tests rather
|
||||||
/// functions more than once in a test.
|
/// than a random component.
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
/// <param name="scene"></param>
|
/// <param name="scene"></param>
|
||||||
/// <param name="part"></param>
|
/// <param name="part"></param>
|
||||||
|
@ -102,8 +121,9 @@ namespace OpenSim.Tests.Common
|
||||||
ast.Source = scriptSource;
|
ast.Source = scriptSource;
|
||||||
ast.Encode();
|
ast.Encode();
|
||||||
|
|
||||||
UUID assetUuid = new UUID("00000000-0000-0000-1000-000000000000");
|
UUID assetUuid = UUID.Random();
|
||||||
UUID itemUuid = new UUID("00000000-0000-0000-1100-000000000000");
|
UUID itemUuid = UUID.Random();
|
||||||
|
|
||||||
AssetBase asset
|
AssetBase asset
|
||||||
= AssetHelpers.CreateAsset(assetUuid, AssetType.LSLText, ast.AssetData, UUID.Zero);
|
= AssetHelpers.CreateAsset(assetUuid, AssetType.LSLText, ast.AssetData, UUID.Zero);
|
||||||
scene.AssetService.Store(asset);
|
scene.AssetService.Store(asset);
|
||||||
|
|
|
@ -31,6 +31,7 @@ using System.Collections.Generic;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Nini.Config;
|
using Nini.Config;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
|
using OpenSim.Framework;
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
using OpenSim.Region.Framework.Scenes;
|
using OpenSim.Region.Framework.Scenes;
|
||||||
using OpenSim.Region.ScriptEngine.Interfaces;
|
using OpenSim.Region.ScriptEngine.Interfaces;
|
||||||
|
@ -110,8 +111,11 @@ namespace OpenSim.Tests.Common
|
||||||
{
|
{
|
||||||
// Console.WriteLine("Posting event {0} for {1}", name, itemID);
|
// 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;
|
List<EventParams> eventsForItem;
|
||||||
|
|
||||||
if (!PostedEvents.ContainsKey(itemID))
|
if (!PostedEvents.ContainsKey(itemID))
|
||||||
|
@ -132,9 +136,22 @@ namespace OpenSim.Tests.Common
|
||||||
return true;
|
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)
|
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)
|
public void SuspendScript(UUID itemID)
|
||||||
|
@ -187,16 +204,6 @@ namespace OpenSim.Tests.Common
|
||||||
throw new System.NotImplementedException ();
|
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)
|
public DetectParams GetDetectParams(UUID item, int number)
|
||||||
{
|
{
|
||||||
throw new System.NotImplementedException ();
|
throw new System.NotImplementedException ();
|
||||||
|
|
|
@ -113,6 +113,27 @@ namespace OpenSim.Tests.Common
|
||||||
DisableLoggingConfigStream.Position = 0;
|
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>
|
/// <summary>
|
||||||
/// Parse tail section into full UUID.
|
/// Parse tail section into full UUID.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -45,7 +45,7 @@ namespace OpenSim.Tests
|
||||||
/// Set up a test directory.
|
/// Set up a test directory.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[SetUp]
|
[SetUp]
|
||||||
public void SetUp()
|
public override void SetUp()
|
||||||
{
|
{
|
||||||
base.SetUp();
|
base.SetUp();
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -220,6 +220,101 @@
|
||||||
; physics = basicphysics
|
; physics = basicphysics
|
||||||
; physics = POS
|
; 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
|
;# {permissionmodules} {} {Permission modules to use (may specify multiple modules, separated by comma} {} DefaultPermissionsModule
|
||||||
;; Permission modules to use, separated by comma.
|
;; Permission modules to use, separated by comma.
|
||||||
;; Possible modules are DefaultPermissionsModule, PrimLimitsModule
|
;; Possible modules are DefaultPermissionsModule, PrimLimitsModule
|
||||||
|
@ -264,97 +359,6 @@
|
||||||
; simple_build_permissions = false
|
; 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]
|
[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 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.
|
; 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 = modified_BulletX
|
||||||
;physics = BulletSim
|
;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
|
; ## SCRIPT ENGINE
|
||||||
; ##
|
; ##
|
||||||
|
@ -344,6 +296,55 @@
|
||||||
; Use terrain texture for maptiles if true, use shaded green if false
|
; Use terrain texture for maptiles if true, use shaded green if false
|
||||||
TextureOnMapTile = true
|
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]
|
[RegionReady]
|
||||||
; Enable this module to get notified once all items and scripts in the region have been completely loaded and compiled
|
; 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
|
; up the system to malicious scripters
|
||||||
; NotecardLineReadCharsMax = 255
|
; NotecardLineReadCharsMax = 255
|
||||||
|
|
||||||
|
; Minimum settable timer interval. Any timer setting less than this is
|
||||||
|
; rounded up to this minimum interval.
|
||||||
|
; MinTimerInterval = 0.5
|
||||||
|
|
||||||
; Sensor settings
|
; Sensor settings
|
||||||
SensorMaxRange = 96.0
|
SensorMaxRange = 96.0
|
||||||
SensorMaxResults = 16
|
SensorMaxResults = 16
|
||||||
|
|
|
@ -431,6 +431,7 @@ HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:Asset
|
||||||
UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService"
|
UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService"
|
||||||
UserAgentService = "OpenSim.Services.HypergridService.dll:UserAgentService"
|
UserAgentService = "OpenSim.Services.HypergridService.dll:UserAgentService"
|
||||||
PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService"
|
PresenceService = "OpenSim.Services.PresenceService.dll:PresenceService"
|
||||||
|
GridUserService = "OpenSim.Services.UserAccountService.dll:GridUserService"
|
||||||
GridService = "OpenSim.Services.GridService.dll:GridService"
|
GridService = "OpenSim.Services.GridService.dll:GridService"
|
||||||
AuthenticationService = "OpenSim.Services.Connectors.dll:AuthenticationServicesConnector"
|
AuthenticationService = "OpenSim.Services.Connectors.dll:AuthenticationServicesConnector"
|
||||||
SimulationService ="OpenSim.Services.Connectors.dll:SimulationServiceConnector"
|
SimulationService ="OpenSim.Services.Connectors.dll:SimulationServiceConnector"
|
||||||
|
|
|
@ -3387,6 +3387,7 @@
|
||||||
|
|
||||||
<ReferencePath>../../../bin/</ReferencePath>
|
<ReferencePath>../../../bin/</ReferencePath>
|
||||||
<Reference name="System"/>
|
<Reference name="System"/>
|
||||||
|
<Reference name="System.Core"/>
|
||||||
<Reference name="System.Xml"/>
|
<Reference name="System.Xml"/>
|
||||||
<Reference name="OpenSim.Framework"/>
|
<Reference name="OpenSim.Framework"/>
|
||||||
<Reference name="OpenSim.Framework.Communications"/>
|
<Reference name="OpenSim.Framework.Communications"/>
|
||||||
|
|
Loading…
Reference in New Issue