Exemple #1
0
        private ArrayList FillInventorySkeleton(InventoryFolder rootFolder)
        {
            ArrayList inventory = new ArrayList(rootFolder.Children.Count + 1);

            Hashtable rootFolderData = new Hashtable();

            rootFolderData["name"]         = rootFolder.Name;
            rootFolderData["parent_id"]    = rootFolder.ParentID.ToString();
            rootFolderData["type_default"] = (int)LLUtil.ContentTypeToLLAssetType(rootFolder.PreferredContentType);
            rootFolderData["folder_id"]    = rootFolder.ID.ToString();
            rootFolderData["version"]      = rootFolder.Version;
            inventory.Add(rootFolderData);

            foreach (var child in rootFolder.Children.Values)
            {
                InventoryFolder folder     = (InventoryFolder)child;
                Hashtable       folderData = new Hashtable();
                folderData["name"]         = folder.Name;
                folderData["parent_id"]    = folder.ParentID.ToString();
                folderData["type_default"] = (int)LLUtil.ContentTypeToLLAssetType(folder.PreferredContentType);
                folderData["folder_id"]    = folder.ID.ToString();
                folderData["version"]      = folder.Version;

                inventory.Add(folderData);
            }

            return(inventory);
        }
Exemple #2
0
        private void SendXferPacketHandler(Packet packet, LLAgent agent)
        {
            SendXferPacketPacket xfer = (SendXferPacketPacket)packet;

            uint packetID   = xfer.XferID.Packet & ~LAST_PACKET_MARKER;
            bool lastPacket = (xfer.XferID.Packet & LAST_PACKET_MARKER) != 0;

            Asset asset;

            if (currentUploads.TryGetValue(xfer.XferID.ID, out asset))
            {
                if (packetID == 0)
                {
                    uint size = Utils.BytesToUInt(xfer.DataPacket.Data);
                    asset.Data = new byte[size];

                    Buffer.BlockCopy(xfer.DataPacket.Data, 4, asset.Data, 0, xfer.DataPacket.Data.Length - 4);

                    // Confirm the first upload packet
                    ConfirmXferPacketPacket confirm = new ConfirmXferPacketPacket();
                    confirm.XferID.ID     = xfer.XferID.ID;
                    confirm.XferID.Packet = xfer.XferID.Packet;
                    m_udp.SendPacket(agent, confirm, ThrottleCategory.Asset, false);
                }
                else if (asset.Data != null)
                {
                    AssetType type = (AssetType)LLUtil.ContentTypeToLLAssetType(asset.ContentType);

                    Buffer.BlockCopy(xfer.DataPacket.Data, 0, asset.Data, (int)packetID * 1000, xfer.DataPacket.Data.Length);

                    // Confirm this upload packet
                    ConfirmXferPacketPacket confirm = new ConfirmXferPacketPacket();
                    confirm.XferID.ID     = xfer.XferID.ID;
                    confirm.XferID.Packet = xfer.XferID.Packet;
                    m_udp.SendPacket(agent, confirm, ThrottleCategory.Asset, false);

                    if (lastPacket)
                    {
                        // Asset upload finished
                        lock (currentUploads)
                            currentUploads.Remove(xfer.XferID.ID);

                        if (type != AssetType.LSLBytecode)
                        {
                            // Store the uploaded asset
                            m_log.DebugFormat("Storing uploaded asset {0} ({1})", asset.ID, asset.ContentType);
                            if (!m_assets.StoreAsset(asset))
                            {
                                m_log.ErrorFormat("Failed to store uploaded asset {0} ({1})", asset.ID, asset.ContentType);
                            }
                        }
                        else
                        {
                            m_log.Debug("Ignoring LSL bytecode upload " + asset.ID);
                        }

                        AssetUploadCompletePacket complete = new AssetUploadCompletePacket();
                        complete.AssetBlock.Success = true;
                        complete.AssetBlock.Type    = (sbyte)type;
                        complete.AssetBlock.UUID    = asset.ID;
                        m_udp.SendPacket(agent, complete, ThrottleCategory.Asset, false);
                    }
                }
                else
                {
                    m_log.Error("Received SendXferPacket #" + xfer.XferID.Packet + " when asset.AssetData is still null");
                }
            }
            else
            {
                m_log.Debug("Received a SendXferPacket for an unknown upload");
            }
        }