示例#1
0
        private static PrimInventory FromPrimObjectInventory(LLPrimitive host, PrimObject.InventoryBlock objInv)
        {
            PrimInventory inv = new PrimInventory(host);

            if (objInv == null)
            {
                return(inv);
            }

            for (int i = 0; i < objInv.Items.Length; i++)
            {
                PrimObject.InventoryBlock.ItemBlock objItem = objInv.Items[i];

                LLInventoryTaskItem item = new LLInventoryTaskItem();
                item.AssetID           = objItem.AssetID;
                item.ContentType       = LLUtil.LLAssetTypeToContentType((int)objItem.Type);
                item.CreationDate      = objItem.CreationDate;
                item.CreatorID         = objItem.CreatorID;
                item.Description       = objItem.Description;
                item.Flags             = (uint)objItem.Flags;
                item.GroupID           = objItem.GroupID;
                item.ID                = objItem.ID;
                item.Name              = objItem.Name;
                item.OwnerID           = objItem.OwnerID;
                item.Permissions       = new Permissions(objItem.PermsBase, objItem.PermsEveryone, objItem.PermsGroup, objItem.PermsNextOwner, objItem.PermsOwner);
                item.PermissionGranter = objItem.PermsGranterID;

                inv.AddOrUpdateItem(item, true);
            }

            inv.InventorySerial = (short)objInv.Serial;
            return(inv);
        }
示例#2
0
        private void NewFileAgentInventoryUploadHandler(NewFileAgentInventoryMessage message, Capability cap,
                                                        IHttpClientContext context, IHttpRequest request, IHttpResponse response)
        {
            byte[] assetData = request.GetBody();
            UUID   assetID   = UUID.Zero;
            UUID   itemID    = UUID.Zero;

            m_log.Debug("Received inventory asset upload from " + cap.OwnerID + " (" + assetData.Length + " bytes)");

            if (assetData != null && assetData.Length > 0)
            {
                string contentType = LLUtil.LLAssetTypeToContentType((int)message.AssetType);

                // Create the asset
                if (m_assetClient.StoreAsset(contentType, false, false, assetData, cap.OwnerID, out assetID))
                {
                    // Create the inventory item
                    LLInventoryItem item = new LLInventoryItem();
                    item.AssetID      = assetID;
                    item.ContentType  = contentType;
                    item.CreationDate = DateTime.UtcNow;
                    item.CreatorID    = cap.OwnerID;
                    item.Description  = message.Description;
                    item.ID           = UUID.Random();
                    item.Name         = message.Name;
                    item.OwnerID      = cap.OwnerID;
                    item.ParentID     = message.FolderID;
                    item.Permissions  = (m_permissions != null) ? m_permissions.GetDefaultPermissions() : Permissions.FullPermissions;
                    item.SalePrice    = 10;
                    item.SaleType     = SaleType.Not;

                    if (m_inventoryClient.TryCreateItem(cap.OwnerID, item))
                    {
                        itemID = item.ID;
                    }
                    else
                    {
                        m_log.Warn("Failed to create inventory item for uploaded asset " + assetID);
                    }
                }
                else
                {
                    m_log.WarnFormat("Failed to store uploaded inventory asset ({0} bytes)", assetData.Length);
                }
            }
            else
            {
                m_log.Warn("Inventory asset upload contained no data");
            }

            // Build the response message
            OSDMap reply = new OSDMap
            {
                { "state", OSD.FromString("complete") },
                { "new_asset", OSD.FromUUID(assetID) },
                { "new_inventory_item", OSD.FromUUID(itemID) }
            };

            LLUtil.SendLLSDXMLResponse(response, reply);
        }
示例#3
0
        private void AssetLoadedHandler(OpenMetaverse.Assets.Asset asset, long bytesRead, long totalBytes)
        {
            // Asynchronously filter and store the asset
            bool doRelease = m_assetLoadSemaphore.WaitOne(1000 * 10);

            if (!doRelease)
            {
                m_log.Error("Timed out waiting for the previous OAR asset load to complete");
            }

            m_scheduler.FireAndForget(
                delegate(object o)
            {
                try
                {
                    m_assetClient.StoreAsset(new Asset
                    {
                        ContentType  = LLUtil.LLAssetTypeToContentType((int)asset.AssetType),
                        CreationDate = DateTime.UtcNow,
                        CreatorID    = UUID.Zero,
                        Data         = asset.AssetData,
                        ID           = asset.AssetID
                    });

                    //m_log.DebugFormat("Loaded asset {0} ({1}), {2} bytes", asset.AssetID, asset.AssetType, asset.AssetData.Length);
                }
                finally
                {
                    if (doRelease)
                    {
                        m_assetLoadSemaphore.Release();
                    }
                }
            }, null
                );

            PrintProgress(bytesRead, totalBytes);
        }
