Merge branch 'master' of brain.opensimulator.org:/var/git/opensim

0.9.1.0-post-fixes
Melanie 2019-08-07 17:58:55 +01:00
commit ba680ceecb
35 changed files with 824 additions and 515 deletions

View File

@ -138,8 +138,6 @@ namespace OpenSim.Capabilities.Handlers
if(type == AssetType.Mesh || type == AssetType.Texture) if(type == AssetType.Mesh || type == AssetType.Texture)
responsedata["throttle"] = true; responsedata["throttle"] = true;
// else
// m_log.Warn("[GETASSETS]: type: " + query);
responsedata["content_type"] = asset.Metadata.ContentType; responsedata["content_type"] = asset.Metadata.ContentType;
responsedata["bin_response_data"] = asset.Data; responsedata["bin_response_data"] = asset.Data;

View File

@ -267,16 +267,17 @@ namespace OpenSim.Framework
/// <param name="args"></param> /// <param name="args"></param>
public void UnpackAgentCircuitData(OSDMap args) public void UnpackAgentCircuitData(OSDMap args)
{ {
if (args["agent_id"] != null) OSD tmpOSD;
AgentID = args["agent_id"].AsUUID(); if (args.TryGetValue("agent_id", out tmpOSD))
if (args["base_folder"] != null) AgentID = tmpOSD.AsUUID();
BaseFolder = args["base_folder"].AsUUID(); if (args.TryGetValue("base_folder", out tmpOSD))
if (args["caps_path"] != null) BaseFolder =tmpOSD.AsUUID();
CapsPath = args["caps_path"].AsString(); if (args.TryGetValue("caps_path", out tmpOSD))
CapsPath = tmpOSD.AsString();
if ((args["children_seeds"] != null) && (args["children_seeds"].Type == OSDType.Array)) if ((args.TryGetValue("children_seeds", out tmpOSD) && tmpOSD is OSDArray))
{ {
OSDArray childrenSeeds = (OSDArray)(args["children_seeds"]); OSDArray childrenSeeds = (OSDArray)tmpOSD;
ChildrenCapSeeds = new Dictionary<ulong, string>(); ChildrenCapSeeds = new Dictionary<ulong, string>();
foreach (OSD o in childrenSeeds) foreach (OSD o in childrenSeeds)
{ {
@ -285,53 +286,59 @@ namespace OpenSim.Framework
ulong handle = 0; ulong handle = 0;
string seed = ""; string seed = "";
OSDMap pair = (OSDMap)o; OSDMap pair = (OSDMap)o;
if (pair["handle"] != null) if (pair.TryGetValue("handle", out tmpOSD))
if (!UInt64.TryParse(pair["handle"].AsString(), out handle)) {
if (!UInt64.TryParse(tmpOSD.AsString(), out handle))
continue; continue;
if (pair["seed"] != null) }
seed = pair["seed"].AsString();
if (!ChildrenCapSeeds.ContainsKey(handle)) if (!ChildrenCapSeeds.ContainsKey(handle))
ChildrenCapSeeds.Add(handle, seed); {
if (pair.TryGetValue("seed", out tmpOSD))
{
seed = tmpOSD.AsString();
ChildrenCapSeeds.Add(handle, seed);
}
}
} }
} }
} }
else else
ChildrenCapSeeds = new Dictionary<ulong, string>(); ChildrenCapSeeds = new Dictionary<ulong, string>();
if (args["child"] != null) if (args.TryGetValue("child", out tmpOSD))
child = args["child"].AsBoolean(); child = tmpOSD.AsBoolean();
if (args["circuit_code"] != null) if (args.TryGetValue("circuit_code", out tmpOSD))
UInt32.TryParse(args["circuit_code"].AsString(), out circuitcode); UInt32.TryParse(tmpOSD.AsString(), out circuitcode);
if (args["first_name"] != null) if (args.TryGetValue("first_name", out tmpOSD))
firstname = args["first_name"].AsString(); firstname = tmpOSD.AsString();
if (args["last_name"] != null) if (args.TryGetValue("last_name", out tmpOSD))
lastname = args["last_name"].AsString(); lastname = tmpOSD.AsString();
if (args["inventory_folder"] != null) if (args.TryGetValue("inventory_folder", out tmpOSD))
InventoryFolder = args["inventory_folder"].AsUUID(); InventoryFolder = tmpOSD.AsUUID();
if (args["secure_session_id"] != null) if (args.TryGetValue("secure_session_id", out tmpOSD))
SecureSessionID = args["secure_session_id"].AsUUID(); SecureSessionID = tmpOSD.AsUUID();
if (args["session_id"] != null) if (args.TryGetValue("session_id", out tmpOSD))
SessionID = args["session_id"].AsUUID(); SessionID = tmpOSD.AsUUID();
if (args["service_session_id"] != null) if (args.TryGetValue("service_session_id", out tmpOSD))
ServiceSessionID = args["service_session_id"].AsString(); ServiceSessionID = tmpOSD.AsString();
if (args["client_ip"] != null) if (args.TryGetValue("client_ip", out tmpOSD))
IPAddress = args["client_ip"].AsString(); IPAddress = tmpOSD.AsString();
if (args["viewer"] != null) if (args.TryGetValue("viewer", out tmpOSD))
Viewer = args["viewer"].AsString(); Viewer = tmpOSD.AsString();
if (args["channel"] != null) if (args.TryGetValue("channel", out tmpOSD))
Channel = args["channel"].AsString(); Channel = tmpOSD.AsString();
if (args["mac"] != null) if (args.TryGetValue("mac", out tmpOSD))
Mac = args["mac"].AsString(); Mac = tmpOSD.AsString();
if (args["id0"] != null) if (args.TryGetValue("id0", out tmpOSD))
Id0 = args["id0"].AsString(); Id0 = tmpOSD.AsString();
if (args["teleport_flags"] != null) if (args.TryGetValue("teleport_flags", out tmpOSD))
teleportFlags = args["teleport_flags"].AsUInteger(); teleportFlags = tmpOSD.AsUInteger();
if (args["start_pos"] != null) if (args.TryGetValue("start_pos", out tmpOSD))
Vector3.TryParse(args["start_pos"].AsString(), out startpos); Vector3.TryParse(tmpOSD.AsString(), out startpos);
if(args["far"] != null) if(args.TryGetValue("far", out tmpOSD))
startfar = (float)args["far"].AsReal(); startfar = (float)tmpOSD.AsReal();
//m_log.InfoFormat("[AGENTCIRCUITDATA]: agentid={0}, child={1}, startpos={2}", AgentID, child, startpos); //m_log.InfoFormat("[AGENTCIRCUITDATA]: agentid={0}, child={1}, startpos={2}", AgentID, child, startpos);
@ -342,12 +349,12 @@ namespace OpenSim.Framework
// Eventually this code should be deprecated, use full appearance // Eventually this code should be deprecated, use full appearance
// packing in packed_appearance // packing in packed_appearance
if (args["appearance_serial"] != null) if (args.TryGetValue("appearance_serial", out tmpOSD))
Appearance.Serial = args["appearance_serial"].AsInteger(); Appearance.Serial = tmpOSD.AsInteger();
if (args.ContainsKey("packed_appearance") && (args["packed_appearance"].Type == OSDType.Map)) if (args.TryGetValue("packed_appearance", out tmpOSD) && (tmpOSD is OSDMap))
{ {
Appearance.Unpack((OSDMap)args["packed_appearance"]); Appearance.Unpack((OSDMap)tmpOSD);
// m_log.InfoFormat("[AGENTCIRCUITDATA] unpacked appearance"); // m_log.InfoFormat("[AGENTCIRCUITDATA] unpacked appearance");
} }
else else
@ -362,31 +369,29 @@ namespace OpenSim.Framework
ServiceURLs = new Dictionary<string, object>(); ServiceURLs = new Dictionary<string, object>();
// Try parse the new way, OSDMap // Try parse the new way, OSDMap
if (args.ContainsKey("serviceurls") && args["serviceurls"] != null && (args["serviceurls"]).Type == OSDType.Map) if (args.TryGetValue("serviceurls", out tmpOSD) && (tmpOSD is OSDMap))
{ {
OSDMap urls = (OSDMap)(args["serviceurls"]); OSDMap urls = (OSDMap)tmpOSD;
foreach (KeyValuePair<String, OSD> kvp in urls) foreach (KeyValuePair<String, OSD> kvp in urls)
{ {
ServiceURLs[kvp.Key] = kvp.Value.AsString(); ServiceURLs[kvp.Key] = kvp.Value;
//System.Console.WriteLine("XXX " + kvp.Key + "=" + ServiceURLs[kvp.Key]); //System.Console.WriteLine("XXX " + kvp.Key + "=" + ServiceURLs[kvp.Key]);
} }
} }
// else try the old way, OSDArray // else try the old way, OSDArray
// OBSOLETE -- soon to be deleted // OBSOLETE -- soon to be deleted
else if (args.ContainsKey("service_urls") && args["service_urls"] != null && (args["service_urls"]).Type == OSDType.Array) else if (args.TryGetValue("service_urls", out tmpOSD) && (tmpOSD is OSDArray))
{ {
OSDArray urls = (OSDArray)(args["service_urls"]); OSDArray urls = (OSDArray)tmpOSD;
for (int i = 0; i < urls.Count / 2; i++) OSD tmpOSDb;
for (int i = 0; i < urls.Count - 1; i += 2)
{ {
ServiceURLs[urls[i * 2].AsString()] = urls[(i * 2) + 1].AsString(); tmpOSD = urls[i];
tmpOSDb = urls[i + 1];
ServiceURLs[tmpOSD.AsString()] = tmpOSDb.AsString();
//System.Console.WriteLine("XXX " + urls[i * 2].AsString() + "=" + urls[(i * 2) + 1].AsString()); //System.Console.WriteLine("XXX " + urls[i * 2].AsString() + "=" + urls[(i * 2) + 1].AsString());
} }
} }
} }
} }
} }

View File

@ -796,25 +796,33 @@ namespace OpenSim.Framework
/// </summary> /// </summary>
public void Unpack(OSDMap data) public void Unpack(OSDMap data)
{ {
if ((data != null) && (data["serial"] != null)) SetDefaultWearables();
m_serial = data["serial"].AsInteger(); SetDefaultTexture();
if ((data != null) && (data["height"] != null)) SetDefaultParams();
m_attachments = new Dictionary<int, List<AvatarAttachment>>();
if(data == null)
{
m_log.Warn("[AVATAR APPEARANCE]: data to unpack is null");
return;
}
OSD tmpOSD;
if (data.TryGetValue("serial", out tmpOSD))
m_serial = tmpOSD.AsInteger();
if (data.TryGetValue("height", out tmpOSD))
// m_avatarHeight = (float)data["height"].AsReal(); // m_avatarHeight = (float)data["height"].AsReal();
SetSize(new Vector3(0.45f,0.6f, (float)data["height"].AsReal())); SetSize(new Vector3(0.45f,0.6f, (float)tmpOSD.AsReal()));
try try
{ {
// Wearables // Wearables
SetDefaultWearables(); if (data.TryGetValue("wearables", out tmpOSD) && (tmpOSD is OSDArray))
if ((data != null) && (data["wearables"] != null) && (data["wearables"]).Type == OSDType.Array)
{ {
OSDArray wears = (OSDArray)(data["wearables"]); OSDArray wears = (OSDArray)tmpOSD;
m_wearables = new AvatarWearable[wears.Count];
int count = wears.Count; for (int i = 0; i < wears.Count; i++)
m_wearables = new AvatarWearable[count];
for (int i = 0; i < count; i++)
m_wearables[i] = new AvatarWearable((OSDArray)wears[i]); m_wearables[i] = new AvatarWearable((OSDArray)wears[i]);
} }
else else
@ -823,15 +831,15 @@ namespace OpenSim.Framework
} }
// Avatar Textures // Avatar Textures
SetDefaultTexture(); if (data.TryGetValue("textures", out tmpOSD) && (tmpOSD is OSDArray))
if ((data != null) && (data["textures"] != null) && (data["textures"]).Type == OSDType.Array)
{ {
OSDArray textures = (OSDArray)(data["textures"]); OSDArray textures = (OSDArray)tmpOSD;
for (int i = 0; i < AvatarAppearance.TEXTURE_COUNT && i < textures.Count; i++) for (int i = 0; i < AvatarAppearance.TEXTURE_COUNT && i < textures.Count; i++)
{ {
UUID textureID = AppearanceManager.DEFAULT_AVATAR_TEXTURE; UUID textureID = AppearanceManager.DEFAULT_AVATAR_TEXTURE;
if (textures[i] != null) tmpOSD = textures[i];
textureID = textures[i].AsUUID(); if (tmpOSD != null)
textureID = tmpOSD.AsUUID();
m_texture.CreateFace((uint)i).TextureID = new UUID(textureID); m_texture.CreateFace((uint)i).TextureID = new UUID(textureID);
} }
} }
@ -840,18 +848,17 @@ namespace OpenSim.Framework
m_log.Warn("[AVATAR APPEARANCE]: failed to unpack textures"); m_log.Warn("[AVATAR APPEARANCE]: failed to unpack textures");
} }
if ((data != null) && (data["bakedcache"] != null) && (data["bakedcache"]).Type == OSDType.Array) if (data.TryGetValue("bakedcache", out tmpOSD) && (tmpOSD is OSDArray))
{ {
OSDArray bakedOSDArray = (OSDArray)(data["bakedcache"]); OSDArray bakedOSDArray = (OSDArray)tmpOSD;
m_cacheitems = WearableCacheItem.BakedFromOSD(bakedOSDArray); m_cacheitems = WearableCacheItem.BakedFromOSD(bakedOSDArray);
} }
// Visual Parameters // Visual Parameters
SetDefaultParams(); if (data.TryGetValue("visualparams", out tmpOSD))
if ((data != null) && (data["visualparams"] != null))
{ {
if ((data["visualparams"].Type == OSDType.Binary) || (data["visualparams"].Type == OSDType.Array)) if (tmpOSD is OSDBinary || tmpOSD is OSDArray)
m_visualparams = data["visualparams"].AsBinary(); m_visualparams = tmpOSD.AsBinary();
} }
else else
{ {
@ -859,10 +866,9 @@ namespace OpenSim.Framework
} }
// Attachments // Attachments
m_attachments = new Dictionary<int, List<AvatarAttachment>>(); if (data.TryGetValue("attachments", out tmpOSD) && tmpOSD is OSDArray)
if ((data != null) && (data["attachments"] != null) && (data["attachments"]).Type == OSDType.Array)
{ {
OSDArray attachs = (OSDArray)(data["attachments"]); OSDArray attachs = (OSDArray)tmpOSD;
for (int i = 0; i < attachs.Count; i++) for (int i = 0; i < attachs.Count; i++)
{ {
AvatarAttachment att = new AvatarAttachment((OSDMap)attachs[i]); AvatarAttachment att = new AvatarAttachment((OSDMap)attachs[i]);

View File

@ -68,11 +68,18 @@ namespace OpenSim.Framework
public void Unpack(OSDMap args) public void Unpack(OSDMap args)
{ {
if (args["point"] != null) OSD tmpOSD;
AttachPoint = args["point"].AsInteger(); if (args.TryGetValue("point", out tmpOSD))
AttachPoint = tmpOSD.AsInteger();
if (args.TryGetValue("item", out tmpOSD))
ItemID = tmpOSD.AsUUID();
else
ItemID = UUID.Zero;
ItemID = (args["item"] != null) ? args["item"].AsUUID() : UUID.Zero; if (args.TryGetValue("asset", out tmpOSD))
AssetID = (args["asset"] != null) ? args["asset"].AsUUID() : UUID.Zero; AssetID = tmpOSD.AsUUID();
else
AssetID = UUID.Zero;
} }
} }
} }

