public Packet UpdateInventoryItem(InventoryItem iitem)
        {
            UpdateInventoryItemPacket p = new UpdateInventoryItemPacket();

            p.InventoryData    = new UpdateInventoryItemPacket.InventoryDataBlock[1];
            p.InventoryData[0] = new UpdateInventoryItemPacket.InventoryDataBlock();

            p.InventoryData[0].TransactionID = iitem.TransactionID;

            p.InventoryData[0].GroupOwned    = iitem.GroupOwned;
            p.InventoryData[0].CRC           = iitem.CRC;
            p.InventoryData[0].CreationDate  = iitem.CreationDate;
            p.InventoryData[0].SaleType      = iitem.SaleType;
            p.InventoryData[0].BaseMask      = iitem.BaseMask;
            p.InventoryData[0].Name          = Helpers.StringToField(iitem.Name);
            p.InventoryData[0].InvType       = iitem.InvType;
            p.InventoryData[0].Type          = iitem.Type;
            p.InventoryData[0].GroupID       = iitem.GroupID;
            p.InventoryData[0].SalePrice     = iitem.SalePrice;
            p.InventoryData[0].OwnerID       = iitem.OwnerID;
            p.InventoryData[0].CreatorID     = iitem.CreatorID;
            p.InventoryData[0].ItemID        = iitem.ItemID;
            p.InventoryData[0].FolderID      = iitem.FolderID;
            p.InventoryData[0].EveryoneMask  = iitem.EveryoneMask;
            p.InventoryData[0].Description   = Helpers.StringToField(iitem.Description);
            p.InventoryData[0].Flags         = iitem.Flags;
            p.InventoryData[0].NextOwnerMask = iitem.NextOwnerMask;
            p.InventoryData[0].GroupMask     = iitem.GroupMask;
            p.InventoryData[0].OwnerMask     = iitem.OwnerMask;


            p.AgentData.AgentID   = AgentID;
            p.AgentData.SessionID = SessionID;

            return(p);
        }
Esempio n. 2
0
        public void RequestUpdateItems(List<InventoryItem> items, LLUUID transactionID)
        {
            UpdateInventoryItemPacket update = new UpdateInventoryItemPacket();
            update.AgentData.AgentID = _Client.Self.AgentID;
            update.AgentData.SessionID = _Client.Self.SessionID;
            update.AgentData.TransactionID = transactionID;

            update.InventoryData = new UpdateInventoryItemPacket.InventoryDataBlock[items.Count];
            for (int i = 0; i < items.Count; i++)
            {
                InventoryItem item = items[i];

                UpdateInventoryItemPacket.InventoryDataBlock block = new UpdateInventoryItemPacket.InventoryDataBlock();
                block.BaseMask = (uint)item.Permissions.BaseMask;
                block.CRC = ItemCRC(item);
                block.CreationDate = (int)Helpers.DateTimeToUnixTime(item.CreationDate);
                block.CreatorID = item.CreatorID;
                block.Description = Helpers.StringToField(item.Description);
                block.EveryoneMask = (uint)item.Permissions.EveryoneMask;
                block.Flags = item.Flags;
                block.FolderID = item.ParentUUID;
                block.GroupID = item.GroupID;
                block.GroupMask = (uint)item.Permissions.GroupMask;
                block.GroupOwned = item.GroupOwned;
                block.InvType = (sbyte)item.InventoryType;
                block.ItemID = item.UUID;
                block.Name = Helpers.StringToField(item.Name);
                block.NextOwnerMask = (uint)item.Permissions.NextOwnerMask;
                block.OwnerID = item.OwnerID;
                block.OwnerMask = (uint)item.Permissions.OwnerMask;
                block.SalePrice = item.SalePrice;
                block.SaleType = (byte)item.SaleType;
                block.TransactionID = LLUUID.Zero;
                block.Type = (sbyte)item.AssetType;

                update.InventoryData[i] = block;
            }

            _Client.Network.SendPacket(update);
        }
