diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index 7b1aa2cf90..1e22fcc395 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -903,47 +903,64 @@ namespace OpenSim.Region.ClientStack.LindenUDP
private void HandleUseCircuitCode(object o)
{
-// DateTime startTime = DateTime.Now;
- object[] array = (object[])o;
- UDPPacketBuffer buffer = (UDPPacketBuffer)array[0];
- UseCircuitCodePacket uccp = (UseCircuitCodePacket)array[1];
+ IPEndPoint remoteEndPoint = null;
+ IClientAPI client = null;
+
+ try
+ {
+ // DateTime startTime = DateTime.Now;
+ object[] array = (object[])o;
+ UDPPacketBuffer buffer = (UDPPacketBuffer)array[0];
+ UseCircuitCodePacket uccp = (UseCircuitCodePacket)array[1];
+
+ m_log.DebugFormat("[LLUDPSERVER]: Handling UseCircuitCode request from {0}", buffer.RemoteEndPoint);
+
+ remoteEndPoint = (IPEndPoint)buffer.RemoteEndPoint;
+
+ AuthenticateResponse sessionInfo;
+ if (IsClientAuthorized(uccp, out sessionInfo))
+ {
+ // Begin the process of adding the client to the simulator
+ client
+ = AddClient(
+ uccp.CircuitCode.Code,
+ uccp.CircuitCode.ID,
+ uccp.CircuitCode.SessionID,
+ remoteEndPoint,
+ sessionInfo);
- m_log.DebugFormat("[LLUDPSERVER]: Handling UseCircuitCode request from {0}", buffer.RemoteEndPoint);
+ // Send ack straight away to let the viewer know that the connection is active.
+ // The client will be null if it already exists (e.g. if on a region crossing the client sends a use
+ // circuit code to the existing child agent. This is not particularly obvious.
+ SendAckImmediate(remoteEndPoint, uccp.Header.Sequence);
+
+ // We only want to send initial data to new clients, not ones which are being converted from child to root.
+ if (client != null)
+ client.SceneAgent.SendInitialDataToMe();
+ }
+ else
+ {
+ // Don't create clients for unauthorized requesters.
+ m_log.WarnFormat(
+ "[LLUDPSERVER]: Connection request for client {0} connecting with unnotified circuit code {1} from {2}",
+ uccp.CircuitCode.ID, uccp.CircuitCode.Code, remoteEndPoint);
+ }
+
+ // m_log.DebugFormat(
+ // "[LLUDPSERVER]: Handling UseCircuitCode request from {0} took {1}ms",
+ // buffer.RemoteEndPoint, (DateTime.Now - startTime).Milliseconds);
- IPEndPoint remoteEndPoint = (IPEndPoint)buffer.RemoteEndPoint;
-
- AuthenticateResponse sessionInfo;
- if (IsClientAuthorized(uccp, out sessionInfo))
- {
- // Begin the process of adding the client to the simulator
- IClientAPI client
- = AddClient(
- uccp.CircuitCode.Code,
- uccp.CircuitCode.ID,
- uccp.CircuitCode.SessionID,
- remoteEndPoint,
- sessionInfo);
-
- // Send ack straight away to let the viewer know that the connection is active.
- // The client will be null if it already exists (e.g. if on a region crossing the client sends a use
- // circuit code to the existing child agent. This is not particularly obvious.
- SendAckImmediate(remoteEndPoint, uccp.Header.Sequence);
-
- // We only want to send initial data to new clients, not ones which are being converted from child to root.
- if (client != null)
- client.SceneAgent.SendInitialDataToMe();
}
- else
+ catch (Exception e)
{
- // Don't create clients for unauthorized requesters.
- m_log.WarnFormat(
- "[LLUDPSERVER]: Connection request for client {0} connecting with unnotified circuit code {1} from {2}",
- uccp.CircuitCode.ID, uccp.CircuitCode.Code, remoteEndPoint);
+ m_log.ErrorFormat(
+ "[LLUDPSERVER]: UseCircuitCode handling from endpoint {0}, client {1} {2} failed. Exception {3}{4}",
+ remoteEndPoint != null ? remoteEndPoint.ToString() : "n/a",
+ client != null ? client.Name : "unknown",
+ client != null ? client.AgentId.ToString() : "unknown",
+ e.Message,
+ e.StackTrace);
}
-
- // m_log.DebugFormat(
-// "[LLUDPSERVER]: Handling UseCircuitCode request from {0} took {1}ms",
-// buffer.RemoteEndPoint, (DateTime.Now - startTime).Milliseconds);
}
///
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index 63ba3d39b8..d320af4b81 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -551,9 +551,14 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
// "[INVENTORY ACCESS MODULE]: Target of {0} in CreateItemForObject() is {1} {2}",
// action, remoteClient.Name, userID);
}
+ else if (so.RootPart.OwnerID == so.RootPart.GroupID)
+ {
+ // Group owned objects go to the last owner before the object was transferred.
+ userID = so.RootPart.LastOwnerID;
+ }
else
{
- // All returns / deletes go to the object owner
+ // Other returns / deletes go to the object owner
//
userID = so.RootPart.OwnerID;
diff --git a/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs b/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs
index d5b585a716..d1d2020587 100644
--- a/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs
+++ b/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs
@@ -148,6 +148,113 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
";
+ private string badFloatsXml = @"
+
+
+
+ false
+ a6dacf01-4636-4bb9-8a97-30609438af9d
+ e6a5a05e-e8cc-4816-8701-04165e335790
+ 1
+
+ 0
+ e6a5a05e-e8cc-4816-8701-04165e335790
+ 2698615125
+ NaughtyPrim
+ 0
+ false
+ 1099511628032000
+ 0
+ 147.2392.69822.78084
+ 000
+ -4.371139E-08-1-4.371139E-080
+ 000
+ 000
+ 000
+ 000
+
+
+
+
+
+ 0
+ 0
+
+ 1
+ AAAAAAAAERGZmQAAAAAABQCVlZUAAAAAQEAAAABAQAAAAAAAAAAAAAAAAAAAAA==
+ AA==
+ 0
+ 16
+ 0
+ 0
+ 0
+ 100
+ 100
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 9
+ 0
+ 0
+ 0
+ 10100.5
+ 0
+ Square
+ Same
+ 00000000-0000-0000-0000-000000000000
+ 0
+ 0
+ 0,5
+ yo mamma
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 1
+ false
+ false
+ false
+
+ 10100.5
+ 0
+ 0001
+ 000
+ 000
+ 0001
+ 0
+ 1211330445
+ 0
+ 0
+ 0
+ 0
+ 00000000-0000-0000-0000-000000000000
+ a6dacf01-4636-4bb9-8a97-30609438af9d
+ a6dacf01-4636-4bb9-8a97-30609438af9d
+ 2147483647
+ 2147483647
+ 0
+ 0
+ 2147483647
+ None
+ 00000000-0000-0000-0000-000000000000
+ 0
+
+
+
+ ";
+
private string xml2 = @"
@@ -256,6 +363,32 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
// TODO: Check other properties
}
+ [Test]
+ public void TestDeserializeBadFloatsXml()
+ {
+ TestHelpers.InMethod();
+// log4net.Config.XmlConfigurator.Configure();
+
+ SceneObjectGroup so = SceneObjectSerializer.FromOriginalXmlFormat(badFloatsXml);
+ SceneObjectPart rootPart = so.RootPart;
+
+ Assert.That(rootPart.UUID, Is.EqualTo(new UUID("e6a5a05e-e8cc-4816-8701-04165e335790")));
+ Assert.That(rootPart.CreatorID, Is.EqualTo(new UUID("a6dacf01-4636-4bb9-8a97-30609438af9d")));
+ Assert.That(rootPart.Name, Is.EqualTo("NaughtyPrim"));
+
+ // This terminates the deserialization earlier if couldn't be parsed.
+ // TODO: Need to address this
+ Assert.That(rootPart.GroupPosition.X, Is.EqualTo(147.23f));
+
+ Assert.That(rootPart.Shape.PathCurve, Is.EqualTo(16));
+
+ // Defaults for bad parses
+ Assert.That(rootPart.Shape.FlexiTension, Is.EqualTo(0));
+ Assert.That(rootPart.Shape.FlexiDrag, Is.EqualTo(0));
+
+ // TODO: Check other properties
+ }
+
[Test]
public void TestSerializeXml()
{
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 5a5307c471..9d9729e88e 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -1926,7 +1926,7 @@ namespace OpenSim.Region.Framework.Scenes
foreach (SceneObjectGroup g in deleteGroups)
{
- AddReturn(g.OwnerID, g.Name, g.AbsolutePosition, "parcel owner return");
+ AddReturn(g.OwnerID == g.GroupID ? g.LastOwnerID : g.OwnerID, g.Name, g.AbsolutePosition, "parcel owner return");
}
}
}
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 5b838f8377..878476e5c9 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -1330,7 +1330,7 @@ namespace OpenSim.Region.Framework.Scenes
m_log.DebugFormat(
"[SCENE OBJECT GROUP]: Returning object {0} due to parcel autoreturn",
RootPart.UUID);
- m_scene.AddReturn(OwnerID, Name, AbsolutePosition, "parcel autoreturn");
+ m_scene.AddReturn(OwnerID == GroupID ? LastOwnerID : OwnerID, Name, AbsolutePosition, "parcel autoreturn");
m_scene.DeRezObjects(null, new List() { RootPart.LocalId }, UUID.Zero,
DeRezAction.Return, UUID.Zero);
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
index 0a32214661..e6b88a35c5 100644
--- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
+++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
@@ -29,6 +29,7 @@ using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
+using System.Linq;
using System.Reflection;
using System.Xml;
using log4net;
@@ -570,13 +571,15 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
private static void ProcessShape(SceneObjectPart obj, XmlTextReader reader)
{
- bool errors = false;
- obj.Shape = ReadShape(reader, "Shape", out errors);
+ List errorNodeNames;
+ obj.Shape = ReadShape(reader, "Shape", out errorNodeNames);
- if (errors)
+ if (errorNodeNames != null)
+ {
m_log.DebugFormat(
- "[SceneObjectSerializer]: Parsing PrimitiveBaseShape for object part {0} {1} encountered errors. Please see earlier log entries.",
- obj.Name, obj.UUID);
+ "[SceneObjectSerializer]: Parsing PrimitiveBaseShape for object part {0} {1} encountered errors in properties {2}.",
+ obj.Name, obj.UUID, string.Join(", ", errorNodeNames.ToArray()));
+ }
}
private static void ProcessScale(SceneObjectPart obj, XmlTextReader reader)
@@ -1519,37 +1522,44 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
///
///
/// The name of the xml element containing the shape
- /// true if any errors were encountered during parsing, false otherwise
+ /// a list containing the failing node names. If no failures then null.
/// The shape parsed
- public static PrimitiveBaseShape ReadShape(XmlTextReader reader, string name, out bool errors)
+ public static PrimitiveBaseShape ReadShape(XmlTextReader reader, string name, out List errorNodeNames)
{
- errors = false;
+ List internalErrorNodeNames = null;
PrimitiveBaseShape shape = new PrimitiveBaseShape();
if (reader.IsEmptyElement)
{
reader.Read();
+ errorNodeNames = null;
return shape;
}
reader.ReadStartElement(name, String.Empty); // Shape
- errors = ExternalRepresentationUtils.ExecuteReadProcessors(
+ ExternalRepresentationUtils.ExecuteReadProcessors(
shape,
m_ShapeXmlProcessors,
reader,
(o, nodeName, e)
=>
{
- m_log.DebugFormat(
- "[SceneObjectSerializer]: Exception while parsing Shape property {0}: {1}{2}",
- nodeName, e.Message, e.StackTrace);
+// m_log.DebugFormat(
+// "[SceneObjectSerializer]: Exception while parsing Shape property {0}: {1}{2}",
+// nodeName, e.Message, e.StackTrace);
+ if (internalErrorNodeNames == null)
+ internalErrorNodeNames = new List();
+
+ internalErrorNodeNames.Add(nodeName);
}
);
reader.ReadEndElement(); // Shape
+ errorNodeNames = internalErrorNodeNames;
+
return shape;
}
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
index 53593545ef..2052cdb6f4 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
@@ -121,8 +121,8 @@ namespace OpenSim.Region.OptionalModules.World.NPC
npcAvatar.CircuitCode = (uint)Util.RandomClass.Next(0, int.MaxValue);
m_log.DebugFormat(
- "[NPC MODULE]: Creating NPC {0} {1} {2} at {3} in {4}",
- firstname, lastname, npcAvatar.AgentId, position, scene.RegionInfo.RegionName);
+ "[NPC MODULE]: Creating NPC {0} {1} {2}, owner={3}, senseAsAgent={4} at {5} in {6}",
+ firstname, lastname, npcAvatar.AgentId, owner, senseAsAgent, position, scene.RegionInfo.RegionName);
AgentCircuitData acd = new AgentCircuitData();
acd.AgentID = npcAvatar.AgentId;
diff --git a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
index f15e81ba8e..6f6ed7f1fc 100644
--- a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
+++ b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
@@ -313,7 +313,7 @@ namespace OpenSim.Region.Physics.Meshing
private bool GenerateCoordsAndFacesFromPrimMeshData(
string primName, PrimitiveBaseShape primShape, Vector3 size, out List coords, out List faces)
{
- m_log.DebugFormat("[MESH]: experimental mesh proxy generation for {0}", primName);
+// m_log.DebugFormat("[MESH]: experimental mesh proxy generation for {0}", primName);
coords = new List();
faces = new List();
@@ -321,7 +321,7 @@ namespace OpenSim.Region.Physics.Meshing
if (primShape.SculptData.Length <= 0)
{
- m_log.Error("[MESH]: asset data is zero length");
+ m_log.ErrorFormat("[MESH]: asset data for {0} is zero length", primName);
return false;
}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index b1583ebb1e..646a97b44b 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -2233,7 +2233,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
CheckThreatLevel(ThreatLevel.High, "osNpcCreate");
m_host.AddScriptLPS(1);
- return NpcCreate(firstname, lastname, position, notecard, false, true);
+ return NpcCreate(firstname, lastname, position, notecard, false, false);
}
public LSL_Key osNpcCreate(string firstname, string lastname, LSL_Vector position, string notecard, int options)
@@ -2244,7 +2244,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return NpcCreate(
firstname, lastname, position, notecard,
(options & ScriptBaseClass.OS_NPC_NOT_OWNED) == 0,
- (options & ScriptBaseClass.OS_NPC_SENSE_AS_AGENT) == 0);
+ (options & ScriptBaseClass.OS_NPC_SENSE_AS_AGENT) != 0);
}
private LSL_Key NpcCreate(
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
index 850f50b13d..5c1bdff9db 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
@@ -31,7 +31,6 @@ using System.Collections.Generic;
using OpenMetaverse;
using OpenSim.Framework;
using log4net;
-
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
using OpenSim.Region.ScriptEngine.Shared;
@@ -41,6 +40,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
{
public class SensorRepeat
{
+// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+
public AsyncCommandManager m_CmdManager;
public SensorRepeat(AsyncCommandManager CmdManager)
@@ -447,11 +448,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
Action senseEntity = new Action(presence =>
{
+// m_log.DebugFormat(
+// "[SENSOR REPEAT]: Inspecting scene presence {0}, type {1} on sensor sweep for {2}, type {3}",
+// presence.Name, presence.PresenceType, ts.name, ts.type);
+
if ((ts.type & NPC) == 0 && presence.PresenceType == PresenceType.Npc)
{
INPC npcData = npcModule.GetNPC(presence.UUID, presence.Scene);
if (npcData == null || !npcData.SenseAsAgent)
+ {
+// m_log.DebugFormat(
+// "[SENSOR REPEAT]: Discarding NPC {0} from agent sense sweep for script item id {1}",
+// presence.Name, ts.itemID);
return;
+ }
}
if ((ts.type & AGENT) == 0)
@@ -464,7 +474,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
{
INPC npcData = npcModule.GetNPC(presence.UUID, presence.Scene);
if (npcData != null && npcData.SenseAsAgent)
+ {
+// m_log.DebugFormat(
+// "[SENSOR REPEAT]: Discarding NPC {0} from non-agent sense sweep for script item id {1}",
+// presence.Name, ts.itemID);
return;
+ }
}
}
diff --git a/OpenSim/Services/Connectors/Friends/FriendsServiceConnector.cs b/OpenSim/Services/Connectors/Friends/FriendsServiceConnector.cs
index 44138c9fd1..b1dd84e887 100644
--- a/OpenSim/Services/Connectors/Friends/FriendsServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Friends/FriendsServiceConnector.cs
@@ -220,7 +220,7 @@ namespace OpenSim.Services.Connectors.Friends
public bool Delete(Dictionary sendData, string PrincipalID, string Friend)
{
string reply = string.Empty;
- string uri = m_ServerURI = "/friends";
+ string uri = m_ServerURI + "/friends";
try
{
reply = SynchronousRestFormsRequester.MakeRequest("POST", uri, ServerUtils.BuildQueryString(sendData));