示例#4
0
        private void NewFileAgentInventoryVariablePriceUploadHandler(NewFileAgentInventoryVariablePriceMessage message, Capability cap,
                                                                     IHttpClientContext context, IHttpRequest request, IHttpResponse response)
        {
            byte[]          assetData = request.GetBody();
            UUID            assetID   = UUID.Zero;
            LLInventoryItem item      = null;

            m_log.Debug("Received inventory asset upload from " + cap.OwnerID + " (" + assetData.Length + " bytes)");

            if (assetData != null && assetData.Length > 0)
            {
                string contentType = LLUtil.LLAssetTypeToContentType((int)message.AssetType);

                // Create the asset
                if (m_assetClient.StoreAsset(contentType, false, false, assetData, cap.OwnerID, out assetID))
                {
                    // Create the inventory item
                    item              = new LLInventoryItem();
                    item.AssetID      = assetID;
                    item.ContentType  = contentType;
                    item.CreationDate = DateTime.UtcNow;
                    item.CreatorID    = cap.OwnerID;
                    item.Description  = message.Description;
                    item.ID           = UUID.Random();
                    item.Name         = message.Name;
                    item.OwnerID      = cap.OwnerID;
                    item.ParentID     = message.FolderID;

                    Permissions perms = (m_permissions != null) ? m_permissions.GetDefaultPermissions() : Permissions.FullPermissions;
                    perms.EveryoneMask  = message.EveryoneMask;
                    perms.GroupMask     = message.GroupMask;
                    perms.NextOwnerMask = message.NextOwnerMask;
                    item.Permissions    = perms;

                    item.SalePrice = 10;
                    item.SaleType  = SaleType.Not;

                    if (!m_inventoryClient.TryCreateItem(cap.OwnerID, item))
                    {
                        m_log.Warn("Failed to create inventory item for uploaded asset " + assetID);
                    }
                }
                else
                {
                    m_log.WarnFormat("Failed to store uploaded inventory asset ({0} bytes)", assetData.Length);
                }
            }
            else
            {
                m_log.Warn("Inventory asset upload contained no data");
            }

            // Build the response message
            NewFileAgentInventoryUploadReplyMessage reply = new NewFileAgentInventoryUploadReplyMessage();

            reply.NewAsset = assetID;
            if (item != null)
            {
                reply.NewInventoryItem = item.ID;
                reply.NewBaseMask      = item.Permissions.BaseMask;
                reply.NewEveryoneMask  = item.Permissions.EveryoneMask;
                reply.NewNextOwnerMask = item.Permissions.NextOwnerMask;
                reply.NewOwnerMask     = item.Permissions.OwnerMask;
            }

            LLUtil.SendLLSDXMLResponse(response, reply.Serialize());
        }
