From 291eb48fb0338d80e3baeed65664d7a72fea1892 Mon Sep 17 00:00:00 2001 From: MW Date: Sun, 26 Aug 2007 17:57:25 +0000 Subject: Another attempt to fix the image sending bug (next week, I intend to rewrite the assetcache and asset server). Attempt to fix bug # 326. (crashing when using save-xml and hollow prims) Attempt to fix bug # 328 (limit of 50 items in a folder) --- OpenSim/Region/ClientStack/ClientView.API.cs | 57 +++++++++++++++++++--- .../ClientStack/ClientView.ProcessPackets.cs | 5 +- 2 files changed, 52 insertions(+), 10 deletions(-) (limited to 'OpenSim/Region/ClientStack') diff --git a/OpenSim/Region/ClientStack/ClientView.API.cs b/OpenSim/Region/ClientStack/ClientView.API.cs index 6209beb..edc1268 100644 --- a/OpenSim/Region/ClientStack/ClientView.API.cs +++ b/OpenSim/Region/ClientStack/ClientView.API.cs @@ -531,13 +531,19 @@ namespace OpenSim.Region.ClientStack { Encoding enc = Encoding.ASCII; uint FULL_MASK_PERMISSIONS = 2147483647; - InventoryDescendentsPacket descend = new InventoryDescendentsPacket(); - descend.AgentData.AgentID = this.AgentId; - descend.AgentData.OwnerID = ownerID; - descend.AgentData.FolderID = folderID; - descend.AgentData.Descendents = items.Count; - descend.AgentData.Version = 0; - descend.ItemData = new InventoryDescendentsPacket.ItemDataBlock[items.Count]; + InventoryDescendentsPacket descend = this.CreateInventoryDescendentsPacket(ownerID, folderID); + + int count = 0; + if (items.Count < 40) + { + descend.ItemData = new InventoryDescendentsPacket.ItemDataBlock[items.Count]; + descend.AgentData.Descendents = items.Count; + } + else + { + descend.ItemData = new InventoryDescendentsPacket.ItemDataBlock[40]; + descend.AgentData.Descendents = 40; + } int i = 0; foreach (InventoryItemBase item in items) { @@ -564,10 +570,45 @@ namespace OpenSim.Region.ClientStack descend.ItemData[i].CRC = 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); i++; + count++; + if (i == 40) + { + this.OutPacket(descend); + + if ((items.Count - count) > 0) + { + descend = this.CreateInventoryDescendentsPacket(ownerID, folderID); + if ((items.Count - count) < 40) + { + descend.ItemData = new InventoryDescendentsPacket.ItemDataBlock[items.Count - count]; + descend.AgentData.Descendents = items.Count - count; + } + else + { + descend.ItemData = new InventoryDescendentsPacket.ItemDataBlock[40]; + descend.AgentData.Descendents = 40; + } + i = 0; + } + } + } + + if (i < 40) + { + this.OutPacket(descend); } - this.OutPacket(descend); + } + + private InventoryDescendentsPacket CreateInventoryDescendentsPacket(LLUUID ownerID, LLUUID folderID) + { + InventoryDescendentsPacket descend = new InventoryDescendentsPacket(); + descend.AgentData.AgentID = this.AgentId; + descend.AgentData.OwnerID = ownerID; + descend.AgentData.FolderID = folderID; + descend.AgentData.Version = 0; + return descend; } public void SendInventoryItemDetails(LLUUID ownerID, InventoryItemBase item) diff --git a/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs b/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs index 0163528..ade7a0d 100644 --- a/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs +++ b/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs @@ -351,7 +351,7 @@ namespace OpenSim.Region.ClientStack #region Inventory/Asset/Other related packets case PacketType.RequestImage: RequestImagePacket imageRequest = (RequestImagePacket)Pack; - + //Console.WriteLine("image request: " + Pack.ToString()); for (int i = 0; i < imageRequest.RequestImage.Length; i++) { m_assetCache.AddTextureRequest(this, imageRequest.RequestImage[i].Image, imageRequest.RequestImage[i].Packet); @@ -363,10 +363,11 @@ namespace OpenSim.Region.ClientStack m_assetCache.AddAssetRequest(this, transfer); break; case PacketType.AssetUploadRequest: + //Console.WriteLine("upload request " + Pack.ToString()); AssetUploadRequestPacket request = (AssetUploadRequestPacket)Pack; if (OnAssetUploadRequest != null) { - OnAssetUploadRequest(this, request.AssetBlock.TransactionID.Combine(this.SecureSessionID), request.AssetBlock.TransactionID, request.AssetBlock.Type, request.AssetBlock.AssetData); + OnAssetUploadRequest(this, request.AssetBlock.TransactionID.Combine(this.SecureSessionID), request.AssetBlock.TransactionID, request.AssetBlock.Type, request.AssetBlock.AssetData, request.AssetBlock.StoreLocal); } break; case PacketType.RequestXfer: -- cgit v1.1