/* * Copyright (c) Contributors, http://opensimulator.org/ * See CONTRIBUTORS.TXT for a full list of copyright holders. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the OpenSimulator Project nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ using System; using System.Text; using OpenMetaverse; using OpenMetaverse.StructuredData; namespace OpenSim.Framework { /// /// Inventory Item - contains all the properties associated with an individual inventory piece. /// public class InventoryItemBase : InventoryNodeBase, ICloneable { /// /// The inventory type of the item. This is slightly different from the asset type in some situations. /// public int InvType { get { return m_invType; } set { m_invType = value; } } protected int m_invType; /// /// The folder this item is contained in /// public UUID Folder { get { return m_folder; } set { m_folder = value; } } protected UUID m_folder; /// /// The creator of this item /// public string CreatorId { get { return m_creatorId; } set { m_creatorId = value; if ((m_creatorId == null) || !UUID.TryParse(m_creatorId, out m_creatorIdAsUuid)) m_creatorIdAsUuid = UUID.Zero; } } protected string m_creatorId; /// /// The CreatorId expressed as a UUID. /// public UUID CreatorIdAsUuid { get { if (UUID.Zero == m_creatorIdAsUuid) { UUID.TryParse(CreatorId, out m_creatorIdAsUuid); } return m_creatorIdAsUuid; } } protected UUID m_creatorIdAsUuid = UUID.Zero; /// /// Extended creator information of the form ; /// public string CreatorData // = ; { get { return m_creatorData; } set { m_creatorData = value; } } protected string m_creatorData = string.Empty; /// /// Used by the DB layer to retrieve / store the entire user identification. /// The identification can either be a simple UUID or a string of the form /// uuid[;profile_url[;name]] /// public string CreatorIdentification { get { if (!string.IsNullOrEmpty(m_creatorData)) return m_creatorId + ';' + m_creatorData; else return m_creatorId; } set { if (string.IsNullOrEmpty(value)) { m_creatorData = string.Empty; return; } if (!value.Contains(";")) // plain UUID { m_creatorId = value; } else // [;[;name]] { string name = "Unknown User"; string[] parts = value.Split(';'); if (parts.Length >= 1) m_creatorId = parts[0]; if (parts.Length >= 2) m_creatorData = parts[1]; if (parts.Length >= 3) name = parts[2]; m_creatorData += ';' + name; } } } /// /// The description of the inventory item (must be less than 64 characters) /// public osUTF8 UTF8Description; public string Description { get { return UTF8Description == null ? string.Empty : UTF8Description.ToString();} set { UTF8Description = string.IsNullOrWhiteSpace(value) ? null : new osUTF8(value);} } /// /// /// public uint NextPermissions { get { return m_nextPermissions; } set { m_nextPermissions = value; } } protected uint m_nextPermissions; /// /// A mask containing permissions for the current owner (cannot be enforced) /// public uint CurrentPermissions { get { return m_currentPermissions; } set { m_currentPermissions = value; } } protected uint m_currentPermissions; /// /// /// public uint BasePermissions { get { return m_basePermissions; } set { m_basePermissions = value; } } protected uint m_basePermissions; /// /// /// public uint EveryOnePermissions { get { return m_everyonePermissions; } set { m_everyonePermissions = value; } } protected uint m_everyonePermissions; /// /// /// public uint GroupPermissions { get { return m_groupPermissions; } set { m_groupPermissions = value; } } protected uint m_groupPermissions; /// /// This is an enumerated value determining the type of asset (eg Notecard, Sound, Object, etc) /// public int AssetType { get { return m_assetType; } set { m_assetType = value; } } protected int m_assetType; /// /// The UUID of the associated asset on the asset server /// public UUID AssetID { get { return m_assetID; } set { m_assetID = value; } } protected UUID m_assetID; /// /// /// public UUID GroupID { get { return m_groupID; } set { m_groupID = value; } } protected UUID m_groupID; /// /// /// public bool GroupOwned { get { return m_groupOwned; } set { m_groupOwned = value; } } protected bool m_groupOwned; /// /// /// public int SalePrice { get { return m_salePrice; } set { m_salePrice = value; } } protected int m_salePrice; /// /// /// public byte SaleType { get { return m_saleType; } set { m_saleType = value; } } protected byte m_saleType; /// /// /// public uint Flags { get { return m_flags; } set { m_flags = value; } } protected uint m_flags; /// /// /// public int CreationDate { get { return m_creationDate; } set { m_creationDate = value; } } protected int m_creationDate = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; public InventoryItemBase() { } public InventoryItemBase(UUID id) { ID = id; } public InventoryItemBase(UUID id, UUID owner) { ID = id; Owner = owner; } public object Clone() { return MemberwiseClone(); } public void ToLLSDxml(osUTF8 lsl, uint flagsMask = 0xffffffff) { LLSDxmlEncode2.AddMap(lsl); LLSDxmlEncode2.AddElem_parent_id(Folder, lsl); LLSDxmlEncode2.AddElem_asset_id( AssetID, lsl); LLSDxmlEncode2.AddElem_item_id( ID, lsl); LLSDxmlEncode2.AddMap("permissions",lsl); LLSDxmlEncode2.AddElem_creator_id(CreatorIdAsUuid, lsl); LLSDxmlEncode2.AddElem_owner_id(Owner, lsl); LLSDxmlEncode2.AddElem_group_id(GroupID, lsl); LLSDxmlEncode2.AddElem("base_mask", (int)CurrentPermissions, lsl); LLSDxmlEncode2.AddElem("owner_mask", (int)CurrentPermissions, lsl); LLSDxmlEncode2.AddElem("group_mask", (int)GroupPermissions, lsl); LLSDxmlEncode2.AddElem("everyone_mask", (int)EveryOnePermissions, lsl); LLSDxmlEncode2.AddElem("next_owner_mask", (int)NextPermissions, lsl); LLSDxmlEncode2.AddElem("is_owner_group", GroupOwned, lsl); LLSDxmlEncode2.AddEndMap(lsl); LLSDxmlEncode2.AddElem("type", AssetType, lsl); LLSDxmlEncode2.AddElem("inv_type", InvType, lsl); LLSDxmlEncode2.AddElem("flags", (int)(Flags & flagsMask), lsl); LLSDxmlEncode2.AddElem_sale_info(SalePrice, SaleType, lsl); LLSDxmlEncode2.AddElem_name(Name, lsl); LLSDxmlEncode2.AddElem("desc", Description, lsl); LLSDxmlEncode2.AddElem("created_at", CreationDate, lsl); LLSDxmlEncode2.AddEndMap(lsl); } } }