View File

@ -132,10 +132,12 @@ namespace OpenSim.Framework
public void Unpack(OSDArray args) public void Unpack(OSDArray args)
{ {
Clear(); Clear();
OSD tmpOSDA, tmpOSDB;
foreach (OSDMap weardata in args) foreach (OSDMap weardata in args)
{ {
Add(weardata["item"].AsUUID(), weardata["asset"].AsUUID()); tmpOSDA = weardata["item"];
tmpOSDB = weardata["asset"];
Add(tmpOSDA.AsUUID(), tmpOSDB.AsUUID());
} }
} }

View File

@ -58,13 +58,13 @@ namespace OpenSim.Framework
public void Unpack(OSD data) public void Unpack(OSD data)
{ {
OSDMap map = (OSDMap)data; OSDMap map = (OSDMap)data;
OSD tmpOSD;
if (map.ContainsKey("InboundVersion")) if (map.TryGetValue("InboundVersion", out tmpOSD))
InboundVersion = (float)map["InboundVersion"].AsReal(); InboundVersion = (float)tmpOSD.AsReal();
if (map.ContainsKey("OutboundVersion")) if (map.TryGetValue("OutboundVersion", out tmpOSD))
OutboundVersion = (float)map["OutboundVersion"].AsReal(); OutboundVersion = (float)tmpOSD.AsReal();
if (map.ContainsKey("WearablesCount")) if (map.TryGetValue("WearablesCount", out tmpOSD))
WearablesCount = map["WearablesCount"].AsInteger(); WearablesCount = tmpOSD.AsInteger();
} }
} }
} }

View File

@ -161,13 +161,12 @@ namespace OpenSim.Framework
public static WearableCacheItem[] BakedFromOSD(OSD pInput) public static WearableCacheItem[] BakedFromOSD(OSD pInput)
{ {
WearableCacheItem[] pcache = WearableCacheItem.GetDefaultCacheItem(); WearableCacheItem[] pcache = WearableCacheItem.GetDefaultCacheItem();
if (pInput.Type == OSDType.Array) if (pInput.Type == OSDType.Array)
{ {
OSDArray itemarray = (OSDArray)pInput; OSDArray itemarray = (OSDArray)pInput;
foreach (OSDMap item in itemarray) foreach (OSDMap item in itemarray)
{ {
int idx = (int)item["textureindex"].AsUInteger(); int idx = item["textureindex"].AsInteger();
if (idx < 0 || idx > pcache.Length) if (idx < 0 || idx > pcache.Length)
continue; continue;
pcache[idx].CacheId = item["cacheid"].AsUUID(); pcache[idx].CacheId = item["cacheid"].AsUUID();
@ -217,6 +216,4 @@ namespace OpenSim.Framework
return null; return null;
} }
} }
} }

View File

@ -0,0 +1,224 @@
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using log4net;
using Nini.Config;
using OpenMetaverse;
using Mono.Addins;
using OpenSim.Framework;
using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
using Caps=OpenSim.Framework.Capabilities.Caps;
namespace OpenSim.Region.ClientStack.Linden
{
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "EstateAcessCapModule")]
public class EstateAccessCapModule : INonSharedRegionModule
{
// private static readonly ILog m_log =
// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private Scene m_scene;
private bool m_Enabled = false;
private string m_capUrl;
//IEstateModule m_EstateModule;
#region INonSharedRegionModule Members
public void Initialise(IConfigSource pSource)
{
IConfig config = pSource.Configs["ClientStack.LindenCaps"];
if (config == null)
return;
m_capUrl = config.GetString("Cap_EstateAccess", string.Empty);
if (!String.IsNullOrEmpty(m_capUrl) && m_capUrl.Equals("localhost"))
m_Enabled = true;
}
public void AddRegion(Scene scene)
{
if (!m_Enabled)
return;
m_scene = scene;
}
public void RemoveRegion(Scene scene)
{
if (!m_Enabled)
return;
if (m_scene == scene)
{
m_scene.EventManager.OnRegisterCaps -= RegisterCaps;
m_scene = null;
}
}
public void RegionLoaded(Scene scene)
{
if (!m_Enabled)
return;
if (scene.RegionInfo == null || scene.RegionInfo.EstateSettings == null)
{
m_Enabled = false;
return;
}
IEstateModule m_EstateModule = scene.RequestModuleInterface<IEstateModule>();
if(m_EstateModule == null)
{
m_Enabled = false;
return;
}
scene.EventManager.OnRegisterCaps += RegisterCaps;
}
public void Close()
{
}
public string Name
{
get { return "EstateAccessCapModule"; }
}
public Type ReplaceableInterface
{
get { return null; }
}
#endregion
public void RegisterCaps(UUID agentID, Caps caps)
{
string capUrl = "/CAPS/" + UUID.Random() + "/";
caps.RegisterHandler(
"EstateAccess",
new RestHTTPHandler(
"GET",
capUrl,
httpMethod => ProcessRequest(httpMethod, agentID, caps),
"EstateAccess",
agentID.ToString())); ;
}
public Hashtable ProcessRequest(Hashtable request, UUID AgentId, Caps cap)
{
Hashtable responsedata = new Hashtable();
responsedata["int_response_code"] = 200; //501; //410; //404;
responsedata["content_type"] = "text/plain";
ScenePresence avatar;
if (!m_scene.TryGetScenePresence(AgentId, out avatar))
{
responsedata["str_response_string"] = "<llsd><array /></llsd>"; ;
responsedata["keepalive"] = false;
return responsedata;
}
if (m_scene.RegionInfo == null
|| m_scene.RegionInfo.EstateSettings == null
||!m_scene.Permissions.CanIssueEstateCommand(AgentId, false))
{
responsedata["str_response_string"] = "<llsd><array /></llsd>"; ;
return responsedata;
}
EstateSettings regionSettings = m_scene.RegionInfo.EstateSettings;
UUID[] managers = regionSettings.EstateManagers;
UUID[] allowed = regionSettings.EstateAccess;
UUID[] groups = regionSettings.EstateGroups;
EstateBan[] EstateBans = regionSettings.EstateBans;
StringBuilder sb = LLSDxmlEncode.Start();
LLSDxmlEncode.AddArray(sb);
if (allowed != null && allowed.Length > 0)
{
LLSDxmlEncode.AddMap("AllowedAgents", sb);
for (int i = 0; i < allowed.Length; ++i)
{
UUID id = allowed[i];
if (id == UUID.Zero)
continue;
LLSDxmlEncode.AddElem("id", id, sb);
}
LLSDxmlEncode.AddEndMap(sb);
}
if (groups != null && groups.Length > 0)
{
LLSDxmlEncode.AddMap("AllowedGroups", sb);
for (int i = 0; i < groups.Length; ++i)
{
UUID id = groups[i];
if (id == UUID.Zero)
continue;
LLSDxmlEncode.AddElem("id", id, sb);
}
LLSDxmlEncode.AddEndMap(sb);
}
if (EstateBans != null && EstateBans.Length > 0)
{
LLSDxmlEncode.AddMap("BannedAgents", sb);
for (int i = 0; i < EstateBans.Length; ++i)
{
UUID id = EstateBans[i].BannedUserID;
if (id == UUID.Zero)
continue;
LLSDxmlEncode.AddElem("id", id, sb);
}
LLSDxmlEncode.AddEndMap(sb);
}
if (managers != null && managers.Length > 0)
{
LLSDxmlEncode.AddMap("Managers", sb);
for (int i = 0; i < managers.Length; ++i)
LLSDxmlEncode.AddElem("id", managers[i], sb);
LLSDxmlEncode.AddEndMap(sb);
}
LLSDxmlEncode.AddEndArray(sb);
responsedata["str_response_string"] = LLSDxmlEncode.End(sb);
return responsedata;
}
}
}

View File

@ -994,7 +994,7 @@ namespace OpenSim.Region.CoreModules.World.Land
} }
else else
{ {
// keeping previus odd average // keeping previous odd average
avgx = (avgx * tempArea + x) / (tempArea + 1); avgx = (avgx * tempArea + x) / (tempArea + 1);
avgy = (avgy * tempArea + y) / (tempArea + 1); avgy = (avgy * tempArea + y) / (tempArea + 1);
} }

View File

@ -441,6 +441,9 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
startHeights[0], startHeights[2], startHeights[0], startHeights[2],
startHeights[1], startHeights[3], startHeights[1], startHeights[3],
pctX, pctY); pctX, pctY);
if (float.IsNaN(startHeight))
return 0;
startHeight = Utils.Clamp(startHeight, 0f, 255f); startHeight = Utils.Clamp(startHeight, 0f, 255f);
float heightRange = ImageUtils.Bilinear( float heightRange = ImageUtils.Bilinear(
@ -448,7 +451,7 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
heightRanges[1], heightRanges[3], heightRanges[1], heightRanges[3],
pctX, pctY); pctX, pctY);
heightRange = Utils.Clamp(heightRange, 0f, 255f); heightRange = Utils.Clamp(heightRange, 0f, 255f);
if(heightRange == 0f) if(heightRange == 0f || float.IsNaN(heightRange))
return 0; return 0;
// Generate two frequencies of perlin noise based on our global position // Generate two frequencies of perlin noise based on our global position

View File

