aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs136
1 files changed, 68 insertions, 68 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
index 1177378..39ebaef 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
@@ -766,102 +766,102 @@ namespace OpenSim.Region.Framework.Scenes
766 return -1; 766 return -1;
767 } 767 }
768 768
769 private bool CreateInventoryFileName() 769 private bool CreateInventoryFile()
770 { 770 {
771 if (m_inventoryFileName == String.Empty || 771 if (m_inventoryFileName == String.Empty ||
772 m_inventoryFileNameSerial < m_inventorySerial) 772 m_inventoryFileNameSerial < m_inventorySerial)
773 { 773 {
774 // Something changed, we need to create a new file
774 m_inventoryFileName = "inventory_" + UUID.Random().ToString() + ".tmp"; 775 m_inventoryFileName = "inventory_" + UUID.Random().ToString() + ".tmp";
775 m_inventoryFileNameSerial = m_inventorySerial; 776 m_inventoryFileNameSerial = m_inventorySerial;
776 return true;
777 }
778 777
779 return false; 778 InventoryStringBuilder invString = new InventoryStringBuilder(m_part.UUID, UUID.Zero);
780 }
781 779
782 /// <summary> 780 lock (m_items)
783 /// Serialize all the metadata for the items in this prim's inventory ready for sending to the client 781 {
784 /// </summary> 782 foreach (TaskInventoryItem item in m_items.Values)
785 /// <param name="xferManager"></param> 783 {
786 public void RequestInventoryFile(IClientAPI client, IXfer xferManager) 784 UUID ownerID = item.OwnerID;
787 { 785 uint everyoneMask = 0;
788 bool changed = CreateInventoryFileName(); 786 uint baseMask = item.BasePermissions;
787 uint ownerMask = item.CurrentPermissions;
788 uint groupMask = item.GroupPermissions;
789 789
790 InventoryStringBuilder invString = new InventoryStringBuilder(m_part.UUID, UUID.Zero); 790 invString.AddItemStart();
791 invString.AddNameValueLine("item_id", item.ItemID.ToString());
792 invString.AddNameValueLine("parent_id", m_part.UUID.ToString());
791 793
792 lock (m_items) 794 invString.AddPermissionsStart();
793 {
794 if (m_inventorySerial == 0) // No inventory
795 {
796 client.SendTaskInventory(m_part.UUID, 0, new byte[0]);
797 return;
798 }
799 795
800 client.SendTaskInventory(m_part.UUID, (short)m_inventorySerial, 796 invString.AddNameValueLine("base_mask", Utils.UIntToHexString(baseMask));
801 Util.StringToBytes256(m_inventoryFileName)); 797 invString.AddNameValueLine("owner_mask", Utils.UIntToHexString(ownerMask));
798 invString.AddNameValueLine("group_mask", Utils.UIntToHexString(groupMask));
799 invString.AddNameValueLine("everyone_mask", Utils.UIntToHexString(everyoneMask));
800 invString.AddNameValueLine("next_owner_mask", Utils.UIntToHexString(item.NextPermissions));
802 801
803 if (!changed) 802 invString.AddNameValueLine("creator_id", item.CreatorID.ToString());
804 { 803 invString.AddNameValueLine("owner_id", ownerID.ToString());
805 if (m_inventoryFileData.Length > 2)
806 {
807 xferManager.AddNewFile(m_inventoryFileName,
808 m_inventoryFileData);
809 return;
810 }
811 }
812 804
813 foreach (TaskInventoryItem item in m_items.Values) 805 invString.AddNameValueLine("last_owner_id", item.LastOwnerID.ToString());
814 {
815 UUID ownerID = item.OwnerID;
816 uint everyoneMask = 0;
817 uint baseMask = item.BasePermissions;
818 uint ownerMask = item.CurrentPermissions;
819 uint groupMask = item.GroupPermissions;
820 806
821 invString.AddItemStart(); 807 invString.AddNameValueLine("group_id", item.GroupID.ToString());
822 invString.AddNameValueLine("item_id", item.ItemID.ToString()); 808 invString.AddSectionEnd();
823 invString.AddNameValueLine("parent_id", m_part.UUID.ToString());
824 809
825 invString.AddPermissionsStart(); 810 invString.AddNameValueLine("asset_id", item.AssetID.ToString());
811 invString.AddNameValueLine("type", TaskInventoryItem.Types[item.Type]);
812 invString.AddNameValueLine("inv_type", TaskInventoryItem.InvTypes[item.InvType]);
813 invString.AddNameValueLine("flags", Utils.UIntToHexString(item.Flags));
826 814
827 invString.AddNameValueLine("base_mask", Utils.UIntToHexString(baseMask)); 815 invString.AddSaleStart();
828 invString.AddNameValueLine("owner_mask", Utils.UIntToHexString(ownerMask)); 816 invString.AddNameValueLine("sale_type", "not");
829 invString.AddNameValueLine("group_mask", Utils.UIntToHexString(groupMask)); 817 invString.AddNameValueLine("sale_price", "0");
830 invString.AddNameValueLine("everyone_mask", Utils.UIntToHexString(everyoneMask)); 818 invString.AddSectionEnd();
831 invString.AddNameValueLine("next_owner_mask", Utils.UIntToHexString(item.NextPermissions));
832 819
833 invString.AddNameValueLine("creator_id", item.CreatorID.ToString()); 820 invString.AddNameValueLine("name", item.Name + "|");
834 invString.AddNameValueLine("owner_id", ownerID.ToString()); 821 invString.AddNameValueLine("desc", item.Description + "|");
835 822
836 invString.AddNameValueLine("last_owner_id", item.LastOwnerID.ToString()); 823 invString.AddNameValueLine("creation_date", item.CreationDate.ToString());
824 invString.AddSectionEnd();
825 }
826 }
837 827
838 invString.AddNameValueLine("group_id", item.GroupID.ToString()); 828 m_inventoryFileData = Utils.StringToBytes(invString.BuildString);
839 invString.AddSectionEnd();
840 829
841 invString.AddNameValueLine("asset_id", item.AssetID.ToString()); 830 return true;
842 invString.AddNameValueLine("type", TaskInventoryItem.Types[item.Type]); 831 }
843 invString.AddNameValueLine("inv_type", TaskInventoryItem.InvTypes[item.InvType]);
844 invString.AddNameValueLine("flags", Utils.UIntToHexString(item.Flags));
845 832
846 invString.AddSaleStart(); 833 // No need to recreate, the existing file is fine
847 invString.AddNameValueLine("sale_type", "not"); 834 return false;
848 invString.AddNameValueLine("sale_price", "0"); 835 }
849 invString.AddSectionEnd();
850 836
851 invString.AddNameValueLine("name", item.Name + "|"); 837 /// <summary>
852 invString.AddNameValueLine("desc", item.Description + "|"); 838 /// Serialize all the metadata for the items in this prim's inventory ready for sending to the client
839 /// </summary>
840 /// <param name="xferManager"></param>
841 public void RequestInventoryFile(IClientAPI client, IXfer xferManager)
842 {
843 bool changed = CreateInventoryFile();
853 844
854 invString.AddNameValueLine("creation_date", item.CreationDate.ToString()); 845 if (m_inventorySerial == 0) // No inventory
855 invString.AddSectionEnd(); 846 {
856 } 847 client.SendTaskInventory(m_part.UUID, 0, new byte[0]);
848 return;
857 } 849 }
858 850
859 m_inventoryFileData = Utils.StringToBytes(invString.BuildString); 851 // In principle, we should only do the rest if the inventory changed;
852 // by sending m_inventorySerial to the client, it ought to know
853 // that nothing changed and that it doesn't need to request the file.
854 // Unfortunately, it doesn't look like the client optimizes this;
855 // the client seems to always come back and request the Xfer,
856 // no matter what value m_inventorySerial has.
860 857
861 if (m_inventoryFileData.Length > 2) 858 if (m_inventoryFileData.Length > 2)
862 { 859 // Add the file for Xfer
863 xferManager.AddNewFile(m_inventoryFileName, m_inventoryFileData); 860 xferManager.AddNewFile(m_inventoryFileName, m_inventoryFileData);
864 } 861
862 // Tell the client we're ready to Xfer the file
863 client.SendTaskInventory(m_part.UUID, (short)m_inventorySerial,
864 Util.StringToBytes256(m_inventoryFileName));
865 } 865 }
866 866
867 /// <summary> 867 /// <summary>