aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/XEngine
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine/XEngine')
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/XEngine.cs95
1 files changed, 86 insertions, 9 deletions
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index 8b94f28..4dc6cb8 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -1248,20 +1248,97 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1248 } 1248 }
1249 } 1249 }
1250 1250
1251 public string GetAssemblyName(UUID itemID)
1252 {
1253 IScriptInstance instance = GetInstance(itemID);
1254 if (instance == null)
1255 return "";
1256 return instance.GetAssemblyName();
1257 }
1258
1259 public string GetXMLState(UUID itemID) 1251 public string GetXMLState(UUID itemID)
1260 { 1252 {
1261 IScriptInstance instance = GetInstance(itemID); 1253 IScriptInstance instance = GetInstance(itemID);
1262 if (instance == null) 1254 if (instance == null)
1263 return ""; 1255 return "";
1264 return instance.GetXMLState(); 1256 string xml = instance.GetXMLState();
1257
1258 XmlDocument sdoc = new XmlDocument();
1259 sdoc.LoadXml(xml);
1260 XmlNodeList rootL = sdoc.GetElementsByTagName("ScriptState");
1261 XmlNode rootNode = rootL[0];
1262
1263 // Create <State UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx">
1264 XmlDocument doc = new XmlDocument();
1265 XmlElement stateData = doc.CreateElement("", "State", "");
1266 XmlAttribute stateID = doc.CreateAttribute("", "UUID", "");
1267 stateID.Value = itemID.ToString();
1268 stateData.Attributes.Append(stateID);
1269 XmlAttribute assetID = doc.CreateAttribute("", "Asset", "");
1270 assetID.Value = instance.AssetID.ToString();
1271 stateData.Attributes.Append(assetID);
1272 doc.AppendChild(stateData);
1273
1274 // Add <ScriptState>...</ScriptState>
1275 XmlNode xmlstate = doc.ImportNode(rootNode, true);
1276 stateData.AppendChild(xmlstate);
1277
1278 string assemName = instance.GetAssemblyName();
1279
1280 string fn = Path.GetFileName(assemName);
1281
1282 string assem = String.Empty;
1283
1284 if (File.Exists(assemName + ".text"))
1285 {
1286 FileInfo tfi = new FileInfo(assemName + ".text");
1287
1288 if (tfi != null)
1289 {
1290 Byte[] tdata = new Byte[tfi.Length];
1291
1292 try
1293 {
1294 FileStream tfs = File.Open(assemName + ".text",
1295 FileMode.Open, FileAccess.Read);
1296 tfs.Read(tdata, 0, tdata.Length);
1297 tfs.Close();
1298
1299 assem = new System.Text.ASCIIEncoding().GetString(tdata);
1300 }
1301 catch (Exception e)
1302 {
1303 m_log.DebugFormat("[XEngine]: Unable to open script textfile {0}, reason: {1}", assemName+".text", e.Message);
1304 }
1305 }
1306 }
1307 else
1308 {
1309 FileInfo fi = new FileInfo(assemName);
1310
1311 if (fi != null)
1312 {
1313 Byte[] data = new Byte[fi.Length];
1314
1315 try
1316 {
1317 FileStream fs = File.Open(assemName, FileMode.Open, FileAccess.Read);
1318 fs.Read(data, 0, data.Length);
1319 fs.Close();
1320
1321 assem = System.Convert.ToBase64String(data);
1322 }
1323 catch (Exception e)
1324 {
1325 m_log.DebugFormat("[XEngine]: Unable to open script assembly {0}, reason: {1}", assemName, e.Message);
1326 }
1327
1328 }
1329 }
1330
1331 XmlElement assemblyData = doc.CreateElement("", "Assembly", "");
1332 XmlAttribute assemblyName = doc.CreateAttribute("", "Filename", "");
1333
1334 assemblyName.Value = fn;
1335 assemblyData.Attributes.Append(assemblyName);
1336
1337 assemblyData.InnerText = assem;
1338
1339 stateData.AppendChild(assemblyData);
1340
1341 return doc.InnerXml;
1265 } 1342 }
1266 1343
1267 public bool CanBeDeleted(UUID itemID) 1344 public bool CanBeDeleted(UUID itemID)