From be20f41637b6c06ce3ab16bc25851b6e43468e12 Mon Sep 17 00:00:00 2001
From: Adam Frisby
Date: Wed, 30 Apr 2008 21:43:47 +0000
Subject: * Cruft removal step #1. Cleaning Modules directory.
---
.../Agent/AssetDownload/AssetDownloadModule.cs | 37 +++++----
.../AssetTransaction/AgentAssetsTransactions.cs | 83 ++++++++++----------
.../AssetTransaction/AssetTransactionModule.cs | 55 +++++++------
.../Agent/TextureDownload/TextureDownloadModule.cs | 66 ++++++++--------
.../Agent/TextureDownload/TextureNotFoundSender.cs | 51 ++++++------
.../TextureDownload/UserTextureDownloadService.cs | 85 ++++++++++----------
.../Modules/Agent/TextureSender/TextureSender.cs | 91 +++++++++++-----------
.../Environment/Modules/Agent/Xfer/XferModule.cs | 68 +++++++++-------
8 files changed, 287 insertions(+), 249 deletions(-)
(limited to 'OpenSim/Region/Environment/Modules/Agent')
diff --git a/OpenSim/Region/Environment/Modules/Agent/AssetDownload/AssetDownloadModule.cs b/OpenSim/Region/Environment/Modules/Agent/AssetDownload/AssetDownloadModule.cs
index 47c1479..33e917a 100644
--- a/OpenSim/Region/Environment/Modules/Agent/AssetDownload/AssetDownloadModule.cs
+++ b/OpenSim/Region/Environment/Modules/Agent/AssetDownload/AssetDownloadModule.cs
@@ -37,17 +37,18 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetDownload
{
public class AssetDownloadModule : IRegionModule
{
+ ///
+ /// Asset requests with data which are ready to be sent back to requesters. This includes textures.
+ ///
+ private List AssetRequests;
+
private Scene m_scene;
private Dictionary RegisteredScenes = new Dictionary();
+
///
/// Assets requests (for each user) which are waiting for asset server data. This includes texture requests
///
- private Dictionary> RequestedAssets;
-
- ///
- /// Asset requests with data which are ready to be sent back to requesters. This includes textures.
- ///
- private List AssetRequests;
+ private Dictionary> RequestedAssets;
public AssetDownloadModule()
{
@@ -55,6 +56,8 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetDownload
AssetRequests = new List();
}
+ #region IRegionModule Members
+
public void Initialise(Scene scene, IConfigSource config)
{
if (!RegisteredScenes.ContainsKey(scene.RegionInfo.RegionID))
@@ -92,6 +95,8 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetDownload
get { return true; }
}
+ #endregion
+
public void NewClient(IClientAPI client)
{
// client.OnRequestAsset += AddAssetRequest;
@@ -301,33 +306,37 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetDownload
{
// over max number of bytes so split up file
long restData = data.LongLength - m_maxPacketSize;
- int restPackets = (int)((restData + m_maxPacketSize - 1) / m_maxPacketSize);
+ int restPackets = (int) ((restData + m_maxPacketSize - 1) / m_maxPacketSize);
numPackets += restPackets;
}
return numPackets;
}
+ #region Nested type: AssetRequest
+
public class AssetRequest
{
- public IClientAPI RequestUser;
- public LLUUID RequestAssetID;
public AssetBase AssetInf;
- public AssetBase ImageInfo;
- public LLUUID TransferRequestID;
+ public byte AssetRequestSource = 2;
public long DataPointer = 0;
+ public int DiscardLevel = -1;
+ public AssetBase ImageInfo;
+ public bool IsTextureRequest;
public int NumPackets = 0;
public int PacketCounter = 0;
- public bool IsTextureRequest;
- public byte AssetRequestSource = 2;
public byte[] Params = null;
+ public LLUUID RequestAssetID;
+ public IClientAPI RequestUser;
+ public LLUUID TransferRequestID;
//public bool AssetInCache;
//public int TimeRequested;
- public int DiscardLevel = -1;
public AssetRequest()
{
}
}
+
+ #endregion
}
}
\ No newline at end of file
diff --git a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs
index 74bb247..8192be4 100644
--- a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs
+++ b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs
@@ -42,12 +42,12 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
{
//private static readonly log4net.ILog m_log
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
-
+
// Fields
+ private bool m_dumpAssetsToFile;
+ public AgentAssetTransactionsManager Manager;
public LLUUID UserID;
public Dictionary XferUploaders = new Dictionary();
- public AgentAssetTransactionsManager Manager;
- private bool m_dumpAssetsToFile;
// Methods
public AgentAssetTransactions(LLUUID agentID, AgentAssetTransactionsManager manager, bool dumpAssetsToFile)
@@ -67,7 +67,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
{
XferUploaders.Add(transactionID, uploader);
}
-
+
return uploader;
}
return null;
@@ -76,7 +76,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
public void HandleXfer(ulong xferID, uint packetID, byte[] data)
{
// AssetXferUploader uploaderFound = null;
-
+
lock (XferUploaders)
{
foreach (AssetXferUploader uploader in XferUploaders.Values)
@@ -86,7 +86,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
uploader.HandleXferPacket(xferID, packetID, data);
break;
}
- }
+ }
}
}
@@ -101,15 +101,15 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
wearableType, nextOwnerMask);
}
}
-
- public void RequestUpdateInventoryItem(IClientAPI remoteClient, LLUUID transactionID,
+
+ public void RequestUpdateInventoryItem(IClientAPI remoteClient, LLUUID transactionID,
InventoryItemBase item)
{
if (XferUploaders.ContainsKey(transactionID))
{
XferUploaders[transactionID].RequestUpdateInventoryItem(remoteClient, transactionID, item);
}
- }
+ }
///
/// Get an uploaded asset. If the data is successfully retrieved, the transaction will be removed.
@@ -122,40 +122,43 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
{
AssetXferUploader uploader = XferUploaders[transactionID];
AssetBase asset = uploader.GetAssetData();
-
+
lock (XferUploaders)
{
XferUploaders.Remove(transactionID);
}
-
+
return asset;
}
-
+
return null;
}
// Nested Types
+
+ #region Nested type: AssetXferUploader
+
public class AssetXferUploader
{
// Fields
public bool AddToInventory;
public AssetBase Asset;
public LLUUID InventFolder = LLUUID.Zero;
+ private sbyte invType = 0;
+ private bool m_createItem = false;
+ private string m_description = String.Empty;
+ private bool m_dumpAssetToFile;
+ private bool m_finished = false;
+ private string m_name = String.Empty;
+ private bool m_storeLocal;
+ private AgentAssetTransactions m_userTransactions;
+ private uint nextPerm = 0;
private IClientAPI ourClient;
public LLUUID TransactionID = LLUUID.Zero;
- public bool UploadComplete;
- public ulong XferID;
- private string m_name = String.Empty;
- private string m_description = String.Empty;
private sbyte type = 0;
- private sbyte invType = 0;
+ public bool UploadComplete;
private byte wearableType = 0;
- private uint nextPerm = 0;
- private bool m_finished = false;
- private bool m_createItem = false;
- private AgentAssetTransactions m_userTransactions;
- private bool m_storeLocal;
- private bool m_dumpAssetToFile;
+ public ulong XferID;
public AssetXferUploader(AgentAssetTransactions transactions, bool dumpAssetToFile)
{
@@ -197,7 +200,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
return true;
}
}
-
+
return false;
}
@@ -233,7 +236,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
{
RequestStartXfer();
}
-
+
return false;
}
@@ -279,7 +282,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
SaveAssetToFile(filename, Asset.Data);
}
}
-
+
///Left this in and commented in case there are unforseen issues
//private void SaveAssetToFile(string filename, byte[] data)
//{
@@ -327,28 +330,28 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
}
}
}
-
- public void RequestUpdateInventoryItem(IClientAPI remoteClient, LLUUID transactionID,
+
+ public void RequestUpdateInventoryItem(IClientAPI remoteClient, LLUUID transactionID,
InventoryItemBase item)
{
if (TransactionID == transactionID)
- {
+ {
CachedUserInfo userInfo =
m_userTransactions.Manager.MyScene.CommsManager.UserProfileCacheService.GetUserDetails(
remoteClient.AgentId);
-
+
if (userInfo != null)
- {
+ {
LLUUID assetID = LLUUID.Combine(transactionID, remoteClient.SecureSessionId);
-
+
AssetBase asset
= m_userTransactions.Manager.MyScene.CommsManager.AssetCache.GetAsset(
assetID, (item.AssetType == (int) AssetType.Texture ? true : false));
-
+
if (asset == null)
{
asset = m_userTransactions.GetTransactionAsset(transactionID);
- }
+ }
if (asset != null && asset.FullID == assetID)
{
@@ -359,10 +362,10 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
item.AssetID = asset.FullID;
m_userTransactions.Manager.MyScene.CommsManager.AssetCache.AddAsset(Asset);
- }
-
- userInfo.UpdateItem(remoteClient.AgentId, item);
- }
+ }
+
+ userInfo.UpdateItem(remoteClient.AgentId, item);
+ }
}
}
@@ -387,7 +390,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
item.BasePermissions = 2147483647;
item.CurrentPermissions = 2147483647;
item.NextPermissions = nextPerm;
- item.Flags = (uint)wearableType;
+ item.Flags = (uint) wearableType;
userInfo.AddItem(ourClient.AgentId, item);
ourClient.SendInventoryItemCreateUpdate(item);
@@ -403,5 +406,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
return null;
}
}
+
+ #endregion
}
}
\ No newline at end of file
diff --git a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetTransactionModule.cs b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetTransactionModule.cs
index ef81625..b264c8a 100644
--- a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetTransactionModule.cs
+++ b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AssetTransactionModule.cs
@@ -33,7 +33,6 @@ using log4net;
using Nini.Config;
using OpenSim.Framework;
using OpenSim.Region.Environment.Interfaces;
-using OpenSim.Region.Environment.Modules.Agent.AssetTransaction;
using OpenSim.Region.Environment.Scenes;
namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
@@ -41,8 +40,8 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
public class AssetTransactionModule : IRegionModule, IAgentAssetTransactions
{
private readonly Dictionary RegisteredScenes = new Dictionary();
- private Scene m_scene = null;
private bool m_dumpAssetsToFile = false;
+ private Scene m_scene = null;
private AgentAssetTransactionsManager m_transactionManager;
@@ -51,6 +50,31 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
// System.Console.WriteLine("creating AgentAssetTransactionModule");
}
+ #region IAgentAssetTransactions Members
+
+ public void HandleItemCreationFromTransaction(IClientAPI remoteClient, LLUUID transactionID, LLUUID folderID,
+ uint callbackID, string description, string name, sbyte invType,
+ sbyte type, byte wearableType, uint nextOwnerMask)
+ {
+ m_transactionManager.HandleItemCreationFromTransaction(remoteClient, transactionID, folderID, callbackID, description, name, invType, type,
+ wearableType, nextOwnerMask);
+ }
+
+ public void HandleItemUpdateFromTransaction(IClientAPI remoteClient, LLUUID transactionID,
+ InventoryItemBase item)
+ {
+ m_transactionManager.HandleItemUpdateFromTransaction(remoteClient, transactionID, item);
+ }
+
+ public void RemoveAgentAssetTransactions(LLUUID userID)
+ {
+ m_transactionManager.RemoveAgentAssetTransactions(userID);
+ }
+
+ #endregion
+
+ #region IRegionModule Members
+
public void Initialise(Scene scene, IConfigSource config)
{
if (!RegisteredScenes.ContainsKey(scene.RegionInfo.RegionID))
@@ -81,13 +105,11 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
{
m_transactionManager = new AgentAssetTransactionsManager(m_scene, false);
}
-
}
}
public void PostInitialise()
{
-
}
public void Close()
@@ -104,29 +126,13 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
get { return true; }
}
+ #endregion
+
public void NewClient(IClientAPI client)
{
client.OnAssetUploadRequest += m_transactionManager.HandleUDPUploadRequest;
client.OnXferReceive += m_transactionManager.HandleXfer;
}
-
- public void HandleItemCreationFromTransaction(IClientAPI remoteClient, LLUUID transactionID, LLUUID folderID,
- uint callbackID, string description, string name, sbyte invType,
- sbyte type, byte wearableType, uint nextOwnerMask)
- {
- m_transactionManager.HandleItemCreationFromTransaction(remoteClient, transactionID, folderID, callbackID, description, name, invType, type, wearableType, nextOwnerMask);
- }
-
- public void HandleItemUpdateFromTransaction(IClientAPI remoteClient, LLUUID transactionID,
- InventoryItemBase item)
- {
- m_transactionManager.HandleItemUpdateFromTransaction(remoteClient, transactionID, item);
- }
-
- public void RemoveAgentAssetTransactions(LLUUID userID)
- {
- m_transactionManager.RemoveAgentAssetTransactions(userID);
- }
}
public class AgentAssetTransactionsManager
@@ -135,7 +141,6 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
= LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
// Fields
- public Scene MyScene;
///
/// Each agent has its own singleton collection of transactions
@@ -148,6 +153,8 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
///
private bool m_dumpAssetsToFile;
+ public Scene MyScene;
+
public AgentAssetTransactionsManager(Scene scene, bool dumpAssetsToFile)
{
MyScene = scene;
@@ -260,10 +267,8 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
AgentAssetTransactions.AssetXferUploader uploader = transactions.RequestXferUploader(transaction);
if (uploader != null)
{
-
if (uploader.Initialise(remoteClient, assetID, transaction, type, data, storeLocal, tempFile))
{
-
}
}
}
diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs
index b8899d2..ae2df69 100644
--- a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs
+++ b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureDownloadModule.cs
@@ -40,14 +40,11 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
{
//private static readonly log4net.ILog m_log
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
-
- private Scene m_scene;
- private List m_scenes = new List();
///
/// There is one queue for all textures waiting to be sent, regardless of the requesting user.
///
- private readonly BlockingQueue m_queueSenders
+ private readonly BlockingQueue m_queueSenders
= new BlockingQueue();
///
@@ -56,12 +53,17 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
private readonly Dictionary m_userTextureServices =
new Dictionary();
+ private Scene m_scene;
+ private List m_scenes = new List();
+
private Thread m_thread;
public TextureDownloadModule()
{
}
+ #region IRegionModule Members
+
public void Initialise(Scene scene, IConfigSource config)
{
if (m_scene == null)
@@ -83,6 +85,26 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
}
}
+ public void PostInitialise()
+ {
+ }
+
+ public void Close()
+ {
+ }
+
+ public string Name
+ {
+ get { return "TextureDownloadModule"; }
+ }
+
+ public bool IsSharedModule
+ {
+ get { return false; }
+ }
+
+ #endregion
+
///
/// Cleanup the texture service related objects for the removed presence.
///
@@ -102,24 +124,6 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
}
}
- public void PostInitialise()
- {
- }
-
- public void Close()
- {
- }
-
- public string Name
- {
- get { return "TextureDownloadModule"; }
- }
-
- public bool IsSharedModule
- {
- get { return false; }
- }
-
public void NewClient(IClientAPI client)
{
client.OnRequestTexture += TextureRequest;
@@ -143,7 +147,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
textureService = new UserTextureDownloadService(client, m_scene, m_queueSenders);
m_userTextureServices.Add(client.AgentId, textureService);
-
+
return true;
}
}
@@ -157,11 +161,11 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
{
IClientAPI client = (IClientAPI) sender;
UserTextureDownloadService textureService;
-
+
if (TryGetUserTextureService(client, out textureService))
{
textureService.HandleTextureRequest(e);
- }
+ }
}
///
@@ -170,11 +174,11 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
public void ProcessTextureSenders()
{
ITextureSender sender = null;
-
+
while (true)
{
sender = m_queueSenders.Dequeue();
-
+
if (sender.Cancel)
{
TextureSent(sender);
@@ -193,10 +197,10 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
m_queueSenders.Enqueue(sender);
}
}
-
+
// Make sure that any sender we currently have can get garbage collected
sender = null;
-
+
//m_log.InfoFormat("[TEXTURE DOWNLOAD] Texture sender queue size: {0}", m_queueSenders.Count());
}
}
@@ -207,9 +211,9 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
///
private void TextureSent(ITextureSender sender)
{
- sender.Sending = false;
+ sender.Sending = false;
//m_log.DebugFormat("[TEXTURE DOWNLOAD]: Removing download stat for {0}", sender.assetID);
- m_scene.AddPendingDownloads(-1);
+ m_scene.AddPendingDownloads(-1);
}
}
}
\ No newline at end of file
diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureNotFoundSender.cs b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureNotFoundSender.cs
index 6f11f73..b181d20 100644
--- a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureNotFoundSender.cs
+++ b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/TextureNotFoundSender.cs
@@ -39,55 +39,60 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
{
//private static readonly log4net.ILog m_log
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
-
- private LLUUID m_textureId;
+
+ private bool m_cancel = false;
private IClientAPI m_client;
-
+
// See ITextureSender
- public bool Sending
- {
- get { return false; }
- set { m_sending = value; }
- }
-
- private bool m_sending = false;
+
+ private bool m_sending = false;
+ private LLUUID m_textureId;
// See ITextureSender
- public bool Cancel
- {
- get { return false; }
- set { m_cancel = value; }
- }
-
- private bool m_cancel = false;
-
+
public TextureNotFoundSender(IClientAPI client, LLUUID textureID)
{
m_client = client;
m_textureId = textureID;
}
-
+
+ #region ITextureSender Members
+
+ public bool Sending
+ {
+ get { return false; }
+ set { m_sending = value; }
+ }
+
+ public bool Cancel
+ {
+ get { return false; }
+ set { m_cancel = value; }
+ }
+
// See ITextureSender
public void UpdateRequest(int discardLevel, uint packetNumber)
{
// Not need to implement since priority changes don't affect this operation
}
-
+
// See ITextureSender
public bool SendTexturePacket()
{
//m_log.InfoFormat(
// "[TEXTURE NOT FOUND SENDER]: Informing the client that texture {0} cannot be found",
// m_textureId);
-
+
ImageNotInDatabasePacket notFound = new ImageNotInDatabasePacket();
notFound.ImageID.ID = m_textureId;
-
+
// XXX Temporarily disabling as this appears to be causing client crashes on at least
// 1.19.0(5) of the Linden Second Life client.
// m_client.OutPacket(notFound, ThrottleOutPacketType.Texture);
-
+
return true;
}
+
+ #endregion
}
}
\ No newline at end of file
diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/UserTextureDownloadService.cs b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/UserTextureDownloadService.cs
index 08a22d6..4f63fd0 100644
--- a/OpenSim/Region/Environment/Modules/Agent/TextureDownload/UserTextureDownloadService.cs
+++ b/OpenSim/Region/Environment/Modules/Agent/TextureDownload/UserTextureDownloadService.cs
@@ -32,8 +32,6 @@ using log4net;
using OpenSim.Framework;
using OpenSim.Framework.Communications.Limit;
using OpenSim.Region.Environment.Interfaces;
-using OpenSim.Region.Environment.Modules.Agent.TextureDownload;
-using OpenSim.Region.Environment.Modules.Agent.TextureSender;
using OpenSim.Region.Environment.Scenes;
namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
@@ -45,7 +43,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
///
public class UserTextureDownloadService
{
- private static readonly ILog m_log
+ private static readonly ILog m_log
= LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
///
@@ -56,35 +54,34 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
/// sophisticated way.
///
private static readonly int MAX_ALLOWED_TEXTURE_REQUESTS = 5;
-
- ///
- /// We're going to limit requests for the same missing texture.
- /// XXX This is really a temporary solution to deal with the situation where a client continually requests
- /// the same missing textures
- ///
- private readonly IRequestLimitStrategy missingTextureLimitStrategy
- = new RepeatLimitStrategy(MAX_ALLOWED_TEXTURE_REQUESTS);
-
+
///
/// XXX Also going to limit requests for found textures.
///
- private readonly IRequestLimitStrategy foundTextureLimitStrategy
- = new RepeatLimitStrategy(MAX_ALLOWED_TEXTURE_REQUESTS);
-
- ///
- /// Holds texture senders before they have received the appropriate texture from the asset cache.
- ///
- private readonly Dictionary m_textureSenders = new Dictionary();
-
+ private readonly IRequestLimitStrategy foundTextureLimitStrategy
+ = new RepeatLimitStrategy(MAX_ALLOWED_TEXTURE_REQUESTS);
+
+ private readonly IClientAPI m_client;
+ private readonly Scene m_scene;
+
///
/// Texture Senders are placed in this queue once they have received their texture from the asset
/// cache. Another module actually invokes the send.
///
private readonly BlockingQueue m_sharedSendersQueue;
-
- private readonly Scene m_scene;
-
- private readonly IClientAPI m_client;
+
+ ///
+ /// Holds texture senders before they have received the appropriate texture from the asset cache.
+ ///
+ private readonly Dictionary m_textureSenders = new Dictionary();
+
+ ///
+ /// We're going to limit requests for the same missing texture.
+ /// XXX This is really a temporary solution to deal with the situation where a client continually requests
+ /// the same missing textures
+ ///
+ private readonly IRequestLimitStrategy missingTextureLimitStrategy
+ = new RepeatLimitStrategy(MAX_ALLOWED_TEXTURE_REQUESTS);
public UserTextureDownloadService(
IClientAPI client, Scene scene, BlockingQueue sharedQueue)
@@ -112,19 +109,19 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
{
// If we've received new non UUID information for this request and it hasn't dispatched
// yet, then update the request accordingly.
- textureSender.UpdateRequest(e.DiscardLevel, e.PacketNumber);
+ textureSender.UpdateRequest(e.DiscardLevel, e.PacketNumber);
}
else
- {
+ {
if (!foundTextureLimitStrategy.AllowRequest(e.RequestedAssetID))
{
// m_log.DebugFormat(
// "[USER TEXTURE DOWNLOAD SERVICE]: Refusing request for {0} from client {1}",
// e.RequestedAssetID, m_client.AgentId);
-
+
return;
}
- else if (!missingTextureLimitStrategy.AllowRequest(e.RequestedAssetID))
+ else if (!missingTextureLimitStrategy.AllowRequest(e.RequestedAssetID))
{
if (missingTextureLimitStrategy.IsFirstRefusal(e.RequestedAssetID))
{
@@ -135,17 +132,17 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
// m_log.DebugFormat(
// "[USER TEXTURE DOWNLOAD SERVICE]: Dropping requests for notified missing texture {0} for client {1} since we have received more than {2} requests",
// e.RequestedAssetID, m_client.AgentId, MAX_ALLOWED_TEXTURE_REQUESTS);
- }
-
- return;
+ }
+
+ return;
}
-
+
m_scene.AddPendingDownloads(1);
-
- TextureSender.TextureSender requestHandler = new TextureSender.TextureSender(m_client, e.DiscardLevel, e.PacketNumber);
+
+ TextureSender.TextureSender requestHandler = new TextureSender.TextureSender(m_client, e.DiscardLevel, e.PacketNumber);
m_textureSenders.Add(e.RequestedAssetID, requestHandler);
-
- m_scene.AssetCache.GetAsset(e.RequestedAssetID, TextureCallback, true);
+
+ m_scene.AssetCache.GetAsset(e.RequestedAssetID, TextureCallback, true);
}
}
}
@@ -170,7 +167,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
public void TextureCallback(LLUUID textureID, AssetBase texture)
{
//m_log.DebugFormat("[USER TEXTURE DOWNLOAD SERVICE]: Calling TextureCallback with {0}, texture == null is {1}", textureID, (texture == null ? true : false));
-
+
lock (m_textureSenders)
{
TextureSender.TextureSender textureSender;
@@ -181,18 +178,18 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
// this on to the TextureSender it will blow up, so just discard for now.
// Needs investigation.
if (texture == null || texture.Data == null)
- {
+ {
if (!missingTextureLimitStrategy.IsMonitoringRequests(textureID))
{
missingTextureLimitStrategy.MonitorRequests(textureID);
m_log.DebugFormat(
- "[USER TEXTURE DOWNLOAD SERVICE]: Queueing first TextureNotFoundSender for {0}, client {1}",
+ "[USER TEXTURE DOWNLOAD SERVICE]: Queueing first TextureNotFoundSender for {0}, client {1}",
textureID, m_client.AgentId);
}
-
+
ITextureSender textureNotFoundSender = new TextureNotFoundSender(m_client, textureID);
- EnqueueTextureSender(textureNotFoundSender);
+ EnqueueTextureSender(textureNotFoundSender);
}
else
{
@@ -200,13 +197,13 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
{
textureSender.TextureReceived(texture);
EnqueueTextureSender(textureSender);
-
+
foundTextureLimitStrategy.MonitorRequests(textureID);
}
}
//m_log.InfoFormat("[TEXTURE SENDER] Removing texture sender with uuid {0}", textureID);
- m_textureSenders.Remove(textureID);
+ m_textureSenders.Remove(textureID);
//m_log.InfoFormat("[TEXTURE SENDER] Current texture senders in dictionary: {0}", m_textureSenders.Count);
}
else
@@ -240,7 +237,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureDownload
{
lock (m_textureSenders)
{
- foreach( TextureSender.TextureSender textureSender in m_textureSenders.Values )
+ foreach (TextureSender.TextureSender textureSender in m_textureSenders.Values)
{
textureSender.Cancel = true;
}
diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs b/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs
index 37b0652..b6f7095 100644
--- a/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs
+++ b/OpenSim/Region/Environment/Modules/Agent/TextureSender/TextureSender.cs
@@ -40,56 +40,43 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender
///
public class TextureSender : ITextureSender
{
- private static readonly ILog m_log
+ private static readonly ILog m_log
= LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
///
/// Records the number of times texture send has been called.
///
public int counter = 0;
-
+
+ public bool ImageLoaded = false;
+
///
/// Holds the texture asset to send.
///
private AssetBase m_asset;
-
+
//public LLUUID assetID { get { return m_asset.FullID; } }
-
+
+ private bool m_cancel = false;
+
+ // See ITextureSender
+
+ private bool m_sending = false;
+
///
/// This is actually the number of extra packets required to send the texture data! We always assume
/// at least one is required.
///
private int NumPackets = 0;
-
+
///
/// Holds the packet number to send next. In this case, each packet is 1000 bytes long and starts
/// at the 600th byte (0th indexed).
///
private int PacketCounter = 0;
-
- // See ITextureSender
- public bool Cancel
- {
- get { return false; }
- set { m_cancel = value; }
- }
-
- private bool m_cancel = false;
-
- // See ITextureSender
- public bool Sending
- {
- get { return false; }
- set { m_sending = value; }
- }
-
- private bool m_sending = false;
-
- public bool ImageLoaded = false;
-
- private IClientAPI RequestUser;
private int RequestedDiscardLevel = -1;
+ private IClientAPI RequestUser;
private uint StartPacketNumber = 0;
public TextureSender(IClientAPI client, int discardLevel, uint packetNumber)
@@ -99,18 +86,18 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender
StartPacketNumber = packetNumber;
}
- ///
- /// Load up the texture data to send.
- ///
- ///
- /// A
- ///
- public void TextureReceived(AssetBase asset)
+ #region ITextureSender Members
+
+ public bool Cancel
{
- m_asset = asset;
- NumPackets = CalculateNumPackets(asset.Data.Length);
- PacketCounter = (int) StartPacketNumber;
- ImageLoaded = true;
+ get { return false; }
+ set { m_cancel = value; }
+ }
+
+ public bool Sending
+ {
+ get { return false; }
+ set { m_sending = value; }
}
// See ITextureSender
@@ -125,17 +112,33 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender
public bool SendTexturePacket()
{
//m_log.DebugFormat("[TEXTURE SENDER]: Sending packet for {0}", m_asset.FullID);
-
+
SendPacket();
counter++;
if ((NumPackets == 0) || (RequestedDiscardLevel == -1) || (PacketCounter > NumPackets) ||
- ((RequestedDiscardLevel > 0) && (counter > 50 + (NumPackets/(RequestedDiscardLevel + 1)))))
+ ((RequestedDiscardLevel > 0) && (counter > 50 + (NumPackets / (RequestedDiscardLevel + 1)))))
{
return true;
}
return false;
}
+ #endregion
+
+ ///
+ /// Load up the texture data to send.
+ ///
+ ///
+ /// A
+ ///
+ public void TextureReceived(AssetBase asset)
+ {
+ m_asset = asset;
+ NumPackets = CalculateNumPackets(asset.Data.Length);
+ PacketCounter = (int) StartPacketNumber;
+ ImageLoaded = true;
+ }
+
///
/// Sends a texture packet to the client.
///
@@ -177,17 +180,17 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender
im.Header.Reliable = false;
im.ImageID.Packet = (ushort) (PacketCounter);
im.ImageID.ID = m_asset.FullID;
- int size = m_asset.Data.Length - 600 - (1000*(PacketCounter - 1));
+ int size = m_asset.Data.Length - 600 - (1000 * (PacketCounter - 1));
if (size > 1000) size = 1000;
im.ImageData.Data = new byte[size];
try
{
- Array.Copy(m_asset.Data, 600 + (1000*(PacketCounter - 1)), im.ImageData.Data, 0, size);
+ Array.Copy(m_asset.Data, 600 + (1000 * (PacketCounter - 1)), im.ImageData.Data, 0, size);
}
catch (ArgumentOutOfRangeException)
{
m_log.Error("[TEXTURE SENDER]: Unable to separate texture into multiple packets: Array bounds failure on asset:" +
- m_asset.FullID.ToString() );
+ m_asset.FullID.ToString());
return;
}
RequestUser.OutPacket(im, ThrottleOutPacketType.Texture);
@@ -210,7 +213,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender
{
//over 600 bytes so split up file
int restData = (length - 600);
- int restPackets = ((restData + 999)/1000);
+ int restPackets = ((restData + 999) / 1000);
numPackets = restPackets;
}
diff --git a/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs b/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs
index b609f93..e35b6f5 100644
--- a/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs
+++ b/OpenSim/Region/Environment/Modules/Agent/Xfer/XferModule.cs
@@ -37,15 +37,16 @@ namespace OpenSim.Region.Environment.Modules.Agent.Xfer
{
public class XferModule : IRegionModule, IXfer
{
+ private Scene m_scene;
public Dictionary NewFiles = new Dictionary();
public Dictionary Transfers = new Dictionary();
- private Scene m_scene;
-
public XferModule()
{
}
+ #region IRegionModule Members
+
public void Initialise(Scene scene, IConfigSource config)
{
m_scene = scene;
@@ -72,6 +73,28 @@ namespace OpenSim.Region.Environment.Modules.Agent.Xfer
get { return false; }
}
+ #endregion
+
+ #region IXfer Members
+
+ public bool AddNewFile(string fileName, byte[] data)
+ {
+ lock (NewFiles)
+ {
+ if (NewFiles.ContainsKey(fileName))
+ {
+ NewFiles[fileName] = data;
+ }
+ else
+ {
+ NewFiles.Add(fileName, data);
+ }
+ }
+ return true;
+ }
+
+ #endregion
+
public void NewClient(IClientAPI client)
{
client.OnRequestXfer += RequestXfer;
@@ -96,7 +119,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.Xfer
XferDownLoad transaction = new XferDownLoad(fileName, fileData, xferID, remoteClient);
Transfers.Add(xferID, transaction);
NewFiles.Remove(fileName);
-
+
if (transaction.StartSend())
{
Transfers.Remove(xferID);
@@ -119,33 +142,18 @@ namespace OpenSim.Region.Environment.Modules.Agent.Xfer
}
}
- public bool AddNewFile(string fileName, byte[] data)
- {
- lock (NewFiles)
- {
- if (NewFiles.ContainsKey(fileName))
- {
- NewFiles[fileName] = data;
- }
- else
- {
- NewFiles.Add(fileName, data);
- }
- }
- return true;
- }
-
+ #region Nested type: XferDownLoad
public class XferDownLoad
{
+ public IClientAPI Client;
+ private bool complete;
public byte[] Data = new byte[0];
- public string FileName = String.Empty;
- public ulong XferID = 0;
public int DataPointer = 0;
+ public string FileName = String.Empty;
public uint Packet = 0;
- public IClientAPI Client;
public uint Serial = 1;
- private bool complete;
+ public ulong XferID = 0;
public XferDownLoad(string fileName, byte[] data, ulong xferID, IClientAPI client)
{
@@ -172,7 +180,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.Xfer
Array.Copy(Helpers.IntToBytes(Data.Length), 0, transferData, 0, 4);
Array.Copy(Data, 0, transferData, 4, Data.Length);
Client.SendXferPacket(XferID, 0 + 0x80000000, transferData);
-
+
complete = true;
}
else
@@ -182,10 +190,10 @@ namespace OpenSim.Region.Environment.Modules.Agent.Xfer
Array.Copy(Data, 0, transferData, 4, 1000);
Client.SendXferPacket(XferID, 0, transferData);
Packet++;
- DataPointer = 1000;
+ DataPointer = 1000;
}
-
- return complete;
+
+ return complete;
}
///
@@ -213,13 +221,15 @@ namespace OpenSim.Region.Environment.Modules.Agent.Xfer
Client.SendXferPacket(XferID, endPacket, transferData);
Packet++;
DataPointer += (Data.Length - DataPointer);
-
+
complete = true;
}
}
-
+
return complete;
}
}
+
+ #endregion
}
}
\ No newline at end of file
--
cgit v1.1