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