Merge branch 'master' of ssh://justincc@opensimulator.org/var/git/opensim
commit
7f5d0a6735
|
@ -1562,11 +1562,8 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
assets = doc.GetElementsByTagName("RequiredAsset");
|
assets = doc.GetElementsByTagName("RequiredAsset");
|
||||||
foreach (XmlNode asset in assets)
|
foreach (XmlNode asset in assets)
|
||||||
{
|
{
|
||||||
AssetBase rass = new AssetBase();
|
AssetBase rass = new AssetBase(UUID.Random(), GetStringAttribute(asset,"name",""), SByte.Parse(GetStringAttribute(asset,"type","")));
|
||||||
rass.FullID = UUID.Random();
|
|
||||||
rass.Name = GetStringAttribute(asset,"name","");
|
|
||||||
rass.Description = GetStringAttribute(asset,"desc","");
|
rass.Description = GetStringAttribute(asset,"desc","");
|
||||||
rass.Type = SByte.Parse(GetStringAttribute(asset,"type",""));
|
|
||||||
rass.Local = Boolean.Parse(GetStringAttribute(asset,"local",""));
|
rass.Local = Boolean.Parse(GetStringAttribute(asset,"local",""));
|
||||||
rass.Temporary = Boolean.Parse(GetStringAttribute(asset,"temporary",""));
|
rass.Temporary = Boolean.Parse(GetStringAttribute(asset,"temporary",""));
|
||||||
rass.Data = Convert.FromBase64String(asset.InnerText);
|
rass.Data = Convert.FromBase64String(asset.InnerText);
|
||||||
|
|
|
@ -261,11 +261,8 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
|
||||||
modified = (asset != null);
|
modified = (asset != null);
|
||||||
created = !modified;
|
created = !modified;
|
||||||
|
|
||||||
asset = new AssetBase();
|
asset = new AssetBase(uuid, xml.GetAttribute("name"), SByte.Parse(xml.GetAttribute("type")));
|
||||||
asset.FullID = uuid;
|
|
||||||
asset.Name = xml.GetAttribute("name");
|
|
||||||
asset.Description = xml.GetAttribute("desc");
|
asset.Description = xml.GetAttribute("desc");
|
||||||
asset.Type = SByte.Parse(xml.GetAttribute("type"));
|
|
||||||
asset.Local = Int32.Parse(xml.GetAttribute("local")) != 0;
|
asset.Local = Int32.Parse(xml.GetAttribute("local")) != 0;
|
||||||
asset.Temporary = Int32.Parse(xml.GetAttribute("temporary")) != 0;
|
asset.Temporary = Int32.Parse(xml.GetAttribute("temporary")) != 0;
|
||||||
asset.Data = Convert.FromBase64String(xml.ReadElementContentAsString("Asset", ""));
|
asset.Data = Convert.FromBase64String(xml.ReadElementContentAsString("Asset", ""));
|
||||||
|
@ -341,11 +338,8 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
|
||||||
modified = (asset != null);
|
modified = (asset != null);
|
||||||
created = !modified;
|
created = !modified;
|
||||||
|
|
||||||
asset = new AssetBase();
|
asset = new AssetBase(uuid, xml.GetAttribute("name"), SByte.Parse(xml.GetAttribute("type")));
|
||||||
asset.FullID = uuid;
|
|
||||||
asset.Name = xml.GetAttribute("name");
|
|
||||||
asset.Description = xml.GetAttribute("desc");
|
asset.Description = xml.GetAttribute("desc");
|
||||||
asset.Type = SByte.Parse(xml.GetAttribute("type"));
|
|
||||||
asset.Local = Int32.Parse(xml.GetAttribute("local")) != 0;
|
asset.Local = Int32.Parse(xml.GetAttribute("local")) != 0;
|
||||||
asset.Temporary = Int32.Parse(xml.GetAttribute("temporary")) != 0;
|
asset.Temporary = Int32.Parse(xml.GetAttribute("temporary")) != 0;
|
||||||
asset.Data = Convert.FromBase64String(xml.ReadElementContentAsString("Asset", ""));
|
asset.Data = Convert.FromBase64String(xml.ReadElementContentAsString("Asset", ""));
|
||||||
|
|
|
@ -1869,10 +1869,9 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
|
||||||
|
|
||||||
// Create AssetBase entity to hold the inlined asset
|
// Create AssetBase entity to hold the inlined asset
|
||||||
|
|
||||||
asset = new AssetBase(uuid, name);
|
asset = new AssetBase(uuid, name, type);
|
||||||
|
|
||||||
asset.Description = desc;
|
asset.Description = desc;
|
||||||
asset.Type = type; // type == 0 == texture
|
|
||||||
asset.Local = local;
|
asset.Local = local;
|
||||||
asset.Temporary = temp;
|
asset.Temporary = temp;
|
||||||
|
|
||||||
|
|
|
@ -132,12 +132,13 @@ namespace OpenSim.Data.MSSQL
|
||||||
{
|
{
|
||||||
if (reader.Read())
|
if (reader.Read())
|
||||||
{
|
{
|
||||||
AssetBase asset = new AssetBase();
|
AssetBase asset = new AssetBase(
|
||||||
|
new UUID((Guid)reader["id"]),
|
||||||
|
(string)reader["name"],
|
||||||
|
Convert.ToSByte(reader["assetType"])
|
||||||
|
);
|
||||||
// Region Main
|
// Region Main
|
||||||
asset.FullID = new UUID((Guid)reader["id"]);
|
|
||||||
asset.Name = (string)reader["name"];
|
|
||||||
asset.Description = (string)reader["description"];
|
asset.Description = (string)reader["description"];
|
||||||
asset.Type = Convert.ToSByte(reader["assetType"]);
|
|
||||||
asset.Local = Convert.ToBoolean(reader["local"]);
|
asset.Local = Convert.ToBoolean(reader["local"]);
|
||||||
asset.Temporary = Convert.ToBoolean(reader["temporary"]);
|
asset.Temporary = Convert.ToBoolean(reader["temporary"]);
|
||||||
asset.Data = (byte[])reader["data"];
|
asset.Data = (byte[])reader["data"];
|
||||||
|
|
|
@ -151,10 +151,9 @@ namespace OpenSim.Data.MySQL
|
||||||
{
|
{
|
||||||
if (dbReader.Read())
|
if (dbReader.Read())
|
||||||
{
|
{
|
||||||
asset = new AssetBase();
|
asset = new AssetBase(assetID, (string)dbReader["name"], (sbyte)dbReader["assetType"]);
|
||||||
asset.Data = (byte[]) dbReader["data"];
|
asset.Data = (byte[]) dbReader["data"];
|
||||||
asset.Description = (string) dbReader["description"];
|
asset.Description = (string) dbReader["description"];
|
||||||
asset.FullID = assetID;
|
|
||||||
|
|
||||||
string local = dbReader["local"].ToString();
|
string local = dbReader["local"].ToString();
|
||||||
if (local.Equals("1") || local.Equals("true", StringComparison.InvariantCultureIgnoreCase))
|
if (local.Equals("1") || local.Equals("true", StringComparison.InvariantCultureIgnoreCase))
|
||||||
|
@ -162,8 +161,6 @@ namespace OpenSim.Data.MySQL
|
||||||
else
|
else
|
||||||
asset.Local = false;
|
asset.Local = false;
|
||||||
|
|
||||||
asset.Name = (string) dbReader["name"];
|
|
||||||
asset.Type = (sbyte) dbReader["assetType"];
|
|
||||||
asset.Temporary = Convert.ToBoolean(dbReader["temporary"]);
|
asset.Temporary = Convert.ToBoolean(dbReader["temporary"]);
|
||||||
}
|
}
|
||||||
dbReader.Close();
|
dbReader.Close();
|
||||||
|
|
|
@ -231,12 +231,13 @@ namespace OpenSim.Data.SQLite
|
||||||
// TODO: this doesn't work yet because something more
|
// TODO: this doesn't work yet because something more
|
||||||
// interesting has to be done to actually get these values
|
// interesting has to be done to actually get these values
|
||||||
// back out. Not enough time to figure it out yet.
|
// back out. Not enough time to figure it out yet.
|
||||||
AssetBase asset = new AssetBase();
|
AssetBase asset = new AssetBase(
|
||||||
|
new UUID((String)row["UUID"]),
|
||||||
|
(String)row["Name"],
|
||||||
|
Convert.ToSByte(row["Type"])
|
||||||
|
);
|
||||||
|
|
||||||
asset.FullID = new UUID((String) row["UUID"]);
|
|
||||||
asset.Name = (String) row["Name"];
|
|
||||||
asset.Description = (String) row["Description"];
|
asset.Description = (String) row["Description"];
|
||||||
asset.Type = Convert.ToSByte(row["Type"]);
|
|
||||||
asset.Local = Convert.ToBoolean(row["Local"]);
|
asset.Local = Convert.ToBoolean(row["Local"]);
|
||||||
asset.Temporary = Convert.ToBoolean(row["Temporary"]);
|
asset.Temporary = Convert.ToBoolean(row["Temporary"]);
|
||||||
asset.Data = (byte[]) row["Data"];
|
asset.Data = (byte[]) row["Data"];
|
||||||
|
|
|
@ -66,9 +66,9 @@ namespace OpenSim.Data.Tests
|
||||||
[Test]
|
[Test]
|
||||||
public void T010_StoreSimpleAsset()
|
public void T010_StoreSimpleAsset()
|
||||||
{
|
{
|
||||||
AssetBase a1 = new AssetBase(uuid1, "asset one");
|
AssetBase a1 = new AssetBase(uuid1, "asset one", (sbyte)AssetType.Texture);
|
||||||
AssetBase a2 = new AssetBase(uuid2, "asset two");
|
AssetBase a2 = new AssetBase(uuid2, "asset two", (sbyte)AssetType.Texture);
|
||||||
AssetBase a3 = new AssetBase(uuid3, "asset three");
|
AssetBase a3 = new AssetBase(uuid3, "asset three", (sbyte)AssetType.Texture);
|
||||||
a1.Data = asset1;
|
a1.Data = asset1;
|
||||||
a2.Data = asset1;
|
a2.Data = asset1;
|
||||||
a3.Data = asset1;
|
a3.Data = asset1;
|
||||||
|
|
|
@ -297,8 +297,8 @@ namespace OpenSim.Data.Tests
|
||||||
public void AssetShouldMatch()
|
public void AssetShouldMatch()
|
||||||
{
|
{
|
||||||
UUID uuid1 = UUID.Random();
|
UUID uuid1 = UUID.Random();
|
||||||
AssetBase actual = new AssetBase(uuid1, "asset one");
|
AssetBase actual = new AssetBase(uuid1, "asset one", (sbyte)AssetType.Texture);
|
||||||
AssetBase expected = new AssetBase(uuid1, "asset one");
|
AssetBase expected = new AssetBase(uuid1, "asset one", (sbyte)AssetType.Texture);
|
||||||
|
|
||||||
var constraint = Constraints.PropertyCompareConstraint(expected);
|
var constraint = Constraints.PropertyCompareConstraint(expected);
|
||||||
|
|
||||||
|
@ -309,8 +309,8 @@ namespace OpenSim.Data.Tests
|
||||||
public void AssetShouldNotMatch()
|
public void AssetShouldNotMatch()
|
||||||
{
|
{
|
||||||
UUID uuid1 = UUID.Random();
|
UUID uuid1 = UUID.Random();
|
||||||
AssetBase actual = new AssetBase(uuid1, "asset one");
|
AssetBase actual = new AssetBase(uuid1, "asset one", (sbyte)AssetType.Texture);
|
||||||
AssetBase expected = new AssetBase(UUID.Random(), "asset one");
|
AssetBase expected = new AssetBase(UUID.Random(), "asset one", (sbyte)AssetType.Texture);
|
||||||
|
|
||||||
var constraint = Constraints.PropertyCompareConstraint(expected);
|
var constraint = Constraints.PropertyCompareConstraint(expected);
|
||||||
|
|
||||||
|
@ -321,8 +321,8 @@ namespace OpenSim.Data.Tests
|
||||||
public void AssetShouldNotMatch2()
|
public void AssetShouldNotMatch2()
|
||||||
{
|
{
|
||||||
UUID uuid1 = UUID.Random();
|
UUID uuid1 = UUID.Random();
|
||||||
AssetBase actual = new AssetBase(uuid1, "asset one");
|
AssetBase actual = new AssetBase(uuid1, "asset one", (sbyte)AssetType.Texture);
|
||||||
AssetBase expected = new AssetBase(uuid1, "asset two");
|
AssetBase expected = new AssetBase(uuid1, "asset two", (sbyte)AssetType.Texture);
|
||||||
|
|
||||||
var constraint = Constraints.PropertyCompareConstraint(expected);
|
var constraint = Constraints.PropertyCompareConstraint(expected);
|
||||||
|
|
||||||
|
|
|
@ -165,7 +165,7 @@ namespace OpenSim.Data.Tests
|
||||||
[Test]
|
[Test]
|
||||||
public void TestScramble()
|
public void TestScramble()
|
||||||
{
|
{
|
||||||
AssetBase actual = new AssetBase(UUID.Random(), "asset one");
|
AssetBase actual = new AssetBase(UUID.Random(), "asset one", (sbyte)AssetType.Texture);
|
||||||
new PropertyScrambler<AssetBase>().Scramble(actual);
|
new PropertyScrambler<AssetBase>().Scramble(actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,8 +173,7 @@ namespace OpenSim.Data.Tests
|
||||||
public void DontScramble()
|
public void DontScramble()
|
||||||
{
|
{
|
||||||
UUID uuid = UUID.Random();
|
UUID uuid = UUID.Random();
|
||||||
AssetBase asset = new AssetBase();
|
AssetBase asset = new AssetBase(uuid, "asset", (sbyte)AssetType.Texture);
|
||||||
asset.FullID = uuid;
|
|
||||||
new PropertyScrambler<AssetBase>()
|
new PropertyScrambler<AssetBase>()
|
||||||
.DontScramble(x => x.Metadata)
|
.DontScramble(x => x.Metadata)
|
||||||
.DontScramble(x => x.FullID)
|
.DontScramble(x => x.FullID)
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
using System.Reflection;
|
||||||
|
using log4net;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
|
|
||||||
namespace OpenSim.Framework
|
namespace OpenSim.Framework
|
||||||
|
@ -37,6 +39,8 @@ namespace OpenSim.Framework
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class AssetBase
|
public class AssetBase
|
||||||
{
|
{
|
||||||
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Data of the Asset
|
/// Data of the Asset
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -47,16 +51,44 @@ namespace OpenSim.Framework
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private AssetMetadata m_metadata;
|
private AssetMetadata m_metadata;
|
||||||
|
|
||||||
|
// This is needed for .NET serialization!!!
|
||||||
|
// Do NOT "Optimize" away!
|
||||||
public AssetBase()
|
public AssetBase()
|
||||||
{
|
{
|
||||||
m_metadata = new AssetMetadata();
|
m_metadata = new AssetMetadata();
|
||||||
|
m_metadata.FullID = UUID.Zero;
|
||||||
|
m_metadata.ID = UUID.Zero.ToString();
|
||||||
|
m_metadata.Type = (sbyte)AssetType.Unknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AssetBase(UUID assetId, string name)
|
public AssetBase(UUID assetID, string name, sbyte assetType)
|
||||||
{
|
{
|
||||||
|
if (assetType == (sbyte)AssetType.Unknown)
|
||||||
|
{
|
||||||
|
System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(true);
|
||||||
|
m_log.ErrorFormat("[ASSETBASE]: Creating asset '{0}' ({1}) with an unknown asset type\n{2}",
|
||||||
|
name, assetID, trace.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
m_metadata = new AssetMetadata();
|
m_metadata = new AssetMetadata();
|
||||||
m_metadata.FullID = assetId;
|
m_metadata.FullID = assetID;
|
||||||
m_metadata.Name = name;
|
m_metadata.Name = name;
|
||||||
|
m_metadata.Type = assetType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AssetBase(string assetID, string name, sbyte assetType)
|
||||||
|
{
|
||||||
|
if (assetType == (sbyte)AssetType.Unknown)
|
||||||
|
{
|
||||||
|
System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(true);
|
||||||
|
m_log.ErrorFormat("[ASSETBASE]: Creating asset '{0}' ({1}) with an unknown asset type\n{2}",
|
||||||
|
name, assetID, trace.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
m_metadata = new AssetMetadata();
|
||||||
|
m_metadata.ID = assetID;
|
||||||
|
m_metadata.Name = name;
|
||||||
|
m_metadata.Type = assetType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool ContainsReferences
|
public bool ContainsReferences
|
||||||
|
@ -193,11 +225,11 @@ namespace OpenSim.Framework
|
||||||
private string m_name = String.Empty;
|
private string m_name = String.Empty;
|
||||||
private string m_description = String.Empty;
|
private string m_description = String.Empty;
|
||||||
private DateTime m_creation_date;
|
private DateTime m_creation_date;
|
||||||
private sbyte m_type;
|
private sbyte m_type = (sbyte)AssetType.Unknown;
|
||||||
private string m_content_type;
|
private string m_content_type;
|
||||||
private byte[] m_sha1;
|
private byte[] m_sha1;
|
||||||
private bool m_local = false;
|
private bool m_local;
|
||||||
private bool m_temporary = false;
|
private bool m_temporary;
|
||||||
//private Dictionary<string, Uri> m_methods = new Dictionary<string, Uri>();
|
//private Dictionary<string, Uri> m_methods = new Dictionary<string, Uri>();
|
||||||
//private OSDMap m_extra_data;
|
//private OSDMap m_extra_data;
|
||||||
|
|
||||||
|
@ -211,7 +243,13 @@ namespace OpenSim.Framework
|
||||||
{
|
{
|
||||||
//get { return m_fullid.ToString(); }
|
//get { return m_fullid.ToString(); }
|
||||||
//set { m_fullid = new UUID(value); }
|
//set { m_fullid = new UUID(value); }
|
||||||
get { return m_id; }
|
get
|
||||||
|
{
|
||||||
|
if (String.IsNullOrEmpty(m_id))
|
||||||
|
m_id = m_fullid.ToString();
|
||||||
|
|
||||||
|
return m_id;
|
||||||
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
UUID uuid = UUID.Zero;
|
UUID uuid = UUID.Zero;
|
||||||
|
|
|
@ -38,11 +38,9 @@ namespace OpenSim.Framework
|
||||||
public int Version;
|
public int Version;
|
||||||
|
|
||||||
public AssetLandmark(AssetBase a)
|
public AssetLandmark(AssetBase a)
|
||||||
|
: base(a.FullID, a.Name, a.Type)
|
||||||
{
|
{
|
||||||
Data = a.Data;
|
Data = a.Data;
|
||||||
FullID = a.FullID;
|
|
||||||
Type = a.Type;
|
|
||||||
Name = a.Name;
|
|
||||||
Description = a.Description;
|
Description = a.Description;
|
||||||
InternData();
|
InternData();
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,18 +43,15 @@ namespace OpenSim.Framework.AssetLoader.Filesystem
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
protected static AssetBase CreateAsset(string assetIdStr, string name, string path, bool isImage)
|
protected static AssetBase CreateAsset(string assetIdStr, string name, string path, sbyte type)
|
||||||
{
|
{
|
||||||
AssetBase asset = new AssetBase(
|
AssetBase asset = new AssetBase(new UUID(assetIdStr), name, type);
|
||||||
new UUID(assetIdStr),
|
|
||||||
name
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!String.IsNullOrEmpty(path))
|
if (!String.IsNullOrEmpty(path))
|
||||||
{
|
{
|
||||||
//m_log.InfoFormat("[ASSETS]: Loading: [{0}][{1}]", name, path);
|
//m_log.InfoFormat("[ASSETS]: Loading: [{0}][{1}]", name, path);
|
||||||
|
|
||||||
LoadAsset(asset, isImage, path);
|
LoadAsset(asset, path);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -64,8 +61,14 @@ namespace OpenSim.Framework.AssetLoader.Filesystem
|
||||||
return asset;
|
return asset;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static void LoadAsset(AssetBase info, bool image, string path)
|
protected static void LoadAsset(AssetBase info, string path)
|
||||||
{
|
{
|
||||||
|
bool image =
|
||||||
|
(info.Type == (sbyte)AssetType.Texture ||
|
||||||
|
info.Type == (sbyte)AssetType.TextureTGA ||
|
||||||
|
info.Type == (sbyte)AssetType.ImageJPEG ||
|
||||||
|
info.Type == (sbyte)AssetType.ImageTGA);
|
||||||
|
|
||||||
FileInfo fInfo = new FileInfo(path);
|
FileInfo fInfo = new FileInfo(path);
|
||||||
long numBytes = fInfo.Length;
|
long numBytes = fInfo.Length;
|
||||||
if (fInfo.Exists)
|
if (fInfo.Exists)
|
||||||
|
@ -138,10 +141,10 @@ namespace OpenSim.Framework.AssetLoader.Filesystem
|
||||||
{
|
{
|
||||||
string assetIdStr = source.Configs[i].GetString("assetID", UUID.Random().ToString());
|
string assetIdStr = source.Configs[i].GetString("assetID", UUID.Random().ToString());
|
||||||
string name = source.Configs[i].GetString("name", String.Empty);
|
string name = source.Configs[i].GetString("name", String.Empty);
|
||||||
sbyte type = (sbyte) source.Configs[i].GetInt("assetType", 0);
|
sbyte type = (sbyte)source.Configs[i].GetInt("assetType", 0);
|
||||||
string assetPath = Path.Combine(dir, source.Configs[i].GetString("fileName", String.Empty));
|
string assetPath = Path.Combine(dir, source.Configs[i].GetString("fileName", String.Empty));
|
||||||
|
|
||||||
AssetBase newAsset = CreateAsset(assetIdStr, name, assetPath, false);
|
AssetBase newAsset = CreateAsset(assetIdStr, name, assetPath, type);
|
||||||
|
|
||||||
newAsset.Type = type;
|
newAsset.Type = type;
|
||||||
assets.Add(newAsset);
|
assets.Add(newAsset);
|
||||||
|
|
|
@ -888,10 +888,7 @@ namespace OpenSim.Framework.Capabilities
|
||||||
}
|
}
|
||||||
|
|
||||||
AssetBase asset;
|
AssetBase asset;
|
||||||
asset = new AssetBase();
|
asset = new AssetBase(assetID, assetName, assType);
|
||||||
asset.FullID = assetID;
|
|
||||||
asset.Type = assType;
|
|
||||||
asset.Name = assetName;
|
|
||||||
asset.Data = data;
|
asset.Data = data;
|
||||||
if (AddNewAsset != null)
|
if (AddNewAsset != null)
|
||||||
AddNewAsset(asset);
|
AddNewAsset(asset);
|
||||||
|
|
|
@ -67,8 +67,7 @@ namespace OpenSim.Framework.Tests
|
||||||
|
|
||||||
private void CheckContainsReferences(AssetType assetType, bool expected)
|
private void CheckContainsReferences(AssetType assetType, bool expected)
|
||||||
{
|
{
|
||||||
AssetBase asset = new AssetBase();
|
AssetBase asset = new AssetBase(UUID.Zero, String.Empty, (sbyte)assetType);
|
||||||
asset.Type = (sbyte)assetType;
|
|
||||||
bool actual = asset.ContainsReferences;
|
bool actual = asset.ContainsReferences;
|
||||||
Assert.AreEqual(expected, actual, "Expected "+assetType+".ContainsReferences to be "+expected+" but was "+actual+".");
|
Assert.AreEqual(expected, actual, "Expected "+assetType+".ContainsReferences to be "+expected+" but was "+actual+".");
|
||||||
}
|
}
|
||||||
|
|
|
@ -3196,12 +3196,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
if (!IsActive) return; // We don't need to update inactive clients.
|
if (!IsActive) return; // We don't need to update inactive clients.
|
||||||
|
|
||||||
CoarseLocationUpdatePacket loc = (CoarseLocationUpdatePacket)PacketPool.Instance.GetPacket(PacketType.CoarseLocationUpdate);
|
CoarseLocationUpdatePacket loc = (CoarseLocationUpdatePacket)PacketPool.Instance.GetPacket(PacketType.CoarseLocationUpdate);
|
||||||
// TODO: don't create new blocks if recycling an old packet
|
loc.Header.Reliable = false;
|
||||||
int total = CoarseLocations.Count;
|
|
||||||
CoarseLocationUpdatePacket.IndexBlock ib =
|
// Each packet can only hold around 62 avatar positions and the client clears the mini-map each time
|
||||||
new CoarseLocationUpdatePacket.IndexBlock();
|
// a CoarseLocationUpdate packet is received. Oh well.
|
||||||
|
int total = Math.Min(CoarseLocations.Count, 60);
|
||||||
|
|
||||||
|
CoarseLocationUpdatePacket.IndexBlock ib = new CoarseLocationUpdatePacket.IndexBlock();
|
||||||
|
|
||||||
loc.Location = new CoarseLocationUpdatePacket.LocationBlock[total];
|
loc.Location = new CoarseLocationUpdatePacket.LocationBlock[total];
|
||||||
loc.AgentData = new CoarseLocationUpdatePacket.AgentDataBlock[total];
|
loc.AgentData = new CoarseLocationUpdatePacket.AgentDataBlock[total];
|
||||||
|
|
||||||
int selfindex = -1;
|
int selfindex = -1;
|
||||||
for (int i = 0; i < total; i++)
|
for (int i = 0; i < total; i++)
|
||||||
{
|
{
|
||||||
|
@ -3211,18 +3216,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
lb.X = (byte)CoarseLocations[i].X;
|
lb.X = (byte)CoarseLocations[i].X;
|
||||||
lb.Y = (byte)CoarseLocations[i].Y;
|
lb.Y = (byte)CoarseLocations[i].Y;
|
||||||
|
|
||||||
lb.Z = CoarseLocations[i].Z > 1024 ? (byte)0 : (byte)(CoarseLocations[i].Z * 0.25);
|
lb.Z = CoarseLocations[i].Z > 1024 ? (byte)0 : (byte)(CoarseLocations[i].Z * 0.25f);
|
||||||
loc.Location[i] = lb;
|
loc.Location[i] = lb;
|
||||||
loc.AgentData[i] = new CoarseLocationUpdatePacket.AgentDataBlock();
|
loc.AgentData[i] = new CoarseLocationUpdatePacket.AgentDataBlock();
|
||||||
loc.AgentData[i].AgentID = users[i];
|
loc.AgentData[i].AgentID = users[i];
|
||||||
if (users[i] == AgentId)
|
if (users[i] == AgentId)
|
||||||
selfindex = i;
|
selfindex = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
ib.You = (short)selfindex;
|
ib.You = (short)selfindex;
|
||||||
ib.Prey = -1;
|
ib.Prey = -1;
|
||||||
loc.Index = ib;
|
loc.Index = ib;
|
||||||
loc.Header.Reliable = false;
|
|
||||||
loc.Header.Zerocoded = true;
|
|
||||||
|
|
||||||
OutPacket(loc, ThrottleOutPacketType.Task);
|
OutPacket(loc, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
|
@ -4905,6 +4909,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
/// <param name="throttlePacketType">Throttling category for the packet</param>
|
/// <param name="throttlePacketType">Throttling category for the packet</param>
|
||||||
protected void OutPacket(Packet packet, ThrottleOutPacketType throttlePacketType)
|
protected void OutPacket(Packet packet, ThrottleOutPacketType throttlePacketType)
|
||||||
{
|
{
|
||||||
|
#region BinaryStats
|
||||||
|
LLUDPServer.LogPacketHeader(false, m_circuitCode, 0, packet.Type, (ushort)packet.Length);
|
||||||
|
#endregion BinaryStats
|
||||||
|
|
||||||
m_udpServer.SendPacket(m_udpClient, packet, throttlePacketType, true);
|
m_udpServer.SendPacket(m_udpClient, packet, throttlePacketType, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -197,11 +197,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
private void Initialise(UUID fileID, string fileName)
|
private void Initialise(UUID fileID, string fileName)
|
||||||
{
|
{
|
||||||
m_asset = new AssetBase();
|
m_asset = new AssetBase(fileID, fileName, type);
|
||||||
m_asset.FullID = fileID;
|
|
||||||
m_asset.Type = type;
|
|
||||||
m_asset.Data = new byte[0];
|
m_asset.Data = new byte[0];
|
||||||
m_asset.Name = fileName;
|
|
||||||
m_asset.Description = "empty";
|
m_asset.Description = "empty";
|
||||||
m_asset.Local = true;
|
m_asset.Local = true;
|
||||||
m_asset.Temporary = true;
|
m_asset.Temporary = true;
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
@ -204,6 +205,31 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
TextureSendLimit = 20;
|
TextureSendLimit = 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region BinaryStats
|
||||||
|
config = configSource.Configs["Statistics.Binary"];
|
||||||
|
m_shouldCollectStats = false;
|
||||||
|
if (config != null)
|
||||||
|
{
|
||||||
|
if (config.Contains("enabled") && config.GetBoolean("enabled"))
|
||||||
|
{
|
||||||
|
if (config.Contains("collect_packet_headers"))
|
||||||
|
m_shouldCollectStats = config.GetBoolean("collect_packet_headers");
|
||||||
|
if (config.Contains("packet_headers_period_seconds"))
|
||||||
|
{
|
||||||
|
binStatsMaxFilesize = TimeSpan.FromSeconds(config.GetInt("region_stats_period_seconds"));
|
||||||
|
}
|
||||||
|
if (config.Contains("stats_dir"))
|
||||||
|
{
|
||||||
|
binStatsDir = config.GetString("stats_dir");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_shouldCollectStats = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion BinaryStats
|
||||||
|
|
||||||
m_throttle = new TokenBucket(null, sceneThrottleBps, sceneThrottleBps);
|
m_throttle = new TokenBucket(null, sceneThrottleBps, sceneThrottleBps);
|
||||||
m_throttleRates = new ThrottleRates(configSource);
|
m_throttleRates = new ThrottleRates(configSource);
|
||||||
}
|
}
|
||||||
|
@ -679,6 +705,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
#endregion Incoming Packet Accounting
|
#endregion Incoming Packet Accounting
|
||||||
|
|
||||||
|
#region BinaryStats
|
||||||
|
LogPacketHeader(true, udpClient.CircuitCode, 0, packet.Type, (ushort)packet.Length);
|
||||||
|
#endregion BinaryStats
|
||||||
|
|
||||||
#region Ping Check Handling
|
#region Ping Check Handling
|
||||||
|
|
||||||
if (packet.Type == PacketType.StartPingCheck)
|
if (packet.Type == PacketType.StartPingCheck)
|
||||||
|
@ -700,6 +730,87 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
packetInbox.Enqueue(new IncomingPacket(udpClient, packet));
|
packetInbox.Enqueue(new IncomingPacket(udpClient, packet));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region BinaryStats
|
||||||
|
|
||||||
|
public class PacketLogger
|
||||||
|
{
|
||||||
|
public DateTime StartTime;
|
||||||
|
public string Path = null;
|
||||||
|
public System.IO.BinaryWriter Log = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PacketLogger PacketLog;
|
||||||
|
|
||||||
|
protected static bool m_shouldCollectStats = false;
|
||||||
|
// Number of seconds to log for
|
||||||
|
static TimeSpan binStatsMaxFilesize = TimeSpan.FromSeconds(300);
|
||||||
|
static object binStatsLogLock = new object();
|
||||||
|
static string binStatsDir = "";
|
||||||
|
|
||||||
|
public static void LogPacketHeader(bool incoming, uint circuit, byte flags, PacketType packetType, ushort size)
|
||||||
|
{
|
||||||
|
if (!m_shouldCollectStats) return;
|
||||||
|
|
||||||
|
// Binary logging format is TTTTTTTTCCCCFPPPSS, T=Time, C=Circuit, F=Flags, P=PacketType, S=size
|
||||||
|
|
||||||
|
// Put the incoming bit into the least significant bit of the flags byte
|
||||||
|
if (incoming)
|
||||||
|
flags |= 0x01;
|
||||||
|
else
|
||||||
|
flags &= 0xFE;
|
||||||
|
|
||||||
|
// Put the flags byte into the most significant bits of the type integer
|
||||||
|
uint type = (uint)packetType;
|
||||||
|
type |= (uint)flags << 24;
|
||||||
|
|
||||||
|
// m_log.Debug("1 LogPacketHeader(): Outside lock");
|
||||||
|
lock (binStatsLogLock)
|
||||||
|
{
|
||||||
|
DateTime now = DateTime.Now;
|
||||||
|
|
||||||
|
// m_log.Debug("2 LogPacketHeader(): Inside lock. now is " + now.Ticks);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (PacketLog == null || (now > PacketLog.StartTime + binStatsMaxFilesize))
|
||||||
|
{
|
||||||
|
if (PacketLog != null && PacketLog.Log != null)
|
||||||
|
{
|
||||||
|
PacketLog.Log.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// First log file or time has expired, start writing to a new log file
|
||||||
|
PacketLog = new PacketLogger();
|
||||||
|
PacketLog.StartTime = now;
|
||||||
|
PacketLog.Path = (binStatsDir.Length > 0 ? binStatsDir + System.IO.Path.DirectorySeparatorChar.ToString() : "")
|
||||||
|
+ String.Format("packets-{0}.log", now.ToString("yyyyMMddHHmmss"));
|
||||||
|
PacketLog.Log = new BinaryWriter(File.Open(PacketLog.Path, FileMode.Append, FileAccess.Write));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Serialize the data
|
||||||
|
byte[] output = new byte[18];
|
||||||
|
Buffer.BlockCopy(BitConverter.GetBytes(now.Ticks), 0, output, 0, 8);
|
||||||
|
Buffer.BlockCopy(BitConverter.GetBytes(circuit), 0, output, 8, 4);
|
||||||
|
Buffer.BlockCopy(BitConverter.GetBytes(type), 0, output, 12, 4);
|
||||||
|
Buffer.BlockCopy(BitConverter.GetBytes(size), 0, output, 16, 2);
|
||||||
|
|
||||||
|
// Write the serialized data to disk
|
||||||
|
if (PacketLog != null && PacketLog.Log != null)
|
||||||
|
PacketLog.Log.Write(output);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
m_log.Error("Packet statistics gathering failed: " + ex.Message, ex);
|
||||||
|
if (PacketLog.Log != null)
|
||||||
|
{
|
||||||
|
PacketLog.Log.Close();
|
||||||
|
}
|
||||||
|
PacketLog = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion BinaryStats
|
||||||
|
|
||||||
private void HandleUseCircuitCode(object o)
|
private void HandleUseCircuitCode(object o)
|
||||||
{
|
{
|
||||||
object[] array = (object[])o;
|
object[] array = (object[])o;
|
||||||
|
|
|
@ -112,11 +112,8 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction
|
||||||
bool storeLocal, bool tempFile)
|
bool storeLocal, bool tempFile)
|
||||||
{
|
{
|
||||||
ourClient = remoteClient;
|
ourClient = remoteClient;
|
||||||
m_asset = new AssetBase();
|
m_asset = new AssetBase(assetID, "blank", type);
|
||||||
m_asset.FullID = assetID;
|
|
||||||
m_asset.Type = type;
|
|
||||||
m_asset.Data = data;
|
m_asset.Data = data;
|
||||||
m_asset.Name = "blank";
|
|
||||||
m_asset.Description = "empty";
|
m_asset.Description = "empty";
|
||||||
m_asset.Local = storeLocal;
|
m_asset.Local = storeLocal;
|
||||||
m_asset.Temporary = tempFile;
|
m_asset.Temporary = tempFile;
|
||||||
|
|
|
@ -238,12 +238,11 @@ namespace OpenSim.Region.CoreModules.Agent.TextureSender
|
||||||
|
|
||||||
if (m_cache != null)
|
if (m_cache != null)
|
||||||
{
|
{
|
||||||
AssetBase layerDecodeAsset = new AssetBase();
|
string assetID = "j2kCache_" + AssetId.ToString();
|
||||||
layerDecodeAsset.ID = "j2kCache_" + AssetId.ToString();
|
|
||||||
|
AssetBase layerDecodeAsset = new AssetBase(assetID, assetID, (sbyte)AssetType.Notecard);
|
||||||
layerDecodeAsset.Local = true;
|
layerDecodeAsset.Local = true;
|
||||||
layerDecodeAsset.Name = layerDecodeAsset.ID;
|
|
||||||
layerDecodeAsset.Temporary = true;
|
layerDecodeAsset.Temporary = true;
|
||||||
layerDecodeAsset.Type = (sbyte)AssetType.Notecard;
|
|
||||||
|
|
||||||
#region Serialize Layer Data
|
#region Serialize Layer Data
|
||||||
|
|
||||||
|
|
|
@ -386,11 +386,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
{
|
{
|
||||||
sbyte assetType = ArchiveConstants.EXTENSION_TO_ASSET_TYPE[extension];
|
sbyte assetType = ArchiveConstants.EXTENSION_TO_ASSET_TYPE[extension];
|
||||||
|
|
||||||
|
if (assetType == (sbyte)AssetType.Unknown)
|
||||||
|
m_log.WarnFormat("[INVENTORY ARCHIVER]: Importing {0} byte asset {1} with unknown type", data.Length, uuid);
|
||||||
|
|
||||||
//m_log.DebugFormat("[INVENTORY ARCHIVER]: Importing asset {0}, type {1}", uuid, assetType);
|
//m_log.DebugFormat("[INVENTORY ARCHIVER]: Importing asset {0}, type {1}", uuid, assetType);
|
||||||
|
|
||||||
AssetBase asset = new AssetBase(new UUID(uuid), "RandomName");
|
AssetBase asset = new AssetBase(new UUID(uuid), "RandomName", assetType);
|
||||||
|
|
||||||
asset.Type = assetType;
|
|
||||||
asset.Data = data;
|
asset.Data = data;
|
||||||
|
|
||||||
m_scene.AssetService.Store(asset);
|
m_scene.AssetService.Store(asset);
|
||||||
|
|
|
@ -122,8 +122,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
||||||
}
|
}
|
||||||
|
|
||||||
UUID asset1Id = UUID.Parse("00000000-0000-0000-0000-000000000060");
|
UUID asset1Id = UUID.Parse("00000000-0000-0000-0000-000000000060");
|
||||||
AssetBase asset1 = new AssetBase();
|
AssetBase asset1 = new AssetBase(asset1Id, asset1Id.ToString(), (sbyte)AssetType.Object);
|
||||||
asset1.FullID = asset1Id;
|
|
||||||
asset1.Data = Encoding.ASCII.GetBytes(SceneObjectSerializer.ToXml2Format(object1));
|
asset1.Data = Encoding.ASCII.GetBytes(SceneObjectSerializer.ToXml2Format(object1));
|
||||||
scene.AssetService.Store(asset1);
|
scene.AssetService.Store(asset1);
|
||||||
|
|
||||||
|
@ -339,8 +338,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
||||||
}
|
}
|
||||||
|
|
||||||
UUID asset1Id = UUID.Parse("00000000-0000-0000-0000-000000000060");
|
UUID asset1Id = UUID.Parse("00000000-0000-0000-0000-000000000060");
|
||||||
AssetBase asset1 = new AssetBase();
|
AssetBase asset1 = new AssetBase(asset1Id, String.Empty, (sbyte)AssetType.Object);
|
||||||
asset1.FullID = asset1Id;
|
|
||||||
asset1.Data = Encoding.ASCII.GetBytes(SceneObjectSerializer.ToXml2Format(object1));
|
asset1.Data = Encoding.ASCII.GetBytes(SceneObjectSerializer.ToXml2Format(object1));
|
||||||
scene.AssetService.Store(asset1);
|
scene.AssetService.Store(asset1);
|
||||||
|
|
||||||
|
|
|
@ -311,11 +311,8 @@ namespace OpenSim.Region.CoreModules.Scripting.DynamicTexture
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a new asset for user
|
// Create a new asset for user
|
||||||
AssetBase asset = new AssetBase();
|
AssetBase asset = new AssetBase(UUID.Random(), "DynamicImage" + Util.RandomClass.Next(1, 10000), (sbyte)AssetType.Texture);
|
||||||
asset.FullID = UUID.Random();
|
|
||||||
asset.Data = assetData;
|
asset.Data = assetData;
|
||||||
asset.Name = "DynamicImage" + Util.RandomClass.Next(1, 10000);
|
|
||||||
asset.Type = 0;
|
|
||||||
asset.Description = String.Format("URL image : {0}", Url);
|
asset.Description = String.Format("URL image : {0}", Url);
|
||||||
asset.Local = false;
|
asset.Local = false;
|
||||||
asset.Temporary = ((Disp & DISP_TEMP) != 0);
|
asset.Temporary = ((Disp & DISP_TEMP) != 0);
|
||||||
|
|
|
@ -332,10 +332,12 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
{
|
{
|
||||||
sbyte assetType = ArchiveConstants.EXTENSION_TO_ASSET_TYPE[extension];
|
sbyte assetType = ArchiveConstants.EXTENSION_TO_ASSET_TYPE[extension];
|
||||||
|
|
||||||
|
if (assetType == (sbyte)AssetType.Unknown)
|
||||||
|
m_log.WarnFormat("[ARCHIVER]: Importing {0} byte asset {1} with unknown type", data.Length, uuid);
|
||||||
|
|
||||||
//m_log.DebugFormat("[ARCHIVER]: Importing asset {0}, type {1}", uuid, assetType);
|
//m_log.DebugFormat("[ARCHIVER]: Importing asset {0}, type {1}", uuid, assetType);
|
||||||
|
|
||||||
AssetBase asset = new AssetBase(new UUID(uuid), String.Empty);
|
AssetBase asset = new AssetBase(new UUID(uuid), String.Empty, assetType);
|
||||||
asset.Type = assetType;
|
|
||||||
asset.Data = data;
|
asset.Data = data;
|
||||||
|
|
||||||
// We're relying on the asset service to do the sensible thing and not store the asset if it already
|
// We're relying on the asset service to do the sensible thing and not store the asset if it already
|
||||||
|
|
|
@ -158,9 +158,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
|
|
||||||
m_log.DebugFormat("[ARCHIVER]: Importing asset {0}", filename);
|
m_log.DebugFormat("[ARCHIVER]: Importing asset {0}", filename);
|
||||||
|
|
||||||
AssetBase asset = new AssetBase(new UUID(filename), metadata.Name);
|
AssetBase asset = new AssetBase(new UUID(filename), metadata.Name, metadata.AssetType);
|
||||||
asset.Description = metadata.Description;
|
asset.Description = metadata.Description;
|
||||||
asset.Type = metadata.AssetType;
|
|
||||||
asset.Data = data;
|
asset.Data = data;
|
||||||
|
|
||||||
m_cache.Store(asset);
|
m_cache.Store(asset);
|
||||||
|
|
|
@ -52,16 +52,11 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
|
|
||||||
public EstateTerrainXferHandler(IClientAPI pRemoteClient, string pClientFilename)
|
public EstateTerrainXferHandler(IClientAPI pRemoteClient, string pClientFilename)
|
||||||
{
|
{
|
||||||
|
m_asset = new AssetBase(UUID.Zero, pClientFilename, type);
|
||||||
m_asset = new AssetBase();
|
|
||||||
m_asset.FullID = UUID.Zero;
|
|
||||||
m_asset.Type = type;
|
|
||||||
m_asset.Data = new byte[0];
|
m_asset.Data = new byte[0];
|
||||||
m_asset.Name = pClientFilename;
|
|
||||||
m_asset.Description = "empty";
|
m_asset.Description = "empty";
|
||||||
m_asset.Local = true;
|
m_asset.Local = true;
|
||||||
m_asset.Temporary = true;
|
m_asset.Temporary = true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ulong XferID
|
public ulong XferID
|
||||||
|
|
|
@ -1059,9 +1059,11 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
if (m_scene.Permissions.IsGod(remote_client.AgentId))
|
if (m_scene.Permissions.IsGod(remote_client.AgentId))
|
||||||
{
|
{
|
||||||
land.LandData.OwnerID = ownerID;
|
land.LandData.OwnerID = ownerID;
|
||||||
|
land.LandData.GroupID = UUID.Zero;
|
||||||
|
land.LandData.IsGroupOwned = false;
|
||||||
|
|
||||||
m_scene.ForEachClient(SendParcelOverlay);
|
m_scene.ForEachClient(SendParcelOverlay);
|
||||||
land.SendLandUpdateToClient(remote_client);
|
land.SendLandUpdateToClient(true, remote_client);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1082,8 +1084,10 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
land.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner;
|
land.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner;
|
||||||
else
|
else
|
||||||
land.LandData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID;
|
land.LandData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID;
|
||||||
|
land.LandData.GroupID = UUID.Zero;
|
||||||
|
land.LandData.IsGroupOwned = false;
|
||||||
m_scene.ForEachClient(SendParcelOverlay);
|
m_scene.ForEachClient(SendParcelOverlay);
|
||||||
land.SendLandUpdateToClient(remote_client);
|
land.SendLandUpdateToClient(true, remote_client);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1105,9 +1109,10 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
else
|
else
|
||||||
land.LandData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID;
|
land.LandData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID;
|
||||||
land.LandData.ClaimDate = Util.UnixTimeSinceEpoch();
|
land.LandData.ClaimDate = Util.UnixTimeSinceEpoch();
|
||||||
|
land.LandData.GroupID = UUID.Zero;
|
||||||
land.LandData.IsGroupOwned = false;
|
land.LandData.IsGroupOwned = false;
|
||||||
m_scene.ForEachClient(SendParcelOverlay);
|
m_scene.ForEachClient(SendParcelOverlay);
|
||||||
land.SendLandUpdateToClient(remote_client);
|
land.SendLandUpdateToClient(true, remote_client);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,8 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
#pragma warning restore 0429
|
#pragma warning restore 0429
|
||||||
private bool[,] m_landBitmap = new bool[landArrayMax,landArrayMax];
|
private bool[,] m_landBitmap = new bool[landArrayMax,landArrayMax];
|
||||||
|
|
||||||
|
private int m_lastSeqId = 0;
|
||||||
|
|
||||||
protected LandData m_landData = new LandData();
|
protected LandData m_landData = new LandData();
|
||||||
protected Scene m_scene;
|
protected Scene m_scene;
|
||||||
protected List<SceneObjectGroup> primsOverMe = new List<SceneObjectGroup>();
|
protected List<SceneObjectGroup> primsOverMe = new List<SceneObjectGroup>();
|
||||||
|
@ -81,6 +83,10 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
{
|
{
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
LandData.OwnerID = owner_id;
|
LandData.OwnerID = owner_id;
|
||||||
|
if (is_group_owned)
|
||||||
|
LandData.GroupID = owner_id;
|
||||||
|
else
|
||||||
|
LandData.GroupID = UUID.Zero;
|
||||||
LandData.IsGroupOwned = is_group_owned;
|
LandData.IsGroupOwned = is_group_owned;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,7 +178,19 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
// regionFlags |= (uint)RegionFlags.AllowLandmark;
|
// regionFlags |= (uint)RegionFlags.AllowLandmark;
|
||||||
// if (landData.OwnerID == remote_client.AgentId)
|
// if (landData.OwnerID == remote_client.AgentId)
|
||||||
// regionFlags |= (uint)RegionFlags.AllowSetHome;
|
// regionFlags |= (uint)RegionFlags.AllowSetHome;
|
||||||
remote_client.SendLandProperties(sequence_id,
|
|
||||||
|
int seq_id;
|
||||||
|
if (snap_selection && (sequence_id == 0))
|
||||||
|
{
|
||||||
|
seq_id = m_lastSeqId;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
seq_id = sequence_id;
|
||||||
|
m_lastSeqId = seq_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
remote_client.SendLandProperties(seq_id,
|
||||||
snap_selection, request_result, LandData,
|
snap_selection, request_result, LandData,
|
||||||
(float)m_scene.RegionInfo.RegionSettings.ObjectBonus,
|
(float)m_scene.RegionInfo.RegionSettings.ObjectBonus,
|
||||||
GetParcelMaxPrimCount(this),
|
GetParcelMaxPrimCount(this),
|
||||||
|
@ -184,6 +202,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
if (m_scene.Permissions.CanEditParcel(remote_client.AgentId,this))
|
if (m_scene.Permissions.CanEditParcel(remote_client.AgentId,this))
|
||||||
{
|
{
|
||||||
//Needs later group support
|
//Needs later group support
|
||||||
|
bool snap_selection = false;
|
||||||
LandData newData = LandData.Copy();
|
LandData newData = LandData.Copy();
|
||||||
|
|
||||||
if (args.AuthBuyerID != newData.AuthBuyerID || args.SalePrice != newData.SalePrice)
|
if (args.AuthBuyerID != newData.AuthBuyerID || args.SalePrice != newData.SalePrice)
|
||||||
|
@ -192,6 +211,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
{
|
{
|
||||||
newData.AuthBuyerID = args.AuthBuyerID;
|
newData.AuthBuyerID = args.AuthBuyerID;
|
||||||
newData.SalePrice = args.SalePrice;
|
newData.SalePrice = args.SalePrice;
|
||||||
|
snap_selection = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
newData.Category = args.Category;
|
newData.Category = args.Category;
|
||||||
|
@ -212,7 +232,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData);
|
m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData);
|
||||||
|
|
||||||
SendLandUpdateToAvatarsOverMe();
|
SendLandUpdateToAvatarsOverMe(snap_selection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -230,7 +250,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
newData.Flags &= ~(uint) (ParcelFlags.ForSale | ParcelFlags.ForSaleObjects | ParcelFlags.SellParcelObjects);
|
newData.Flags &= ~(uint) (ParcelFlags.ForSale | ParcelFlags.ForSaleObjects | ParcelFlags.SellParcelObjects);
|
||||||
m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData);
|
m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData);
|
||||||
|
|
||||||
SendLandUpdateToAvatarsOverMe();
|
SendLandUpdateToAvatarsOverMe(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DeedToGroup(UUID groupID)
|
public void DeedToGroup(UUID groupID)
|
||||||
|
@ -242,7 +262,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
|
|
||||||
m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData);
|
m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData);
|
||||||
|
|
||||||
SendLandUpdateToAvatarsOverMe();
|
SendLandUpdateToAvatarsOverMe(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsEitherBannedOrRestricted(UUID avatar)
|
public bool IsEitherBannedOrRestricted(UUID avatar)
|
||||||
|
@ -297,7 +317,17 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
SendLandProperties(0, false, 0, remote_client);
|
SendLandProperties(0, false, 0, remote_client);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendLandUpdateToClient(bool snap_selection, IClientAPI remote_client)
|
||||||
|
{
|
||||||
|
SendLandProperties(0, snap_selection, 0, remote_client);
|
||||||
|
}
|
||||||
|
|
||||||
public void SendLandUpdateToAvatarsOverMe()
|
public void SendLandUpdateToAvatarsOverMe()
|
||||||
|
{
|
||||||
|
SendLandUpdateToAvatarsOverMe(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendLandUpdateToAvatarsOverMe(bool snap_selection)
|
||||||
{
|
{
|
||||||
List<ScenePresence> avatars = m_scene.GetAvatars();
|
List<ScenePresence> avatars = m_scene.GetAvatars();
|
||||||
ILandObject over = null;
|
ILandObject over = null;
|
||||||
|
@ -325,7 +355,7 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
else
|
else
|
||||||
avatars[i].Invulnerable = true;
|
avatars[i].Invulnerable = true;
|
||||||
|
|
||||||
SendLandUpdateToClient(avatars[i].ControllingClient);
|
SendLandUpdateToClient(snap_selection, avatars[i].ControllingClient);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1077,14 +1077,12 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
|
|
||||||
m_scene.RegionInfo.RegionSettings.TerrainImageID = TerrainImageUUID;
|
m_scene.RegionInfo.RegionSettings.TerrainImageID = TerrainImageUUID;
|
||||||
|
|
||||||
AssetBase asset = new AssetBase();
|
AssetBase asset = new AssetBase(
|
||||||
asset.FullID = m_scene.RegionInfo.RegionSettings.TerrainImageID;
|
m_scene.RegionInfo.RegionSettings.TerrainImageID,
|
||||||
|
"terrainImage_" + m_scene.RegionInfo.RegionID.ToString() + "_" + lastMapRefresh.ToString(),
|
||||||
|
(sbyte)AssetType.Texture);
|
||||||
asset.Data = data;
|
asset.Data = data;
|
||||||
asset.Name
|
|
||||||
= "terrainImage_" + m_scene.RegionInfo.RegionID.ToString() + "_" + lastMapRefresh.ToString();
|
|
||||||
asset.Description = m_scene.RegionInfo.RegionName;
|
asset.Description = m_scene.RegionInfo.RegionName;
|
||||||
|
|
||||||
asset.Type = 0;
|
|
||||||
asset.Temporary = temporary;
|
asset.Temporary = temporary;
|
||||||
m_scene.AssetService.Store(asset);
|
m_scene.AssetService.Store(asset);
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,6 +54,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
bool IsBannedFromLand(UUID avatar);
|
bool IsBannedFromLand(UUID avatar);
|
||||||
bool IsRestrictedFromLand(UUID avatar);
|
bool IsRestrictedFromLand(UUID avatar);
|
||||||
void SendLandUpdateToClient(IClientAPI remote_client);
|
void SendLandUpdateToClient(IClientAPI remote_client);
|
||||||
|
void SendLandUpdateToClient(bool snap_selection, IClientAPI remote_client);
|
||||||
List<UUID> CreateAccessListArrayByFlag(AccessList flag);
|
List<UUID> CreateAccessListArrayByFlag(AccessList flag);
|
||||||
void SendAccessList(UUID agentID, UUID sessionID, uint flags, int sequenceID, IClientAPI remote_client);
|
void SendAccessList(UUID agentID, UUID sessionID, uint flags, int sequenceID, IClientAPI remote_client);
|
||||||
void UpdateAccessList(uint flags, List<ParcelManager.ParcelAccessEntry> entries, IClientAPI remote_client);
|
void UpdateAccessList(uint flags, List<ParcelManager.ParcelAccessEntry> entries, IClientAPI remote_client);
|
||||||
|
|
|
@ -118,7 +118,7 @@ namespace OpenSim.Region.Framework.Scenes.Hypergrid
|
||||||
// HGAssetService dispatches it to the remote grid.
|
// HGAssetService dispatches it to the remote grid.
|
||||||
// It's not pretty, but the best that can be done while
|
// It's not pretty, but the best that can be done while
|
||||||
// not having a global naming infrastructure
|
// not having a global naming infrastructure
|
||||||
AssetBase asset1 = new AssetBase();
|
AssetBase asset1 = new AssetBase(asset.FullID, asset.Name, asset.Type);
|
||||||
Copy(asset, asset1);
|
Copy(asset, asset1);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
|
@ -626,11 +626,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private AssetBase CreateAsset(string name, string description, sbyte assetType, byte[] data)
|
private AssetBase CreateAsset(string name, string description, sbyte assetType, byte[] data)
|
||||||
{
|
{
|
||||||
AssetBase asset = new AssetBase();
|
AssetBase asset = new AssetBase(UUID.Random(), name, assetType);
|
||||||
asset.Name = name;
|
|
||||||
asset.Description = description;
|
asset.Description = description;
|
||||||
asset.Type = assetType;
|
|
||||||
asset.FullID = UUID.Random();
|
|
||||||
asset.Data = (data == null) ? new byte[1] : data;
|
asset.Data = (data == null) ? new byte[1] : data;
|
||||||
|
|
||||||
return asset;
|
return asset;
|
||||||
|
|
|
@ -36,6 +36,7 @@ using System.Timers;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
using Nini.Config;
|
using Nini.Config;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
|
using OpenMetaverse.Packets;
|
||||||
using OpenMetaverse.Imaging;
|
using OpenMetaverse.Imaging;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Services.Interfaces;
|
using OpenSim.Services.Interfaces;
|
||||||
|
@ -397,6 +398,73 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region BinaryStats
|
||||||
|
|
||||||
|
public class StatLogger
|
||||||
|
{
|
||||||
|
public DateTime StartTime;
|
||||||
|
public string Path;
|
||||||
|
public System.IO.BinaryWriter Log;
|
||||||
|
}
|
||||||
|
static StatLogger m_statLog = null;
|
||||||
|
static TimeSpan m_statLogPeriod = TimeSpan.FromSeconds(300);
|
||||||
|
static string m_statsDir = String.Empty;
|
||||||
|
static Object m_statLockObject = new Object();
|
||||||
|
private void LogSimStats(SimStats stats)
|
||||||
|
{
|
||||||
|
SimStatsPacket pack = new SimStatsPacket();
|
||||||
|
pack.Region = new SimStatsPacket.RegionBlock();
|
||||||
|
pack.Region.RegionX = stats.RegionX;
|
||||||
|
pack.Region.RegionY = stats.RegionY;
|
||||||
|
pack.Region.RegionFlags = stats.RegionFlags;
|
||||||
|
pack.Region.ObjectCapacity = stats.ObjectCapacity;
|
||||||
|
//pack.Region = //stats.RegionBlock;
|
||||||
|
pack.Stat = stats.StatsBlock;
|
||||||
|
pack.Header.Reliable = false;
|
||||||
|
|
||||||
|
// note that we are inside the reporter lock when called
|
||||||
|
DateTime now = DateTime.Now;
|
||||||
|
|
||||||
|
// hide some time information into the packet
|
||||||
|
pack.Header.Sequence = (uint)now.Ticks;
|
||||||
|
|
||||||
|
lock (m_statLockObject) // m_statLog is shared so make sure there is only executer here
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (m_statLog == null || now > m_statLog.StartTime + m_statLogPeriod)
|
||||||
|
{
|
||||||
|
// First log file or time has expired, start writing to a new log file
|
||||||
|
if (m_statLog != null && m_statLog.Log != null)
|
||||||
|
{
|
||||||
|
m_statLog.Log.Close();
|
||||||
|
}
|
||||||
|
m_statLog = new StatLogger();
|
||||||
|
m_statLog.StartTime = now;
|
||||||
|
m_statLog.Path = (m_statsDir.Length > 0 ? m_statsDir + System.IO.Path.DirectorySeparatorChar.ToString() : "")
|
||||||
|
+ String.Format("stats-{0}.log", now.ToString("yyyyMMddHHmmss"));
|
||||||
|
m_statLog.Log = new BinaryWriter(File.Open(m_statLog.Path, FileMode.Append, FileAccess.Write));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write the serialized data to disk
|
||||||
|
if (m_statLog != null && m_statLog.Log != null)
|
||||||
|
m_statLog.Log.Write(pack.ToBytes());
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
m_log.Error("statistics gathering failed: " + ex.Message, ex);
|
||||||
|
if (m_statLog != null && m_statLog.Log != null)
|
||||||
|
{
|
||||||
|
m_statLog.Log.Close();
|
||||||
|
}
|
||||||
|
m_statLog = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Constructors
|
#region Constructors
|
||||||
|
|
||||||
public Scene(RegionInfo regInfo, AgentCircuitManager authen,
|
public Scene(RegionInfo regInfo, AgentCircuitManager authen,
|
||||||
|
@ -582,6 +650,38 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
m_log.Info("[SCENE]: Using the " + m_update_prioritization_scheme + " prioritization scheme");
|
m_log.Info("[SCENE]: Using the " + m_update_prioritization_scheme + " prioritization scheme");
|
||||||
|
|
||||||
|
#region BinaryStats
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
IConfig statConfig = m_config.Configs["Statistics.Binary"];
|
||||||
|
if (statConfig.Contains("enabled") && statConfig.GetBoolean("enabled"))
|
||||||
|
{
|
||||||
|
if (statConfig.Contains("collect_region_stats"))
|
||||||
|
{
|
||||||
|
if (statConfig.GetBoolean("collect_region_stats"))
|
||||||
|
{
|
||||||
|
// if enabled, add us to the event. If not enabled, I won't get called
|
||||||
|
StatsReporter.OnSendStatsResult += LogSimStats;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (statConfig.Contains("region_stats_period_seconds"))
|
||||||
|
{
|
||||||
|
m_statLogPeriod = TimeSpan.FromSeconds(statConfig.GetInt("region_stats_period_seconds"));
|
||||||
|
}
|
||||||
|
if (statConfig.Contains("stats_dir"))
|
||||||
|
{
|
||||||
|
m_statsDir = statConfig.GetString("stats_dir");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// if it doesn't work, we don't collect anything
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion BinaryStats
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
|
|
@ -1918,14 +1918,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AssetBase Animasset = new AssetBase();
|
AssetBase Animasset = new AssetBase(UUID.Random(), "Random Animation", (sbyte)AssetType.Animation);
|
||||||
Animasset.Data = anim.ToBytes();
|
Animasset.Data = anim.ToBytes();
|
||||||
Animasset.Temporary = true;
|
Animasset.Temporary = true;
|
||||||
Animasset.Local = true;
|
Animasset.Local = true;
|
||||||
Animasset.FullID = UUID.Random();
|
|
||||||
Animasset.ID = Animasset.FullID.ToString();
|
|
||||||
Animasset.Name = "Random Animation";
|
|
||||||
Animasset.Type = (sbyte)AssetType.Animation;
|
|
||||||
Animasset.Description = "dance";
|
Animasset.Description = "dance";
|
||||||
//BinBVHAnimation bbvhanim = new BinBVHAnimation(Animasset.Data);
|
//BinBVHAnimation bbvhanim = new BinBVHAnimation(Animasset.Data);
|
||||||
|
|
||||||
|
|
|
@ -49,11 +49,8 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
|
||||||
|
|
||||||
public UUID SaveBitmap(Bitmap data, bool lossless, bool temporary)
|
public UUID SaveBitmap(Bitmap data, bool lossless, bool temporary)
|
||||||
{
|
{
|
||||||
AssetBase asset = new AssetBase();
|
AssetBase asset = new AssetBase(UUID.Random(), "MRMDynamicImage", (sbyte)AssetType.Texture);
|
||||||
asset.FullID = UUID.Random();
|
|
||||||
asset.Data = OpenJPEG.EncodeFromImage(data, lossless);
|
asset.Data = OpenJPEG.EncodeFromImage(data, lossless);
|
||||||
asset.Name = "MRMDynamicImage";
|
|
||||||
asset.Type = 0;
|
|
||||||
asset.Description = "MRM Image";
|
asset.Description = "MRM Image";
|
||||||
asset.Local = false;
|
asset.Local = false;
|
||||||
asset.Temporary = temporary;
|
asset.Temporary = temporary;
|
||||||
|
|
|
@ -1483,12 +1483,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
// Create new asset
|
// Create new asset
|
||||||
AssetBase asset = new AssetBase();
|
AssetBase asset = new AssetBase(UUID.Random(), notecardName, (sbyte)AssetType.Notecard);
|
||||||
asset.Name = notecardName;
|
|
||||||
asset.Description = "Script Generated Notecard";
|
asset.Description = "Script Generated Notecard";
|
||||||
asset.Type = 7;
|
string notecardData = String.Empty;
|
||||||
asset.FullID = UUID.Random();
|
|
||||||
string notecardData = "";
|
|
||||||
|
|
||||||
for (int i = 0; i < contents.Length; i++) {
|
for (int i = 0; i < contents.Length; i++) {
|
||||||
notecardData += contents.GetLSLStringItem(i) + "\n";
|
notecardData += contents.GetLSLStringItem(i) + "\n";
|
||||||
|
|
|
@ -243,7 +243,7 @@ namespace OpenSim.Services.Connectors
|
||||||
if (metadata == null)
|
if (metadata == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
asset = new AssetBase();
|
asset = new AssetBase(metadata.FullID, metadata.Name, metadata.Type);
|
||||||
asset.Metadata = metadata;
|
asset.Metadata = metadata;
|
||||||
}
|
}
|
||||||
asset.Data = data;
|
asset.Data = data;
|
||||||
|
|
|
@ -140,12 +140,11 @@ namespace OpenSim.Services.Connectors.Grid
|
||||||
Bitmap m = new Bitmap(info.RegionID.ToString() + ".jpg");
|
Bitmap m = new Bitmap(info.RegionID.ToString() + ".jpg");
|
||||||
//m_log.Debug("Size: " + m.PhysicalDimension.Height + "-" + m.PhysicalDimension.Width);
|
//m_log.Debug("Size: " + m.PhysicalDimension.Height + "-" + m.PhysicalDimension.Width);
|
||||||
byte[] imageData = OpenJPEG.EncodeFromImage(m, true);
|
byte[] imageData = OpenJPEG.EncodeFromImage(m, true);
|
||||||
AssetBase ass = new AssetBase(UUID.Random(), "region " + info.RegionID.ToString());
|
AssetBase ass = new AssetBase(UUID.Random(), "region " + info.RegionID.ToString(), (sbyte)AssetType.Texture);
|
||||||
|
|
||||||
// !!! for now
|
// !!! for now
|
||||||
//info.RegionSettings.TerrainImageID = ass.FullID;
|
//info.RegionSettings.TerrainImageID = ass.FullID;
|
||||||
|
|
||||||
ass.Type = (int)AssetType.Texture;
|
|
||||||
ass.Temporary = true;
|
ass.Temporary = true;
|
||||||
ass.Local = true;
|
ass.Local = true;
|
||||||
ass.Data = imageData;
|
ass.Data = imageData;
|
||||||
|
|
Loading…
Reference in New Issue