示例#5
0
        private static List <LLInventoryTaskItem> ParseTaskInventory(UUID parentObjectID, string taskData)
        {
            List <LLInventoryTaskItem> items = new List <LLInventoryTaskItem>();
            int lineNum = 0;

            string[] lines = taskData.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries);

            while (lineNum < lines.Length)
            {
                string key, value;
                if (ParseLine(lines[lineNum++], out key, out value))
                {
                    if (key == "inv_item")
                    {
                        #region Default Values

                        UUID          itemID        = UUID.Zero;
                        UUID          assetID       = UUID.Zero;
                        UUID          parentID      = UUID.Zero;
                        UUID          creatorID     = UUID.Zero;
                        UUID          ownerID       = UUID.Zero;
                        UUID          lastOwnerID   = UUID.Zero;
                        UUID          groupID       = UUID.Zero;
                        bool          groupOwned    = false;
                        string        name          = String.Empty;
                        string        desc          = String.Empty;
                        AssetType     assetType     = AssetType.Unknown;
                        InventoryType inventoryType = InventoryType.Unknown;
                        DateTime      creationDate  = Utils.Epoch;
                        uint          flags         = 0;
                        Permissions   perms         = Permissions.NoPermissions;
                        SaleType      saleType      = SaleType.Not;
                        int           salePrice     = 0;

                        #endregion Default Values

                        while (lineNum < lines.Length)
                        {
                            if (ParseLine(lines[lineNum++], out key, out value))
                            {
                                #region Line Parsing

                                if (key == "{")
                                {
                                    continue;
                                }
                                else if (key == "}")
                                {
                                    break;
                                }
                                else if (key == "item_id")
                                {
                                    UUID.TryParse(value, out itemID);
                                }
                                else if (key == "parent_id")
                                {
                                    UUID.TryParse(value, out parentID);
                                }
                                else if (key == "permissions")
                                {
                                    #region permissions

                                    while (lineNum < lines.Length)
                                    {
                                        if (ParseLine(lines[lineNum++], out key, out value))
                                        {
                                            if (key == "{")
                                            {
                                                continue;
                                            }
                                            else if (key == "}")
                                            {
                                                break;
                                            }
                                            else if (key == "creator_mask")
                                            {
                                                // Deprecated
                                                uint val;
                                                if (Utils.TryParseHex(value, out val))
                                                {
                                                    perms.BaseMask = (PermissionMask)val;
                                                }
                                            }
                                            else if (key == "base_mask")
                                            {
                                                uint val;
                                                if (Utils.TryParseHex(value, out val))
                                                {
                                                    perms.BaseMask = (PermissionMask)val;
                                                }
                                            }
                                            else if (key == "owner_mask")
                                            {
                                                uint val;
                                                if (Utils.TryParseHex(value, out val))
                                                {
                                                    perms.OwnerMask = (PermissionMask)val;
                                                }
                                            }
                                            else if (key == "group_mask")
                                            {
                                                uint val;
                                                if (Utils.TryParseHex(value, out val))
                                                {
                                                    perms.GroupMask = (PermissionMask)val;
                                                }
                                            }
                                            else if (key == "everyone_mask")
                                            {
                                                uint val;
                                                if (Utils.TryParseHex(value, out val))
                                                {
                                                    perms.EveryoneMask = (PermissionMask)val;
                                                }
                                            }
                                            else if (key == "next_owner_mask")
                                            {
                                                uint val;
                                                if (Utils.TryParseHex(value, out val))
                                                {
                                                    perms.NextOwnerMask = (PermissionMask)val;
                                                }
                                            }
                                            else if (key == "creator_id")
                                            {
                                                UUID.TryParse(value, out creatorID);
                                            }
                                            else if (key == "owner_id")
                                            {
                                                UUID.TryParse(value, out ownerID);
                                            }
                                            else if (key == "last_owner_id")
                                            {
                                                UUID.TryParse(value, out lastOwnerID);
                                            }
                                            else if (key == "group_id")
                                            {
                                                UUID.TryParse(value, out groupID);
                                            }
                                            else if (key == "group_owned")
                                            {
                                                uint val;
                                                if (UInt32.TryParse(value, out val))
                                                {
                                                    groupOwned = (val != 0);
                                                }
                                            }
                                        }
                                    }

                                    #endregion permissions
                                }
                                else if (key == "sale_info")
                                {
                                    #region sale_info

                                    while (lineNum < lines.Length)
                                    {
                                        if (ParseLine(lines[lineNum++], out key, out value))
                                        {
                                            if (key == "{")
                                            {
                                                continue;
                                            }
                                            else if (key == "}")
                                            {
                                                break;
                                            }
                                            else if (key == "sale_type")
                                            {
                                                saleType = Utils.StringToSaleType(value);
                                            }
                                            else if (key == "sale_price")
                                            {
                                                Int32.TryParse(value, out salePrice);
                                            }
                                        }
                                    }

                                    #endregion sale_info
                                }
                                else if (key == "shadow_id")
                                {
                                    UUID shadowID;
                                    if (UUID.TryParse(value, out shadowID))
                                    {
                                        assetID = DecryptShadowID(shadowID);
                                    }
                                }
                                else if (key == "asset_id")
                                {
                                    UUID.TryParse(value, out assetID);
                                }
                                else if (key == "type")
                                {
                                    assetType = Utils.StringToAssetType(value);
                                }
                                else if (key == "inv_type")
                                {
                                    inventoryType = Utils.StringToInventoryType(value);
                                }
                                else if (key == "flags")
                                {
                                    UInt32.TryParse(value, out flags);
                                }
                                else if (key == "name")
                                {
                                    name = value.Substring(0, value.IndexOf('|'));
                                }
                                else if (key == "desc")
                                {
                                    desc = value.Substring(0, value.IndexOf('|'));
                                }
                                else if (key == "creation_date")
                                {
                                    uint timestamp;
                                    if (UInt32.TryParse(value, out timestamp))
                                    {
                                        creationDate = Utils.UnixTimeToDateTime(timestamp);
                                    }
                                    else
                                    {
                                        Logger.Log("Failed to parse creation_date " + value, Helpers.LogLevel.Warning);
                                    }
                                }

                                #endregion Line Parsing
                            }
                        }

                        LLInventoryTaskItem item = new LLInventoryTaskItem();
                        item.AssetID           = assetID;
                        item.ContentType       = LLUtil.LLAssetTypeToContentType((int)assetType);
                        item.CreationDate      = creationDate;
                        item.CreatorID         = creatorID;
                        item.Description       = desc;
                        item.Flags             = flags;
                        item.GroupID           = groupID;
                        item.GroupOwned        = groupOwned;
                        item.ID                = itemID;
                        item.Name              = name;
                        item.OwnerID           = ownerID;
                        item.ParentID          = parentID;
                        item.ParentObjectID    = parentObjectID;
                        item.PermissionGranter = UUID.Zero; // TODO: We should be serializing this
                        item.Permissions       = perms;
                        item.SalePrice         = salePrice;
                        item.SaleType          = saleType;

                        items.Add(item);
                    }
                    else
                    {
                        //m_log.Warn("Unrecognized token " + key + " in: " + Environment.NewLine + taskData);
                    }
                }
            }

            return(items);
        }