@ -341,7 +341,7 @@ namespace OpenSim.Region.Framework.Scenes
if(group == null || group.IsDeleted) if(group == null || group.IsDeleted)
return; return;
if (Permissions.CanMoveObject(group, remoteClient))// && PermissionsMngr.) if (Permissions.CanMoveObject(group, remoteClient))
{ {
group.GrabMovement(objectID, offset, pos, remoteClient); group.GrabMovement(objectID, offset, pos, remoteClient);
} }
@ -359,16 +359,13 @@ namespace OpenSim.Region.Framework.Scenes
Vector3 grabOffset = pos - part.AbsolutePosition; Vector3 grabOffset = pos - part.AbsolutePosition;
// If the touched prim handles touches, deliver it // If the touched prim handles touches, deliver it
if ((part.ScriptEvents & scriptEvents.touch) != 0) if ((part.ScriptEvents & scriptEvents.touch) != 0)
// EventManager.TriggerObjectGrabbing(part.LocalId, 0, part.OffsetPosition, remoteClient, surfaceArg);
EventManager.TriggerObjectGrabbing(part.LocalId, 0, grabOffset, remoteClient, surfaceArg); EventManager.TriggerObjectGrabbing(part.LocalId, 0, grabOffset, remoteClient, surfaceArg);
// Deliver to the root prim if the touched prim doesn't handle touches // Deliver to the root prim if the touched prim doesn't handle touches
// or if we're meant to pass on touches anyway. // or if we're meant to pass on touches anyway.
if (((part.ScriptEvents & scriptEvents.touch) == 0) || if (((part.ScriptEvents & scriptEvents.touch) == 0) ||
(part.PassTouches && (part.LocalId != group.RootPart.LocalId))) (part.PassTouches && (part.LocalId != group.RootPart.LocalId)))
{
// EventManager.TriggerObjectGrabbing(group.RootPart.LocalId, part.LocalId, part.OffsetPosition, remoteClient, surfaceArg);
EventManager.TriggerObjectGrabbing(group.RootPart.LocalId, part.LocalId, grabOffset, remoteClient, surfaceArg); EventManager.TriggerObjectGrabbing(group.RootPart.LocalId, part.LocalId, grabOffset, remoteClient, surfaceArg);
}
} }
public virtual void ProcessObjectDeGrab(uint localID, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs) public virtual void ProcessObjectDeGrab(uint localID, IClientAPI remoteClient, List<SurfaceTouchEventArgs> surfaceArgs)

View File

@ -2086,13 +2086,20 @@ namespace OpenSim.Region.Framework.Scenes
public void ObjectGrabHandler(uint localId, Vector3 offsetPos, IClientAPI remoteClient) public void ObjectGrabHandler(uint localId, Vector3 offsetPos, IClientAPI remoteClient)
{ {
if (m_rootPart.LocalId == localId) if (m_rootPart.LocalId == localId)
{ {
if((RootPart.ScriptEvents & scriptEvents.anytouch) != 0)
lastTouchTime = Util.GetTimeStampMS();
OnGrabGroup(offsetPos, remoteClient); OnGrabGroup(offsetPos, remoteClient);
} }
else else
{ {
SceneObjectPart part = GetPart(localId); SceneObjectPart part = GetPart(localId);
if (((part.ScriptEvents & scriptEvents.anytouch) != 0) ||
(part.PassTouches && (RootPart.ScriptEvents & scriptEvents.anytouch) != 0))
lastTouchTime = Util.GetTimeStampMS();
OnGrabPart(part, offsetPos, remoteClient); OnGrabPart(part, offsetPos, remoteClient);
} }
} }
@ -3615,6 +3622,10 @@ namespace OpenSim.Region.Framework.Scenes
// part.UpdatePrimFlags(UsesPhysics, IsTemporary, IsPhantom, IsVolumeDetect, false); // part.UpdatePrimFlags(UsesPhysics, IsTemporary, IsPhantom, IsVolumeDetect, false);
} }
double lastTouchTime = 0;
/// <summary> /// <summary>
/// If object is physical, apply force to move it around /// If object is physical, apply force to move it around
/// If object is not physical, just put it at the resulting location /// If object is not physical, just put it at the resulting location
@ -3623,7 +3634,7 @@ namespace OpenSim.Region.Framework.Scenes
/// <param name="offset">Always seems to be 0,0,0, so ignoring</param> /// <param name="offset">Always seems to be 0,0,0, so ignoring</param>
/// <param name="pos">New position. We do the math here to turn it into a force</param> /// <param name="pos">New position. We do the math here to turn it into a force</param>
/// <param name="remoteClient"></param> /// <param name="remoteClient"></param>
public void GrabMovement(UUID partID, Vector3 offset, Vector3 pos, IClientAPI remoteClient) public void GrabMovement(UUID partID, Vector3 offset, Vector3 pos, IClientAPI remoteClienth)
{ {
if (m_scene.EventManager.TriggerGroupMove(UUID, pos)) if (m_scene.EventManager.TriggerGroupMove(UUID, pos))
{ {
@ -3650,24 +3661,31 @@ namespace OpenSim.Region.Framework.Scenes
} }
else else
{ {
NonPhysicalGrabMovement(pos); if(IsAttachment)
return;
// block movement if there was a touch at start
double now = Util.GetTimeStampMS();
if (now - lastTouchTime < 250)
{
lastTouchTime = now;
return;
}
// a touch or pass may had become active ??
if (((part.ScriptEvents & scriptEvents.anytouch) != 0) ||
(part.PassTouches && (RootPart.ScriptEvents & scriptEvents.anytouch) != 0))
{
lastTouchTime = now;
return;
}
lastTouchTime = 0;
UpdateGroupPosition(pos);
} }
} }
} }
/// <summary>
/// Apply possition for grabbing non-physical linksets (Ctrl+Drag)
/// This MUST be blocked for linksets that contain touch scripts because the viewer triggers grab on the touch
/// event (Viewer Bug?) This would allow anyone to drag a linkset with a touch script. SL behaviour is also to
/// block grab on prims with touch events.
/// </summary>
/// <param name="pos">New Position</param>
public void NonPhysicalGrabMovement(Vector3 pos)
{
if(!IsAttachment && ScriptCount() == 0)
UpdateGroupPosition(pos);
}
/// <summary> /// <summary>
/// If object is physical, prepare for spinning torques (set flag to save old orientation) /// If object is physical, prepare for spinning torques (set flag to save old orientation)
/// </summary> /// </summary>

View File

@ -3023,11 +3023,6 @@ namespace OpenSim.Region.Framework.Scenes
{ {
if (m_scriptEvents.ContainsKey(scriptid)) if (m_scriptEvents.ContainsKey(scriptid))
{ {
scriptEvents oldparts = scriptEvents.None;
oldparts = (scriptEvents) m_scriptEvents[scriptid];
// remove values from aggregated script events
AggregateScriptEvents &= ~oldparts;
m_scriptEvents.Remove(scriptid); m_scriptEvents.Remove(scriptid);
aggregateScriptEvents(); aggregateScriptEvents();
} }

View File

@ -1091,7 +1091,6 @@ namespace OpenSim.Region.Framework.Scenes
m_part.ParentGroup.InvalidateDeepEffectivePerms(); m_part.ParentGroup.InvalidateDeepEffectivePerms();
m_inventorySerial++; m_inventorySerial++;
m_part.TriggerScriptChangedEvent(Changed.INVENTORY);
HasInventoryChanged = true; HasInventoryChanged = true;
m_part.ParentGroup.HasGroupChanged = true; m_part.ParentGroup.HasGroupChanged = true;
@ -1115,6 +1114,7 @@ namespace OpenSim.Region.Framework.Scenes
m_part.ScheduleFullUpdate(); m_part.ScheduleFullUpdate();
m_part.TriggerScriptChangedEvent(Changed.INVENTORY);
return type; return type;
} }
else else

View File

