From 0c03a48fb2060eda4d288e2d2ca4e650ce000b4b Mon Sep 17 00:00:00 2001 From: Mike Mazur Date: Wed, 4 Feb 2009 00:01:36 +0000 Subject: - add OpenSim.Framework.AssetMetadata class. AssetBase is now composed of it - trim trailing whitespace --- OpenSim/Framework/AssetBase.cs | 95 +++++++++++++++++----- OpenSim/Framework/AssetLandmark.cs | 8 +- .../Filesystem/AssetLoaderFileSystem.cs | 2 +- .../Framework/Communications/Cache/AssetCache.cs | 84 +++++++++---------- .../Communications/Cache/CryptoGridAssetClient.cs | 46 +++++------ .../Communications/Cache/FileAssetClient.cs | 4 +- .../Communications/Cache/GridAssetClient.cs | 2 +- .../Framework/Communications/Capabilities/Caps.cs | 18 ++-- 8 files changed, 155 insertions(+), 104 deletions(-) (limited to 'OpenSim/Framework') diff --git a/OpenSim/Framework/AssetBase.cs b/OpenSim/Framework/AssetBase.cs index 48ef2ff..f9c9457 100644 --- a/OpenSim/Framework/AssetBase.cs +++ b/OpenSim/Framework/AssetBase.cs @@ -26,7 +26,9 @@ */ using System; +using System.Collections.Generic; using OpenMetaverse; +using OpenMetaverse.StructuredData; namespace OpenSim.Framework { @@ -34,69 +36,118 @@ namespace OpenSim.Framework public class AssetBase { private byte[] _data; - private string _description = String.Empty; - private UUID _fullid; - private bool _local = false; - private string _name = String.Empty; - private bool _temporary = false; - private sbyte _type; + private AssetMetadata _metadata; public AssetBase() { + Metadata = new AssetMetadata(); } public AssetBase(UUID assetId, string name) { - FullID = assetId; - Name = name; + Metadata = new AssetMetadata(); + Metadata.FullID = assetId; + Metadata.Name = name; + } + + public virtual byte[] Data + { + get { return _data; } + set { _data = value; } + } + + public virtual AssetMetadata Metadata + { + get { return _metadata; } + set { _metadata = value; } } + } + + [Serializable] + public class AssetMetadata + { + private UUID _fullid; + private string _name = String.Empty; + private string _description = String.Empty; + private DateTime _creation_date; + private sbyte _type; + private string _content_type; + private byte[] _sha1; + private bool _local = false; + private bool _temporary = false; + //private Dictionary _methods = new Dictionary(); + //private OSDMap _extra_data; - public virtual UUID FullID + public UUID FullID { get { return _fullid; } set { _fullid = value; } } - public virtual string ID + public string ID { get { return _fullid.ToString(); } set { _fullid = new UUID(value); } } - public virtual byte[] Data + public string Name { - get { return _data; } - set { _data = value; } + get { return _name; } + set { _name = value; } + } + + public string Description + { + get { return _description; } + set { _description = value; } + } + + public DateTime CreationDate + { + get { return _creation_date; } + set { _creation_date = value; } } - public virtual sbyte Type + public sbyte Type { get { return _type; } set { _type = value; } } - public virtual string Name + public string ContentType { - get { return _name; } - set { _name = value; } + get { return _content_type; } + set { _content_type = value; } } - public virtual string Description + public byte[] SHA1 { - get { return _description; } - set { _description = value; } + get { return _sha1; } + set { _sha1 = value; } } - public virtual bool Local + public bool Local { get { return _local; } set { _local = value; } } - public virtual bool Temporary + public bool Temporary { get { return _temporary; } set { _temporary = value; } } + + //public Dictionary Methods + //{ + // get { return _methods; } + // set { _methods = value; } + //} + + //public OSDMap ExtraData + //{ + // get { return _extra_data; } + // set { _extra_data = value; } + //} } } diff --git a/OpenSim/Framework/AssetLandmark.cs b/OpenSim/Framework/AssetLandmark.cs index d636d34..bbf25d8 100644 --- a/OpenSim/Framework/AssetLandmark.cs +++ b/OpenSim/Framework/AssetLandmark.cs @@ -40,10 +40,10 @@ namespace OpenSim.Framework public AssetLandmark(AssetBase a) { Data = a.Data; - FullID = a.FullID; - Type = a.Type; - Name = a.Name; - Description = a.Description; + Metadata.FullID = a.Metadata.FullID; + Metadata.Type = a.Metadata.Type; + Metadata.Name = a.Metadata.Name; + Metadata.Description = a.Metadata.Description; InternData(); } diff --git a/OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs b/OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs index 9d0f697..55b4ebd 100644 --- a/OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs +++ b/OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs @@ -145,7 +145,7 @@ namespace OpenSim.Framework.AssetLoader.Filesystem AssetBase newAsset = CreateAsset(assetIdStr, name, assetPath, false); - newAsset.Type = type; + newAsset.Metadata.Type = type; assets.Add(newAsset); } } diff --git a/OpenSim/Framework/Communications/Cache/AssetCache.cs b/OpenSim/Framework/Communications/Cache/AssetCache.cs index 653597b..2b2467c 100644 --- a/OpenSim/Framework/Communications/Cache/AssetCache.cs +++ b/OpenSim/Framework/Communications/Cache/AssetCache.cs @@ -42,7 +42,7 @@ namespace OpenSim.Framework.Communications.Cache /// /// Manages local cache of assets and their sending to viewers. /// - /// + /// /// This class actually encapsulates two largely separate mechanisms. One mechanism fetches assets either /// synchronously or async and passes the data back to the requester. The second mechanism fetches assets and /// sends packetised data directly back to the client. The only point where they meet is AssetReceived() and @@ -80,7 +80,7 @@ namespace OpenSim.Framework.Communications.Cache private Dictionary RequestLists; /// - /// The 'server' from which assets can be requested and to which assets are persisted. + /// The 'server' from which assets can be requested and to which assets are persisted. /// private readonly IAssetServer m_assetServer; @@ -211,7 +211,7 @@ namespace OpenSim.Framework.Communications.Cache else { // m_log.DebugFormat("[ASSET CACHE]: Adding request for {0} {1}", isTexture ? "texture" : "asset", assetId); - + NewAssetRequest req = new NewAssetRequest(callback); AssetRequestsList requestList; @@ -228,10 +228,10 @@ namespace OpenSim.Framework.Communications.Cache // m_log.DebugFormat("[ASSET CACHE]: Adding request for {0} {1}", isTexture ? "texture" : "asset", assetId); requestList = new AssetRequestsList(); requestList.TimeRequested = DateTime.Now; - requestList.Requests.Add(req); - - RequestLists.Add(assetId, requestList); - + requestList.Requests.Add(req); + + RequestLists.Add(assetId, requestList); + m_assetServer.RequestAsset(assetId, isTexture); } } @@ -247,7 +247,7 @@ namespace OpenSim.Framework.Communications.Cache /// the allowed number of polls. This isn't a very good way of doing things since a single thread /// is processing inbound packets, so if the asset server is slow, we could block this for up to /// the timeout period. Whereever possible we want to use the asynchronous callback GetAsset() - /// + /// /// /// /// null if the asset could not be retrieved @@ -264,7 +264,7 @@ namespace OpenSim.Framework.Communications.Cache { return asset; } - + m_assetServer.RequestAsset(assetID, isTexture); do @@ -275,7 +275,7 @@ namespace OpenSim.Framework.Communications.Cache { return asset; } - } + } while (--maxPolls > 0); m_log.WarnFormat("[ASSET CACHE]: {0} {1} was not received before the retrieval timeout was reached", @@ -290,17 +290,17 @@ namespace OpenSim.Framework.Communications.Cache /// public void AddAsset(AssetBase asset) { - if (!m_memcache.Contains(asset.FullID)) + if (!m_memcache.Contains(asset.Metadata.FullID)) { - m_log.Info("[CACHE] Caching " + asset.FullID + " for 24 hours from last access"); + m_log.Info("[CACHE] Caching " + asset.Metadata.FullID + " for 24 hours from last access"); // Use 24 hour rolling asset cache. - m_memcache.AddOrUpdate(asset.FullID, asset, TimeSpan.FromHours(24)); + m_memcache.AddOrUpdate(asset.Metadata.FullID, asset, TimeSpan.FromHours(24)); - // According to http://wiki.secondlife.com/wiki/AssetUploadRequest, Local signifies that the + // According to http://wiki.secondlife.com/wiki/AssetUploadRequest, Local signifies that the // information is stored locally. It could disappear, in which case we could send the - // ImageNotInDatabase packet to tell the client this. + // ImageNotInDatabase packet to tell the client this. // - // However, this doesn't quite appear to work with local textures that are part of an avatar's + // However, this doesn't quite appear to work with local textures that are part of an avatar's // appearance texture set. Whilst sending an ImageNotInDatabase does trigger an automatic rebake // and reupload by the client, if those assets aren't pushed to the asset server anyway, then // on crossing onto another region server, other avatars can no longer get the required textures. @@ -314,7 +314,7 @@ namespace OpenSim.Framework.Communications.Cache // But for now, we're going to take the easy way out and store local assets globally. // // TODO: Also, Temporary is now deprecated. We should start ignoring it and not passing it out from LLClientView. - if (!asset.Temporary || asset.Local) + if (!asset.Metadata.Temporary || asset.Metadata.Local) { m_assetServer.StoreAsset(asset); } @@ -345,25 +345,25 @@ namespace OpenSim.Framework.Communications.Cache { AssetInfo assetInf = new AssetInfo(asset); - if (!m_memcache.Contains(assetInf.FullID)) + if (!m_memcache.Contains(assetInf.Metadata.FullID)) { - m_memcache.AddOrUpdate(assetInf.FullID, assetInf, TimeSpan.FromHours(24)); + m_memcache.AddOrUpdate(assetInf.Metadata.FullID, assetInf, TimeSpan.FromHours(24)); if (StatsManager.SimExtraStats != null) { StatsManager.SimExtraStats.AddAsset(assetInf); } - if (RequestedAssets.ContainsKey(assetInf.FullID)) + if (RequestedAssets.ContainsKey(assetInf.Metadata.FullID)) { - AssetRequest req = RequestedAssets[assetInf.FullID]; + AssetRequest req = RequestedAssets[assetInf.Metadata.FullID]; req.AssetInf = assetInf; req.NumPackets = CalculateNumPackets(assetInf.Data); - RequestedAssets.Remove(assetInf.FullID); + RequestedAssets.Remove(assetInf.Metadata.FullID); // If it's a direct request for a script, drop it // because it's a hacked client - if (req.AssetRequestSource != 2 || assetInf.Type != 10) + if (req.AssetRequestSource != 2 || assetInf.Metadata.Type != 10) AssetRequests.Add(req); } } @@ -373,8 +373,8 @@ namespace OpenSim.Framework.Communications.Cache lock (RequestLists) { - if (RequestLists.TryGetValue(asset.FullID, out reqList)) - RequestLists.Remove(asset.FullID); + if (RequestLists.TryGetValue(asset.Metadata.FullID, out reqList)) + RequestLists.Remove(asset.Metadata.FullID); } if (reqList != null) @@ -385,8 +385,8 @@ namespace OpenSim.Framework.Communications.Cache foreach (NewAssetRequest req in reqList.Requests) { // Xantor 20080526 are we really calling all the callbacks if multiple queued for 1 request? -- Yes, checked - // m_log.DebugFormat("[ASSET CACHE]: Callback for asset {0}", asset.FullID); - req.Callback(asset.FullID, asset); + // m_log.DebugFormat("[ASSET CACHE]: Callback for asset {0}", asset.Metadata.FullID); + req.Callback(asset.Metadata.FullID, asset); } } } @@ -398,12 +398,12 @@ namespace OpenSim.Framework.Communications.Cache // Remember the fact that this asset could not be found to prevent delays from repeated requests m_memcache.Add(assetID, null, TimeSpan.FromHours(24)); - + // Notify requesters for this asset AssetRequestsList reqList; lock (RequestLists) { - if (RequestLists.TryGetValue(assetID, out reqList)) + if (RequestLists.TryGetValue(assetID, out reqList)) RequestLists.Remove(assetID); } @@ -411,7 +411,7 @@ namespace OpenSim.Framework.Communications.Cache { if (StatsManager.SimExtraStats != null) StatsManager.SimExtraStats.AddAssetRequestTimeAfterCacheMiss(DateTime.Now - reqList.TimeRequested); - + foreach (NewAssetRequest req in reqList.Requests) { req.Callback(assetID, null); @@ -461,7 +461,7 @@ namespace OpenSim.Framework.Communications.Cache source = 3; //Console.WriteLine("asset request " + requestID); } - + //check to see if asset is in local cache, if not we need to request it from asset server. //Console.WriteLine("asset request " + requestID); if (!m_memcache.Contains(requestID)) @@ -494,7 +494,7 @@ namespace OpenSim.Framework.Communications.Cache } // Scripts cannot be retrieved by direct request - if (transferRequest.TransferInfo.SourceType == 2 && asset.Type == 10) + if (transferRequest.TransferInfo.SourceType == 2 && asset.Metadata.Type == 10) return; // The asset is knosn to exist and is in our cache, so add it to the AssetRequests list @@ -520,7 +520,7 @@ namespace OpenSim.Framework.Communications.Cache //no requests waiting return; } - + // if less than 5, do all of them int num = Math.Min(5, AssetRequests.Count); @@ -580,10 +580,10 @@ namespace OpenSim.Framework.Communications.Cache public AssetInfo(AssetBase aBase) { Data = aBase.Data; - FullID = aBase.FullID; - Type = aBase.Type; - Name = aBase.Name; - Description = aBase.Description; + Metadata.FullID = aBase.Metadata.FullID; + Metadata.Type = aBase.Metadata.Type; + Metadata.Name = aBase.Metadata.Name; + Metadata.Description = aBase.Metadata.Description; } } @@ -592,10 +592,10 @@ namespace OpenSim.Framework.Communications.Cache public TextureImage(AssetBase aBase) { Data = aBase.Data; - FullID = aBase.FullID; - Type = aBase.Type; - Name = aBase.Name; - Description = aBase.Description; + Metadata.FullID = aBase.Metadata.FullID; + Metadata.Type = aBase.Metadata.Type; + Metadata.Name = aBase.Metadata.Name; + Metadata.Description = aBase.Metadata.Description; } } @@ -608,7 +608,7 @@ namespace OpenSim.Framework.Communications.Cache /// A list of requests for assets /// public List Requests = new List(); - + /// /// Record the time that this request was first made. /// diff --git a/OpenSim/Framework/Communications/Cache/CryptoGridAssetClient.cs b/OpenSim/Framework/Communications/Cache/CryptoGridAssetClient.cs index 3ed9172..1b3e70d 100644 --- a/OpenSim/Framework/Communications/Cache/CryptoGridAssetClient.cs +++ b/OpenSim/Framework/Communications/Cache/CryptoGridAssetClient.cs @@ -86,11 +86,11 @@ namespace OpenSim.Framework.Communications.Cache #region Rjindael /// - /// This class uses a symmetric key algorithm (Rijndael/AES) to encrypt and + /// This class uses a symmetric key algorithm (Rijndael/AES) to encrypt and /// decrypt data. As long as encryption and decryption routines use the same /// parameters to generate the keys, the keys are guaranteed to be the same. /// The class uses static functions with duplicate code to make it easier to - /// demonstrate encryption and decryption logic. In a real-life application, + /// demonstrate encryption and decryption logic. In a real-life application, /// this may not be the most efficient way of handling encryption, so - as /// soon as you feel comfortable with it - you may want to redesign this class. /// @@ -123,11 +123,11 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// Initialization vector (or IV). This value is required to encrypt the - /// first block of plaintext data. For RijndaelManaged class IV must be + /// first block of plaintext data. For RijndaelManaged class IV must be /// exactly 16 ASCII characters long. /// /// - /// Size of encryption key in bits. Allowed values are: 128, 192, and 256. + /// Size of encryption key in bits. Allowed values are: 128, 192, and 256. /// Longer keys are more secure than shorter keys. /// /// @@ -143,7 +143,7 @@ namespace OpenSim.Framework.Communications.Cache { // Convert strings into byte arrays. // Let us assume that strings only contain ASCII codes. - // If strings include Unicode characters, use Unicode, UTF7, or UTF8 + // If strings include Unicode characters, use Unicode, UTF7, or UTF8 // encoding. byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector); byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue); @@ -153,8 +153,8 @@ namespace OpenSim.Framework.Communications.Cache byte[] plainTextBytes = plainText; // First, we must create a password, from which the key will be derived. - // This password will be generated from the specified passphrase and - // salt value. The password will be created using the specified hash + // This password will be generated from the specified passphrase and + // salt value. The password will be created using the specified hash // algorithm. Password creation can be done in several iterations. PasswordDeriveBytes password = new PasswordDeriveBytes( passPhrase, @@ -173,8 +173,8 @@ namespace OpenSim.Framework.Communications.Cache // (CBC). Use default options for other symmetric key parameters. symmetricKey.Mode = CipherMode.CBC; - // Generate encryptor from the existing key bytes and initialization - // vector. Key size will be defined based on the number of the key + // Generate encryptor from the existing key bytes and initialization + // vector. Key size will be defined based on the number of the key // bytes. ICryptoTransform encryptor = symmetricKey.CreateEncryptor( keyBytes, @@ -265,8 +265,8 @@ namespace OpenSim.Framework.Communications.Cache // Convert our ciphertext into a byte array. byte[] cipherTextBytes = cipherText; - // First, we must create a password, from which the key will be - // derived. This password will be generated from the specified + // First, we must create a password, from which the key will be + // derived. This password will be generated from the specified // passphrase and salt value. The password will be created using // the specified hash algorithm. Password creation can be done in // several iterations. @@ -286,8 +286,8 @@ namespace OpenSim.Framework.Communications.Cache // (CBC). Use default options for other symmetric key parameters. symmetricKey.Mode = CipherMode.CBC; - // Generate decryptor from the existing key bytes and initialization - // vector. Key size will be defined based on the number of the key + // Generate decryptor from the existing key bytes and initialization + // vector. Key size will be defined based on the number of the key // bytes. ICryptoTransform decryptor = symmetricKey.CreateDecryptor( keyBytes, @@ -320,7 +320,7 @@ namespace OpenSim.Framework.Communications.Cache for (i = 0; i < decryptedByteCount; i++) plainText[i] = plainTextBytes[i]; - // Return decrypted string. + // Return decrypted string. return plainText; } } @@ -403,17 +403,17 @@ namespace OpenSim.Framework.Communications.Cache string salt = Convert.ToBase64String(rand); x.Data = UtilRijndael.Encrypt(x.Data, file.Secret, salt, "SHA1", 2, file.IVBytes, file.Keysize); - x.Description = String.Format("ENCASS#:~:#{0}#:~:#{1}#:~:#{2}#:~:#{3}", - "OPENSIM_AES_AF1", - file.AlsoKnownAs, - salt, - x.Description); + x.Metadata.Description = String.Format("ENCASS#:~:#{0}#:~:#{1}#:~:#{2}#:~:#{3}", + "OPENSIM_AES_AF1", + file.AlsoKnownAs, + salt, + x.Metadata.Description); } private bool DecryptAssetBase(AssetBase x) { // Check it's encrypted first. - if (!x.Description.Contains("ENCASS")) + if (!x.Metadata.Description.Contains("ENCASS")) return true; // ENCASS:ALG:AKA:SALT:Description @@ -421,7 +421,7 @@ namespace OpenSim.Framework.Communications.Cache string[] splitchars = new string[1]; splitchars[0] = "#:~:#"; - string[] meta = x.Description.Split(splitchars, StringSplitOptions.None); + string[] meta = x.Metadata.Description.Split(splitchars, StringSplitOptions.None); if (meta.Length < 5) { m_log.Warn("[ENCASSETS] Recieved Encrypted Asset, but header is corrupt"); @@ -432,7 +432,7 @@ namespace OpenSim.Framework.Communications.Cache if (m_keyfiles.ContainsKey(meta[2])) { RjinKeyfile deckey = m_keyfiles[meta[2]]; - x.Description = meta[4]; + x.Metadata.Description = meta[4]; switch (meta[1]) { case "OPENSIM_AES_AF1": @@ -506,7 +506,7 @@ namespace OpenSim.Framework.Communications.Cache { string assetUrl = _assetServerUrl + "/assets/"; - m_log.InfoFormat("[CRYPTO GRID ASSET CLIENT]: Sending store request for asset {0}", asset.FullID); + m_log.InfoFormat("[CRYPTO GRID ASSET CLIENT]: Sending store request for asset {0}", asset.Metadata.FullID); RestObjectPoster.BeginPostObject(assetUrl, asset); } diff --git a/OpenSim/Framework/Communications/Cache/FileAssetClient.cs b/OpenSim/Framework/Communications/Cache/FileAssetClient.cs index 5f15c3e..8b8172e 100644 --- a/OpenSim/Framework/Communications/Cache/FileAssetClient.cs +++ b/OpenSim/Framework/Communications/Cache/FileAssetClient.cs @@ -45,7 +45,7 @@ namespace OpenSim.Framework.Communications.Cache } public override void StoreAsset(AssetBase asset) { - byte[] idBytes = asset.FullID.Guid.ToByteArray(); + byte[] idBytes = asset.Metadata.FullID.Guid.ToByteArray(); string cdir = m_dir + Path.DirectorySeparatorChar + idBytes[0] + Path.DirectorySeparatorChar + idBytes[1]; @@ -56,7 +56,7 @@ namespace OpenSim.Framework.Communications.Cache if (!Directory.Exists(cdir)) Directory.CreateDirectory(cdir); - FileStream x = new FileStream(cdir + Path.DirectorySeparatorChar + asset.FullID + ".xml", FileMode.Create); + FileStream x = new FileStream(cdir + Path.DirectorySeparatorChar + asset.Metadata.FullID + ".xml", FileMode.Create); m_xs.Serialize(x, asset); x.Flush(); diff --git a/OpenSim/Framework/Communications/Cache/GridAssetClient.cs b/OpenSim/Framework/Communications/Cache/GridAssetClient.cs index e27c4f4..1cc9833 100644 --- a/OpenSim/Framework/Communications/Cache/GridAssetClient.cs +++ b/OpenSim/Framework/Communications/Cache/GridAssetClient.cs @@ -97,7 +97,7 @@ namespace OpenSim.Framework.Communications.Cache // rc.Request(s); //m_log.InfoFormat("[ASSET]: Stored {0}", rc); - m_log.InfoFormat("[GRID ASSET CLIENT]: Sending store request for asset {0}", asset.FullID); + m_log.InfoFormat("[GRID ASSET CLIENT]: Sending store request for asset {0}", asset.Metadata.FullID); RestObjectPoster.BeginPostObject(assetUrl, asset); } diff --git a/OpenSim/Framework/Communications/Capabilities/Caps.cs b/OpenSim/Framework/Communications/Capabilities/Caps.cs index a6acd68..a370eea 100644 --- a/OpenSim/Framework/Communications/Capabilities/Caps.cs +++ b/OpenSim/Framework/Communications/Capabilities/Caps.cs @@ -159,7 +159,7 @@ namespace OpenSim.Framework.Communications.Capabilities m_capsHandlers["SEED"] = new RestStreamHandler("POST", capsBase + m_requestPath, CapsRequest); m_log.DebugFormat( "[CAPS]: Registered seed capability {0} for {1}", capsBase + m_requestPath, m_agentID); - + //m_capsHandlers["MapLayer"] = // new LLSDStreamhandler("POST", // capsBase + m_mapLayerPath, @@ -247,9 +247,9 @@ namespace OpenSim.Framework.Communications.Capabilities //m_log.Debug("[CAPS]: Seed Caps Request in region: " + m_regionName); string result = LLSDHelpers.SerialiseLLSDReply(m_capsHandlers.CapsDetails); - + //m_log.DebugFormat("[CAPS] CapsRequest {0}", result); - + return result; } @@ -569,7 +569,7 @@ namespace OpenSim.Framework.Communications.Capabilities m_httpListener.AddStreamHandler( new BinaryStreamHandler("POST", capsBase + uploaderPath, uploader.uploaderCaps)); - + string protocol = "http://"; if (m_httpListener.UseSSL) @@ -648,7 +648,7 @@ namespace OpenSim.Framework.Communications.Capabilities /// public LLSDAssetUploadResponse NewAgentInventoryRequest(LLSDAssetUploadRequest llsdRequest) { - if (llsdRequest.asset_type == "texture" || + if (llsdRequest.asset_type == "texture" || llsdRequest.asset_type == "animation" || llsdRequest.asset_type == "sound") { @@ -741,9 +741,9 @@ namespace OpenSim.Framework.Communications.Capabilities AssetBase asset; asset = new AssetBase(); - asset.FullID = assetID; - asset.Type = assType; - asset.Name = assetName; + asset.Metadata.FullID = assetID; + asset.Metadata.Type = assType; + asset.Metadata.Name = assetName; asset.Data = data; m_assetCache.AddAsset(asset); @@ -751,7 +751,7 @@ namespace OpenSim.Framework.Communications.Capabilities item.Owner = m_agentID; item.Creator = m_agentID; item.ID = inventoryItem; - item.AssetID = asset.FullID; + item.AssetID = asset.Metadata.FullID; item.Description = assetDescription; item.Name = assetName; item.AssetType = assType; -- cgit v1.1