From d1b5e7a981d55af8b1e10c927981cbfb79908c01 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 23 Apr 2022 16:41:18 +0100 Subject: [PATCH] some cleaup --- .../FetchInventory/FetchInvDescHandler.cs | 57 ++++------ .../FetchInventory/FetchLibDescHandler.cs | 100 +++++++----------- OpenSim/Framework/InventoryFolderImpl.cs | 86 +++++---------- OpenSim/Framework/RegionSettings.cs | 2 +- 4 files changed, 91 insertions(+), 154 deletions(-) diff --git a/OpenSim/Capabilities/Handlers/FetchInventory/FetchInvDescHandler.cs b/OpenSim/Capabilities/Handlers/FetchInventory/FetchInvDescHandler.cs index 8ef9b312a6..b532e159f0 100644 --- a/OpenSim/Capabilities/Handlers/FetchInventory/FetchInvDescHandler.cs +++ b/OpenSim/Capabilities/Handlers/FetchInventory/FetchInvDescHandler.cs @@ -26,9 +26,7 @@ */ using System; -using System.Collections; using System.Collections.Generic; -using System.IO; using System.Linq; using System.Reflection; using System.Text; @@ -47,18 +45,22 @@ namespace OpenSim.Capabilities.Handlers { public class FetchInvDescHandler { - private static readonly ILog m_log = - LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private static byte[] EmptyResponse = Util.UTF8NBGetbytes("folders"); - private IInventoryService m_InventoryService; - private ILibraryService m_LibraryService; - private IScene m_Scene; + private static readonly byte[] EmptyResponse = Util.UTF8NBGetbytes("folders"); + private readonly IInventoryService m_InventoryService; + private readonly ILibraryService m_LibraryService; + private readonly UUID libOwner; + private readonly IScene m_Scene; public FetchInvDescHandler(IInventoryService invService, ILibraryService libService, IScene s) { m_InventoryService = invService; - m_LibraryService = libService; + if(libService != null && libService.LibraryRootFolder != null) + { + m_LibraryService = libService; + libOwner = libService.LibraryRootFolder.Owner; + } m_Scene = s; } @@ -167,24 +169,16 @@ namespace OpenSim.Capabilities.Handlers return; } - int total_folders = 0; - int total_items = 0; - UUID requester = folders[0].owner_id; - List invcollSet = Fetch(folders, bad_folders, ref total_folders, ref total_items); + List invcollSet = Fetch(folders, bad_folders); //m_log.DebugFormat("[XXX]: Got {0} folders from a request of {1}", invcollSet.Count, folders.Count); int invcollSetCount = 0; if (invcollSet != null) invcollSetCount = invcollSet.Count; - int mem = 8192 + ((256 * invcollSetCount + - 384 * total_folders + - 1024 * total_items + - 128 * bad_folders.Count) & 0x7ffff000); - - osUTF8 lastresponse = LLSDxmlEncode2.Start(mem); + osUTF8 lastresponse = LLSDxmlEncode2.Start(); if (invcollSetCount > 0) { @@ -280,7 +274,7 @@ namespace OpenSim.Capabilities.Handlers httpResponse.RawBuffer = LLSDxmlEncode2.EndToBytes(lastresponse); } - private void AddLibraryFolders(List libFolders, List result, ref int total_folders, ref int total_items) + private void AddLibraryFolders(List libFolders, List result) { InventoryFolderImpl fold; if (m_LibraryService == null || m_LibraryService.LibraryRootFolder == null) @@ -299,8 +293,6 @@ namespace OpenSim.Capabilities.Handlers Collection.Version = fold.Version; Collection.Descendents = Collection.Items.Count + Collection.Folders.Count; - total_folders += Collection.Folders.Count; - total_items += Collection.Items.Count; result.Add(Collection); //m_log.DebugFormat("[XXX]: Added libfolder {0} ({1}) {2}", ret.Collection.FolderID, ret.Collection.OwnerID); @@ -308,7 +300,7 @@ namespace OpenSim.Capabilities.Handlers } } - private List Fetch(List fetchFolders, List bad_folders, ref int total_folders, ref int total_items) + private List Fetch(List fetchFolders, List bad_folders) { //m_log.DebugFormat( // "[WEB FETCH INV DESC HANDLER]: Fetching {0} folders for owner {1}", fetchFolders.Count, fetchFolders[0].owner_id); @@ -321,10 +313,7 @@ namespace OpenSim.Capabilities.Handlers HashSet libIDs = new HashSet(); HashSet otherIDs = new HashSet(); - bool dolib = (m_LibraryService != null && m_LibraryService.LibraryRootFolder != null); - UUID libOwner = UUID.Zero; - if(dolib) - libOwner = m_LibraryService.LibraryRootFolder.Owner; + bool dolib = m_LibraryService != null; // Filter folder Zero right here. Some viewers (Firestorm) send request for folder Zero, which doesn't make sense // and can kill the sim (all root folders have parent_id Zero) @@ -345,7 +334,7 @@ namespace OpenSim.Capabilities.Handlers result.Add(Collection); continue; } - if(dolib && f.owner_id == libOwner) + if(dolib && f.owner_id.Equals(libOwner)) { if(libIDs.Contains(f.folder_id)) continue; @@ -364,8 +353,6 @@ namespace OpenSim.Capabilities.Handlers if(otherFolders.Count > 0) { - int i = 0; - //m_log.DebugFormat("[XXX]: {0}", string.Join(",", fids)); InventoryCollection[] fetchedContents = m_InventoryService.GetMultipleFoldersContent(otherFolders[0].owner_id, otherIDs.ToArray()); @@ -380,7 +367,7 @@ namespace OpenSim.Capabilities.Handlers } else { - i = 0; + int i = 0; // Do some post-processing. May need to fetch more from inv server for links foreach (InventoryCollection contents in fetchedContents) { @@ -402,17 +389,13 @@ namespace OpenSim.Capabilities.Handlers // Next: link management ProcessLinks(freq, contents); - total_folders += contents.Folders.Count; - total_items += contents.Items.Count; result.Add(contents); } } } - if(dolib && libFolders.Count > 0) - { - AddLibraryFolders(libFolders, result, ref total_folders, ref total_items); - } + if(libFolders.Count > 0) + AddLibraryFolders(libFolders, result); return result; } diff --git a/OpenSim/Capabilities/Handlers/FetchInventory/FetchLibDescHandler.cs b/OpenSim/Capabilities/Handlers/FetchInventory/FetchLibDescHandler.cs index 15f54c23d1..5daf0908df 100644 --- a/OpenSim/Capabilities/Handlers/FetchInventory/FetchLibDescHandler.cs +++ b/OpenSim/Capabilities/Handlers/FetchInventory/FetchLibDescHandler.cs @@ -27,7 +27,7 @@ using System; using System.Collections.Generic; -using System.Linq; +using System.Net; using System.Reflection; using System.Text; using log4net; @@ -46,19 +46,27 @@ namespace OpenSim.Capabilities.Handlers { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private static byte[] EmptyResponse = Util.UTF8NBGetbytes("folders"); - private ILibraryService m_LibraryService; - private IScene m_Scene; + private static readonly byte[] EmptyResponse = Util.UTF8NBGetbytes("folders"); + private readonly ILibraryService m_LibraryService; + private readonly UUID libOwner; + private readonly IScene m_Scene; public FetchLibDescHandler(ILibraryService libService, IScene s) { m_LibraryService = libService; + libOwner = m_LibraryService.LibraryRootFolder.Owner; m_Scene = s; } public void FetchRequest(IOSHttpRequest httpRequest, IOSHttpResponse httpResponse, ExpiringKey BadRequests) { //m_log.DebugFormat("[XXX]: FetchLibDescendentsRequest in {0}, {1}", (m_Scene == null) ? "none" : m_Scene.Name, request); + if (m_LibraryService == null || m_LibraryService.LibraryRootFolder == null) + { + httpResponse.StatusCode = (int)HttpStatusCode.ServiceUnavailable; + return; + } + httpResponse.StatusCode = (int)HttpStatusCode.OK; List folders = null; List bad_folders = new List(); @@ -161,25 +169,16 @@ namespace OpenSim.Capabilities.Handlers return; } - int total_folders = 0; - int total_items = 0; - UUID requester = folders[0].owner_id; - List invcollSet = Fetch(folders, bad_folders, ref total_folders, ref total_items); + List invcollSet = Fetch(folders, bad_folders); //m_log.DebugFormat("[XXX]: Got {0} folders from a request of {1}", invcollSet.Count, folders.Count); int invcollSetCount = 0; if (invcollSet != null) invcollSetCount = invcollSet.Count; - int mem = 8192 + ((256 * invcollSetCount + - 384 * total_folders + - 1024 * total_items + - 128 * bad_folders.Count) & 0x7ffff000); - - osUTF8 lastresponse = LLSDxmlEncode2.Start(mem); - + osUTF8 lastresponse = LLSDxmlEncode2.Start(); if (invcollSetCount > 0) { lastresponse.AppendASCII("folders"); @@ -274,46 +273,16 @@ namespace OpenSim.Capabilities.Handlers httpResponse.RawBuffer = LLSDxmlEncode2.EndToBytes(lastresponse); } - private void AddLibraryFolders(List libFolders, List result, ref int total_folders, ref int total_items) - { - InventoryFolderImpl fold; - if (m_LibraryService == null || m_LibraryService.LibraryRootFolder == null) - return; - - foreach (LLSDFetchInventoryDescendents f in libFolders) - { - if ((fold = m_LibraryService.LibraryRootFolder.FindFolder(f.folder_id)) != null) - { - InventoryCollection Collection = new InventoryCollection(); -// ret.Collection.Folders = new List(); - Collection.Folders = fold.RequestListOfFolders(); - Collection.Items = fold.RequestListOfItems(); - Collection.OwnerID = m_LibraryService.LibraryRootFolder.Owner; - Collection.FolderID = f.folder_id; - Collection.Version = fold.Version; - - Collection.Descendents = Collection.Items.Count + Collection.Folders.Count; - total_folders += Collection.Folders.Count; - total_items += Collection.Items.Count; - result.Add(Collection); - - //m_log.DebugFormat("[XXX]: Added libfolder {0} ({1}) {2}", ret.Collection.FolderID, ret.Collection.OwnerID); - } - } - } - - private List Fetch(List fetchFolders, List bad_folders, ref int total_folders, ref int total_items) + private List Fetch(List fetchFolders, List bad_folders) { //m_log.DebugFormat( // "[FETCH LIB DESC HANDLER]: Fetching {0} folders", fetchFolders.Count); - // FIXME MAYBE: We're not handling sortOrder! - - List result = new List(32); - List libFolders = new List(32); + int cntr = fetchFolders.Count; + List result = new List(cntr); + List libFolders = new List(cntr); HashSet libIDs = new HashSet(); - UUID libOwner = m_LibraryService.LibraryRootFolder.Owner; - + // Filter folder Zero right here. Some viewers (Firestorm) send request for folder Zero, which doesn't make sense // and can kill the sim (all root folders have parent_id Zero) // send something. @@ -328,7 +297,7 @@ namespace OpenSim.Capabilities.Handlers InventoryCollection Collection = new InventoryCollection() { OwnerID = f.owner_id, - Version = 0, + Version = -1, FolderID = f.folder_id, Descendents = 0 }; @@ -345,17 +314,30 @@ namespace OpenSim.Capabilities.Handlers } } - if(libFolders.Count > 0) + if (libFolders.Count > 0) { - AddLibraryFolders(libFolders, result, ref total_folders, ref total_items); + foreach (LLSDFetchInventoryDescendents f in libFolders) + { + InventoryFolderImpl fold = m_LibraryService.LibraryRootFolder.FindFolder(f.folder_id); + if (fold != null) + { + InventoryCollection Collection = new InventoryCollection() + { + Folders = fold.RequestListOfFolders(), + Items = fold.RequestListOfItems(), + OwnerID = m_LibraryService.LibraryRootFolder.Owner, + FolderID = f.folder_id, + Version = fold.Version + }; + Collection.Descendents = Collection.Items.Count + Collection.Folders.Count; + result.Add(Collection); + //m_log.DebugFormat("[XXX]: Added libfolder {0} ({1}) {2}", ret.Collection.FolderID, ret.Collection.OwnerID); + } + else + bad_folders.Add(f.folder_id); + } } return result; } - - private bool BadFolder(LLSDFetchInventoryDescendents freq, InventoryCollection contents, List bad_folders) - { - bad_folders.Add(freq.folder_id); - return true; - } } } diff --git a/OpenSim/Framework/InventoryFolderImpl.cs b/OpenSim/Framework/InventoryFolderImpl.cs index 8a4502fd46..02259ab994 100644 --- a/OpenSim/Framework/InventoryFolderImpl.cs +++ b/OpenSim/Framework/InventoryFolderImpl.cs @@ -35,7 +35,7 @@ namespace OpenSim.Framework { public class InventoryFolderImpl : InventoryFolderBase { -// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + //private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); public static readonly string PATH_DELIMITER = "/"; @@ -77,12 +77,14 @@ namespace OpenSim.Framework { if (!m_childFolders.ContainsKey(folderID)) { - InventoryFolderImpl subFold = new InventoryFolderImpl(); - subFold.Name = folderName; - subFold.ID = folderID; - subFold.Type = (short)type; - subFold.ParentID = this.ID; - subFold.Owner = Owner; + InventoryFolderImpl subFold = new InventoryFolderImpl() + { + Name = folderName, + ID = folderID, + Type = (short)type, + ParentID = this.ID, + Owner = Owner + }; m_childFolders.Add(subFold.ID, subFold); return subFold; @@ -122,14 +124,11 @@ namespace OpenSim.Framework /// The folder if it exists, null if it doesn't public InventoryFolderImpl GetChildFolder(UUID folderID) { - InventoryFolderImpl folder = null; - lock (m_childFolders) { - m_childFolders.TryGetValue(folderID, out folder); + m_childFolders.TryGetValue(folderID, out InventoryFolderImpl folder); + return folder; } - - return folder; } /// @@ -141,18 +140,15 @@ namespace OpenSim.Framework /// public InventoryFolderImpl RemoveChildFolder(UUID folderID) { - InventoryFolderImpl removedFolder = null; - lock (m_childFolders) { - if (m_childFolders.ContainsKey(folderID)) + if (m_childFolders.TryGetValue(folderID, out InventoryFolderImpl removedFolder)) { - removedFolder = m_childFolders[folderID]; m_childFolders.Remove(folderID); + return removedFolder; } } - - return removedFolder; + return null; } /// @@ -178,10 +174,8 @@ namespace OpenSim.Framework { lock (Items) { - if (Items.ContainsKey(itemID)) - { - return Items[itemID]; - } + if (Items.TryGetValue(itemID, out InventoryItemBase it)) + return it; } lock (m_childFolders) @@ -189,14 +183,10 @@ namespace OpenSim.Framework foreach (InventoryFolderImpl folder in m_childFolders.Values) { InventoryItemBase item = folder.FindItem(itemID); - if (item != null) - { return item; - } } } - return null; } @@ -206,7 +196,7 @@ namespace OpenSim.Framework { foreach (InventoryItemBase item in Items.Values) { - if (item.AssetID == assetID) + if (item.AssetID.Equals(assetID)) return item; } } @@ -216,11 +206,8 @@ namespace OpenSim.Framework foreach (InventoryFolderImpl folder in m_childFolders.Values) { InventoryItemBase item = folder.FindAsset(assetID); - if (item != null) - { return item; - } } } @@ -234,31 +221,21 @@ namespace OpenSim.Framework /// public bool DeleteItem(UUID itemID) { - bool found = false; - lock (Items) { - if (Items.ContainsKey(itemID)) - { - Items.Remove(itemID); + if (Items.Remove(itemID)) return true; - } } lock (m_childFolders) { foreach (InventoryFolderImpl folder in m_childFolders.Values) { - found = folder.DeleteItem(itemID); - - if (found == true) - { - break; - } + if(folder.DeleteItem(itemID)) + return true; } } - - return found; + return false; } /// @@ -268,7 +245,7 @@ namespace OpenSim.Framework /// The requested folder if it exists, null if it does not. public InventoryFolderImpl FindFolder(UUID folderID) { - if (folderID == ID) + if (folderID.Equals(ID)) return this; lock (m_childFolders) @@ -276,12 +253,10 @@ namespace OpenSim.Framework foreach (InventoryFolderImpl folder in m_childFolders.Values) { InventoryFolderImpl returnFolder = folder.FindFolder(folderID); - if (returnFolder != null) return returnFolder; } } - return null; } @@ -322,11 +297,10 @@ namespace OpenSim.Framework /// null if the folder is not found public InventoryFolderImpl FindFolderByPath(string path) { + path = path.Trim(); if (path.Length == 0) return this; - path = path.Trim(); - if (path == PATH_DELIMITER) return this; @@ -404,9 +378,9 @@ namespace OpenSim.Framework { foreach (InventoryItemBase item in Items.Values) { -// m_log.DebugFormat( -// "[INVENTORY FOLDER IMPL]: Returning item {0} {1}, OwnerPermissions {2:X}", -// item.Name, item.ID, item.CurrentPermissions); + //m_log.DebugFormat( + // "[INVENTORY FOLDER IMPL]: Returning item {0} {1}, OwnerPermissions {2:X}", + // item.Name, item.ID, item.CurrentPermissions); itemList.Add(item); } @@ -422,7 +396,7 @@ namespace OpenSim.Framework /// public List RequestListOfFolders() { - List folderList = new List(); + List folderList = new List(m_childFolders.Count); lock (m_childFolders) { @@ -437,7 +411,7 @@ namespace OpenSim.Framework public List RequestListOfFolderImpls() { - List folderList = new List(); + List folderList = new List(m_childFolders.Count); lock (m_childFolders) { @@ -459,12 +433,10 @@ namespace OpenSim.Framework get { int total = Items.Count; - foreach (InventoryFolderImpl folder in m_childFolders.Values) { - total = total + folder.TotalCount; + total += folder.TotalCount; } - return total; } } diff --git a/OpenSim/Framework/RegionSettings.cs b/OpenSim/Framework/RegionSettings.cs index aa70399cfd..ff9ae3c35d 100644 --- a/OpenSim/Framework/RegionSettings.cs +++ b/OpenSim/Framework/RegionSettings.cs @@ -350,7 +350,7 @@ namespace OpenSim.Framework public double TerrainLowerLimit { get { return m_TerrainLowerLimit; } - set { m_TerrainLowerLimit = Utils.Clamp(value, -200f, 0); ; } + set { m_TerrainLowerLimit = Utils.Clamp(value, -200f, 0);} } private bool m_UseEstateSun = true;