@ -272,17 +272,19 @@ namespace OpenSim.Region.OptionalModules.Materials
if (elemOsd != null && elemOsd is OSDMap) if (elemOsd != null && elemOsd is OSDMap)
{ {
OSDMap matMap = elemOsd as OSDMap; OSDMap matMap = elemOsd as OSDMap;
if (matMap.ContainsKey("ID") && matMap.ContainsKey("Material")) OSD OSDID;
OSD OSDMaterial;
if (matMap.TryGetValue("ID", out OSDID) && matMap.TryGetValue("Material", out OSDMaterial) && OSDMaterial is OSDMap)
{ {
try try
{ {
lock (materialslock) lock (materialslock)
{ {
UUID id = matMap["ID"].AsUUID(); UUID id = OSDID.AsUUID();
if(m_Materials.ContainsKey(id)) if(m_Materials.ContainsKey(id))
continue; continue;
OSDMap theMatMap = (OSDMap)matMap["Material"]; OSDMap theMatMap = (OSDMap)OSDMaterial;
FaceMaterial fmat = new FaceMaterial(theMatMap); FaceMaterial fmat = new FaceMaterial(theMatMap);
if(fmat == null || if(fmat == null ||
@ -290,7 +292,7 @@ namespace OpenSim.Region.OptionalModules.Materials
&& fmat.NormalMapID == UUID.Zero && fmat.NormalMapID == UUID.Zero
&& fmat.SpecularMapID == UUID.Zero)) && fmat.SpecularMapID == UUID.Zero))
continue; continue;
fmat.ID = id; fmat.ID = id;
m_Materials[id] = fmat; m_Materials[id] = fmat;
m_MaterialsRefCount[id] = 0; m_MaterialsRefCount[id] = 0;
@ -459,12 +461,13 @@ namespace OpenSim.Region.OptionalModules.Materials
OSDMap resp = new OSDMap(); OSDMap resp = new OSDMap();
OSDArray respArr = new OSDArray(); OSDArray respArr = new OSDArray();
OSD tmpOSD;
if (req.ContainsKey("Zipped")) if (req.TryGetValue("Zipped", out tmpOSD))
{ {
OSD osd = null; OSD osd = null;
byte[] inBytes = req["Zipped"].AsBinary(); byte[] inBytes = tmpOSD.AsBinary();
try try
{ {
@ -531,12 +534,13 @@ namespace OpenSim.Region.OptionalModules.Materials
OSDArray respArr = new OSDArray(); OSDArray respArr = new OSDArray();
OSD tmpOSD;
HashSet<SceneObjectPart> parts = new HashSet<SceneObjectPart>(); HashSet<SceneObjectPart> parts = new HashSet<SceneObjectPart>();
if (req.ContainsKey("Zipped")) if (req.TryGetValue("Zipped", out tmpOSD))
{ {
OSD osd = null; OSD osd = null;
byte[] inBytes = req["Zipped"].AsBinary(); byte[] inBytes = tmpOSD.AsBinary();
try try
{ {
@ -546,145 +550,140 @@ namespace OpenSim.Region.OptionalModules.Materials
{ {
materialsFromViewer = osd as OSDMap; materialsFromViewer = osd as OSDMap;
if (materialsFromViewer.ContainsKey("FullMaterialsPerFace")) if (materialsFromViewer.TryGetValue("FullMaterialsPerFace", out tmpOSD) && (tmpOSD is OSDArray))
{ {
OSD matsOsd = materialsFromViewer["FullMaterialsPerFace"]; OSDArray matsArr = tmpOSD as OSDArray;
if (matsOsd is OSDArray) try
{ {
OSDArray matsArr = matsOsd as OSDArray; foreach (OSDMap matsMap in matsArr)
try
{ {
foreach (OSDMap matsMap in matsArr) uint primLocalID = 0;
try
{ {
uint primLocalID = 0; primLocalID = matsMap["ID"].AsUInteger();
try }
{ catch (Exception e)
primLocalID = matsMap["ID"].AsUInteger(); {
} m_log.Warn("[Materials]: cannot decode \"ID\" from matsMap: " + e.Message);
catch (Exception e) continue;
{ }
m_log.Warn("[Materials]: cannot decode \"ID\" from matsMap: " + e.Message);
continue;
}
SceneObjectPart sop = m_scene.GetSceneObjectPart(primLocalID); SceneObjectPart sop = m_scene.GetSceneObjectPart(primLocalID);
if (sop == null) if (sop == null)
{ {
m_log.WarnFormat("[Materials]: SOP not found for localId: {0}", primLocalID.ToString()); m_log.WarnFormat("[Materials]: SOP not found for localId: {0}", primLocalID.ToString());
continue; continue;
} }
if (!m_scene.Permissions.CanEditObject(sop.UUID, agentID)) if (!m_scene.Permissions.CanEditObject(sop.UUID, agentID))
{ {
m_log.WarnFormat("User {0} can't edit object {1} {2}", agentID, sop.Name, sop.UUID); m_log.WarnFormat("User {0} can't edit object {1} {2}", agentID, sop.Name, sop.UUID);
continue; continue;
} }
OSDMap mat = null; OSDMap mat = null;
try try
{ {
mat = matsMap["Material"] as OSDMap; mat = matsMap["Material"] as OSDMap;
} }
catch (Exception e) catch (Exception e)
{ {
m_log.Warn("[Materials]: cannot decode \"Material\" from matsMap: " + e.Message); m_log.Warn("[Materials]: cannot decode \"Material\" from matsMap: " + e.Message);
continue; continue;
} }
Primitive.TextureEntry te = new Primitive.TextureEntry(sop.Shape.TextureEntry, 0, sop.Shape.TextureEntry.Length); Primitive.TextureEntry te = new Primitive.TextureEntry(sop.Shape.TextureEntry, 0, sop.Shape.TextureEntry.Length);
if (te == null) if (te == null)
{ {
m_log.WarnFormat("[Materials]: Error in TextureEntry for SOP {0} {1}", sop.Name, sop.UUID); m_log.WarnFormat("[Materials]: Error in TextureEntry for SOP {0} {1}", sop.Name, sop.UUID);
continue; continue;
} }
int face = -1; int face = -1;
UUID oldid = UUID.Zero; UUID oldid = UUID.Zero;
Primitive.TextureEntryFace faceEntry = null; Primitive.TextureEntryFace faceEntry = null;
if (matsMap.ContainsKey("Face")) if (matsMap.TryGetValue("Face", out tmpOSD))
{ {
face = matsMap["Face"].AsInteger(); face = tmpOSD.AsInteger();
faceEntry = te.CreateFace((uint)face); faceEntry = te.CreateFace((uint)face);
} }
else else
faceEntry = te.DefaultTexture; faceEntry = te.DefaultTexture;
if (faceEntry == null) if (faceEntry == null)
continue; continue;
UUID id; UUID id;
FaceMaterial newFaceMat = null; FaceMaterial newFaceMat = null;
if (mat == null) if (mat == null)
{ {
// This happens then the user removes a material from a prim // This happens then the user removes a material from a prim
id = UUID.Zero;
}
else
{
newFaceMat = new FaceMaterial(mat);
if(newFaceMat.DiffuseAlphaMode == 1
&& newFaceMat.NormalMapID == UUID.Zero
&& newFaceMat.SpecularMapID == UUID.Zero
)
id = UUID.Zero; id = UUID.Zero;
}
else else
{ {
newFaceMat = new FaceMaterial(mat); newFaceMat.genID();
if(newFaceMat.DiffuseAlphaMode == 1 id = newFaceMat.ID;
&& newFaceMat.NormalMapID == UUID.Zero }
&& newFaceMat.SpecularMapID == UUID.Zero }
)
id = UUID.Zero; oldid = faceEntry.MaterialID;
if(oldid == id)
continue;
if (faceEntry != null)
{
faceEntry.MaterialID = id;
//m_log.DebugFormat("[Materials]: in \"{0}\" {1}, setting material ID for face {2} to {3}", sop.Name, sop.UUID, face, id);
// We can't use sop.UpdateTextureEntry(te) because it filters, so do it manually
sop.Shape.TextureEntry = te.GetBytes(9);
}
if(oldid != UUID.Zero)
RemoveMaterial(oldid);
lock(materialslock)
{
if(id != UUID.Zero)
{
if (m_Materials.ContainsKey(id))
m_MaterialsRefCount[id]++;
else else
{ {
newFaceMat.genID(); m_Materials[id] = newFaceMat;
id = newFaceMat.ID; m_MaterialsRefCount[id] = 1;
m_changed[newFaceMat] = Util.GetTimeStamp();
} }
} }
oldid = faceEntry.MaterialID;
if(oldid == id)
continue;
if (faceEntry != null)
{
faceEntry.MaterialID = id;
//m_log.DebugFormat("[Materials]: in \"{0}\" {1}, setting material ID for face {2} to {3}", sop.Name, sop.UUID, face, id);
// We can't use sop.UpdateTextureEntry(te) because it filters, so do it manually
sop.Shape.TextureEntry = te.GetBytes(9);
}
if(oldid != UUID.Zero)
RemoveMaterial(oldid);
lock(materialslock)
{
if(id != UUID.Zero)
{
if (m_Materials.ContainsKey(id))
m_MaterialsRefCount[id]++;
else
{
m_Materials[id] = newFaceMat;
m_MaterialsRefCount[id] = 1;
m_changed[newFaceMat] = Util.GetTimeStamp();
}
}
}
if(!parts.Contains(sop))
parts.Add(sop);
} }
foreach(SceneObjectPart sop in parts) if(!parts.Contains(sop))
{ parts.Add(sop);
if (sop.ParentGroup != null && !sop.ParentGroup.IsDeleted)
{
sop.TriggerScriptChangedEvent(Changed.TEXTURE);
sop.ScheduleFullUpdate();
sop.ParentGroup.HasGroupChanged = true;
}
}
} }
catch (Exception e)
foreach(SceneObjectPart sop in parts)
{ {
m_log.Warn("[Materials]: exception processing received material ", e); if (sop.ParentGroup != null && !sop.ParentGroup.IsDeleted)
{
sop.TriggerScriptChangedEvent(Changed.TEXTURE);
sop.ScheduleFullUpdate();
sop.ParentGroup.HasGroupChanged = true;
}
} }
} }
catch (Exception e)
{
m_log.Warn("[Materials]: exception processing received material ", e);
}
} }
} }
} }

View File

@ -294,7 +294,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
if(numCoords < 3 || (!needsConvexProcessing && numFaces < 1)) if(numCoords < 3 || (!needsConvexProcessing && numFaces < 1))
{ {
m_log.ErrorFormat("[MESH]: invalid degenerated mesh for prim {0} ignored", primName); m_log.ErrorFormat("[ubODEMesh]: invalid degenerated mesh for prim {0} ignored", primName);
return null; return null;
} }
@ -331,7 +331,7 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing
if(mesh.numberVertices() < 3 || mesh.numberTriangles() < 1) if(mesh.numberVertices() < 3 || mesh.numberTriangles() < 1)
{ {
m_log.ErrorFormat("[MESH]: invalid degenerated mesh for prim {0} ignored", primName); m_log.ErrorFormat("[ubODEMesh]: invalid degenerated mesh for prim {0} ignored", primName);
return null; return null;
} }

View File

@ -784,25 +784,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public LSL_Float llCos(double f) public LSL_Float llCos(double f)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
return (double)Math.Cos(f); return Math.Cos(f);
} }
public LSL_Float llTan(double f) public LSL_Float llTan(double f)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
return (double)Math.Tan(f); return Math.Tan(f);
} }
public LSL_Float llAtan2(double x, double y) public LSL_Float llAtan2(LSL_Float x, LSL_Float y)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
return (double)Math.Atan2(x, y); return Math.Atan2(x, y);
} }
public LSL_Float llSqrt(double f) public LSL_Float llSqrt(double f)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
return (double)Math.Sqrt(f); return Math.Sqrt(f);
} }
public LSL_Float llPow(double fbase, double fexponent) public LSL_Float llPow(double fbase, double fexponent)
@ -811,7 +811,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return (double)Math.Pow(fbase, fexponent); return (double)Math.Pow(fbase, fexponent);
} }
public LSL_Integer llAbs(int i) public LSL_Integer llAbs(LSL_Integer i)
{ {
// changed to replicate LSL behaviour whereby minimum int value is returned untouched. // changed to replicate LSL behaviour whereby minimum int value is returned untouched.
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
@ -3069,7 +3069,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
m_host.ParentGroup.StopMoveToTarget(); m_host.ParentGroup.StopMoveToTarget();
} }
public void llApplyImpulse(LSL_Vector force, int local) public void llApplyImpulse(LSL_Vector force, LSL_Integer local)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
//No energy force yet //No energy force yet
@ -3526,7 +3526,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return src.ToLower(); return src.ToLower();
} }
public LSL_Integer llGiveMoney(string destination, int amount) public LSL_Integer llGiveMoney(LSL_Key destination, LSL_Integer amount)
{ {
Util.FireAndForget(x => Util.FireAndForget(x =>
{ {
@ -3785,7 +3785,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return 100f * llGetMass(); return 100f * llGetMass();
} }
public void llCollisionFilter(string name, string id, int accept) public void llCollisionFilter(LSL_String name, LSL_Key id, LSL_Integer accept)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
m_host.CollisionFilter.Clear(); m_host.CollisionFilter.Clear();
@ -4513,7 +4513,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
} }
} }
public void llCreateLink(LSL_String target, LSL_Integer parent) public void llCreateLink(LSL_Key target, LSL_Integer parent)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
@ -4847,7 +4847,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return 1.0f; return 1.0f;
} }
public void llGiveInventory(string destination, string inventory) public void llGiveInventory(LSL_Key destination, LSL_String inventory)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
@ -5317,7 +5317,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
} }
} }
public void llCollisionSound(string impact_sound, double impact_volume) public void llCollisionSound(LSL_String impact_sound, LSL_Float impact_volume)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
@ -5344,11 +5344,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
m_host.aggregateScriptEvents(); m_host.aggregateScriptEvents();
} }
public LSL_String llGetAnimation(string id) public LSL_String llGetAnimation(LSL_Key id)
{ {
// This should only return a value if the avatar is in the same region // This should only return a value if the avatar is in the same region
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
UUID avatar = (UUID)id; UUID avatar;
if(!UUID.TryParse(id, out avatar))
return "";
ScenePresence presence = World.GetScenePresence(avatar); ScenePresence presence = World.GetScenePresence(avatar);
if (presence == null) if (presence == null)
return ""; return "";
@ -5698,13 +5700,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return angle; return angle;
} }
public LSL_Float llAcos(double val) public LSL_Float llAcos(LSL_Float val)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
return (double)Math.Acos(val); return (double)Math.Acos(val);
} }
public LSL_Float llAsin(double val) public LSL_Float llAsin(LSL_Float val)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
return (double)Math.Asin(val); return (double)Math.Asin(val);
@ -5744,7 +5746,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return UUID.Zero.ToString(); return UUID.Zero.ToString();
} }
public void llAllowInventoryDrop(int add) public void llAllowInventoryDrop(LSL_Integer add)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
@ -6387,75 +6389,64 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public LSL_String llGetEnv(LSL_String name) public LSL_String llGetEnv(LSL_String name)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
if (name == "agent_limit") switch(name)
{ {
return World.RegionInfo.RegionSettings.AgentLimit.ToString(); case "agent_limit":
} return World.RegionInfo.RegionSettings.AgentLimit.ToString();
else if (name == "dynamic_pathfinding")
{ case "dynamic_pathfinding":
return "0"; return "0";
}
else if (name == "estate_id") case "estate_id":
{ return World.RegionInfo.EstateSettings.EstateID.ToString();
return World.RegionInfo.EstateSettings.EstateID.ToString();
} case "estate_name":
else if (name == "estate_name") return World.RegionInfo.EstateSettings.EstateName;
{
return World.RegionInfo.EstateSettings.EstateName; case "frame_number":
} return World.Frame.ToString();
else if (name == "frame_number")
{ case "region_cpu_ratio":
return World.Frame.ToString(); return "1";
}
else if (name == "region_cpu_ratio") case "region_idle":
{ return "0";
return "1";
} case "region_product_name":
else if (name == "region_idle") if (World.RegionInfo.RegionType != String.Empty)
{ return World.RegionInfo.RegionType;
return "0"; else
} return "";
else if (name == "region_product_name")
{ case "region_product_sku":
if (World.RegionInfo.RegionType != String.Empty) return "OpenSim";
return World.RegionInfo.RegionType;
else case "region_start_time":
return World.UnixStartTime.ToString();
case "region_up_time":
int time = Util.UnixTimeSinceEpoch() - World.UnixStartTime;
return time.ToString();
case "sim_channel":
return "OpenSim";
case "sim_version":
return World.GetSimulatorVersion();
case "simulator_hostname":
IUrlModule UrlModule = World.RequestModuleInterface<IUrlModule>();
return UrlModule.ExternalHostNameForLSL;
case "region_max_prims":
return World.RegionInfo.ObjectCapacity.ToString();
case "region_object_bonus":
return World.RegionInfo.RegionSettings.ObjectBonus.ToString();
default:
return ""; return "";
} }
else if (name == "region_product_sku")
{
return "OpenSim";
}
else if (name == "region_start_time")
{
return World.UnixStartTime.ToString();
}
else if (name == "sim_channel")
{
return "OpenSim";
}
else if (name == "sim_version")
{
return World.GetSimulatorVersion();
}
else if (name == "simulator_hostname")
{
IUrlModule UrlModule = World.RequestModuleInterface<IUrlModule>();
return UrlModule.ExternalHostNameForLSL;
}
else if (name == "region_max_prims")
{
return World.RegionInfo.ObjectCapacity.ToString();
}
else if (name == "region_object_bonus")
{
return World.RegionInfo.RegionSettings.ObjectBonus.ToString();
}
else
{
return "";
}
} }
/// <summary> /// <summary>
@ -6650,7 +6641,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
/// AGENT_BUSY /// AGENT_BUSY
/// Remove as they are done /// Remove as they are done
/// </summary> /// </summary>
public LSL_Integer llGetAgentInfo(string id) public LSL_Integer llGetAgentInfo(LSL_Key id)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
@ -6757,7 +6748,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return flags; return flags;
} }
public LSL_String llGetAgentLanguage(string id) public LSL_String llGetAgentLanguage(LSL_Key id)
{ {
// This should only return a value if the avatar is in the same region, but eh. idc. // This should only return a value if the avatar is in the same region, but eh. idc.
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
@ -6868,7 +6859,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return result; return result;
} }
public void llAdjustSoundVolume(double volume) public void llAdjustSoundVolume(LSL_Float volume)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
m_host.AdjustSoundGain(volume); m_host.AdjustSoundGain(volume);
@ -6881,7 +6872,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
m_host.SoundRadius = radius; m_host.SoundRadius = radius;
} }
public LSL_String llKey2Name(string id) public LSL_String llKey2Name(LSL_Key id)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
UUID key = new UUID(); UUID key = new UUID();
@ -7055,22 +7046,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
/// only the height of avatars vary and that says: /// only the height of avatars vary and that says:
/// Width (x) and depth (y) are constant. (0.45m and 0.6m respectively). /// Width (x) and depth (y) are constant. (0.45m and 0.6m respectively).
/// </summary> /// </summary>
public LSL_Vector llGetAgentSize(string id) public LSL_Vector llGetAgentSize(LSL_Key id)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
ScenePresence avatar = World.GetScenePresence((UUID)id); UUID avID;
LSL_Vector agentSize; if(!UUID.TryParse(id, out avID))
return ScriptBaseClass.ZERO_VECTOR;
ScenePresence avatar = World.GetScenePresence(avID);
if (avatar == null || avatar.IsChildAgent) // Fail if not in the same region if (avatar == null || avatar.IsChildAgent) // Fail if not in the same region
{ return ScriptBaseClass.ZERO_VECTOR;
agentSize = ScriptBaseClass.ZERO_VECTOR;
}
else
{
// agentSize = new LSL_Vector(0.45f, 0.6f, avatar.Appearance.AvatarHeight); // agentSize = new LSL_Vector(0.45f, 0.6f, avatar.Appearance.AvatarHeight);
Vector3 s = avatar.Appearance.AvatarSize; Vector3 s = avatar.Appearance.AvatarSize;
agentSize = new LSL_Vector(s.X, s.Y, s.Z); return new LSL_Vector(s.X, s.Y, s.Z);
}
return agentSize;
} }
public LSL_Integer llSameGroup(string id) public LSL_Integer llSameGroup(string id)
@ -7246,12 +7235,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return m_host.ParentGroup.AttachmentPoint; return m_host.ParentGroup.AttachmentPoint;
} }
public LSL_List llGetAttachedList(string id) public LSL_List llGetAttachedList(LSL_Key id)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
ScenePresence av = World.GetScenePresence((UUID)id); UUID avID;
if(!UUID.TryParse(id, out avID))
return new LSL_List("NOT_FOUND");
ScenePresence av = World.GetScenePresence(avID);
if (av == null || av.IsDeleted) if (av == null || av.IsDeleted)
return new LSL_List("NOT_FOUND"); return new LSL_List("NOT_FOUND");
@ -7836,7 +7828,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
} }
} }
public void llGiveInventoryList(string destination, string category, LSL_List inventory) public void llGiveInventoryList(LSL_Key destination, LSL_String category, LSL_List inventory)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
@ -8014,7 +8006,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
} }
public void llAddToLandPassList(LSL_Key avatar, double hours) public void llAddToLandPassList(LSL_Key avatar, LSL_Float hours)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
UUID key; UUID key;
@ -11086,16 +11078,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return (double)Math.Log(val); return (double)Math.Log(val);
} }
public LSL_List llGetAnimationList(string id) public LSL_List llGetAnimationList(LSL_Key id)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
LSL_List l = new LSL_List(); UUID avID;
ScenePresence av = World.GetScenePresence((UUID)id); if(!UUID.TryParse(id, out avID))
return new LSL_List();
ScenePresence av = World.GetScenePresence(avID);
if (av == null || av.IsChildAgent) // only if in the region if (av == null || av.IsChildAgent) // only if in the region
return l; return new LSL_List();
UUID[] anims; UUID[] anims;
anims = av.Animator.GetAnimationArray(); anims = av.Animator.GetAnimationArray();
LSL_List l = new LSL_List();
foreach (UUID foo in anims) foreach (UUID foo in anims)
l.Add(new LSL_Key(foo.ToString())); l.Add(new LSL_Key(foo.ToString()));
return l; return l;
@ -13619,7 +13616,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
ScriptSleep(m_sleepMsOnMapDestination); ScriptSleep(m_sleepMsOnMapDestination);
} }
public void llAddToLandBanList(LSL_Key avatar, double hours) public void llAddToLandBanList(LSL_Key avatar, LSL_Float hours)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
UUID key; UUID key;
@ -14343,6 +14340,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
case "5": case "5":
ret.Add(new LSL_Key(land.GlobalID.ToString())); ret.Add(new LSL_Key(land.GlobalID.ToString()));
break; break;
case "64":
ret.Add(new LSL_Integer(land.Dwell));
break;
default: default:
ret.Add(new LSL_Integer(0)); ret.Add(new LSL_Integer(0));
break; break;
@ -15056,7 +15056,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return name.Replace(" ", ".").ToLower(); return name.Replace(" ", ".").ToLower();
} }
public LSL_String llGetUsername(string id) public LSL_String llGetUsername(LSL_Key id)
{ {
return Name2Username(llKey2Name(id)); return Name2Username(llKey2Name(id));
} }
@ -16599,7 +16599,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
m_SoundModule.SetSoundQueueing(m_host.UUID, queue == ScriptBaseClass.TRUE.value); m_SoundModule.SetSoundQueueing(m_host.UUID, queue == ScriptBaseClass.TRUE.value);
} }
public void llCollisionSprite(string impact_sprite) public void llCollisionSprite(LSL_String impact_sprite)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
// Viewer 2.0 broke this and it's likely LL has no intention // Viewer 2.0 broke this and it's likely LL has no intention
@ -16660,7 +16660,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
new DetectParams[0])); new DetectParams[0]));
} }
public LSL_Key llTransferLindenDollars(string destination, int amount) public LSL_Key llTransferLindenDollars(LSL_Key destination, LSL_Integer amount)
{ {
UUID txn = UUID.Random(); UUID txn = UUID.Random();

View File

@ -1600,6 +1600,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return 0.0f; return 0.0f;
} }
public LSL_Integer osGetParcelDwell(LSL_Vector pos)
{
LandData land = World.GetLandData(pos);
if (land != null)
{
return (int)land.Dwell;
}
return 0;
}
// Routines for creating and managing parcels programmatically // Routines for creating and managing parcels programmatically
public void osParcelJoin(LSL_Vector pos1, LSL_Vector pos2) public void osParcelJoin(LSL_Vector pos1, LSL_Vector pos2)
{ {

View File

@ -41,20 +41,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
{ {
void state(string newState); void state(string newState);
LSL_Integer llAbs(int val); LSL_Integer llAbs(LSL_Integer val);
LSL_Float llAcos(double val); LSL_Float llAcos(LSL_Float val);
//ApiDesc Sleep 0.1 //ApiDesc Sleep 0.1
void llAddToLandBanList(LSL_Key avatarId, double hours); void llAddToLandBanList(LSL_Key avatarId, LSL_Float hours);
//ApiDesc Sleep 0.1 //ApiDesc Sleep 0.1
void llAddToLandPassList(LSL_Key avatarId, double hours); void llAddToLandPassList(LSL_Key avatarId, LSL_Float hours);
//ApiDesc Sleep 0.1 //ApiDesc Sleep 0.1
void llAdjustSoundVolume(double volume); void llAdjustSoundVolume(LSL_Float volume);
void llAllowInventoryDrop(int add); void llAllowInventoryDrop(LSL_Integer add);
LSL_Float llAngleBetween(LSL_Rotation a, LSL_Rotation b); LSL_Float llAngleBetween(LSL_Rotation a, LSL_Rotation b);
void llApplyImpulse(LSL_Vector force, int local); void llApplyImpulse(LSL_Vector force, LSL_Integer local);
void llApplyRotationalImpulse(LSL_Vector force, int local); void llApplyRotationalImpulse(LSL_Vector force, int local);
LSL_Float llAsin(double val); LSL_Float llAsin(LSL_Float val);
LSL_Float llAtan2(double x, double y); LSL_Float llAtan2(LSL_Float x, LSL_Float y);
void llAttachToAvatar(LSL_Integer attachment); void llAttachToAvatar(LSL_Integer attachment);
void llAttachToAvatarTemp(LSL_Integer attachmentPoint); void llAttachToAvatarTemp(LSL_Integer attachmentPoint);
LSL_Key llAvatarOnSitTarget(); LSL_Key llAvatarOnSitTarget();
@ -74,13 +74,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
//ApiDesc Sleep 1.0 //ApiDesc Sleep 1.0
void llCloseRemoteDataChannel(string channel); void llCloseRemoteDataChannel(string channel);
LSL_Float llCloud(LSL_Vector offset); LSL_Float llCloud(LSL_Vector offset);
void llCollisionFilter(string name, string id, int accept); void llCollisionFilter(LSL_String name, LSL_Key id, LSL_Integer accept);
void llCollisionSound(string impact_sound, double impact_volume); void llCollisionSound(LSL_String impact_sound, LSL_Float impact_volume);
//ApiDesc Not Supported - does nothing //ApiDesc Not Supported - does nothing
void llCollisionSprite(string impact_sprite); void llCollisionSprite(LSL_String impact_sprite);
LSL_Float llCos(double f); LSL_Float llCos(double f);
//ApiDesc Sleep 1.0 //ApiDesc Sleep 1.0
void llCreateLink(LSL_String targetId, LSL_Integer parent); void llCreateLink(LSL_Key targetId, LSL_Integer parent);
LSL_List llCSV2List(string src); LSL_List llCSV2List(string src);
LSL_List llDeleteSubList(LSL_List src, int start, int end); LSL_List llDeleteSubList(LSL_List src, int start, int end);
LSL_String llDeleteSubString(string src, int start, int end); LSL_String llDeleteSubString(string src, int start, int end);
@ -116,16 +116,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
LSL_Float llFrand(double mag); LSL_Float llFrand(double mag);
LSL_Key llGenerateKey(); LSL_Key llGenerateKey();
LSL_Vector llGetAccel(); LSL_Vector llGetAccel();
LSL_Integer llGetAgentInfo(string id); LSL_Integer llGetAgentInfo(LSL_Key id);
LSL_String llGetAgentLanguage(string id); LSL_String llGetAgentLanguage(LSL_Key id);
LSL_List llGetAgentList(LSL_Integer scope, LSL_List options); LSL_List llGetAgentList(LSL_Integer scope, LSL_List options);
LSL_Vector llGetAgentSize(string id); LSL_Vector llGetAgentSize(LSL_Key id);
LSL_Float llGetAlpha(int face); LSL_Float llGetAlpha(int face);
LSL_Float llGetAndResetTime(); LSL_Float llGetAndResetTime();
LSL_String llGetAnimation(string id); LSL_String llGetAnimation(LSL_Key id);
LSL_List llGetAnimationList(string id); LSL_List llGetAnimationList(LSL_Key id);
LSL_Integer llGetAttached(); LSL_Integer llGetAttached();
LSL_List llGetAttachedList(string id); LSL_List llGetAttachedList(LSL_Key id);
LSL_List llGetBoundingBox(string obj); LSL_List llGetBoundingBox(string obj);
LSL_Vector llGetCameraPos(); LSL_Vector llGetCameraPos();
LSL_Rotation llGetCameraRot(); LSL_Rotation llGetCameraRot();
@ -217,10 +217,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
LSL_Integer llGetUnixTime(); LSL_Integer llGetUnixTime();
LSL_Vector llGetVel(); LSL_Vector llGetVel();
LSL_Float llGetWallclock(); LSL_Float llGetWallclock();
void llGiveInventory(string destination, string inventory); void llGiveInventory(LSL_Key destination, LSL_String inventory);
void llGiveInventoryList(string destination, string category, LSL_List inventory); void llGiveInventoryList(LSL_Key destination, LSL_String category, LSL_List inventory);
LSL_Integer llGiveMoney(string destination, int amount); LSL_Integer llGiveMoney(LSL_Key destination, LSL_Integer amount);
LSL_Key llTransferLindenDollars(string destination, int amount); LSL_Key llTransferLindenDollars(LSL_Key destination, LSL_Integer amount);
void llGodLikeRezObject(string inventory, LSL_Vector pos); void llGodLikeRezObject(string inventory, LSL_Vector pos);
LSL_Float llGround(LSL_Vector offset); LSL_Float llGround(LSL_Vector offset);
LSL_Vector llGroundContour(LSL_Vector offset); LSL_Vector llGroundContour(LSL_Vector offset);
@ -232,8 +232,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
LSL_String llInsertString(string dst, int position, string src); LSL_String llInsertString(string dst, int position, string src);
void llInstantMessage(string user, string message); void llInstantMessage(string user, string message);
LSL_String llIntegerToBase64(int number); LSL_String llIntegerToBase64(int number);
LSL_String llKey2Name(string id); LSL_String llKey2Name(LSL_Key id);
LSL_String llGetUsername(string id); LSL_String llGetUsername(LSL_Key id);
LSL_Key llRequestUsername(string id); LSL_Key llRequestUsername(string id);
LSL_String llGetDisplayName(string id); LSL_String llGetDisplayName(string id);
LSL_Key llRequestDisplayName(string id); LSL_Key llRequestDisplayName(string id);

View File

@ -260,6 +260,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
LSL_Float osGetWindParam(string plugin, string param); LSL_Float osGetWindParam(string plugin, string param);
// Parcel commands // Parcel commands
LSL_Integer osGetParcelDwell(vector pos);
void osParcelJoin(vector pos1, vector pos2); void osParcelJoin(vector pos1, vector pos2);
void osParcelSubdivide(vector pos1, vector pos2); void osParcelSubdivide(vector pos1, vector pos2);
void osSetParcelDetails(vector pos, LSL_List rules); void osSetParcelDetails(vector pos, LSL_List rules);

View File

@ -35,7 +35,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
public partial class ScriptBaseClass public partial class ScriptBaseClass
{ {
// SCRIPTS CONSTANTS // SCRIPTS CONSTANTS
public static readonly LSLInteger OS_APIVERSION = 4; public static readonly LSLInteger OS_APIVERSION = 5;
public static readonly LSLInteger TRUE = 1; public static readonly LSLInteger TRUE = 1;
public static readonly LSLInteger FALSE = 0; public static readonly LSLInteger FALSE = 0;
@ -728,6 +728,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
public const int PARCEL_DETAILS_SEE_AVATARS = 6; public const int PARCEL_DETAILS_SEE_AVATARS = 6;
public const int PARCEL_DETAILS_ANY_AVATAR_SOUNDS = 7; public const int PARCEL_DETAILS_ANY_AVATAR_SOUNDS = 7;
public const int PARCEL_DETAILS_GROUP_SOUNDS = 8; public const int PARCEL_DETAILS_GROUP_SOUNDS = 8;
// constants for llGetParcelDetails os specific
public const int PARCEL_DETAILS_DWELL = 64;
//osSetParcelDetails //osSetParcelDetails
public const int PARCEL_DETAILS_CLAIMDATE = 10; public const int PARCEL_DETAILS_CLAIMDATE = 10;

View File

@ -65,32 +65,32 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
// //
// Script functions // Script functions
// //
public LSL_Integer llAbs(int i) public LSL_Integer llAbs(LSL_Integer i)
{ {
return m_LSL_Functions.llAbs(i); return m_LSL_Functions.llAbs(i);
} }
public LSL_Float llAcos(double val) public LSL_Float llAcos(LSL_Float val)
{ {
return m_LSL_Functions.llAcos(val); return m_LSL_Functions.llAcos(val);
} }
public void llAddToLandBanList(string avatar, double hours) public void llAddToLandBanList(LSL_Key avatar, LSL_Float hours)
{ {
m_LSL_Functions.llAddToLandBanList(avatar, hours); m_LSL_Functions.llAddToLandBanList(avatar, hours);
} }
public void llAddToLandPassList(string avatar, double hours) public void llAddToLandPassList(LSL_Key avatar, LSL_Float hours)
{ {
m_LSL_Functions.llAddToLandPassList(avatar, hours); m_LSL_Functions.llAddToLandPassList(avatar, hours);
} }
public void llAdjustSoundVolume(double volume) public void llAdjustSoundVolume(LSL_Float volume)
{ {
m_LSL_Functions.llAdjustSoundVolume(volume); m_LSL_Functions.llAdjustSoundVolume(volume);
} }
public void llAllowInventoryDrop(int add) public void llAllowInventoryDrop(LSL_Integer add)
{ {
m_LSL_Functions.llAllowInventoryDrop(add); m_LSL_Functions.llAllowInventoryDrop(add);
} }
@ -100,7 +100,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
return m_LSL_Functions.llAngleBetween(a, b); return m_LSL_Functions.llAngleBetween(a, b);
} }
public void llApplyImpulse(LSL_Vector force, int local) public void llApplyImpulse(LSL_Vector force, LSL_Integer local)
{ {
m_LSL_Functions.llApplyImpulse(force, local); m_LSL_Functions.llApplyImpulse(force, local);
} }
@ -110,12 +110,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
m_LSL_Functions.llApplyRotationalImpulse(force, local); m_LSL_Functions.llApplyRotationalImpulse(force, local);
} }
public LSL_Float llAsin(double val) public LSL_Float llAsin(LSL_Float val)
{ {
return m_LSL_Functions.llAsin(val); return m_LSL_Functions.llAsin(val);
} }
public LSL_Float llAtan2(double x, double y) public LSL_Float llAtan2(LSL_Float x, LSL_Float y)
{ {
return m_LSL_Functions.llAtan2(x, y); return m_LSL_Functions.llAtan2(x, y);
} }
@ -190,17 +190,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
return m_LSL_Functions.llCloud(offset); return m_LSL_Functions.llCloud(offset);
} }
public void llCollisionFilter(string name, string id, int accept) public void llCollisionFilter(LSL_String name, LSL_Key id, LSL_Integer accept)
{ {
m_LSL_Functions.llCollisionFilter(name, id, accept); m_LSL_Functions.llCollisionFilter(name, id, accept);
} }
public void llCollisionSound(string impact_sound, double impact_volume) public void llCollisionSound(LSL_String impact_sound, LSL_Float impact_volume)
{ {
m_LSL_Functions.llCollisionSound(impact_sound, impact_volume); m_LSL_Functions.llCollisionSound(impact_sound, impact_volume);
} }
public void llCollisionSprite(string impact_sprite) public void llCollisionSprite(LSL_String impact_sprite)
{ {
m_LSL_Functions.llCollisionSprite(impact_sprite); m_LSL_Functions.llCollisionSprite(impact_sprite);
} }
@ -210,7 +210,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
return m_LSL_Functions.llCos(f); return m_LSL_Functions.llCos(f);
} }
public void llCreateLink(LSL_String target, LSL_Integer parent) public void llCreateLink(LSL_Key target, LSL_Integer parent)
{ {
m_LSL_Functions.llCreateLink(target, parent); m_LSL_Functions.llCreateLink(target, parent);
} }
@ -386,12 +386,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
return m_LSL_Functions.llGetAccel(); return m_LSL_Functions.llGetAccel();
} }
public LSL_Integer llGetAgentInfo(string id) public LSL_Integer llGetAgentInfo(LSL_Key id)
{ {
return m_LSL_Functions.llGetAgentInfo(id); return m_LSL_Functions.llGetAgentInfo(id);
} }
public LSL_String llGetAgentLanguage(string id) public LSL_String llGetAgentLanguage(LSL_Key id)
{ {
return m_LSL_Functions.llGetAgentLanguage(id); return m_LSL_Functions.llGetAgentLanguage(id);
} }
@ -401,7 +401,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
return m_LSL_Functions.llGetAgentList(scope, options); return m_LSL_Functions.llGetAgentList(scope, options);
} }
public LSL_Vector llGetAgentSize(string id) public LSL_Vector llGetAgentSize(LSL_Key id)
{ {
return m_LSL_Functions.llGetAgentSize(id); return m_LSL_Functions.llGetAgentSize(id);
} }
@ -416,12 +416,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
return m_LSL_Functions.llGetAndResetTime(); return m_LSL_Functions.llGetAndResetTime();
} }
public LSL_String llGetAnimation(string id) public LSL_String llGetAnimation(LSL_Key id)
{ {
return m_LSL_Functions.llGetAnimation(id); return m_LSL_Functions.llGetAnimation(id);
} }
public LSL_List llGetAnimationList(string id) public LSL_List llGetAnimationList(LSL_Key id)
{ {
return m_LSL_Functions.llGetAnimationList(id); return m_LSL_Functions.llGetAnimationList(id);
} }
@ -431,7 +431,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
return m_LSL_Functions.llGetAttached(); return m_LSL_Functions.llGetAttached();
} }
public LSL_List llGetAttachedList(string id) public LSL_List llGetAttachedList(LSL_Key id)
{ {
return m_LSL_Functions.llGetAttachedList(id); return m_LSL_Functions.llGetAttachedList(id);
} }
@ -881,27 +881,27 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
return m_LSL_Functions.llGetWallclock(); return m_LSL_Functions.llGetWallclock();
} }
public void llGiveInventory(string destination, string inventory) public void llGiveInventory(LSL_Key destination, LSL_String inventory)
{ {
m_LSL_Functions.llGiveInventory(destination, inventory); m_LSL_Functions.llGiveInventory(destination, inventory);
} }
public void llGiveInventoryList(string destination, string category, LSL_List inventory) public void llGiveInventoryList(LSL_Key destination, LSL_String category, LSL_List inventory)
{ {
m_LSL_Functions.llGiveInventoryList(destination, category, inventory); m_LSL_Functions.llGiveInventoryList(destination, category, inventory);
} }
public LSL_Integer llGiveMoney(string destination, int amount) public LSL_Integer llGiveMoney(LSL_Key destination, LSL_Integer amount)
{ {
return m_LSL_Functions.llGiveMoney(destination, amount); return m_LSL_Functions.llGiveMoney(destination, amount);
} }
public LSL_Key llTransferLindenDollars(string destination, int amount) public LSL_Key llTransferLindenDollars(LSL_Key destination, LSL_Integer amount)
{ {
return m_LSL_Functions.llTransferLindenDollars(destination, amount); return m_LSL_Functions.llTransferLindenDollars(destination, amount);
} }
public void llGodLikeRezObject(string inventory, LSL_Vector pos) public void llGodLikeRezObject(LSL_String inventory, LSL_Vector pos)
{ {
m_LSL_Functions.llGodLikeRezObject(inventory, pos); m_LSL_Functions.llGodLikeRezObject(inventory, pos);
} }
@ -931,22 +931,22 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
return m_LSL_Functions.llGroundSlope(offset); return m_LSL_Functions.llGroundSlope(offset);
} }
public LSL_Key llHTTPRequest(string url, LSL_List parameters, string body) public LSL_Key llHTTPRequest(LSL_String url, LSL_List parameters, LSL_String body)
{ {
return m_LSL_Functions.llHTTPRequest(url, parameters, body); return m_LSL_Functions.llHTTPRequest(url, parameters, body);
} }
public void llHTTPResponse(LSL_Key id, int status, string body) public void llHTTPResponse(LSL_Key id, int status, LSL_String body)
{ {
m_LSL_Functions.llHTTPResponse(id, status, body); m_LSL_Functions.llHTTPResponse(id, status, body);
} }
public LSL_String llInsertString(string dst, int position, string src) public LSL_String llInsertString(LSL_String dst, int position, LSL_String src)
{ {
return m_LSL_Functions.llInsertString(dst, position, src); return m_LSL_Functions.llInsertString(dst, position, src);
} }
public void llInstantMessage(string user, string message) public void llInstantMessage(LSL_String user, LSL_String message)
{ {
m_LSL_Functions.llInstantMessage(user, message); m_LSL_Functions.llInstantMessage(user, message);
} }
@ -956,12 +956,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
return m_LSL_Functions.llIntegerToBase64(number); return m_LSL_Functions.llIntegerToBase64(number);
} }
public LSL_String llKey2Name(string id) public LSL_String llKey2Name(LSL_Key id)
{ {
return m_LSL_Functions.llKey2Name(id); return m_LSL_Functions.llKey2Name(id);
} }
public LSL_String llGetUsername(string id) public LSL_String llGetUsername(LSL_Key id)
{ {
return m_LSL_Functions.llGetUsername(id); return m_LSL_Functions.llGetUsername(id);
} }

