aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs60
1 files changed, 58 insertions, 2 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index ac427d7..95519bc 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -1654,6 +1654,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1654 //Ckrinke This variable is not used, so comment out to remove the warning from the compiler (3-21-08) 1654 //Ckrinke This variable is not used, so comment out to remove the warning from the compiler (3-21-08)
1655 //Ckrinke uint FULL_MASK_PERMISSIONS = 2147483647; 1655 //Ckrinke uint FULL_MASK_PERMISSIONS = 2147483647;
1656 1656
1657 int itemsSent = 0;
1657 if (fetchItems) 1658 if (fetchItems)
1658 { 1659 {
1659 InventoryDescendentsPacket descend = CreateInventoryDescendentsPacket(ownerID, folderID); 1660 InventoryDescendentsPacket descend = CreateInventoryDescendentsPacket(ownerID, folderID);
@@ -1714,9 +1715,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1714 1715
1715 i++; 1716 i++;
1716 count++; 1717 count++;
1718 itemsSent++;
1717 if (i == MAX_ITEMS_PER_PACKET) 1719 if (i == MAX_ITEMS_PER_PACKET)
1718 { 1720 {
1719 descend.Header.Zerocoded = true; 1721 descend.Header.Zerocoded = true;
1722 AddNullFolderBlockToDecendentsPacket(ref descend);
1720 OutPacket(descend, ThrottleOutPacketType.Asset); 1723 OutPacket(descend, ThrottleOutPacketType.Asset);
1721 1724
1722 if ((items.Count - count) > 0) 1725 if ((items.Count - count) > 0)
@@ -1736,8 +1739,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1736 } 1739 }
1737 } 1740 }
1738 1741
1739 if (i < MAX_ITEMS_PER_PACKET) 1742 if (0 < i && i < MAX_ITEMS_PER_PACKET)
1740 { 1743 {
1744 AddNullFolderBlockToDecendentsPacket(ref descend);
1741 OutPacket(descend, ThrottleOutPacketType.Asset); 1745 OutPacket(descend, ThrottleOutPacketType.Asset);
1742 } 1746 }
1743 } 1747 }
@@ -1772,8 +1776,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1772 1776
1773 i++; 1777 i++;
1774 count++; 1778 count++;
1779 itemsSent++;
1775 if (i == MAX_ITEMS_PER_PACKET) 1780 if (i == MAX_ITEMS_PER_PACKET)
1776 { 1781 {
1782 AddNullItemBlockToDescendentsPacket(ref descend);
1777 OutPacket(descend, ThrottleOutPacketType.Asset); 1783 OutPacket(descend, ThrottleOutPacketType.Asset);
1778 1784
1779 if ((folders.Count - count) > 0) 1785 if ((folders.Count - count) > 0)
@@ -1795,11 +1801,61 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1795 } 1801 }
1796 } 1802 }
1797 1803
1798 if (i < MAX_ITEMS_PER_PACKET) 1804 if (0 < i && i < MAX_ITEMS_PER_PACKET)
1799 { 1805 {
1806 AddNullItemBlockToDescendentsPacket(ref descend);
1800 OutPacket(descend, ThrottleOutPacketType.Asset); 1807 OutPacket(descend, ThrottleOutPacketType.Asset);
1801 } 1808 }
1802 } 1809 }
1810
1811 if (itemsSent == 0)
1812 {
1813 // no items found.
1814 InventoryDescendentsPacket descend = CreateInventoryDescendentsPacket(ownerID, folderID);
1815 descend.AgentData.Descendents = 0;
1816 AddNullItemBlockToDescendentsPacket(ref descend);
1817 AddNullFolderBlockToDecendentsPacket(ref descend);
1818 OutPacket(descend, ThrottleOutPacketType.Asset);
1819 }
1820 }
1821
1822 private void AddNullFolderBlockToDecendentsPacket(ref InventoryDescendentsPacket packet)
1823 {
1824 packet.FolderData = new InventoryDescendentsPacket.FolderDataBlock[1];
1825 packet.FolderData[0] = new InventoryDescendentsPacket.FolderDataBlock();
1826 packet.FolderData[0].FolderID = UUID.Zero;
1827 packet.FolderData[0].ParentID = UUID.Zero;
1828 packet.FolderData[0].Type = -1;
1829 packet.FolderData[0].Name = new byte[0];
1830 }
1831
1832 private void AddNullItemBlockToDescendentsPacket(ref InventoryDescendentsPacket packet)
1833 {
1834 packet.ItemData = new InventoryDescendentsPacket.ItemDataBlock[1];
1835 packet.ItemData[0] = new InventoryDescendentsPacket.ItemDataBlock();
1836 packet.ItemData[0].ItemID = UUID.Zero;
1837 packet.ItemData[0].AssetID = UUID.Zero;
1838 packet.ItemData[0].CreatorID = UUID.Zero;
1839 packet.ItemData[0].BaseMask = 0;
1840 packet.ItemData[0].Description = new byte[0];
1841 packet.ItemData[0].EveryoneMask = 0;
1842 packet.ItemData[0].OwnerMask = 0;
1843 packet.ItemData[0].FolderID = UUID.Zero;
1844 packet.ItemData[0].InvType = (sbyte)0;
1845 packet.ItemData[0].Name = new byte[0];
1846 packet.ItemData[0].NextOwnerMask = 0;
1847 packet.ItemData[0].OwnerID = UUID.Zero;
1848 packet.ItemData[0].Type = -1;
1849
1850 packet.ItemData[0].GroupID = UUID.Zero;
1851 packet.ItemData[0].GroupOwned = false;
1852 packet.ItemData[0].GroupMask = 0;
1853 packet.ItemData[0].CreationDate = 0;
1854 packet.ItemData[0].SalePrice = 0;
1855 packet.ItemData[0].SaleType = 0;
1856 packet.ItemData[0].Flags = 0;
1857
1858 // No need to add CRC
1803 } 1859 }
1804 1860
1805 private InventoryDescendentsPacket CreateInventoryDescendentsPacket(UUID ownerID, UUID folderID) 1861 private InventoryDescendentsPacket CreateInventoryDescendentsPacket(UUID ownerID, UUID folderID)