diff --git a/OpenSim/Capabilities/Caps.cs b/OpenSim/Capabilities/Caps.cs
index bc6f6f99a9..241fef3866 100644
--- a/OpenSim/Capabilities/Caps.cs
+++ b/OpenSim/Capabilities/Caps.cs
@@ -30,6 +30,7 @@ using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
+using System.Threading;
using log4net;
using Nini.Config;
using OpenMetaverse;
@@ -68,6 +69,7 @@ namespace OpenSim.Framework.Capabilities
private IHttpServer m_httpListener;
private UUID m_agentID;
private string m_regionName;
+ private ManualResetEvent m_capsActive = new ManualResetEvent(false);
public UUID AgentID
{
@@ -171,5 +173,16 @@ namespace OpenSim.Framework.Capabilities
}
}
}
+
+ public void Activate()
+ {
+ m_capsActive.Set();
+ }
+
+ public bool WaitForActivation()
+ {
+ // Wait for 30s. If that elapses, return false and run without caps
+ return m_capsActive.WaitOne(30000);
+ }
}
}
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
index 9b945f48d3..eadca9b5a2 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
@@ -342,6 +342,9 @@ namespace OpenSim.Region.ClientStack.Linden
m_log.DebugFormat(
"[CAPS]: Received SEED caps request in {0} for agent {1}", m_regionName, m_HostCapsObj.AgentID);
+ if (!m_HostCapsObj.WaitForActivation())
+ return string.Empty;
+
if (!m_Scene.CheckClient(m_HostCapsObj.AgentID, httpRequest.RemoteIPEndPoint))
{
m_log.WarnFormat(
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
index 986a665dad..f6e501de11 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
@@ -467,8 +467,8 @@ namespace OpenSim.Region.ClientStack.Linden
responsedata["content_type"] = "text/plain";
responsedata["keepalive"] = false;
responsedata["reusecontext"] = false;
- responsedata["str_response_string"] = "Upstream error: ";
- responsedata["error_status_text"] = "Upstream error:";
+ responsedata["str_response_string"] = "";
+ responsedata["error_status_text"] = "";
responsedata["http_protocol_version"] = "HTTP/1.0";
return responsedata;
}
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs
index a823dd81aa..707cc93472 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs
@@ -211,6 +211,10 @@ namespace OpenSim.Region.ClientStack.Linden
m_log.Error("Request: " + request);
return;
}
+ catch (System.Xml.XmlException)
+ {
+ m_log.ErrorFormat("[INVENTORY]: XML Format error");
+ }
ArrayList foldersrequested = (ArrayList)hash["folders"];
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index cc4d01412b..9c26afe72a 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -3901,6 +3901,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP
part.Shape.ProfileHollow = 27500;
}
}
+
+ if (part.Shape != null && (part.Shape.SculptType == (byte)SculptType.Mesh))
+ {
+ // Ensure that mesh has at least 8 valid faces
+ part.Shape.ProfileBegin = 12500;
+ part.Shape.ProfileEnd = 0;
+ part.Shape.ProfileHollow = 27500;
+ }
}
++updatesThisCall;
@@ -4960,6 +4968,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
position = part.OffsetPosition + presence.OffsetPosition * part.RotationOffset;
rotation = part.RotationOffset * presence.Rotation;
}
+ angularVelocity = Vector3.Zero;
+ }
+ else
+ {
+ angularVelocity = presence.AngularVelocity;
+ rotation = presence.Rotation;
}
attachPoint = 0;
@@ -4972,9 +4986,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// may improve movement smoothness.
// acceleration = new Vector3(1, 0, 0);
- angularVelocity = presence.AngularVelocity;
- rotation = presence.Rotation;
-
if (sendTexture)
textureEntry = presence.Appearance.Texture.GetBytes();
else
diff --git a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetXferUploader.cs b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetXferUploader.cs
index 43b8b4462f..e13f479a96 100644
--- a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetXferUploader.cs
+++ b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetXferUploader.cs
@@ -260,10 +260,10 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction
{
CompleteTaskItemUpdate(m_updateTaskItemData);
}
-// else if (m_storeLocal)
-// {
-// m_Scene.AssetService.Store(m_asset);
-// }
+ else if (m_asset.Local)
+ {
+ m_Scene.AssetService.Store(m_asset);
+ }
}
m_log.DebugFormat(
@@ -391,6 +391,11 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction
// m_asset.FullID, item.Name, ourClient.Name);
m_Scene.AssetService.Store(m_asset);
+ if (m_asset.FullID != UUID.Zero)
+ {
+ item.AssetID = m_asset.FullID;
+ m_Scene.InventoryService.UpdateItem(item);
+ }
m_transactions.RemoveXferUploader(m_transactionID);
}
diff --git a/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs b/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs
index 7f30e5a35a..2eb9bfb7c1 100644
--- a/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs
@@ -55,7 +55,7 @@ namespace OpenSim.Region.CoreModules.Framework
///
/// Each agent has its own capabilities handler.
///
- protected Dictionary m_capsObjects = new Dictionary();
+ protected Dictionary m_capsObjects = new Dictionary();
protected Dictionary capsPaths = new Dictionary();
protected Dictionary> childrenSeeds
@@ -100,7 +100,7 @@ namespace OpenSim.Region.CoreModules.Framework
get { return null; }
}
- public void CreateCaps(UUID agentId)
+ public void CreateCaps(UUID agentId, uint circuitCode)
{
int flags = m_scene.GetUserFlags(agentId);
if (m_scene.RegionInfo.EstateSettings.IsBanned(agentId, flags))
@@ -108,9 +108,9 @@ namespace OpenSim.Region.CoreModules.Framework
String capsObjectPath = GetCapsPath(agentId);
- if (m_capsObjects.ContainsKey(agentId))
+ if (m_capsObjects.ContainsKey(circuitCode))
{
- Caps oldCaps = m_capsObjects[agentId];
+ Caps oldCaps = m_capsObjects[circuitCode];
m_log.DebugFormat(
"[CAPS]: Recreating caps for agent {0}. Old caps path {1}, new caps path {2}. ",
@@ -125,12 +125,12 @@ namespace OpenSim.Region.CoreModules.Framework
(MainServer.Instance == null) ? 0: MainServer.Instance.Port,
capsObjectPath, agentId, m_scene.RegionInfo.RegionName);
- m_capsObjects[agentId] = caps;
+ m_capsObjects[circuitCode] = caps;
m_scene.EventManager.TriggerOnRegisterCaps(agentId, caps);
}
- public void RemoveCaps(UUID agentId)
+ public void RemoveCaps(UUID agentId, uint circuitCode)
{
if (childrenSeeds.ContainsKey(agentId))
{
@@ -139,11 +139,11 @@ namespace OpenSim.Region.CoreModules.Framework
lock (m_capsObjects)
{
- if (m_capsObjects.ContainsKey(agentId))
+ if (m_capsObjects.ContainsKey(circuitCode))
{
- m_capsObjects[agentId].DeregisterHandlers();
- m_scene.EventManager.TriggerOnDeregisterCaps(agentId, m_capsObjects[agentId]);
- m_capsObjects.Remove(agentId);
+ m_capsObjects[circuitCode].DeregisterHandlers();
+ m_scene.EventManager.TriggerOnDeregisterCaps(agentId, m_capsObjects[circuitCode]);
+ m_capsObjects.Remove(circuitCode);
}
else
{
@@ -154,19 +154,30 @@ namespace OpenSim.Region.CoreModules.Framework
}
}
- public Caps GetCapsForUser(UUID agentId)
+ public Caps GetCapsForUser(uint circuitCode)
{
lock (m_capsObjects)
{
- if (m_capsObjects.ContainsKey(agentId))
+ if (m_capsObjects.ContainsKey(circuitCode))
{
- return m_capsObjects[agentId];
+ return m_capsObjects[circuitCode];
}
}
return null;
}
+ public void ActivateCaps(uint circuitCode)
+ {
+ lock (m_capsObjects)
+ {
+ if (m_capsObjects.ContainsKey(circuitCode))
+ {
+ m_capsObjects[circuitCode].Activate();
+ }
+ }
+ }
+
public void SetAgentCapsSeeds(AgentCircuitData agent)
{
capsPaths[agent.AgentID] = agent.CapsPath;
@@ -237,9 +248,9 @@ namespace OpenSim.Region.CoreModules.Framework
StringBuilder caps = new StringBuilder();
caps.AppendFormat("Region {0}:\n", m_scene.RegionInfo.RegionName);
- foreach (KeyValuePair kvp in m_capsObjects)
+ foreach (KeyValuePair kvp in m_capsObjects)
{
- caps.AppendFormat("** User {0}:\n", kvp.Key);
+ caps.AppendFormat("** Circuit {0}:\n", kvp.Key);
for (IDictionaryEnumerator kvp2 = kvp.Value.CapsHandlers.GetCapsDetails(false).GetEnumerator(); kvp2.MoveNext(); )
{
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 6cfd3324b9..f1de415301 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -150,7 +150,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
{
client.OnTeleportHomeRequest += TriggerTeleportHome;
client.OnTeleportLandmarkRequest += RequestTeleportLandmark;
- client.OnTeleportCancel += TeleportCancel;
}
public virtual void Close() {}
@@ -1020,11 +1019,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
return neighbourRegion;
}
- private void TeleportCancel(IClientAPI remoteClient)
- {
- m_entityTransferStateMachine.ResetFromTransit(remoteClient.AgentId);
- }
-
public bool Cross(ScenePresence agent, bool isFlying)
{
uint x;
diff --git a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs
index ffb8e85102..f2922d6792 100644
--- a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs
+++ b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs
@@ -50,6 +50,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
public string url;
public UUID urlcode;
public Dictionary requests;
+ public bool isSsl;
}
public class RequestData
@@ -195,6 +196,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
urlData.engine = engine;
urlData.url = url;
urlData.urlcode = urlcode;
+ urlData.isSsl = false;
urlData.requests = new Dictionary();
m_UrlMap[url] = urlData;
@@ -240,6 +242,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
urlData.engine = engine;
urlData.url = url;
urlData.urlcode = urlcode;
+ urlData.isSsl = true;
urlData.requests = new Dictionary();
@@ -421,7 +424,10 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
private void RemoveUrl(UrlData data)
{
- m_HttpServer.RemoveHTTPHandler("", "/lslhttp/"+data.urlcode.ToString()+"/");
+ if (data.isSsl)
+ m_HttpsServer.RemoveHTTPHandler("", "/lslhttps/"+data.urlcode.ToString()+"/");
+ else
+ m_HttpServer.RemoveHTTPHandler("", "/lslhttp/"+data.urlcode.ToString()+"/");
}
private Hashtable NoEvents(UUID requestID, UUID sessionID)
diff --git a/OpenSim/Region/Framework/Interfaces/ICapabilitiesModule.cs b/OpenSim/Region/Framework/Interfaces/ICapabilitiesModule.cs
index 522c82d40f..30d404e020 100644
--- a/OpenSim/Region/Framework/Interfaces/ICapabilitiesModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/ICapabilitiesModule.cs
@@ -40,19 +40,19 @@ namespace OpenSim.Region.Framework.Interfaces
///
///
///
- void CreateCaps(UUID agentId);
+ void CreateCaps(UUID agentId, uint circuitCode);
///
/// Remove the caps handler for a given agent.
///
///
- void RemoveCaps(UUID agentId);
+ void RemoveCaps(UUID agentId, uint circuitCode);
///
/// Will return null if the agent doesn't have a caps handler registered
///
///
- Caps GetCapsForUser(UUID agentId);
+ Caps GetCapsForUser(uint circuitCode);
void SetAgentCapsSeeds(AgentCircuitData agent);
@@ -65,5 +65,7 @@ namespace OpenSim.Region.Framework.Interfaces
void DropChildSeed(UUID agentID, ulong handle);
string GetCapsPath(UUID agentId);
+
+ void ActivateCaps(uint circuitCode);
}
}
diff --git a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
index 6dc6504cea..b102e48861 100644
--- a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
+++ b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
@@ -276,6 +276,7 @@ namespace OpenSim.Region.Framework.Scenes
}
newMotion.m_timerStopped = false;
+ newMotion.m_running = true;
newMotion.m_isCrossing = false;
newMotion.m_waitingCrossing = false;
}
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index a229a9afbb..b03fee075a 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2758,8 +2758,6 @@ namespace OpenSim.Region.Framework.Scenes
if (newPosition != Vector3.Zero)
newObject.RootPart.GroupPosition = newPosition;
- if (newObject.RootPart.KeyframeMotion != null)
- newObject.RootPart.KeyframeMotion.UpdateSceneObject(newObject);
if (!AddSceneObject(newObject))
{
@@ -2787,6 +2785,9 @@ namespace OpenSim.Region.Framework.Scenes
// before we restart the scripts, or else some functions won't work.
newObject.RootPart.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, GetStateSource(newObject));
newObject.ResumeScripts();
+
+ if (newObject.RootPart.KeyframeMotion != null)
+ newObject.RootPart.KeyframeMotion.UpdateSceneObject(newObject);
}
// Do this as late as possible so that listeners have full access to the incoming object
@@ -3611,7 +3612,7 @@ namespace OpenSim.Region.Framework.Scenes
// TODO: We shouldn't use closeChildAgents here - it's being used by the NPC module to stop
// unnecessary operations. This should go away once NPCs have no accompanying IClientAPI
if (closeChildAgents && CapsModule != null)
- CapsModule.RemoveCaps(agentID);
+ CapsModule.RemoveCaps(agentID, avatar.ControllingClient.CircuitCode);
// // REFACTORING PROBLEM -- well not really a problem, but just to point out that whatever
// // this method is doing is HORRIBLE!!!
@@ -3842,20 +3843,36 @@ namespace OpenSim.Region.Framework.Scenes
return false;
}
-
ScenePresence sp = GetScenePresence(agent.AgentID);
- if (sp != null && !sp.IsChildAgent)
+ // If we have noo presence here or if that presence is a zombie root
+ // presence that will be kicled, we need a new CAPS object.
+ if (sp == null || (sp != null && !sp.IsChildAgent))
{
- // We have a zombie from a crashed session.
- // Or the same user is trying to be root twice here, won't work.
- // Kill it.
- m_log.WarnFormat(
- "[SCENE]: Existing root scene presence detected for {0} {1} in {2} when connecting. Removing existing presence.",
- sp.Name, sp.UUID, RegionInfo.RegionName);
+ if (CapsModule != null)
+ {
+ lock (agent)
+ {
+ CapsModule.SetAgentCapsSeeds(agent);
+ CapsModule.CreateCaps(agent.AgentID, agent.circuitcode);
+ }
+ }
+ }
- sp.ControllingClient.Close(true, true);
- sp = null;
+ if (sp != null)
+ {
+ if (!sp.IsChildAgent)
+ {
+ // We have a zombie from a crashed session.
+ // Or the same user is trying to be root twice here, won't work.
+ // Kill it.
+ m_log.WarnFormat(
+ "[SCENE]: Existing root scene presence detected for {0} {1} in {2} when connecting. Removing existing presence.",
+ sp.Name, sp.UUID, RegionInfo.RegionName);
+
+ sp.ControllingClient.Close(true, true);
+ sp = null;
+ }
}
lock (agent)
@@ -3896,7 +3913,9 @@ namespace OpenSim.Region.Framework.Scenes
if (vialogin || (!m_seeIntoBannedRegion))
{
if (!AuthorizeUser(agent, out reason))
+ {
return false;
+ }
}
}
catch (Exception e)
@@ -3911,11 +3930,6 @@ namespace OpenSim.Region.Framework.Scenes
RegionInfo.RegionName, (agent.child ? "child" : "root"), agent.firstname, agent.lastname,
agent.AgentID, agent.circuitcode);
- if (CapsModule != null)
- {
- CapsModule.SetAgentCapsSeeds(agent);
- CapsModule.CreateCaps(agent.AgentID);
- }
}
else
{
@@ -3941,6 +3955,11 @@ namespace OpenSim.Region.Framework.Scenes
agent.teleportFlags = teleportFlags;
m_authenticateHandler.AddNewCircuit(agent.circuitcode, agent);
+ if (CapsModule != null)
+ {
+ CapsModule.ActivateCaps(agent.circuitcode);
+ }
+
if (vialogin)
{
// CleanDroppedAttachments();
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index 4a7f68bdbe..e87bb04752 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -1655,7 +1655,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
}
}
- public Object osParseJSONNew(string JSON)
+ private Object osParseJSONNew(string JSON)
{
CheckThreatLevel(ThreatLevel.None, "osParseJSONNew");
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
index 7eb347eb8f..a652cb8f4a 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
@@ -260,7 +260,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
string osGetScriptEngineName();
string osGetSimulatorVersion();
string osGetPhysicsEngineType();
- Object osParseJSONNew(string JSON);
Hashtable osParseJSON(string JSON);
void osMessageObject(key objectUUID,string message);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
index c9902e4339..b63773b3e6 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
@@ -435,11 +435,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
return m_OSSL_Functions.osParseJSON(JSON);
}
- public Object osParseJSONNew(string JSON)
- {
- return m_OSSL_Functions.osParseJSONNew(JSON);
- }
-
public void osMessageObject(key objectUUID,string message)
{
m_OSSL_Functions.osMessageObject(objectUUID,message);