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); }
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); }
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; }
/// <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); }
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; }
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; }
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; }