diff --git a/OpenSim/Framework/ISceneObject.cs b/OpenSim/Framework/ISceneObject.cs
index 4fc3e01fcb..51479014cd 100644
--- a/OpenSim/Framework/ISceneObject.cs
+++ b/OpenSim/Framework/ISceneObject.cs
@@ -38,6 +38,6 @@ namespace OpenSim.Framework
string ExtraToXmlString();
void ExtraFromXmlString(string xmlstr);
string GetStateSnapshot();
- void SetState(string xmlstr, UUID regionID);
+ void SetState(string xmlstr, IScene s);
}
}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/LocalInterregionComms.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/LocalInterregionComms.cs
index ee809bd248..d9f6e3300a 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/LocalInterregionComms.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/LocalInterregionComms.cs
@@ -263,8 +263,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
{
// We need to make a local copy of the object
ISceneObject sogClone = sog.CloneForNewScene();
- sogClone.SetState(sog.GetStateSnapshot(),
- s.RegionInfo.RegionID);
+ sogClone.SetState(sog.GetStateSnapshot(), s);
return s.IncomingCreateObject(sogClone);
}
else
@@ -294,15 +293,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
#region Misc
- public UUID GetRegionID(ulong regionhandle)
+ public Scene GetScene(ulong regionhandle)
{
foreach (Scene s in m_sceneList)
{
if (s.RegionInfo.RegionHandle == regionhandle)
- return s.RegionInfo.RegionID;
+ return s;
}
// ? weird. should not happen
- return m_sceneList[0].RegionInfo.RegionID;
+ return m_sceneList[0];
}
public bool IsLocalRegion(ulong regionhandle)
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/RESTInterregionComms.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/RESTInterregionComms.cs
index 696225cddc..710e3ca5d9 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/RESTInterregionComms.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/RESTInterregionComms.cs
@@ -641,7 +641,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
if (args["extra"] != null)
extraStr = args["extra"].AsString();
- UUID regionID = m_localBackend.GetRegionID(regionhandle);
+ IScene s = m_localBackend.GetScene(regionhandle);
SceneObjectGroup sog = null;
try
{
@@ -663,7 +663,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
{
try
{
- sog.SetState(stateXmlStr, regionID);
+ sog.SetState(stateXmlStr, s);
}
catch (Exception ex)
{
@@ -695,8 +695,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
if (args["itemid"] != null)
itemID = args["itemid"].AsUUID();
- //UUID regionID = m_localBackend.GetRegionID(regionhandle);
-
// This is the meaning of PUT object
bool result = m_localBackend.SendCreateObject(regionhandle, userID, itemID);
diff --git a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
index 2998f4553d..89a45da1c9 100644
--- a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
+++ b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
@@ -191,7 +191,5 @@ namespace OpenSim.Region.Framework.Interfaces
/// A
///
Dictionary GetScriptStates();
-
- bool CanBeDeleted();
}
}
diff --git a/OpenSim/Region/Framework/Interfaces/IScriptModule.cs b/OpenSim/Region/Framework/Interfaces/IScriptModule.cs
index 72bb0f0eec..f11e5713d0 100644
--- a/OpenSim/Region/Framework/Interfaces/IScriptModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IScriptModule.cs
@@ -35,7 +35,7 @@ namespace OpenSim.Region.Framework.Interfaces
string ScriptEngineName { get; }
string GetXMLState(UUID itemID);
- bool CanBeDeleted(UUID itemID);
+ void SetXMLState(UUID itemID, string xml);
bool PostScriptEvent(UUID itemID, string name, Object[] args);
bool PostObjectEvent(UUID itemID, string name, Object[] args);
diff --git a/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs b/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs
index 5b571c7227..9a7863b595 100644
--- a/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs
+++ b/OpenSim/Region/Framework/Scenes/AsyncSceneObjectGroupDeleter.cs
@@ -131,11 +131,6 @@ namespace OpenSim.Region.Framework.Scenes
if (left > 0)
{
x = m_inventoryDeletes.Dequeue();
- if (!x.objectGroup.CanBeDeleted())
- {
- m_inventoryDeletes.Enqueue(x);
- return true;
- }
m_log.DebugFormat(
"[SCENE]: Sending object to user's inventory, {0} item(s) remaining.", left);
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 0ee818d10b..eb8567fc7c 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -618,7 +618,7 @@ namespace OpenSim.Region.Framework.Scenes
startupConfig.GetLong("MaximumTimeBeforePersistenceConsidered", DEFAULT_MAX_TIME_FOR_PERSISTENCE);
m_persistAfter *= 10000000;
- m_defaultScriptEngine = startupConfig.GetString("DefaultScriptEngine", "DotNetEngine");
+ m_defaultScriptEngine = startupConfig.GetString("DefaultScriptEngine", "XEngine");
IConfig packetConfig = m_config.Configs["PacketPool"];
if (packetConfig != null)
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
index 9a6f2b83c4..5a06bdb7b9 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
@@ -351,12 +351,29 @@ namespace OpenSim.Region.Framework.Scenes
return xmldoc.InnerXml;
}
- public void SetState(string objXMLData, UUID RegionID)
+ public void SetState(string objXMLData, IScene ins)
{
-m_log.Debug("SetState called with " + objXMLData);
+ if (!(ins is Scene))
+ return;
+
+ Scene s = (Scene)ins;
+
if (objXMLData == String.Empty)
return;
+ IScriptModule scriptModule = null;
+
+ foreach (IScriptModule sm in s.RequestModuleInterfaces())
+ {
+ if (sm.ScriptEngineName == s.DefaultScriptEngine)
+ scriptModule = sm;
+ else if (scriptModule == null)
+ scriptModule = sm;
+ }
+
+ if (scriptModule == null)
+ return;
+
XmlDocument doc = new XmlDocument();
try
{
@@ -374,69 +391,23 @@ m_log.Debug("SetState called with " + objXMLData);
}
XmlNodeList rootL = doc.GetElementsByTagName("ScriptData");
- if (rootL.Count == 1)
+ if (rootL.Count != 1)
+ return;
+
+ XmlElement rootE = (XmlElement)rootL[0];
+
+ XmlNodeList dataL = rootE.GetElementsByTagName("ScriptStates");
+ if (dataL.Count != 1)
+ return;
+
+ XmlElement dataE = (XmlElement)dataL[0];
+
+ foreach (XmlNode n in dataE.ChildNodes)
{
- XmlNode rootNode = rootL[0];
- if (rootNode != null)
- {
- XmlNodeList partL = rootNode.ChildNodes;
+ XmlElement stateE = (XmlElement)n;
+ UUID itemID = new UUID(stateE.GetAttribute("UUID"));
- foreach (XmlNode part in partL)
- {
- XmlNodeList nodeL = part.ChildNodes;
-
- switch (part.Name)
- {
- case "Assemblies":
- foreach (XmlNode asm in nodeL)
- {
- string fn = asm.Attributes.GetNamedItem("Filename").Value;
-
- Byte[] filedata = Convert.FromBase64String(asm.InnerText);
- string path = Path.Combine("ScriptEngines", RegionID.ToString());
- path = Path.Combine(path, fn);
-
- if (!File.Exists(path))
- {
- FileStream fs = File.Create(path);
- fs.Write(filedata, 0, filedata.Length);
- fs.Close();
-
- Byte[] textbytes = new System.Text.ASCIIEncoding().GetBytes(asm.InnerText);
- fs = File.Create(path+".text");
- fs.Write(textbytes, 0, textbytes.Length);
- fs.Close();
- }
- }
- break;
- case "ScriptStates":
- foreach (XmlNode st in nodeL)
- {
- string id = st.Attributes.GetNamedItem("UUID").Value;
- UUID uuid = new UUID(id);
- XmlNode state = st.ChildNodes[0];
-
- XmlDocument sdoc = new XmlDocument();
- XmlNode sxmlnode = sdoc.CreateNode(
- XmlNodeType.XmlDeclaration,
- "", "");
- sdoc.AppendChild(sxmlnode);
-
- XmlNode newnode = sdoc.ImportNode(state, true);
- sdoc.AppendChild(newnode);
-
- string spath = Path.Combine("ScriptEngines", RegionID.ToString());
- spath = Path.Combine(spath, uuid.ToString());
- FileStream sfs = File.Create(spath + ".state");
- System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
- Byte[] buf = enc.GetBytes(sdoc.InnerXml);
- sfs.Write(buf, 0, buf.Length);
- sfs.Close();
- }
- break;
- }
- }
- }
+ scriptModule.SetXMLState(itemID, n.OuterXml);
}
}
}
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index bcc9b37aee..6ec2a01be5 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -3341,17 +3341,6 @@ namespace OpenSim.Region.Framework.Scenes
}
#endregion
- public bool CanBeDeleted()
- {
- foreach (SceneObjectPart part in Children.Values)
- {
- if (!part.CanBeDeleted())
- return false;
- }
-
- return true;
- }
-
public double GetUpdatePriority(IClientAPI client)
{
switch (Scene.UpdatePrioritizationScheme)
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 6f1b4581be..b6916f227d 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -3797,10 +3797,5 @@ namespace OpenSim.Region.Framework.Scenes
Inventory.ApplyNextOwnerPermissions();
}
-
- public bool CanBeDeleted()
- {
- return Inventory.CanBeDeleted();
- }
}
}
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
index 7f49ced7a5..7a0d7b7ff9 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
@@ -886,30 +886,5 @@ namespace OpenSim.Region.Framework.Scenes
}
return ret;
}
-
- public bool CanBeDeleted()
- {
- if (!ContainsScripts())
- return true;
-
- IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces();
-
- if (engines == null) // No engine at all
- return true;
-
- foreach (TaskInventoryItem item in m_items.Values)
- {
- if (item.InvType == (int)InventoryType.LSL)
- {
- foreach (IScriptModule e in engines)
- {
- if (!e.CanBeDeleted(item.ItemID))
- return false;
- }
- }
- }
-
- return true;
- }
}
}
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
index f49aea8104..ae148a9c5a 100644
--- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
@@ -96,7 +96,6 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
UUID GetDetectID(int idx);
void SaveState(string assembly);
void DestroyScriptInstance();
- bool CanBeDeleted();
IScriptApi GetApi(string name);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
index 41b5d497da..5c5d57e817 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
@@ -1011,10 +1011,5 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
{
get { return m_RegionID; }
}
-
- public bool CanBeDeleted()
- {
- return true;
- }
}
}
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index 0a9af2c1ec..b0991774c5 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -1325,6 +1325,19 @@ namespace OpenSim.Region.ScriptEngine.XEngine
}
}
+ string map = String.Empty;
+
+ if (File.Exists(fn + ".map"))
+ {
+ FileStream mfs = File.Open(fn + ".map", FileMode.Open, FileAccess.Read);
+ StreamReader msr = new StreamReader(mfs);
+
+ map = msr.ReadToEnd();
+
+ msr.Close();
+ mfs.Close();
+ }
+
XmlElement assemblyData = doc.CreateElement("", "Assembly", "");
XmlAttribute assemblyName = doc.CreateAttribute("", "Filename", "");
@@ -1335,21 +1348,116 @@ namespace OpenSim.Region.ScriptEngine.XEngine
stateData.AppendChild(assemblyData);
+ XmlElement mapData = doc.CreateElement("", "LineMap", "");
+ XmlAttribute mapName = doc.CreateAttribute("", "Filename", "");
+
+ mapName.Value = fn + ".map";
+ mapData.Attributes.Append(mapName);
+
+ mapData.InnerText = map;
+
+ stateData.AppendChild(mapData);
return doc.InnerXml;
}
- public bool CanBeDeleted(UUID itemID)
- {
- IScriptInstance instance = GetInstance(itemID);
- if (instance == null)
- return true;
-
- return instance.CanBeDeleted();
- }
-
private bool ShowScriptSaveResponse(UUID ownerID, UUID assetID, string text, bool compiled)
{
return false;
}
+
+ public void SetXMLState(UUID itemID, string xml)
+ {
+ if (xml == String.Empty)
+ return;
+
+ XmlDocument doc = new XmlDocument();
+
+ try
+ {
+ doc.LoadXml(xml);
+ }
+ catch (Exception)
+ {
+ m_log.Error("[XEngine]: Exception decoding XML data from region transfer");
+ return;
+ }
+
+ XmlNodeList rootL = doc.GetElementsByTagName("State");
+ if (rootL.Count < 1)
+ return;
+
+ XmlElement rootE = (XmlElement)rootL[0];
+
+ if (rootE.GetAttribute("UUID") != itemID.ToString())
+ return;
+
+ string assetID = rootE.GetAttribute("Asset");
+
+ XmlNodeList stateL = rootE.GetElementsByTagName("ScriptState");
+
+ if (stateL.Count != 1)
+ return;
+
+ XmlElement stateE = (XmlElement)stateL[0];
+
+ if (World.m_trustBinaries)
+ {
+ XmlNodeList assemL = rootE.GetElementsByTagName("Assembly");
+
+ if (assemL.Count != 1)
+ return;
+
+ XmlElement assemE = (XmlElement)assemL[0];
+
+ string fn = assemE.GetAttribute("Filename");
+ string base64 = assemE.InnerText;
+
+ string path = Path.Combine("ScriptEngines", World.RegionInfo.RegionID.ToString());
+ path = Path.Combine(path, fn);
+
+ if (!File.Exists(path))
+ {
+ Byte[] filedata = Convert.FromBase64String(base64);
+
+ FileStream fs = File.Create(path);
+ fs.Write(filedata, 0, filedata.Length);
+ fs.Close();
+
+ fs = File.Create(path + ".text");
+ StreamWriter sw = new StreamWriter(fs);
+
+ sw.Write(base64);
+
+ sw.Close();
+ fs.Close();
+ }
+ }
+
+ string statepath = Path.Combine("ScriptEngines", World.RegionInfo.RegionID.ToString());
+ statepath = Path.Combine(statepath, itemID.ToString() + ".state");
+
+ FileStream sfs = File.Create(statepath);
+ StreamWriter ssw = new StreamWriter(sfs);
+
+ ssw.Write(stateE.OuterXml);
+
+ ssw.Close();
+ sfs.Close();
+
+ XmlNodeList mapL = rootE.GetElementsByTagName("LineMap");
+
+ XmlElement mapE = (XmlElement)mapL[0];
+
+ string mappath = Path.Combine("ScriptEngines", World.RegionInfo.RegionID.ToString());
+ mappath = Path.Combine(mappath, mapE.GetAttribute("Filename"));
+
+ FileStream mfs = File.Create(mappath);
+ StreamWriter msw = new StreamWriter(sfs);
+
+ msw.Write(mapE.InnerText);
+
+ msw.Close();
+ mfs.Close();
+ }
}
}