Esempio n. 3
0
        public Packet UpdateInventoryItem(InventoryItem iitem)
        {
            UpdateInventoryItemPacket p = new UpdateInventoryItemPacket();
            p.InventoryData = new UpdateInventoryItemPacket.InventoryDataBlock[1];
            p.InventoryData[0] = new UpdateInventoryItemPacket.InventoryDataBlock();

            p.InventoryData[0].TransactionID = iitem.TransactionID;

            p.InventoryData[0].GroupOwned   = iitem.GroupOwned;
            p.InventoryData[0].CRC          = iitem.CRC;
            p.InventoryData[0].CreationDate = iitem.CreationDate;
			p.InventoryData[0].SaleType		= iitem.SaleType;
			p.InventoryData[0].BaseMask		= iitem.BaseMask;
            p.InventoryData[0].Name         = Helpers.StringToField(iitem.Name);
			p.InventoryData[0].InvType		= iitem.InvType;
			p.InventoryData[0].Type			= iitem.Type;
			p.InventoryData[0].GroupID		= iitem.GroupID;
			p.InventoryData[0].SalePrice	= iitem.SalePrice;
			p.InventoryData[0].OwnerID		= iitem.OwnerID;
			p.InventoryData[0].CreatorID	= iitem.CreatorID;
			p.InventoryData[0].ItemID		= iitem.ItemID;
			p.InventoryData[0].FolderID		= iitem.FolderID;
            p.InventoryData[0].EveryoneMask = iitem.EveryoneMask;
            p.InventoryData[0].Description  = Helpers.StringToField(iitem.Description);
			p.InventoryData[0].Flags		= iitem.Flags;
			p.InventoryData[0].NextOwnerMask= iitem.NextOwnerMask;
			p.InventoryData[0].GroupMask	= iitem.GroupMask;
			p.InventoryData[0].OwnerMask	= iitem.OwnerMask;


			p.AgentData.AgentID   = AgentID;
			p.AgentData.SessionID = SessionID;

            return p;
		}
Esempio n. 4
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="items"></param>
        /// <param name="transactionID"></param>
        public void RequestUpdateItems(ICollection<ItemData> items, UUID transactionID)
        {
            UpdateInventoryItemPacket update = new UpdateInventoryItemPacket();
            update.AgentData.AgentID = _Agents.AgentID;
            update.AgentData.SessionID = _Agents.SessionID;
            update.AgentData.TransactionID = transactionID;

            update.InventoryData = new UpdateInventoryItemPacket.InventoryDataBlock[items.Count];
            int index = 0;
            foreach (ItemData item in items)
            {
                UpdateInventoryItemPacket.InventoryDataBlock block = new UpdateInventoryItemPacket.InventoryDataBlock();
                block.BaseMask = (uint)item.Permissions.BaseMask;
                block.CRC = ItemCRC(item);
                block.CreationDate = (int)Utils.DateTimeToUnixTime(item.CreationDate);
                block.CreatorID = item.CreatorID;
                block.Description = Utils.StringToBytes(item.Description);
                block.EveryoneMask = (uint)item.Permissions.EveryoneMask;
                block.Flags = (uint)item.Flags;
                block.FolderID = item.ParentUUID;
                block.GroupID = item.GroupID;
                block.GroupMask = (uint)item.Permissions.GroupMask;
                block.GroupOwned = item.GroupOwned;
                block.InvType = (sbyte)item.InventoryType;
                block.ItemID = item.UUID;
                block.Name = Utils.StringToBytes(item.Name);
                block.NextOwnerMask = (uint)item.Permissions.NextOwnerMask;
                block.OwnerID = item.OwnerID;
                block.OwnerMask = (uint)item.Permissions.OwnerMask;
                block.SalePrice = item.SalePrice;
                block.SaleType = (byte)item.SaleType;
                block.TransactionID = UUID.Zero;
                block.Type = (sbyte)item.AssetType;

                update.InventoryData[index] = block;
                ++index;
            }

            _Network.SendPacket(update);
        }
