From aedaa32ddc683e925e9a618ee731501fad0d4204 Mon Sep 17 00:00:00 2001 From: Melanie Date: Sat, 13 Jul 2019 13:30:15 +0100 Subject: [PATCH] When using FSAssets, the HGAssetService would still use AssetService. This introduces a new HGAssetService config option named BackingService, which defaults to the old behaviour, loading AssetService. It can, however, be used to load FSAssets for HG assets, which eliminates numerous problems. --- .../HypergridService/HGAssetService.cs | 83 ++++++++++++++++--- 1 file changed, 70 insertions(+), 13 deletions(-) diff --git a/OpenSim/Services/HypergridService/HGAssetService.cs b/OpenSim/Services/HypergridService/HGAssetService.cs index a66478ed01..8fef57a161 100644 --- a/OpenSim/Services/HypergridService/HGAssetService.cs +++ b/OpenSim/Services/HypergridService/HGAssetService.cs @@ -39,6 +39,7 @@ using OpenSim.Framework.Serialization.External; using OpenSim.Server.Base; using OpenSim.Services.Interfaces; using OpenSim.Services.AssetService; +using OpenSim.Services.Base; namespace OpenSim.Services.HypergridService { @@ -47,7 +48,7 @@ namespace OpenSim.Services.HypergridService /// but implements it in ways that are appropriate for inter-grid /// asset exchanges. /// - public class HGAssetService : OpenSim.Services.AssetService.AssetService, IAssetService + public class HGAssetService : ServiceBase, IAssetService { private static readonly ILog m_log = LogManager.GetLogger( @@ -60,7 +61,9 @@ namespace OpenSim.Services.HypergridService private AssetPermissions m_AssetPerms; - public HGAssetService(IConfigSource config, string configName) : base(config, configName) + IAssetService m_assetService = null; + + public HGAssetService(IConfigSource config, string configName) : base(config) { m_log.Debug("[HGAsset Service]: Starting"); IConfig assetConfig = config.Configs[configName]; @@ -86,12 +89,30 @@ namespace OpenSim.Services.HypergridService // Permissions m_AssetPerms = new AssetPermissions(assetConfig); + string str = assetConfig.GetString("BackingService", "OpenSim.Services.AssetService.dll:AssetService"); + + if (str != string.Empty) + { + args = new object[] { config }; + m_assetService = LoadPlugin(str, args); + if (m_assetService != null) + { + m_log.InfoFormat("[HGASSETS]: Backing service loaded: {0}", str); + } + else + { + m_log.ErrorFormat("[HGASSETS]: Failed to load backing service {0}", str); + } + } + + + } - #region IAssetService overrides - public override AssetBase Get(string id) + #region IAssetService + public AssetBase Get(string id) { - AssetBase asset = base.Get(id); + AssetBase asset = m_assetService.Get(id); if (asset == null) return null; @@ -107,9 +128,9 @@ namespace OpenSim.Services.HypergridService return asset; } - public override AssetMetadata GetMetadata(string id) + public AssetMetadata GetMetadata(string id) { - AssetMetadata meta = base.GetMetadata(id); + AssetMetadata meta = m_assetService.GetMetadata(id); if (meta == null) return null; @@ -119,7 +140,7 @@ namespace OpenSim.Services.HypergridService return meta; } - public override byte[] GetData(string id) + public byte[] GetData(string id) { AssetBase asset = Get(id); @@ -142,7 +163,7 @@ namespace OpenSim.Services.HypergridService //public virtual bool Get(string id, Object sender, AssetRetrieved handler) - public override string Store(AssetBase asset) + public string Store(AssetBase asset) { if (!m_AssetPerms.AllowedImport(asset.Type)) return string.Empty; @@ -155,15 +176,53 @@ namespace OpenSim.Services.HypergridService asset.Data = Utils.StringToBytes(xml); } - return base.Store(asset); + return m_assetService.Store(asset); } - public override bool Delete(string id) + public bool Delete(string id) { // NOGO return false; } + public AssetBase GetCached(string id) + { + AssetBase asset = m_assetService.GetCached(id); + + if (asset == null) + return null; + + if (!m_AssetPerms.AllowedExport(asset.Type)) + return null; + + if (asset.Metadata.Type == (sbyte)AssetType.Object) + asset.Data = AdjustIdentifiers(asset.Data); + + AdjustIdentifiers(asset.Metadata); + + return asset; + } + + public bool Get(string id, object sender, AssetRetrieved handler) + { + AssetBase asset = Get(id); + + handler?.Invoke(id, sender, asset); + + return true; + } + + public bool[] AssetsExist(string[] ids) + { + return m_assetService.AssetsExist(ids); + } + + public bool UpdateContent(string id, byte[] data) + { + // NO WAY + return false; + } + #endregion protected void AdjustIdentifiers(AssetMetadata meta) @@ -187,7 +246,5 @@ namespace OpenSim.Services.HypergridService return Utils.StringToBytes(ExternalRepresentationUtils.RewriteSOP(xml, "HGAssetService", m_HomeURL, m_Cache, UUID.Zero)); } - } - }