View File

@ -116,6 +116,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
return m_OSSL_Functions.osGetWindParam(plugin, param); return m_OSSL_Functions.osGetWindParam(plugin, param);
} }
public LSL_Integer osGetParcelDwell(vector pos)
{
return m_OSSL_Functions.osGetParcelDwell(pos);
}
public void osParcelJoin(vector pos1, vector pos2) public void osParcelJoin(vector pos1, vector pos2)
{ {
m_OSSL_Functions.osParcelJoin(pos1,pos2); m_OSSL_Functions.osParcelJoin(pos1,pos2);

View File

@ -490,6 +490,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
{ {
ReleaseControls(); ReleaseControls();
AsyncCommandManager.RemoveScript(Engine, LocalID, ItemID); AsyncCommandManager.RemoveScript(Engine, LocalID, ItemID);
SceneObjectPart part = Engine.World.GetSceneObjectPart(LocalID);
if (part != null)
part.RemoveScriptEvents(ItemID);
} }
public void RemoveState() public void RemoveState()

View File

@ -533,8 +533,12 @@ namespace OpenSim.Region.ScriptEngine.Shared
public static Quaternion operator /(Quaternion a, Quaternion b) public static Quaternion operator /(Quaternion a, Quaternion b)
{ {
// assuming normalized // assume normalized
b.s = -b.s; // if not, sl seems to not normalize either
b.x = -b.x;
b.y = -b.y;
b.z = -b.z;
return a * b; return a * b;
} }

View File

@ -115,15 +115,10 @@ namespace OpenSim.Server.Handlers.Simulation
return responsedata; return responsedata;
} }
} }
protected virtual void DoQueryAccess(Hashtable request, Hashtable responsedata, UUID agentID, UUID regionID) protected virtual void DoQueryAccess(Hashtable request, Hashtable responsedata, UUID agentID, UUID regionID)
{ {
Culture.SetCurrentCulture();
EntityTransferContext ctx = new EntityTransferContext();
if (m_SimulationService == null) if (m_SimulationService == null)
{ {
m_log.Debug("[AGENT HANDLER]: Agent QUERY called. Harmless but useless."); m_log.Debug("[AGENT HANDLER]: Agent QUERY called. Harmless but useless.");
@ -134,33 +129,37 @@ namespace OpenSim.Server.Handlers.Simulation
return; return;
} }
Culture.SetCurrentCulture();
// m_log.DebugFormat("[AGENT HANDLER]: Received QUERYACCESS with {0}", (string)request["body"]); // m_log.DebugFormat("[AGENT HANDLER]: Received QUERYACCESS with {0}", (string)request["body"]);
OSDMap args = Utils.GetOSDMap((string)request["body"]); OSDMap args = Utils.GetOSDMap((string)request["body"]);
bool viaTeleport = true; bool viaTeleport = true;
if (args.ContainsKey("viaTeleport")) OSD tmpOSD;
viaTeleport = args["viaTeleport"].AsBoolean(); if (args.TryGetValue("viaTeleport",out tmpOSD))
viaTeleport = tmpOSD.AsBoolean();
Vector3 position = Vector3.Zero; Vector3 position = Vector3.Zero;
if (args.ContainsKey("position")) if (args.TryGetValue("position", out tmpOSD))
position = Vector3.Parse(args["position"].AsString()); position = Vector3.Parse(tmpOSD.AsString());
string agentHomeURI = null; string agentHomeURI = null;
if (args.ContainsKey("agent_home_uri")) if (args.TryGetValue("agent_home_uri", out tmpOSD))
agentHomeURI = args["agent_home_uri"].AsString(); agentHomeURI = tmpOSD.AsString();
// Decode the legacy (string) version and extract the number // Decode the legacy (string) version and extract the number
float theirVersion = 0f; float theirVersion = 0f;
if (args.ContainsKey("my_version")) if (args.TryGetValue("my_version", out tmpOSD))
{ {
string theirVersionStr = args["my_version"].AsString(); string theirVersionStr = tmpOSD.AsString();
string[] parts = theirVersionStr.Split(new char[] {'/'}); string[] parts = theirVersionStr.Split(new char[] {'/'});
if (parts.Length > 1) if (parts.Length > 1)
theirVersion = float.Parse(parts[1], Culture.FormatProvider); theirVersion = float.Parse(parts[1], Culture.FormatProvider);
} }
if (args.ContainsKey("context")) EntityTransferContext ctx = new EntityTransferContext();
ctx.Unpack((OSDMap)args["context"]); if (args.TryGetValue("context", out tmpOSD) && tmpOSD is OSDMap)
ctx.Unpack((OSDMap)tmpOSD);
// Decode the new versioning data // Decode the new versioning data
float minVersionRequired = 0f; float minVersionRequired = 0f;
@ -168,15 +167,15 @@ namespace OpenSim.Server.Handlers.Simulation
float minVersionProvided = 0f; float minVersionProvided = 0f;
float maxVersionProvided = 0f; float maxVersionProvided = 0f;
if (args.ContainsKey("simulation_service_supported_min")) if (args.TryGetValue("simulation_service_supported_min", out tmpOSD))
minVersionProvided = (float)args["simulation_service_supported_min"].AsReal(); minVersionProvided = (float)tmpOSD.AsReal();
if (args.ContainsKey("simulation_service_supported_max")) if (args.TryGetValue("simulation_service_supported_max", out tmpOSD))
maxVersionProvided = (float)args["simulation_service_supported_max"].AsReal(); maxVersionProvided = (float)tmpOSD.AsReal();
if (args.ContainsKey("simulation_service_accepted_min")) if (args.TryGetValue("simulation_service_accepted_min", out tmpOSD))
minVersionRequired = (float)args["simulation_service_accepted_min"].AsReal(); minVersionRequired = (float)tmpOSD.AsReal();
if (args.ContainsKey("simulation_service_accepted_max")) if (args.TryGetValue("simulation_service_accepted_max", out tmpOSD))
maxVersionRequired = (float)args["simulation_service_accepted_max"].AsReal(); maxVersionRequired = (float)tmpOSD.AsReal();
responsedata["int_response_code"] = HttpStatusCode.OK; responsedata["int_response_code"] = HttpStatusCode.OK;
OSDMap resp = new OSDMap(3); OSDMap resp = new OSDMap(3);
@ -239,9 +238,9 @@ namespace OpenSim.Server.Handlers.Simulation
List<UUID> features = new List<UUID>(); List<UUID> features = new List<UUID>();
if (args.ContainsKey("features")) if (args.TryGetValue("features", out tmpOSD) && tmpOSD is OSDArray)
{ {
OSDArray array = (OSDArray)args["features"]; OSDArray array = (OSDArray)tmpOSD;
foreach (OSD o in array) foreach (OSD o in array)
features.Add(new UUID(o.AsString())); features.Add(new UUID(o.AsString()));
@ -414,8 +413,6 @@ namespace OpenSim.Server.Handlers.Simulation
protected void DoAgentPost(Hashtable request, Hashtable responsedata, UUID id) protected void DoAgentPost(Hashtable request, Hashtable responsedata, UUID id)
{ {
EntityTransferContext ctx = new EntityTransferContext();
OSDMap args = Utils.GetOSDMap((string)request["body"]); OSDMap args = Utils.GetOSDMap((string)request["body"]);
if (args == null) if (args == null)
{ {
@ -424,8 +421,10 @@ namespace OpenSim.Server.Handlers.Simulation
return; return;
} }
if (args.ContainsKey("context")) OSD tmpOSD;
ctx.Unpack((OSDMap)args["context"]); EntityTransferContext ctx = new EntityTransferContext();
if (args.TryGetValue("context", out tmpOSD) && tmpOSD is OSDMap)
ctx.Unpack((OSDMap)tmpOSD);
AgentDestinationData data = CreateAgentDestinationData(); AgentDestinationData data = CreateAgentDestinationData();
UnpackData(args, data, request); UnpackData(args, data, request);
@ -453,16 +452,19 @@ namespace OpenSim.Server.Handlers.Simulation
GridRegion source = null; GridRegion source = null;
if (args.ContainsKey("source_uuid")) if (args.TryGetValue("source_uuid", out tmpOSD))
{ {
source = new GridRegion(); source = new GridRegion();
source.RegionLocX = Int32.Parse(args["source_x"].AsString()); source.RegionID = UUID.Parse(tmpOSD.AsString());
source.RegionLocY = Int32.Parse(args["source_y"].AsString()); tmpOSD = args["source_x"];
source.RegionName = args["source_name"].AsString(); source.RegionLocX = Int32.Parse(tmpOSD.AsString());
source.RegionID = UUID.Parse(args["source_uuid"].AsString()); tmpOSD = args["source_y"];
source.RegionLocY = Int32.Parse(tmpOSD.AsString());
tmpOSD = args["source_name"];
source.RegionName = tmpOSD.AsString();
if (args.ContainsKey("source_server_uri")) if (args.TryGetValue("source_server_uri", out tmpOSD))
source.RawServerURI = args["source_server_uri"].AsString(); source.RawServerURI = tmpOSD.AsString();
else else
source.RawServerURI = null; source.RawServerURI = null;
} }
@ -493,21 +495,26 @@ namespace OpenSim.Server.Handlers.Simulation
protected virtual void UnpackData(OSDMap args, AgentDestinationData data, Hashtable request) protected virtual void UnpackData(OSDMap args, AgentDestinationData data, Hashtable request)
{ {
OSD tmpOSD;
// retrieve the input arguments // retrieve the input arguments
if (args.ContainsKey("destination_x") && args["destination_x"] != null) if (args.TryGetValue("destination_x", out tmpOSD) && tmpOSD != null)
Int32.TryParse(args["destination_x"].AsString(), out data.x); Int32.TryParse(tmpOSD.AsString(), out data.x);
else else
m_log.WarnFormat(" -- request didn't have destination_x"); m_log.WarnFormat(" -- request didn't have destination_x");
if (args.ContainsKey("destination_y") && args["destination_y"] != null)
Int32.TryParse(args["destination_y"].AsString(), out data.y); if (args.TryGetValue("destination_y", out tmpOSD) && tmpOSD != null)
Int32.TryParse(tmpOSD.AsString(), out data.y);
else else
m_log.WarnFormat(" -- request didn't have destination_y"); m_log.WarnFormat(" -- request didn't have destination_y");
if (args.ContainsKey("destination_uuid") && args["destination_uuid"] != null)
UUID.TryParse(args["destination_uuid"].AsString(), out data.uuid); if (args.TryGetValue("destination_uuid", out tmpOSD) && tmpOSD != null)
if (args.ContainsKey("destination_name") && args["destination_name"] != null) UUID.TryParse(tmpOSD.AsString(), out data.uuid);
data.name = args["destination_name"].ToString();
if (args.ContainsKey("teleport_flags") && args["teleport_flags"] != null) if (args.TryGetValue("destination_name", out tmpOSD) && tmpOSD != null)
data.flags = args["teleport_flags"].AsUInteger(); data.name = tmpOSD.ToString();
if (args.TryGetValue("teleport_flags", out tmpOSD) && tmpOSD != null)
data.flags = tmpOSD.AsUInteger();
} }
protected virtual GridRegion ExtractGatekeeper(AgentDestinationData data) protected virtual GridRegion ExtractGatekeeper(AgentDestinationData data)
@ -674,7 +681,6 @@ namespace OpenSim.Server.Handlers.Simulation
protected void DoAgentPut(Hashtable request, Hashtable responsedata) protected void DoAgentPut(Hashtable request, Hashtable responsedata)
{ {
// TODO: Encode the ENtityTransferContext // TODO: Encode the ENtityTransferContext
EntityTransferContext ctx = new EntityTransferContext();
OSDMap args = Utils.GetOSDMap((string)request["body"]); OSDMap args = Utils.GetOSDMap((string)request["body"]);
if (args == null) if (args == null)
@ -685,19 +691,21 @@ namespace OpenSim.Server.Handlers.Simulation
} }
// retrieve the input arguments // retrieve the input arguments
OSD tmpOSD;
EntityTransferContext ctx = new EntityTransferContext();
int x = 0, y = 0; int x = 0, y = 0;
UUID uuid = UUID.Zero; UUID uuid = UUID.Zero;
string regionname = string.Empty; string regionname = string.Empty;
if (args.ContainsKey("destination_x") && args["destination_x"] != null) if (args.TryGetValue("destination_x", out tmpOSD) && tmpOSD != null)
Int32.TryParse(args["destination_x"].AsString(), out x); Int32.TryParse(tmpOSD.AsString(), out x);
if (args.ContainsKey("destination_y") && args["destination_y"] != null) if (args.TryGetValue("destination_y", out tmpOSD) && tmpOSD != null)
Int32.TryParse(args["destination_y"].AsString(), out y); Int32.TryParse(tmpOSD.AsString(), out y);
if (args.ContainsKey("destination_uuid") && args["destination_uuid"] != null) if (args.TryGetValue("destination_uuid", out tmpOSD) && tmpOSD != null)
UUID.TryParse(args["destination_uuid"].AsString(), out uuid); UUID.TryParse(tmpOSD.AsString(), out uuid);
if (args.ContainsKey("destination_name") && args["destination_name"] != null) if (args.TryGetValue("destination_name", out tmpOSD) && tmpOSD != null)
regionname = args["destination_name"].ToString(); regionname = tmpOSD.ToString();
if (args.ContainsKey("context")) if (args.TryGetValue("context", out tmpOSD) && tmpOSD is OSDMap)
ctx.Unpack((OSDMap)args["context"]); ctx.Unpack((OSDMap)tmpOSD);
GridRegion destination = new GridRegion(); GridRegion destination = new GridRegion();
destination.RegionID = uuid; destination.RegionID = uuid;

View File

@ -112,7 +112,7 @@ namespace OpenSim.Services.Connectors.Simulation
m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: Creating agent at {0}", destination.ServerURI); m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: Creating agent at {0}", destination.ServerURI);
string uri = destination.ServerURI + AgentPath() + aCircuit.AgentID + "/"; string uri = destination.ServerURI + AgentPath() + aCircuit.AgentID + "/";
OSD tmpOSD;
try try
{ {
OSDMap args = aCircuit.PackAgentCircuitData(ctx); OSDMap args = aCircuit.PackAgentCircuitData(ctx);
@ -121,10 +121,9 @@ namespace OpenSim.Services.Connectors.Simulation
OSDMap result = WebUtil.PostToServiceCompressed(uri, args, 30000); OSDMap result = WebUtil.PostToServiceCompressed(uri, args, 30000);
bool success = result["success"].AsBoolean(); bool success = result["success"].AsBoolean();
if (success && result.ContainsKey("_Result")) if (success && result.TryGetValue("_Result", out tmpOSD) && tmpOSD is OSDMap)
{ {
OSDMap data = (OSDMap)result["_Result"]; OSDMap data = (OSDMap)tmpOSD;
reason = data["reason"].AsString(); reason = data["reason"].AsString();
success = data["success"].AsBoolean(); success = data["success"].AsBoolean();
return success; return success;
@ -133,14 +132,15 @@ namespace OpenSim.Services.Connectors.Simulation
// Try the old version, uncompressed // Try the old version, uncompressed
result = WebUtil.PostToService(uri, args, 30000, false); result = WebUtil.PostToService(uri, args, 30000, false);
if (result["Success"].AsBoolean()) success = result["success"].AsBoolean();
if (success)
{ {
if (result.ContainsKey("_Result")) if (result.TryGetValue("_Result", out tmpOSD) && tmpOSD is OSDMap)
{ {
OSDMap data = (OSDMap)result["_Result"]; OSDMap data = (OSDMap)tmpOSD;
reason = data["reason"].AsString(); reason = data["reason"].AsString();
success = data["success"].AsBoolean(); success = data["success"].AsBoolean();
m_log.WarnFormat( m_log.WarnFormat(
"[REMOTE SIMULATION CONNECTOR]: Remote simulator {0} did not accept compressed transfer, suggest updating it.", destination.RegionName); "[REMOTE SIMULATION CONNECTOR]: Remote simulator {0} did not accept compressed transfer, suggest updating it.", destination.RegionName);
return success; return success;
@ -312,34 +312,42 @@ namespace OpenSim.Services.Connectors.Simulation
if (agentHomeURI != null) if (agentHomeURI != null)
request.Add("agent_home_uri", OSD.FromString(agentHomeURI)); request.Add("agent_home_uri", OSD.FromString(agentHomeURI));
OSD tmpOSD;
try try
{ {
OSDMap result = WebUtil.ServiceOSDRequest(uri, request, "QUERYACCESS", 30000, false, false, true); OSDMap result = WebUtil.ServiceOSDRequest(uri, request, "QUERYACCESS", 30000, false, false, true);
bool success = result["success"].AsBoolean(); bool success = result["success"].AsBoolean();
if (result.ContainsKey("_Result"))
bool has_Result = false;
if (result.TryGetValue("_Result", out tmpOSD))
{ {
OSDMap data = (OSDMap)result["_Result"]; has_Result = true;
OSDMap data = (OSDMap)tmpOSD;
// FIXME: If there is a _Result map then it's the success key here that indicates the true success // FIXME: If there is a _Result map then it's the success key here that indicates the true success
// or failure, not the sibling result node. // or failure, not the sibling result node.
//nte4.8 crap
success = data["success"].AsBoolean(); success = data["success"].AsBoolean();
reason = data["reason"].AsString(); reason = data["reason"].AsString();
// We will need to plumb this and start sing the outbound version as well // We will need to plumb this and start sing the outbound version as well
// TODO: lay the pipe for version plumbing // TODO: lay the pipe for version plumbing
if (data.ContainsKey("negotiated_inbound_version") && data["negotiated_inbound_version"] != null) if (data.TryGetValue("negotiated_inbound_version", out tmpOSD) && tmpOSD != null)
{ {
ctx.InboundVersion = (float)data["negotiated_inbound_version"].AsReal(); ctx.InboundVersion = (float)tmpOSD.AsReal();
ctx.OutboundVersion = (float)data["negotiated_outbound_version"].AsReal(); ctx.OutboundVersion = (float)data["negotiated_outbound_version"].AsReal();
} }
else if (data["version"] != null && data["version"].AsString() != string.Empty) else if (data.TryGetValue("version", out tmpOSD) && tmpOSD != null)
{ {
string versionString = data["version"].AsString(); string versionString = tmpOSD.AsString();
String[] parts = versionString.Split(new char[] {'/'}); if(versionString != string.Empty)
if (parts.Length > 1)
{ {
ctx.InboundVersion = float.Parse(parts[1], Culture.FormatProvider); String[] parts = versionString.Split(new char[] {'/'});
ctx.OutboundVersion = float.Parse(parts[1], Culture.FormatProvider); if (parts.Length > 1)
{
ctx.InboundVersion = float.Parse(parts[1], Culture.FormatProvider);
ctx.OutboundVersion = float.Parse(parts[1], Culture.FormatProvider);
}
} }
} }
@ -352,11 +360,11 @@ namespace OpenSim.Services.Connectors.Simulation
{ {
// If we don't check this then OpenSimulator 0.7.3.1 and some period before will never see the // If we don't check this then OpenSimulator 0.7.3.1 and some period before will never see the
// actual failure message // actual failure message
if (!result.ContainsKey("_Result")) if (!has_Result)
{ {
if (result.ContainsKey("Message")) if (result.TryGetValue("Message", out tmpOSD))
{ {
string message = result["Message"].AsString(); string message = tmpOSD.AsString();
if (message == "Service request failed: [MethodNotAllowed] MethodNotAllowed") // Old style region if (message == "Service request failed: [MethodNotAllowed] MethodNotAllowed") // Old style region
{ {
m_log.Info("[REMOTE SIMULATION CONNECTOR]: The above web util error was caused by a TP to a sim that doesn't support QUERYACCESS and can be ignored"); m_log.Info("[REMOTE SIMULATION CONNECTOR]: The above web util error was caused by a TP to a sim that doesn't support QUERYACCESS and can be ignored");
@ -376,9 +384,9 @@ namespace OpenSim.Services.Connectors.Simulation
featuresAvailable.Clear(); featuresAvailable.Clear();
if (result.ContainsKey("features")) if (result.TryGetValue("features", out tmpOSD) && tmpOSD is OSDArray)
{ {
OSDArray array = (OSDArray)result["features"]; OSDArray array = (OSDArray)tmpOSD;
foreach (OSD o in array) foreach (OSD o in array)
featuresAvailable.Add(new UUID(o.AsString())); featuresAvailable.Add(new UUID(o.AsString()));

View File

@ -1051,7 +1051,7 @@ namespace OpenSim.Services.LLLoginService
} }
aCircuit.ServiceURLs[keyName] = keyValue; aCircuit.ServiceURLs[keyName] = keyValue;
m_log.DebugFormat("[LLLOGIN SERVICE]: found new key {0} {1}", keyName, aCircuit.ServiceURLs[keyName]); // m_log.DebugFormat("[LLLOGIN SERVICE]: found new key {0} {1}", keyName, aCircuit.ServiceURLs[keyName]);
} }
if (!account.ServiceURLs.ContainsKey("GatekeeperURI") && !string.IsNullOrEmpty(m_GatekeeperURL)) if (!account.ServiceURLs.ContainsKey("GatekeeperURI") && !string.IsNullOrEmpty(m_GatekeeperURL))

View File

@ -114,6 +114,7 @@ namespace OpenSim.Tests
IConfigSource argvSource = new IniConfigSource(); IConfigSource argvSource = new IniConfigSource();
EnvConfigSource envConfigSource = new EnvConfigSource(); EnvConfigSource envConfigSource = new EnvConfigSource();
argvSource.AddConfig("Startup").Set("inifile", mainIniFile); argvSource.AddConfig("Startup").Set("inifile", mainIniFile);
argvSource.AddConfig("Network");
ConfigSettings configSettings; ConfigSettings configSettings;
NetworkServersInfo networkInfo; NetworkServersInfo networkInfo;

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -771,6 +771,7 @@
Cap_ChatSessionRequest = "" Cap_ChatSessionRequest = ""
Cap_CopyInventoryFromNotecard = "localhost" Cap_CopyInventoryFromNotecard = "localhost"
Cap_DispatchRegionInfo = "" Cap_DispatchRegionInfo = ""
Cap_EstateAccess = "localhost"
Cap_EstateChangeInfo = "" Cap_EstateChangeInfo = ""
Cap_EnvironmentSettings = "localhost" Cap_EnvironmentSettings = "localhost"
Cap_EventQueueGet = "localhost" Cap_EventQueueGet = "localhost"

View File

@ -1,4 +1,4 @@
24121ec8-c0a3-099d-8d83-64feaa32418c d2556181-baf5-e5b9-c8ec-99eda597b9f6
<llsd><map><key>llsd-lsl-syntax-version</key><integer>2</integer> <llsd><map><key>llsd-lsl-syntax-version</key><integer>2</integer>
<key>controls</key> <key>controls</key>
<map> <map>
@ -1513,7 +1513,7 @@
</map> </map>
<key>OS_APIVERSION</key><map> <key>OS_APIVERSION</key><map>
<key>type</key><string>integer</string> <key>type</key><string>integer</string>
<key>value</key><string>4</string> <key>value</key><string>5</string>
</map> </map>
<key>OS_ATTACH_MSG_ALL</key><map> <key>OS_ATTACH_MSG_ALL</key><map>
<key>type</key><string>integer</string> <key>type</key><string>integer</string>
@ -1665,6 +1665,10 @@
<key>type</key><string>integer</string> <key>type</key><string>integer</string>
<key>value</key><string>1</string> <key>value</key><string>1</string>
</map> </map>
<key>PARCEL_DETAILS_DWELL</key><map>
<key>type</key><string>integer</string>
<key>value</key><string>64</string>
</map>
<key>PARCEL_DETAILS_GROUP</key><map> <key>PARCEL_DETAILS_GROUP</key><map>
<key>type</key><string>integer</string> <key>type</key><string>integer</string>
<key>value</key><string>3</string> <key>value</key><string>3</string>
@ -3017,6 +3021,10 @@
<key>type</key><string>integer</string> <key>type</key><string>integer</string>
<key>value</key><string>1</string> <key>value</key><string>1</string>
</map> </map>
<key>VEHICLE_FLAG_NO_FLY_UP</key><map>
<key>type</key><string>integer</string>
<key>value</key><string>1</string>
</map>
<key>VEHICLE_FLAG_NO_X</key><map> <key>VEHICLE_FLAG_NO_X</key><map>
<key>type</key><string>integer</string> <key>type</key><string>integer</string>
<key>value</key><string>1024</string> <key>value</key><string>1024</string>
@ -6665,6 +6673,13 @@
<map><key>name</key><map><key>type</key><string>string</string></map></map> <map><key>name</key><map><key>type</key><string>string</string></map></map>
</array> </array>
</map> </map>
<key>osGetParcelDwell</key>
<map>
<key>return</key><string>integer</string>
<key>arguments</key><array>
<map><key>pos</key><map><key>type</key><string>vector</string></map></map>
</array>
</map>
<key>osGetPhysicsEngineName</key> <key>osGetPhysicsEngineName</key>
<map> <map>
<key>return</key><string>string</string> <key>return</key><string>string</string>
@ -7581,7 +7596,6 @@
<key>arguments</key><array> <key>arguments</key><array>
<map><key>src</key><map><key>type</key><string>string</string></map></map> <map><key>src</key><map><key>type</key><string>string</string></map></map>
<map><key>start</key><map><key>type</key><string>integer</string></map></map> <map><key>start</key><map><key>type</key><string>integer</string></map></map>
<map><key>length</key><map><key>type</key><string>integer</string></map></map>
</array> </array>
</map> </map>
<key>osStringSubString</key> <key>osStringSubString</key>
@ -7590,6 +7604,7 @@
<key>arguments</key><array> <key>arguments</key><array>
<map><key>src</key><map><key>type</key><string>string</string></map></map> <map><key>src</key><map><key>type</key><string>string</string></map></map>
<map><key>start</key><map><key>type</key><string>integer</string></map></map> <map><key>start</key><map><key>type</key><string>integer</string></map></map>
<map><key>length</key><map><key>type</key><string>integer</string></map></map>
</array> </array>
</map> </map>
<key>osSunGetParam</key> <key>osSunGetParam</key>
@ -7619,6 +7634,8 @@
<map> <map>
<key>arguments</key><array> <key>arguments</key><array>
<map><key>agent</key><map><key>type</key><string>string</string></map></map> <map><key>agent</key><map><key>type</key><string>string</string></map></map>
<map><key>regionX</key><map><key>type</key><string>integer</string></map></map>
<map><key>regionY</key><map><key>type</key><string>integer</string></map></map>
<map><key>position</key><map><key>type</key><string>vector</string></map></map> <map><key>position</key><map><key>type</key><string>vector</string></map></map>
<map><key>lookat</key><map><key>type</key><string>vector</string></map></map> <map><key>lookat</key><map><key>type</key><string>vector</string></map></map>
</array> </array>
@ -7627,8 +7644,6 @@
<map> <map>
<key>arguments</key><array> <key>arguments</key><array>
<map><key>agent</key><map><key>type</key><string>string</string></map></map> <map><key>agent</key><map><key>type</key><string>string</string></map></map>
<map><key>regionX</key><map><key>type</key><string>integer</string></map></map>
<map><key>regionY</key><map><key>type</key><string>integer</string></map></map>
<map><key>position</key><map><key>type</key><string>vector</string></map></map> <map><key>position</key><map><key>type</key><string>vector</string></map></map>
<map><key>lookat</key><map><key>type</key><string>vector</string></map></map> <map><key>lookat</key><map><key>type</key><string>vector</string></map></map>
</array> </array>