Esempio n. 5
0
        public bool UpdateInventoryItem(UpdateInventoryItemPacket invPacket)
        {
            if (invPacket.AgentData.AgentID.Equals(libOwner))
                // Tell grid surfer to forward request to region, because the Library is served from there (!)
                return false;

            if (connected)
            {
                string uri = InventoryServerURL + "/" + AuthToken + "/UpdateItem/";
                for (int i = 0; i < invPacket.InventoryData.Length; i++)
                {
                    UUID transactionID = invPacket.InventoryData[i].TransactionID;
                    sbyte invType = invPacket.InventoryData[i].InvType;
                    sbyte assetType = invPacket.InventoryData[i].Type;
                    string name = Util.FieldToString(invPacket.InventoryData[i].Name);
                    UUID folderID = invPacket.InventoryData[i].FolderID;
                    string description = Util.FieldToString(invPacket.InventoryData[i].Description);

                    if (transactionID == UUID.Zero)
                    {
                        InventoryItemBase item = NewInventoryItem(invPacket.InventoryData[i]);

                        OpenSimComms.InventoryItemOperation(uri, item, InventoryItemCallBack);
                        // Let's confirm, so we get the asset id of the new asset that that the server created
                        // so we can add it to the local cache
                    }
                    else
                    {
                        Console.WriteLine("[UserInventory]: UpdateItem with non-zero transactionID " + transactionID);
                        if (assetReceivers.ContainsKey(transactionID))
                        {
                            AssetReceiver assReceiver = assetReceivers[transactionID];
                            lock (assetReceivers)
                                assetReceivers.Remove(transactionID);

                            InventoryItemBase item = NewInventoryItem(invPacket.InventoryData[i], assReceiver.m_asset.FullID);

                            OpenSimComms.InventoryItemOperation(uri, item, InventoryItemCreateCallBack);
                            lock (invCallbackNumbers)
                            {
                                if (!invCallbackNumbers.ContainsKey(item.ID))
                                    invCallbackNumbers.Add(item.ID, invPacket.InventoryData[i].CallbackID);
                            }

                        }
                    }
                }
            }
            return true;
        }
Esempio n. 6
0
        private InventoryItemBase NewInventoryItem(UpdateInventoryItemPacket.InventoryDataBlock block, UUID assetID)
        {
            UUID transactionID = block.TransactionID;
            sbyte invType = block.InvType;
            sbyte assetType = block.Type;
            string name = Util.FieldToString(block.Name);
            UUID folderID = block.FolderID;
            string description = Util.FieldToString(block.Description);

            InventoryItemBase item = new InventoryItemBase();
            item.ID = block.ItemID;
            item.Name = name;
            item.Description = description;
            item.AssetType = assetType;
            item.CreationDate = (block.CreationDate == 0) ? Util.UnixTimeSinceEpoch() : block.CreationDate;
            item.CurrentPermissions = (uint)PermissionMask.All; //|= 8; // See Scene.Inventory
            item.EveryOnePermissions = block.EveryoneMask;
            item.Flags = block.Flags;
            item.Folder = folderID;
            item.GroupID = block.GroupID;
            item.GroupOwned = block.GroupOwned;
            item.GroupPermissions = block.GroupMask;
            item.InvType = invType;
            item.NextPermissions = block.NextOwnerMask;
            item.SalePrice = block.SalePrice;
            item.SaleType = block.SaleType;
            item.Owner = UserID;
            item.AssetID = assetID;

            return item;
        }
