From 5e4d6cab00cb29cd088ab7b62ab13aff103b64cb Mon Sep 17 00:00:00 2001 From: onefang Date: Sun, 19 May 2019 21:24:15 +1000 Subject: Dump OpenSim 0.9.0.1 into it's own branch. --- .../Avatar/BakedTextures/XBakesModule.cs | 97 ++++++++++++++-------- 1 file changed, 62 insertions(+), 35 deletions(-) (limited to 'OpenSim/Region/CoreModules/Avatar/BakedTextures') diff --git a/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs b/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs index 414f06a..61e461a 100644 --- a/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs @@ -53,6 +53,7 @@ namespace OpenSim.Region.CoreModules.Avatar.BakedTextures private UTF8Encoding enc = new UTF8Encoding(); private string m_URL = String.Empty; private static XmlSerializer m_serializer = new XmlSerializer(typeof(AssetBase)); + private static bool m_enabled = false; private static IServiceAuth m_Auth; @@ -63,11 +64,19 @@ namespace OpenSim.Region.CoreModules.Avatar.BakedTextures return; m_URL = config.GetString("URL", String.Empty); + if (m_URL == String.Empty) + return; + + m_enabled = true; + m_Auth = ServiceAuth.Create(configSource, "XBakes"); } public void AddRegion(Scene scene) { + if (!m_enabled) + return; + // m_log.InfoFormat("[XBakes]: Enabled for region {0}", scene.RegionInfo.RegionName); m_Scene = scene; @@ -101,8 +110,6 @@ namespace OpenSim.Region.CoreModules.Avatar.BakedTextures if (m_URL == String.Empty) return null; - int size = 0; - using (RestClient rc = new RestClient(m_URL)) { List ret = new List(); @@ -113,35 +120,42 @@ namespace OpenSim.Region.CoreModules.Avatar.BakedTextures try { - Stream s = rc.Request(m_Auth); - - using (XmlTextReader sr = new XmlTextReader(s)) + using(Stream s = rc.Request(m_Auth)) { - sr.ReadStartElement("BakedAppearance"); - while (sr.LocalName == "BakedTexture") + using(XmlTextReader sr = new XmlTextReader(s)) { - string sTextureIndex = sr.GetAttribute("TextureIndex"); - int lTextureIndex = Convert.ToInt32(sTextureIndex); - string sCacheId = sr.GetAttribute("CacheId"); - UUID lCacheId = UUID.Zero; - if (!(UUID.TryParse(sCacheId, out lCacheId))) + sr.ProhibitDtd = true; + + sr.ReadStartElement("BakedAppearance"); + while(sr.LocalName == "BakedTexture") { + string sTextureIndex = sr.GetAttribute("TextureIndex"); + int lTextureIndex = Convert.ToInt32(sTextureIndex); + string sCacheId = sr.GetAttribute("CacheId"); + UUID lCacheId = UUID.Zero; + if(!(UUID.TryParse(sCacheId,out lCacheId))) + { // ?? Nothing here + } + + sr.ReadStartElement("BakedTexture"); + if(sr.Name=="AssetBase") + { + AssetBase a = (AssetBase)m_serializer.Deserialize(sr); + ret.Add(new WearableCacheItem() + { + CacheId = lCacheId, + TextureIndex = (uint)lTextureIndex, + TextureAsset = a, + TextureID = a.FullID + }); + sr.ReadEndElement(); + } } - - ++size; - - sr.ReadStartElement("BakedTexture"); - AssetBase a = (AssetBase)m_serializer.Deserialize(sr); - ret.Add(new WearableCacheItem() { CacheId = lCacheId, TextureIndex = (uint)lTextureIndex, TextureAsset = a, TextureID = a.FullID }); - - sr.ReadEndElement(); + m_log.DebugFormat("[XBakes]: read {0} textures for user {1}",ret.Count,id); } - - m_log.DebugFormat("[XBakes]: read {0} textures for user {1}", ret.Count, id); + return ret.ToArray(); } - - return ret.ToArray(); } catch (XmlException) { @@ -150,11 +164,20 @@ namespace OpenSim.Region.CoreModules.Avatar.BakedTextures } } + public void Store(UUID agentId) + { + } + + public void UpdateMeshAvatar(UUID agentId) + { + } + public void Store(UUID agentId, WearableCacheItem[] data) { if (m_URL == String.Empty) return; + int numberWears = 0; MemoryStream reqStream; using (MemoryStream bakeStream = new MemoryStream()) @@ -164,15 +187,16 @@ namespace OpenSim.Region.CoreModules.Avatar.BakedTextures for (int i = 0; i < data.Length; i++) { - if (data[i] != null) + if (data[i] != null && data[i].TextureAsset != null) { bakeWriter.WriteStartElement(String.Empty, "BakedTexture", String.Empty); bakeWriter.WriteAttributeString(String.Empty, "TextureIndex", String.Empty, data[i].TextureIndex.ToString()); bakeWriter.WriteAttributeString(String.Empty, "CacheId", String.Empty, data[i].CacheId.ToString()); - if (data[i].TextureAsset != null) +// if (data[i].TextureAsset != null) m_serializer.Serialize(bakeWriter, data[i].TextureAsset); bakeWriter.WriteEndElement(); + numberWears++; } } @@ -182,19 +206,22 @@ namespace OpenSim.Region.CoreModules.Avatar.BakedTextures reqStream = new MemoryStream(bakeStream.ToArray()); } - RestClient rc = new RestClient(m_URL); - rc.AddResourcePath("bakes"); - rc.AddResourcePath(agentId.ToString()); - - rc.RequestMethod = "POST"; - Util.FireAndForget( delegate { - rc.Request(reqStream, m_Auth); - m_log.DebugFormat("[XBakes]: stored {0} textures for user {1}", data.Length, agentId); + using(RestClient rc = new RestClient(m_URL)) + { + rc.AddResourcePath("bakes"); + rc.AddResourcePath(agentId.ToString()); + rc.RequestMethod = "POST"; + + rc.Request(reqStream, m_Auth); + m_log.DebugFormat("[XBakes]: stored {0} textures for user {1}", numberWears, agentId); + } + if(reqStream != null) + reqStream.Dispose(); }, null, "XBakesModule.Store" ); } } -} \ No newline at end of file +} -- cgit v1.1