public void FetchInventoryDescendents(SimClient userInfo, FetchInventoryDescendentsPacket FetchDescend) { if (this._agentsInventory.ContainsKey(userInfo.AgentID)) { AgentInventory agentInventory = this._agentsInventory[userInfo.AgentID]; if (FetchDescend.InventoryData.FetchItems) { if (agentInventory.InventoryFolders.ContainsKey(FetchDescend.InventoryData.FolderID)) { InventoryFolder Folder = agentInventory.InventoryFolders[FetchDescend.InventoryData.FolderID]; InventoryDescendentsPacket Descend = new InventoryDescendentsPacket(); Descend.AgentData.AgentID = userInfo.AgentID; Descend.AgentData.OwnerID = Folder.OwnerID; Descend.AgentData.FolderID = FetchDescend.InventoryData.FolderID; Descend.AgentData.Descendents = Folder.Items.Count; Descend.AgentData.Version = Folder.Items.Count; Descend.ItemData = new InventoryDescendentsPacket.ItemDataBlock[Folder.Items.Count]; for (int i = 0; i < Folder.Items.Count; i++) { InventoryItem Item = Folder.Items[i]; Descend.ItemData[i] = new InventoryDescendentsPacket.ItemDataBlock(); Descend.ItemData[i].ItemID = Item.ItemID; Descend.ItemData[i].AssetID = Item.AssetID; Descend.ItemData[i].CreatorID = Item.CreatorID; Descend.ItemData[i].BaseMask = FULL_MASK_PERMISSIONS; Descend.ItemData[i].CreationDate = 1000; Descend.ItemData[i].Description = _enc.GetBytes(Item.Description + "\0"); Descend.ItemData[i].EveryoneMask = FULL_MASK_PERMISSIONS; Descend.ItemData[i].Flags = 1; Descend.ItemData[i].FolderID = Item.FolderID; Descend.ItemData[i].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000"); Descend.ItemData[i].GroupMask = FULL_MASK_PERMISSIONS; Descend.ItemData[i].InvType = Item.InvType; Descend.ItemData[i].Name = _enc.GetBytes(Item.Name + "\0"); Descend.ItemData[i].NextOwnerMask = FULL_MASK_PERMISSIONS; Descend.ItemData[i].OwnerID = Item.OwnerID; Descend.ItemData[i].OwnerMask = FULL_MASK_PERMISSIONS; Descend.ItemData[i].SalePrice = 100; Descend.ItemData[i].SaleType = 0; Descend.ItemData[i].Type = Item.Type; Descend.ItemData[i].CRC = libsecondlife.Helpers.InventoryCRC(1000, 0, Descend.ItemData[i].InvType, Descend.ItemData[i].Type, Descend.ItemData[i].AssetID, Descend.ItemData[i].GroupID, 100, Descend.ItemData[i].OwnerID, Descend.ItemData[i].CreatorID, Descend.ItemData[i].ItemID, Descend.ItemData[i].FolderID, FULL_MASK_PERMISSIONS, 1, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS, FULL_MASK_PERMISSIONS); } userInfo.OutPacket(Descend); } } else { Console.WriteLine("fetch subfolders"); } } }
public Packet FetchInventoryDescendents( LLUUID folderID, bool fetchFolders, bool fetchItems ) { FetchInventoryDescendentsPacket p = new FetchInventoryDescendentsPacket(); p.InventoryData.OwnerID = AgentID; p.InventoryData.FolderID = folderID; p.InventoryData.SortOrder = FETCH_INVENTORY_SORT_NAME; p.InventoryData.FetchFolders = fetchFolders; p.InventoryData.FetchItems = fetchItems; p.AgentData.AgentID = AgentID; p.AgentData.SessionID = SessionID; return p; }
public Packet FetchInventoryDescendents(LLUUID folderID, bool fetchFolders, bool fetchItems) { FetchInventoryDescendentsPacket p = new FetchInventoryDescendentsPacket(); p.InventoryData.OwnerID = AgentID; p.InventoryData.FolderID = folderID; p.InventoryData.SortOrder = FETCH_INVENTORY_SORT_NAME; p.InventoryData.FetchFolders = fetchFolders; p.InventoryData.FetchItems = fetchItems; p.AgentData.AgentID = AgentID; p.AgentData.SessionID = SessionID; return(p); }
public void RequestFolderContents(UUID folder, UUID owner, bool folders, bool items, InventorySortOrder order) { FetchInventoryDescendentsPacket fetch = new FetchInventoryDescendentsPacket(); fetch.AgentData.AgentID = frame.AgentID; fetch.AgentData.SessionID = frame.SessionID; fetch.InventoryData.FetchFolders = folders; fetch.InventoryData.FetchItems = items; fetch.InventoryData.FolderID = folder; fetch.InventoryData.OwnerID = owner; fetch.InventoryData.SortOrder = (int)order; proxy.InjectPacket(fetch, Direction.Outgoing); }
/// <summary> /// Request a folder's content. /// </summary> /// <param name="folder"></param> /// <param name="folders"></param> /// <param name="items"></param> /// <param name="order"></param> public void RequestFolderContents(UUID folder, bool folders, bool items, InventorySortOrder order) { //empty the dictionnary containing current folder items by name currentFolderItems = new Dictionary <string, InventoryItem>(); //reset the number of descendants received nbdescendantsreceived = 0; //build a packet to request the content FetchInventoryDescendentsPacket fetch = new FetchInventoryDescendentsPacket(); fetch.AgentData.AgentID = frame.AgentID; fetch.AgentData.SessionID = frame.SessionID; fetch.InventoryData.FetchFolders = folders; fetch.InventoryData.FetchItems = items; fetch.InventoryData.FolderID = folder; fetch.InventoryData.OwnerID = frame.AgentID; //is it correct? fetch.InventoryData.SortOrder = (int)order; //send packet to SL proxy.InjectPacket(fetch, Direction.Outgoing); }
public void RequestFolderContents(LLUUID folder, LLUUID owner, bool folders, bool items, InventorySortOrder order) { FetchInventoryDescendentsPacket fetch = new FetchInventoryDescendentsPacket(); fetch.AgentData.AgentID = _Client.Self.AgentID; fetch.AgentData.SessionID = _Client.Self.SessionID; fetch.InventoryData.FetchFolders = folders; fetch.InventoryData.FetchItems = items; fetch.InventoryData.FolderID = folder; fetch.InventoryData.OwnerID = owner; fetch.InventoryData.SortOrder = (int)order; _Client.Network.SendPacket(fetch); }
//request a folder content public void RequestFolderContents(UUID folder, bool folders, bool items, InventorySortOrder order) { //empty the dictionnary containing current folder items by name currentFolderItems = new Dictionary<string, ItemData>(); //reset the number of descendants received nbdescendantsreceived = 0; //build a packet to request the content FetchInventoryDescendentsPacket fetch = new FetchInventoryDescendentsPacket(); fetch.AgentData.AgentID = frame.AgentID; fetch.AgentData.SessionID = frame.SessionID; fetch.InventoryData.FetchFolders = folders; fetch.InventoryData.FetchItems = items; fetch.InventoryData.FolderID = folder; fetch.InventoryData.OwnerID = frame.AgentID; //is it correct? fetch.InventoryData.SortOrder = (int)order; //send packet to SL proxy.InjectPacket(fetch, Direction.Outgoing); }
/// <summary> /// Request the contents of an inventory folder, <paramref name="callback"/> is fired when all of the contents are retrieved. /// <paramref name="partialCallback"/> is fired as the contents trickle in from the server. /// </summary> /// <param name="folder">The folder to search</param> /// <param name="owner">The folder owners <seealso cref="UUID"/></param> /// <param name="folders">true to return <seealso cref="InventoryManager.InventoryFolder"/>s contained in folder</param> /// <param name="items">true to return <seealso cref="InventoryManager.InventoryItem"/>s containd in folder</param> /// <param name="order">the sort order to return items in</param> /// <param name="callback">The callback to fire when all the contents are received.</param> /// <param name="partialCallback">The callback to fire as the contents are received.</param> /// <seealso cref="InventoryManager.FolderContents"/> public void RequestFolderContents(UUID folder, UUID owner, bool folders, bool items, InventorySortOrder order, FolderContentsCallback callback, PartialContentsCallback partialCallback) { DescendentsRequest request = new DescendentsRequest(folder, callback); request.PartialCallback = partialCallback; lock (_DescendentsRequests) _DescendentsRequests.Add(request); // Send the packet: FetchInventoryDescendentsPacket fetch = new FetchInventoryDescendentsPacket(); fetch.AgentData.AgentID = _Agents.AgentID; fetch.AgentData.SessionID = _Agents.SessionID; fetch.InventoryData.FetchFolders = folders; fetch.InventoryData.FetchItems = items; fetch.InventoryData.FolderID = folder; fetch.InventoryData.OwnerID = owner; fetch.InventoryData.SortOrder = (int)order; _Network.SendPacket(fetch); }
/// <summary> /// Request the contents of an inventory folder /// </summary> /// <param name="folder">The folder to search</param> /// <param name="owner">The folder owners <seealso cref="UUID"/></param> /// <param name="folders">true to return <seealso cref="InventoryManager.InventoryFolder"/>s contained in folder</param> /// <param name="items">true to return <seealso cref="InventoryManager.InventoryItem"/>s containd in folder</param> /// <param name="order">the sort order to return items in</param> /// <seealso cref="InventoryManager.FolderContents"/> public void RequestFolderContents(UUID folder, UUID owner, bool folders, bool items, InventorySortOrder order) { string cap = owner == Client.Self.AgentID ? "FetchInventoryDescendents2" : "FetchLibDescendents2"; if (Client.Settings.HTTP_INVENTORY && Client.Network.CurrentSim.Caps != null && Client.Network.CurrentSim.Caps.CapabilityURI(cap) != null) { RequestFolderContentsCap(folder, owner, folders, items, order); return; } FetchInventoryDescendentsPacket fetch = new FetchInventoryDescendentsPacket(); fetch.AgentData.AgentID = Client.Self.AgentID; fetch.AgentData.SessionID = Client.Self.SessionID; fetch.InventoryData.FetchFolders = folders; fetch.InventoryData.FetchItems = items; fetch.InventoryData.FolderID = folder; fetch.InventoryData.OwnerID = owner; fetch.InventoryData.SortOrder = (int)order; Client.Network.SendPacket(fetch); }
public bool FetchInventoryDescendants(FetchInventoryDescendentsPacket folderRequest) { if (folderRequest.InventoryData.OwnerID.Equals(libOwner)) // Tell grid surfer to forward request to region, because the Library is served from there (!) return false; if (connected) { InventoryFolderBase f = new InventoryFolderBase(); f.ID = folderRequest.InventoryData.FolderID; f.Owner = folderRequest.InventoryData.OwnerID; string uri = InventoryServerURL + "/" + AuthToken + "/FetchDescendants/"; lock (pendingRequests) { pendingRequestsFetchItemsFlag.Add(folderRequest.InventoryData.FetchItems); pendingRequestsFetchFoldersFlag.Add(folderRequest.InventoryData.FetchFolders); pendingRequests.Add(f); } OpenSimComms.FetchInventoryDescendants(uri, f, DescendantsCallBack); } // Tell grid surfer not to forward return true; }
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; } } }