Esempio n. 7
0
        protected virtual void ProcessInPacket(Packet Pack)
        {
            ack_pack(Pack);
            if (debug)
            {
                if (Pack.Type != PacketType.AgentUpdate)
                {
                    Console.WriteLine(Pack.Type.ToString());
                }
            }

            if (this.ProcessPacketMethod(Pack))
            {
                //there is a handler registered that handled this packet type
                return;
            }
            else
            {
                System.Text.Encoding _enc = System.Text.Encoding.ASCII;

                switch (Pack.Type)
                {
                case PacketType.CompleteAgentMovement:
                    if (this.m_child)
                    {
                        this.UpgradeClient();
                    }
                    ClientAvatar.CompleteMovement(m_world);
                    ClientAvatar.SendInitialPosition();
                    break;

                case PacketType.RegionHandshakeReply:
                    m_world.SendLayerData(this);
                    break;

                case PacketType.AgentWearablesRequest:
                    ClientAvatar.SendInitialAppearance();
                    foreach (SimClient client in m_clientThreads.Values)
                    {
                        if (client.AgentID != this.AgentID)
                        {
                            ObjectUpdatePacket objupdate = client.ClientAvatar.CreateUpdatePacket();
                            this.OutPacket(objupdate);
                            client.ClientAvatar.SendAppearanceToOtherAgent(this);
                        }
                    }
                    m_world.GetInitialPrims(this);
                    break;

                case PacketType.AgentIsNowWearing:
                    AgentIsNowWearingPacket wear = (AgentIsNowWearingPacket)Pack;
                    //Console.WriteLine(Pack.ToString());
                    break;

                case PacketType.AgentSetAppearance:
                    AgentSetAppearancePacket appear = (AgentSetAppearancePacket)Pack;
                    // Console.WriteLine(appear.ToString());
                    this.ClientAvatar.SetAppearance(appear);
                    break;

                case PacketType.ObjectAdd:
                    m_world.AddNewPrim((ObjectAddPacket)Pack, this);
                    break;

                case PacketType.ObjectLink:
                    OpenSim.Framework.Console.MainConsole.Instance.WriteLine(Pack.ToString());
                    ObjectLinkPacket        link         = (ObjectLinkPacket)Pack;
                    uint                    parentprimid = 0;
                    OpenSim.world.Primitive parentprim   = null;
                    if (link.ObjectData.Length > 1)
                    {
                        parentprimid = link.ObjectData[0].ObjectLocalID;
                        foreach (Entity ent in m_world.Entities.Values)
                        {
                            if (ent.localid == parentprimid)
                            {
                                parentprim = (OpenSim.world.Primitive)ent;
                            }
                        }
                        for (int i = 1; i < link.ObjectData.Length; i++)
                        {
                            foreach (Entity ent in m_world.Entities.Values)
                            {
                                if (ent.localid == link.ObjectData[i].ObjectLocalID)
                                {
                                    ((OpenSim.world.Primitive)ent).MakeParent(parentprim);
                                }
                            }
                        }
                    }
                    break;

                case PacketType.ObjectScale:
                    OpenSim.Framework.Console.MainConsole.Instance.WriteLine(Pack.ToString());
                    break;

                case PacketType.ObjectShape:
                    ObjectShapePacket shape = (ObjectShapePacket)Pack;
                    for (int i = 0; i < shape.ObjectData.Length; i++)
                    {
                        foreach (Entity ent in m_world.Entities.Values)
                        {
                            if (ent.localid == shape.ObjectData[i].ObjectLocalID)
                            {
                                ((OpenSim.world.Primitive)ent).UpdateShape(shape.ObjectData[i]);
                            }
                        }
                    }
                    break;

                case PacketType.RequestImage:
                    RequestImagePacket imageRequest = (RequestImagePacket)Pack;
                    for (int i = 0; i < imageRequest.RequestImage.Length; i++)
                    {
                        m_assetCache.AddTextureRequest(this, imageRequest.RequestImage[i].Image);
                    }
                    break;

                case PacketType.TransferRequest:
                    //Console.WriteLine("OpenSimClient.cs:ProcessInPacket() - Got transfer request");
                    TransferRequestPacket transfer = (TransferRequestPacket)Pack;
                    m_assetCache.AddAssetRequest(this, transfer);
                    break;

                case PacketType.AgentUpdate:
                    ClientAvatar.HandleUpdate((AgentUpdatePacket)Pack);
                    break;

                case PacketType.ObjectImage:
                    ObjectImagePacket imagePack = (ObjectImagePacket)Pack;
                    for (int i = 0; i < imagePack.ObjectData.Length; i++)
                    {
                        foreach (Entity ent in m_world.Entities.Values)
                        {
                            if (ent.localid == imagePack.ObjectData[i].ObjectLocalID)
                            {
                                ((OpenSim.world.Primitive)ent).UpdateTexture(imagePack.ObjectData[i].TextureEntry);
                            }
                        }
                    }
                    break;

                case PacketType.ObjectFlagUpdate:
                    ObjectFlagUpdatePacket flags = (ObjectFlagUpdatePacket)Pack;
                    foreach (Entity ent in m_world.Entities.Values)
                    {
                        if (ent.localid == flags.AgentData.ObjectLocalID)
                        {
                            ((OpenSim.world.Primitive)ent).UpdateObjectFlags(flags);
                        }
                    }
                    break;

                case PacketType.AssetUploadRequest:
                    AssetUploadRequestPacket request = (AssetUploadRequestPacket)Pack;
                    this.UploadAssets.HandleUploadPacket(request, request.AssetBlock.TransactionID.Combine(this.SecureSessionID));
                    break;

                case PacketType.RequestXfer:
                    //Console.WriteLine(Pack.ToString());
                    break;

                case PacketType.SendXferPacket:
                    this.UploadAssets.HandleXferPacket((SendXferPacketPacket)Pack);
                    break;

                case PacketType.CreateInventoryFolder:
                    CreateInventoryFolderPacket invFolder = (CreateInventoryFolderPacket)Pack;
                    m_inventoryCache.CreateNewInventoryFolder(this, invFolder.FolderData.FolderID, (ushort)invFolder.FolderData.Type, Util.FieldToString(invFolder.FolderData.Name), invFolder.FolderData.ParentID);
                    //Console.WriteLine(Pack.ToString());
                    break;

                case PacketType.CreateInventoryItem:
                    //Console.WriteLine(Pack.ToString());
                    CreateInventoryItemPacket createItem = (CreateInventoryItemPacket)Pack;
                    if (createItem.InventoryBlock.TransactionID != LLUUID.Zero)
                    {
                        this.UploadAssets.CreateInventoryItem(createItem);
                    }
                    else
                    {
                        // Console.Write(Pack.ToString());
                        this.CreateInventoryItem(createItem);
                    }
                    break;

                case PacketType.FetchInventory:
                    //Console.WriteLine("fetch item packet");
                    FetchInventoryPacket FetchInventory = (FetchInventoryPacket)Pack;
                    m_inventoryCache.FetchInventory(this, FetchInventory);
                    break;

                case PacketType.FetchInventoryDescendents:
                    FetchInventoryDescendentsPacket Fetch = (FetchInventoryDescendentsPacket)Pack;
                    m_inventoryCache.FetchInventoryDescendents(this, Fetch);
                    break;

                case PacketType.UpdateInventoryItem:
                    UpdateInventoryItemPacket update = (UpdateInventoryItemPacket)Pack;
                    //Console.WriteLine(Pack.ToString());
                    for (int i = 0; i < update.InventoryData.Length; i++)
                    {
                        if (update.InventoryData[i].TransactionID != LLUUID.Zero)
                        {
                            AssetBase asset = m_assetCache.GetAsset(update.InventoryData[i].TransactionID.Combine(this.SecureSessionID));
                            if (asset != null)
                            {
                                // Console.WriteLine("updating inventory item, found asset" + asset.FullID.ToStringHyphenated() + " already in cache");
                                m_inventoryCache.UpdateInventoryItemAsset(this, update.InventoryData[i].ItemID, asset);
                            }
                            else
                            {
                                asset = this.UploadAssets.AddUploadToAssetCache(update.InventoryData[i].TransactionID);
                                if (asset != null)
                                {
                                    //Console.WriteLine("updating inventory item, adding asset" + asset.FullID.ToStringHyphenated() + " to cache");
                                    m_inventoryCache.UpdateInventoryItemAsset(this, update.InventoryData[i].ItemID, asset);
                                }
                                else
                                {
                                    //Console.WriteLine("trying to update inventory item, but asset is null");
                                }
                            }
                        }
                        else
                        {
                            m_inventoryCache.UpdateInventoryItemDetails(this, update.InventoryData[i].ItemID, update.InventoryData[i]);;
                        }
                    }
                    break;

                case PacketType.ViewerEffect:
                    ViewerEffectPacket viewer = (ViewerEffectPacket)Pack;
                    foreach (SimClient client in m_clientThreads.Values)
                    {
                        if (client.AgentID != this.AgentID)
                        {
                            viewer.AgentData.AgentID   = client.AgentID;
                            viewer.AgentData.SessionID = client.SessionID;
                            client.OutPacket(viewer);
                        }
                    }
                    break;

                case PacketType.RequestTaskInventory:
                    // Console.WriteLine(Pack.ToString());
                    RequestTaskInventoryPacket requesttask = (RequestTaskInventoryPacket)Pack;
                    ReplyTaskInventoryPacket   replytask   = new ReplyTaskInventoryPacket();
                    bool foundent = false;
                    foreach (Entity ent in m_world.Entities.Values)
                    {
                        if (ent.localid == requesttask.InventoryData.LocalID)
                        {
                            replytask.InventoryData.TaskID   = ent.uuid;
                            replytask.InventoryData.Serial   = 0;
                            replytask.InventoryData.Filename = new byte[0];
                            foundent = true;
                        }
                    }
                    if (foundent)
                    {
                        this.OutPacket(replytask);
                    }
                    break;

                case PacketType.UpdateTaskInventory:
                    // Console.WriteLine(Pack.ToString());
                    UpdateTaskInventoryPacket updatetask  = (UpdateTaskInventoryPacket)Pack;
                    AgentInventory            myinventory = this.m_inventoryCache.GetAgentsInventory(this.AgentID);
                    if (myinventory != null)
                    {
                        if (updatetask.UpdateData.Key == 0)
                        {
                            if (myinventory.InventoryItems[updatetask.InventoryData.ItemID] != null)
                            {
                                if (myinventory.InventoryItems[updatetask.InventoryData.ItemID].Type == 7)
                                {
                                    LLUUID    noteaid = myinventory.InventoryItems[updatetask.InventoryData.ItemID].AssetID;
                                    AssetBase assBase = this.m_assetCache.GetAsset(noteaid);
                                    if (assBase != null)
                                    {
                                        foreach (Entity ent in m_world.Entities.Values)
                                        {
                                            if (ent.localid == updatetask.UpdateData.LocalID)
                                            {
                                                if (ent is OpenSim.world.Primitive)
                                                {
                                                    this.m_world.AddScript(ent, Util.FieldToString(assBase.Data));
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    break;

                case PacketType.AgentAnimation:
                    if (!m_child)
                    {
                        AgentAnimationPacket AgentAni = (AgentAnimationPacket)Pack;
                        for (int i = 0; i < AgentAni.AnimationList.Length; i++)
                        {
                            if (AgentAni.AnimationList[i].StartAnim)
                            {
                                ClientAvatar.current_anim = AgentAni.AnimationList[i].AnimID;
                                ClientAvatar.anim_seq     = 1;
                                ClientAvatar.SendAnimPack();
                            }
                        }
                    }
                    break;

                case PacketType.ObjectSelect:
                    ObjectSelectPacket incomingselect = (ObjectSelectPacket)Pack;
                    for (int i = 0; i < incomingselect.ObjectData.Length; i++)
                    {
                        foreach (Entity ent in m_world.Entities.Values)
                        {
                            if (ent.localid == incomingselect.ObjectData[i].ObjectLocalID)
                            {
                                ((OpenSim.world.Primitive)ent).GetProperites(this);
                                break;
                            }
                        }
                    }
                    break;
                }
            }
        }
        public bool UpdateInventoryItemDetails(SimClient remoteClient, LLUUID itemID, UpdateInventoryItemPacket.InventoryDataBlock packet)
        {
            if (this._agentsInventory.ContainsKey(remoteClient.AgentID))
            {
                bool res = _agentsInventory[remoteClient.AgentID].UpdateItemDetails(itemID, packet);
                if (res)
                {
                    InventoryItem Item = this._agentsInventory[remoteClient.AgentID].InventoryItems[itemID];
                    this.SendItemUpdateCreate(remoteClient, Item);
                }
                return res;
            }

            return false;
        }
 public bool UpdateItemDetails(LLUUID itemID, UpdateInventoryItemPacket.InventoryDataBlock packet)
 {
     Console.WriteLine("updating inventory item details");
     if (this.InventoryItems.ContainsKey(itemID))
     {
         Console.WriteLine("changing name to "+ Util.FieldToString(packet.Name));
         InventoryItem Item = this.InventoryItems[itemID];
         Item.Name = Util.FieldToString(packet.Name);
         Console.WriteLine("updated inventory item " + itemID.ToStringHyphenated());
         //TODO need to update the rest of the info
     }
     return true;
 }