diff options
author | Diva Canto | 2009-10-12 17:00:01 -0700 |
---|---|---|
committer | Diva Canto | 2009-10-12 17:00:01 -0700 |
commit | c0beeb929e22509329781cdf85f7a5d90c4b0e36 (patch) | |
tree | 42f724d921f08b0d2d14c8f7eb872a118a9adadd /OpenSim/Region/ClientStack | |
parent | 0004246: [Patch] FlotsamAssetCache deep scan & cache (diff) | |
download | opensim-SC-c0beeb929e22509329781cdf85f7a5d90c4b0e36.zip opensim-SC-c0beeb929e22509329781cdf85f7a5d90c4b0e36.tar.gz opensim-SC-c0beeb929e22509329781cdf85f7a5d90c4b0e36.tar.bz2 opensim-SC-c0beeb929e22509329781cdf85f7a5d90c4b0e36.tar.xz |
* Fixes http://opensimulator.org/mantis/view.php?id=4225
* Fixes http://opensimulator.org/mantis/view.php?id=3959
* Allows for viewing inventory textures outside home grid
Diffstat (limited to 'OpenSim/Region/ClientStack')
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/J2KImage.cs | 14 | ||||
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 21 | ||||
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLImageManager.cs | 5 |
3 files changed, 33 insertions, 7 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/J2KImage.cs b/OpenSim/Region/ClientStack/LindenUDP/J2KImage.cs index 5877779..1bbe00f 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/J2KImage.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/J2KImage.cs | |||
@@ -31,6 +31,7 @@ using OpenMetaverse; | |||
31 | using OpenMetaverse.Imaging; | 31 | using OpenMetaverse.Imaging; |
32 | using OpenSim.Framework; | 32 | using OpenSim.Framework; |
33 | using OpenSim.Region.Framework.Interfaces; | 33 | using OpenSim.Region.Framework.Interfaces; |
34 | using OpenSim.Region.Framework.Scenes.Hypergrid; | ||
34 | using OpenSim.Services.Interfaces; | 35 | using OpenSim.Services.Interfaces; |
35 | using log4net; | 36 | using log4net; |
36 | using System.Reflection; | 37 | using System.Reflection; |
@@ -54,6 +55,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
54 | public UUID TextureID; | 55 | public UUID TextureID; |
55 | public IJ2KDecoder J2KDecoder; | 56 | public IJ2KDecoder J2KDecoder; |
56 | public IAssetService AssetService; | 57 | public IAssetService AssetService; |
58 | public UUID AgentID; | ||
59 | public IHyperAssetService HyperAssets; | ||
57 | public OpenJPEG.J2KLayerInfo[] Layers; | 60 | public OpenJPEG.J2KLayerInfo[] Layers; |
58 | public bool IsDecoded; | 61 | public bool IsDecoded; |
59 | public bool HasAsset; | 62 | public bool HasAsset; |
@@ -370,6 +373,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
370 | UUID assetID = UUID.Zero; | 373 | UUID assetID = UUID.Zero; |
371 | if (asset != null) | 374 | if (asset != null) |
372 | assetID = asset.FullID; | 375 | assetID = asset.FullID; |
376 | else if (HyperAssets != null) | ||
377 | { | ||
378 | // Try the user's inventory, but only if it's different from the regions' | ||
379 | string userAssets = HyperAssets.GetUserAssetServer(AgentID); | ||
380 | if ((userAssets != string.Empty) && (userAssets != HyperAssets.GetSimAssetServer())) | ||
381 | { | ||
382 | m_log.DebugFormat("[J2KIMAGE]: texture {0} not found in local asset storage. Trying user's storage.", id); | ||
383 | AssetService.Get(userAssets + "/" + id, this, AssetReceived); | ||
384 | return; | ||
385 | } | ||
386 | } | ||
373 | 387 | ||
374 | AssetDataCallback(assetID, asset); | 388 | AssetDataCallback(assetID, asset); |
375 | 389 | ||
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 84e705a..25eb5cd 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -43,6 +43,7 @@ using OpenSim.Framework.Communications.Cache; | |||
43 | using OpenSim.Framework.Statistics; | 43 | using OpenSim.Framework.Statistics; |
44 | using OpenSim.Region.Framework.Interfaces; | 44 | using OpenSim.Region.Framework.Interfaces; |
45 | using OpenSim.Region.Framework.Scenes; | 45 | using OpenSim.Region.Framework.Scenes; |
46 | using OpenSim.Region.Framework.Scenes.Hypergrid; | ||
46 | using OpenSim.Services.Interfaces; | 47 | using OpenSim.Services.Interfaces; |
47 | using Timer=System.Timers.Timer; | 48 | using Timer=System.Timers.Timer; |
48 | using AssetLandmark = OpenSim.Framework.AssetLandmark; | 49 | using AssetLandmark = OpenSim.Framework.AssetLandmark; |
@@ -117,6 +118,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
117 | protected int m_packetMTU = 1400; | 118 | protected int m_packetMTU = 1400; |
118 | protected IAssetService m_assetService; | 119 | protected IAssetService m_assetService; |
119 | 120 | ||
121 | |||
120 | #region Properties | 122 | #region Properties |
121 | 123 | ||
122 | public UUID SecureSessionId { get { return m_secureSessionId; } } | 124 | public UUID SecureSessionId { get { return m_secureSessionId; } } |
@@ -7013,7 +7015,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
7013 | #endregion | 7015 | #endregion |
7014 | 7016 | ||
7015 | //handlerTextureRequest = null; | 7017 | //handlerTextureRequest = null; |
7016 | |||
7017 | for (int i = 0; i < imageRequest.RequestImage.Length; i++) | 7018 | for (int i = 0; i < imageRequest.RequestImage.Length; i++) |
7018 | { | 7019 | { |
7019 | if (OnRequestTexture != null) | 7020 | if (OnRequestTexture != null) |
@@ -7024,7 +7025,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
7024 | args.PacketNumber = imageRequest.RequestImage[i].Packet; | 7025 | args.PacketNumber = imageRequest.RequestImage[i].Packet; |
7025 | args.Priority = imageRequest.RequestImage[i].DownloadPriority; | 7026 | args.Priority = imageRequest.RequestImage[i].DownloadPriority; |
7026 | args.requestSequence = imageRequest.Header.Sequence; | 7027 | args.requestSequence = imageRequest.Header.Sequence; |
7027 | |||
7028 | //handlerTextureRequest = OnRequestTexture; | 7028 | //handlerTextureRequest = OnRequestTexture; |
7029 | 7029 | ||
7030 | //if (handlerTextureRequest != null) | 7030 | //if (handlerTextureRequest != null) |
@@ -7047,10 +7047,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
7047 | // Validate inventory transfers | 7047 | // Validate inventory transfers |
7048 | // Has to be done here, because AssetCache can't do it | 7048 | // Has to be done here, because AssetCache can't do it |
7049 | // | 7049 | // |
7050 | 7050 | UUID taskID = UUID.Zero; | |
7051 | if (transfer.TransferInfo.SourceType == 3) | 7051 | if (transfer.TransferInfo.SourceType == 3) |
7052 | { | 7052 | { |
7053 | UUID taskID = new UUID(transfer.TransferInfo.Params, 48); | 7053 | taskID = new UUID(transfer.TransferInfo.Params, 48); |
7054 | UUID itemID = new UUID(transfer.TransferInfo.Params, 64); | 7054 | UUID itemID = new UUID(transfer.TransferInfo.Params, 64); |
7055 | UUID requestID = new UUID(transfer.TransferInfo.Params, 80); | 7055 | UUID requestID = new UUID(transfer.TransferInfo.Params, 80); |
7056 | if (!(((Scene)m_scene).Permissions.BypassPermissions())) | 7056 | if (!(((Scene)m_scene).Permissions.BypassPermissions())) |
@@ -7121,7 +7121,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
7121 | 7121 | ||
7122 | //m_assetCache.AddAssetRequest(this, transfer); | 7122 | //m_assetCache.AddAssetRequest(this, transfer); |
7123 | 7123 | ||
7124 | MakeAssetRequest(transfer); | 7124 | MakeAssetRequest(transfer, taskID); |
7125 | 7125 | ||
7126 | /* RequestAsset = OnRequestAsset; | 7126 | /* RequestAsset = OnRequestAsset; |
7127 | if (RequestAsset != null) | 7127 | if (RequestAsset != null) |
@@ -10330,7 +10330,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
10330 | return String.Empty; | 10330 | return String.Empty; |
10331 | } | 10331 | } |
10332 | 10332 | ||
10333 | public void MakeAssetRequest(TransferRequestPacket transferRequest) | 10333 | public void MakeAssetRequest(TransferRequestPacket transferRequest, UUID taskID) |
10334 | { | 10334 | { |
10335 | UUID requestID = UUID.Zero; | 10335 | UUID requestID = UUID.Zero; |
10336 | if (transferRequest.TransferInfo.SourceType == 2) | 10336 | if (transferRequest.TransferInfo.SourceType == 2) |
@@ -10343,11 +10343,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
10343 | //inventory asset request | 10343 | //inventory asset request |
10344 | requestID = new UUID(transferRequest.TransferInfo.Params, 80); | 10344 | requestID = new UUID(transferRequest.TransferInfo.Params, 80); |
10345 | //m_log.Debug("asset request " + requestID); | 10345 | //m_log.Debug("asset request " + requestID); |
10346 | if (taskID == UUID.Zero) // Agent | ||
10347 | if (m_scene is HGScene) | ||
10348 | { | ||
10349 | // We may need to fetch the asset from the user's asset server into the local asset server | ||
10350 | HGAssetMapper mapper = ((HGScene)m_scene).AssetMapper; | ||
10351 | mapper.Get(requestID, AgentId); | ||
10352 | } | ||
10346 | } | 10353 | } |
10347 | 10354 | ||
10348 | //check to see if asset is in local cache, if not we need to request it from asset server. | 10355 | //check to see if asset is in local cache, if not we need to request it from asset server. |
10349 | //m_log.Debug("asset request " + requestID); | 10356 | //m_log.Debug("asset request " + requestID); |
10350 | 10357 | ||
10351 | m_assetService.Get(requestID.ToString(), transferRequest, AssetReceived); | 10358 | m_assetService.Get(requestID.ToString(), transferRequest, AssetReceived); |
10352 | 10359 | ||
10353 | } | 10360 | } |
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLImageManager.cs b/OpenSim/Region/ClientStack/LindenUDP/LLImageManager.cs index 343f537..56d34e6 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLImageManager.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLImageManager.cs | |||
@@ -59,6 +59,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
59 | private C5.IntervalHeap<J2KImage> m_priorityQueue = new C5.IntervalHeap<J2KImage>(10, new J2KImageComparer()); | 59 | private C5.IntervalHeap<J2KImage> m_priorityQueue = new C5.IntervalHeap<J2KImage>(10, new J2KImageComparer()); |
60 | private object m_syncRoot = new object(); | 60 | private object m_syncRoot = new object(); |
61 | 61 | ||
62 | private IHyperAssetService m_hyperAssets; | ||
63 | |||
62 | public LLClientView Client { get { return m_client; } } | 64 | public LLClientView Client { get { return m_client; } } |
63 | public AssetBase MissingImage { get { return m_missingImage; } } | 65 | public AssetBase MissingImage { get { return m_missingImage; } } |
64 | 66 | ||
@@ -74,6 +76,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
74 | m_log.Error("[ClientView] - Couldn't set missing image asset, falling back to missing image packet. This is known to crash the client"); | 76 | m_log.Error("[ClientView] - Couldn't set missing image asset, falling back to missing image packet. This is known to crash the client"); |
75 | 77 | ||
76 | m_j2kDecodeModule = pJ2kDecodeModule; | 78 | m_j2kDecodeModule = pJ2kDecodeModule; |
79 | m_hyperAssets = client.Scene.RequestModuleInterface<IHyperAssetService>(); | ||
77 | } | 80 | } |
78 | 81 | ||
79 | /// <summary> | 82 | /// <summary> |
@@ -146,6 +149,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
146 | imgrequest = new J2KImage(this); | 149 | imgrequest = new J2KImage(this); |
147 | imgrequest.J2KDecoder = m_j2kDecodeModule; | 150 | imgrequest.J2KDecoder = m_j2kDecodeModule; |
148 | imgrequest.AssetService = m_assetCache; | 151 | imgrequest.AssetService = m_assetCache; |
152 | imgrequest.AgentID = m_client.AgentId; | ||
153 | imgrequest.HyperAssets = m_hyperAssets; | ||
149 | imgrequest.DiscardLevel = newRequest.DiscardLevel; | 154 | imgrequest.DiscardLevel = newRequest.DiscardLevel; |
150 | imgrequest.StartPacket = Math.Max(1, newRequest.PacketNumber); | 155 | imgrequest.StartPacket = Math.Max(1, newRequest.PacketNumber); |
151 | imgrequest.Priority = newRequest.Priority; | 156 | imgrequest.Priority = newRequest.Priority; |