Started to clean up the mess with HyperAssets in LLClientView. Fixed HG access to Notecards in user's inventory.
parent
863462dbb8
commit
77e54747d8
|
@ -379,6 +379,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
{
|
{
|
||||||
// Try the user's inventory, but only if it's different from the regions'
|
// Try the user's inventory, but only if it's different from the regions'
|
||||||
string userAssets = HyperAssets.GetUserAssetServer(AgentID);
|
string userAssets = HyperAssets.GetUserAssetServer(AgentID);
|
||||||
|
|
||||||
if ((userAssets != string.Empty) && (userAssets != HyperAssets.GetSimAssetServer()))
|
if ((userAssets != string.Empty) && (userAssets != HyperAssets.GetSimAssetServer()))
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[J2KIMAGE]: texture {0} not found in local asset storage. Trying user's storage.", id);
|
m_log.DebugFormat("[J2KIMAGE]: texture {0} not found in local asset storage. Trying user's storage.", id);
|
||||||
|
|
|
@ -7196,59 +7196,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
else // Agent
|
else // Agent
|
||||||
{
|
{
|
||||||
IInventoryService invService = m_scene.RequestModuleInterface<IInventoryService>();
|
IInventoryAccessModule invAccess = m_scene.RequestModuleInterface<IInventoryAccessModule>();
|
||||||
InventoryItemBase assetRequestItem = new InventoryItemBase(itemID, AgentId);
|
if (invAccess != null)
|
||||||
assetRequestItem = invService.GetItem(assetRequestItem);
|
|
||||||
if (assetRequestItem == null)
|
|
||||||
{
|
{
|
||||||
ILibraryService lib = m_scene.RequestModuleInterface<ILibraryService>();
|
if (!invAccess.GetAgentInventoryItem(this, itemID, requestID))
|
||||||
if (lib != null)
|
return false;
|
||||||
assetRequestItem = lib.LibraryRootFolder.FindItem(itemID);
|
|
||||||
if (assetRequestItem == null)
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// At this point, we need to apply perms
|
|
||||||
// only to notecards and scripts. All
|
|
||||||
// other asset types are always available
|
|
||||||
//
|
|
||||||
if (assetRequestItem.AssetType == (int)AssetType.LSLText)
|
|
||||||
{
|
|
||||||
if (!((Scene)m_scene).Permissions.CanViewScript(itemID, UUID.Zero, AgentId))
|
|
||||||
{
|
|
||||||
SendAgentAlertMessage("Insufficient permissions to view script", false);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (assetRequestItem.AssetType == (int)AssetType.Notecard)
|
|
||||||
{
|
|
||||||
if (!((Scene)m_scene).Permissions.CanViewNotecard(itemID, UUID.Zero, AgentId))
|
|
||||||
{
|
|
||||||
SendAgentAlertMessage("Insufficient permissions to view notecard", false);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
|
||||||
if (assetRequestItem.AssetID != requestID)
|
|
||||||
{
|
|
||||||
m_log.WarnFormat(
|
|
||||||
"[CLIENT]: {0} requested asset {1} from item {2} but this does not match item's asset {3}",
|
|
||||||
Name, requestID, itemID, assetRequestItem.AssetID);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//m_assetCache.AddAssetRequest(this, transfer);
|
|
||||||
|
|
||||||
MakeAssetRequest(transfer, taskID);
|
MakeAssetRequest(transfer, taskID);
|
||||||
|
|
||||||
/* RequestAsset = OnRequestAsset;
|
|
||||||
if (RequestAsset != null)
|
|
||||||
{
|
|
||||||
RequestAsset(this, transfer);
|
|
||||||
}*/
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11459,15 +11422,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
else if (transferRequest.TransferInfo.SourceType == (int)SourceType.SimInventoryItem)
|
else if (transferRequest.TransferInfo.SourceType == (int)SourceType.SimInventoryItem)
|
||||||
{
|
{
|
||||||
requestID = new UUID(transferRequest.TransferInfo.Params, 80);
|
requestID = new UUID(transferRequest.TransferInfo.Params, 80);
|
||||||
//m_log.Debug("[XXX] inventory asset request " + requestID);
|
|
||||||
//if (taskID == UUID.Zero) // Agent
|
|
||||||
// if (m_scene is HGScene)
|
|
||||||
// {
|
|
||||||
// m_log.Debug("[XXX] hg asset request " + requestID);
|
|
||||||
// // We may need to fetch the asset from the user's asset server into the local asset server
|
|
||||||
// HGAssetMapper mapper = ((HGScene)m_scene).AssetMapper;
|
|
||||||
// mapper.Get(requestID, AgentId);
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// m_log.DebugFormat("[CLIENT]: {0} requesting asset {1}", Name, requestID);
|
// m_log.DebugFormat("[CLIENT]: {0} requesting asset {1}", Name, requestID);
|
||||||
|
@ -11488,44 +11442,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
UUID requestID = UUID.Zero;
|
UUID requestID = UUID.Zero;
|
||||||
byte source = (byte)SourceType.Asset;
|
byte source = (byte)SourceType.Asset;
|
||||||
|
|
||||||
if ((transferRequest.TransferInfo.SourceType == (int)SourceType.Asset)
|
if (transferRequest.TransferInfo.SourceType == (int)SourceType.Asset)
|
||||||
|| (transferRequest.TransferInfo.SourceType == 2222))
|
|
||||||
{
|
{
|
||||||
requestID = new UUID(transferRequest.TransferInfo.Params, 0);
|
requestID = new UUID(transferRequest.TransferInfo.Params, 0);
|
||||||
}
|
}
|
||||||
else if ((transferRequest.TransferInfo.SourceType == (int)SourceType.SimInventoryItem)
|
else if (transferRequest.TransferInfo.SourceType == (int)SourceType.SimInventoryItem)
|
||||||
|| (transferRequest.TransferInfo.SourceType == 3333))
|
|
||||||
{
|
{
|
||||||
requestID = new UUID(transferRequest.TransferInfo.Params, 80);
|
requestID = new UUID(transferRequest.TransferInfo.Params, 80);
|
||||||
source = (byte)SourceType.SimInventoryItem;
|
source = (byte)SourceType.SimInventoryItem;
|
||||||
//m_log.Debug("asset request " + requestID);
|
//m_log.Debug("asset request " + requestID);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null == asset)
|
|
||||||
{
|
|
||||||
if ((m_hyperAssets != null) && (transferRequest.TransferInfo.SourceType < 2000))
|
|
||||||
{
|
|
||||||
// Try the user's inventory, but only if it's different from the regions'
|
|
||||||
string userAssets = m_hyperAssets.GetUserAssetServer(AgentId);
|
|
||||||
if ((userAssets != string.Empty) && (userAssets != m_hyperAssets.GetSimAssetServer()))
|
|
||||||
{
|
|
||||||
m_log.DebugFormat("[CLIENT]: asset {0} not found in local asset storage. Trying user's storage.", id);
|
|
||||||
if (transferRequest.TransferInfo.SourceType == (int)SourceType.Asset)
|
|
||||||
transferRequest.TransferInfo.SourceType = 2222; // marker
|
|
||||||
else if (transferRequest.TransferInfo.SourceType == (int)SourceType.SimInventoryItem)
|
|
||||||
transferRequest.TransferInfo.SourceType = 3333; // marker
|
|
||||||
|
|
||||||
m_assetService.Get(userAssets + "/" + id, transferRequest, AssetReceived);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//m_log.DebugFormat("[ASSET CACHE]: Asset transfer request for asset which is {0} already known to be missing. Dropping", requestID);
|
|
||||||
|
|
||||||
// FIXME: We never tell the client about assets which do not exist when requested by this transfer mechanism, which can't be right.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Scripts cannot be retrieved by direct request
|
// Scripts cannot be retrieved by direct request
|
||||||
if (transferRequest.TransferInfo.SourceType == (int)SourceType.Asset && asset.Type == 10)
|
if (transferRequest.TransferInfo.SourceType == (int)SourceType.Asset && asset.Type == 10)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -157,6 +157,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
Dictionary<UUID, AssetType> ids = new Dictionary<UUID, AssetType>();
|
Dictionary<UUID, AssetType> ids = new Dictionary<UUID, AssetType>();
|
||||||
HGUuidGatherer uuidGatherer = new HGUuidGatherer(this, m_scene.AssetService, userAssetURL);
|
HGUuidGatherer uuidGatherer = new HGUuidGatherer(this, m_scene.AssetService, userAssetURL);
|
||||||
uuidGatherer.GatherAssetUuids(asset.FullID, (AssetType)asset.Type, ids);
|
uuidGatherer.GatherAssetUuids(asset.FullID, (AssetType)asset.Type, ids);
|
||||||
|
if (ids.ContainsKey(assetID))
|
||||||
|
ids.Remove(assetID);
|
||||||
foreach (UUID uuid in ids.Keys)
|
foreach (UUID uuid in ids.Keys)
|
||||||
FetchAsset(userAssetURL, uuid);
|
FetchAsset(userAssetURL, uuid);
|
||||||
|
|
||||||
|
|
|
@ -192,6 +192,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
m_assMapper.Post(item.AssetID, receiver, userAssetServer);
|
m_assMapper.Post(item.AssetID, receiver, userAssetServer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public bool IsForeignUser(UUID userID, out string assetServerURL)
|
public bool IsForeignUser(UUID userID, out string assetServerURL)
|
||||||
|
@ -217,5 +219,16 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override InventoryItemBase GetItem(UUID agentID, UUID itemID)
|
||||||
|
{
|
||||||
|
InventoryItemBase item = base.GetItem(agentID, itemID);
|
||||||
|
|
||||||
|
string userAssetServer = string.Empty;
|
||||||
|
if (IsForeignUser(agentID, out userAssetServer))
|
||||||
|
m_assMapper.Get(item.AssetID, agentID, userAssetServer);
|
||||||
|
|
||||||
|
return item;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -639,6 +639,50 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual bool GetAgentInventoryItem(IClientAPI remoteClient, UUID itemID, UUID requestID)
|
||||||
|
{
|
||||||
|
InventoryItemBase assetRequestItem = GetItem(remoteClient.AgentId, itemID);
|
||||||
|
if (assetRequestItem == null)
|
||||||
|
{
|
||||||
|
ILibraryService lib = m_Scene.RequestModuleInterface<ILibraryService>();
|
||||||
|
if (lib != null)
|
||||||
|
assetRequestItem = lib.LibraryRootFolder.FindItem(itemID);
|
||||||
|
if (assetRequestItem == null)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// At this point, we need to apply perms
|
||||||
|
// only to notecards and scripts. All
|
||||||
|
// other asset types are always available
|
||||||
|
//
|
||||||
|
if (assetRequestItem.AssetType == (int)AssetType.LSLText)
|
||||||
|
{
|
||||||
|
if (!m_Scene.Permissions.CanViewScript(itemID, UUID.Zero, remoteClient.AgentId))
|
||||||
|
{
|
||||||
|
remoteClient.SendAgentAlertMessage("Insufficient permissions to view script", false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (assetRequestItem.AssetType == (int)AssetType.Notecard)
|
||||||
|
{
|
||||||
|
if (!m_Scene.Permissions.CanViewNotecard(itemID, UUID.Zero, remoteClient.AgentId))
|
||||||
|
{
|
||||||
|
remoteClient.SendAgentAlertMessage("Insufficient permissions to view notecard", false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (assetRequestItem.AssetID != requestID)
|
||||||
|
{
|
||||||
|
m_log.WarnFormat(
|
||||||
|
"[CLIENT]: {0} requested asset {1} from item {2} but this does not match item's asset {3}",
|
||||||
|
Name, requestID, itemID, assetRequestItem.AssetID);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Misc
|
#region Misc
|
||||||
|
@ -661,6 +705,14 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
return asset;
|
return asset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual InventoryItemBase GetItem(UUID agentID, UUID itemID)
|
||||||
|
{
|
||||||
|
IInventoryService invService = m_Scene.RequestModuleInterface<IInventoryService>();
|
||||||
|
InventoryItemBase assetRequestItem = new InventoryItemBase(itemID, agentID);
|
||||||
|
assetRequestItem = invService.GetItem(assetRequestItem);
|
||||||
|
return assetRequestItem;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,5 +43,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection,
|
UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection,
|
||||||
bool RezSelected, bool RemoveItem, UUID fromTaskID, bool attachment);
|
bool RezSelected, bool RemoveItem, UUID fromTaskID, bool attachment);
|
||||||
void TransferInventoryAssets(InventoryItemBase item, UUID sender, UUID receiver);
|
void TransferInventoryAssets(InventoryItemBase item, UUID sender, UUID receiver);
|
||||||
|
bool GetAgentInventoryItem(IClientAPI remoteClient, UUID itemID, UUID requestID);
|
||||||
|
//bool GetTextureFromAgentInventory(UUID agentID, UUID assetID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue