From da6c816204eb3364a4527bc086d27e79cd2af0e5 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 5 Jan 2012 17:10:38 +0000
Subject: Commenting out DataSnapShot message "Registering service discovery
capability" for now.
Please uncomment if/when needed.
---
OpenSim/Region/DataSnapshot/DataRequestHandler.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/OpenSim/Region/DataSnapshot/DataRequestHandler.cs b/OpenSim/Region/DataSnapshot/DataRequestHandler.cs
index b760454..93648d6 100644
--- a/OpenSim/Region/DataSnapshot/DataRequestHandler.cs
+++ b/OpenSim/Region/DataSnapshot/DataRequestHandler.cs
@@ -67,7 +67,7 @@ namespace OpenSim.Region.DataSnapshot
public void OnRegisterCaps(UUID agentID, Caps caps)
{
- m_log.Info("[DATASNAPSHOT]: Registering service discovery capability for " + agentID);
+// m_log.InfoFormat("[DATASNAPSHOT]: Registering service discovery capability for {0}", agentID);
string capsBase = "/CAPS/" + caps.CapsObjectPath;
caps.RegisterHandler("PublicSnapshotDataInfo",
new RestStreamHandler("POST", capsBase + m_discoveryPath, OnDiscoveryAttempt));
--
cgit v1.1
From c201b54b8524033310c59fe353616e84616a542e Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 5 Jan 2012 19:40:54 +0000
Subject: Improve "app rebake" command to return a better message if no
uploaded texture ids were available for the rebake request
---
OpenSim/Region/ClientStack/Linden/UDP/LLImageManager.cs | 12 ++++++------
.../CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs | 7 ++++++-
OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs | 5 ++++-
.../Avatar/Appearance/AppearanceInfoModule.cs | 13 +++++++++----
4 files changed, 25 insertions(+), 12 deletions(-)
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLImageManager.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLImageManager.cs
index 3e31b7d..b53f0af 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLImageManager.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLImageManager.cs
@@ -107,9 +107,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
else
{
-// m_log.DebugFormat(
-// "[LL IMAGE MANAGER]: Received duplicate of existing request for {0}, start packet {1} from {2}",
-// newRequest.RequestedAssetID, newRequest.PacketNumber, m_client.Name);
+ m_log.DebugFormat(
+ "[LL IMAGE MANAGER]: Received duplicate of existing request for {0}, start packet {1} from {2}",
+ newRequest.RequestedAssetID, newRequest.PacketNumber, m_client.Name);
//m_log.DebugFormat("[TEX]: (UPD) ID={0}: D={1}, S={2}, P={3}",
// newRequest.RequestedAssetID, newRequest.DiscardLevel, newRequest.PacketNumber, newRequest.Priority);
@@ -168,9 +168,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
else
{
-// m_log.DebugFormat(
-// "[LL IMAGE MANAGER]: Received request for {0}, start packet {1} from {2}",
-// newRequest.RequestedAssetID, newRequest.PacketNumber, m_client.Name);
+ m_log.DebugFormat(
+ "[LL IMAGE MANAGER]: Received request for {0}, start packet {1} from {2}",
+ newRequest.RequestedAssetID, newRequest.PacketNumber, m_client.Name);
//m_log.DebugFormat("[TEX]: (NEW) ID={0}: D={1}, S={2}, P={3}",
// newRequest.RequestedAssetID, newRequest.DiscardLevel, newRequest.PacketNumber, newRequest.Priority);
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index 9df0592..d68d28c 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -321,8 +321,10 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
return (defonly ? false : true);
}
- public void RequestRebake(IScenePresence sp, bool missingTexturesOnly)
+ public int RequestRebake(IScenePresence sp, bool missingTexturesOnly)
{
+ int texturesRebaked = 0;
+
for (int i = 0; i < AvatarAppearance.BAKE_INDICES.Length; i++)
{
int idx = AvatarAppearance.BAKE_INDICES[i];
@@ -359,8 +361,11 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
face.TextureID, idx, sp.Name);
}
+ texturesRebaked++;
sp.ControllingClient.SendRebakeAvatarTextures(face.TextureID);
}
+
+ return texturesRebaked;
}
#endregion
diff --git a/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs b/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs
index 04df9c3..39a760c 100644
--- a/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs
@@ -82,7 +82,10 @@ namespace OpenSim.Region.Framework.Interfaces
/// If true, only request a rebake for the textures that are missing.
/// If false then we request a rebake of all textures for which we already have references.
///
- void RequestRebake(IScenePresence sp, bool missingTexturesOnly);
+ ///
+ /// Number of rebake requests made. This will depend upon whether we've previously received texture IDs.
+ ///
+ int RequestRebake(IScenePresence sp, bool missingTexturesOnly);
void QueueAppearanceSend(UUID agentid);
void QueueAppearanceSave(UUID agentid);
diff --git a/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs b/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs
index 7e15718..39cd4c9 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs
@@ -240,11 +240,16 @@ namespace OpenSim.Region.OptionalModules.Avatar.Appearance
ScenePresence sp = scene.GetScenePresence(firstname, lastname);
if (sp != null && !sp.IsChildAgent)
{
- MainConsole.Instance.OutputFormat(
- "Requesting rebake of uploaded textures for {0}",
- sp.Name, scene.RegionInfo.RegionName);
+ int rebakesRequested = scene.AvatarFactory.RequestRebake(sp, false);
- scene.AvatarFactory.RequestRebake(sp, false);
+ if (rebakesRequested > 0)
+ MainConsole.Instance.OutputFormat(
+ "Requesting rebake of {0} uploaded textures for {1} in {2}",
+ rebakesRequested, sp.Name, scene.RegionInfo.RegionName);
+ else
+ MainConsole.Instance.OutputFormat(
+ "No texture IDs available for rebake request for {0} in {1}",
+ sp.Name, scene.RegionInfo.RegionName);
}
}
}
--
cgit v1.1
From 50e459d265ab2a25d41afee82e475a530f0cfd5a Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 5 Jan 2012 19:44:06 +0000
Subject: recomment log messages I accidentally left uncommented
---
OpenSim/Region/ClientStack/Linden/UDP/LLImageManager.cs | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLImageManager.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLImageManager.cs
index b53f0af..3e31b7d 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLImageManager.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLImageManager.cs
@@ -107,9 +107,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
else
{
- m_log.DebugFormat(
- "[LL IMAGE MANAGER]: Received duplicate of existing request for {0}, start packet {1} from {2}",
- newRequest.RequestedAssetID, newRequest.PacketNumber, m_client.Name);
+// m_log.DebugFormat(
+// "[LL IMAGE MANAGER]: Received duplicate of existing request for {0}, start packet {1} from {2}",
+// newRequest.RequestedAssetID, newRequest.PacketNumber, m_client.Name);
//m_log.DebugFormat("[TEX]: (UPD) ID={0}: D={1}, S={2}, P={3}",
// newRequest.RequestedAssetID, newRequest.DiscardLevel, newRequest.PacketNumber, newRequest.Priority);
@@ -168,9 +168,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
else
{
- m_log.DebugFormat(
- "[LL IMAGE MANAGER]: Received request for {0}, start packet {1} from {2}",
- newRequest.RequestedAssetID, newRequest.PacketNumber, m_client.Name);
+// m_log.DebugFormat(
+// "[LL IMAGE MANAGER]: Received request for {0}, start packet {1} from {2}",
+// newRequest.RequestedAssetID, newRequest.PacketNumber, m_client.Name);
//m_log.DebugFormat("[TEX]: (NEW) ID={0}: D={1}, S={2}, P={3}",
// newRequest.RequestedAssetID, newRequest.DiscardLevel, newRequest.PacketNumber, newRequest.Priority);
--
cgit v1.1
From f2ff6d5186420ed4bbf7379ad6dc92f46b7907a9 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 5 Jan 2012 20:31:46 +0000
Subject: Move asset commands from AssetService to AssetServerConnector so that
we can harmonise the same commands on the simulator side.
No functional change.
---
.../Server/Handlers/Asset/AssetServerConnector.cs | 127 ++++++++++++++++++++-
OpenSim/Services/AssetService/AssetService.cs | 124 +-------------------
2 files changed, 129 insertions(+), 122 deletions(-)
diff --git a/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs b/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs
index df571fa..9960228 100644
--- a/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs
+++ b/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs
@@ -26,7 +26,11 @@
*/
using System;
+using System.IO;
using Nini.Config;
+using OpenMetaverse;
+using OpenSim.Framework;
+using OpenSim.Framework.Console;
using OpenSim.Server.Base;
using OpenSim.Services.Interfaces;
using OpenSim.Framework.Servers.HttpServer;
@@ -67,6 +71,127 @@ namespace OpenSim.Server.Handlers.Asset
server.AddStreamHandler(new AssetServerGetHandler(m_AssetService));
server.AddStreamHandler(new AssetServerPostHandler(m_AssetService));
server.AddStreamHandler(new AssetServerDeleteHandler(m_AssetService, allowDelete));
+
+ MainConsole.Instance.Commands.AddCommand("kfs", false,
+ "show digest",
+ "show digest ",
+ "Show asset digest",
+ HandleShowDigest);
+
+ MainConsole.Instance.Commands.AddCommand("kfs", false,
+ "delete asset",
+ "delete asset ",
+ "Delete asset from database",
+ HandleDeleteAsset);
+
+ MainConsole.Instance.Commands.AddCommand("kfs", false,
+ "dump asset",
+ "dump asset ",
+ "Dump asset to a file",
+ "The filename is the same as the ID given.",
+ HandleDumpAsset);
+ }
+
+ void HandleDeleteAsset(string module, string[] args)
+ {
+ if (args.Length < 3)
+ {
+ MainConsole.Instance.Output("Syntax: delete asset ");
+ return;
+ }
+
+ AssetBase asset = m_AssetService.Get(args[2]);
+
+ if (asset == null || asset.Data.Length == 0)
+ {
+ MainConsole.Instance.Output("Asset not found");
+ return;
+ }
+
+ m_AssetService.Delete(args[2]);
+
+ //MainConsole.Instance.Output("Asset deleted");
+ // TODO: Implement this
+
+ MainConsole.Instance.Output("Asset deletion not supported by database");
+ }
+
+ void HandleDumpAsset(string module, string[] args)
+ {
+ if (args.Length < 3)
+ {
+ MainConsole.Instance.Output("Usage is dump asset ");
+ return;
+ }
+
+ UUID assetId;
+ string rawAssetId = args[2];
+
+ if (!UUID.TryParse(rawAssetId, out assetId))
+ {
+ MainConsole.Instance.OutputFormat("ERROR: {0} is not a valid ID format", rawAssetId);
+ return;
+ }
+
+ AssetBase asset = m_AssetService.Get(assetId.ToString());
+ if (asset == null)
+ {
+ MainConsole.Instance.OutputFormat("ERROR: No asset found with ID {0}", assetId);
+ return;
+ }
+
+ string fileName = rawAssetId;
+
+ using (FileStream fs = new FileStream(fileName, FileMode.CreateNew))
+ {
+ using (BinaryWriter bw = new BinaryWriter(fs))
+ {
+ bw.Write(asset.Data);
+ }
+ }
+
+ MainConsole.Instance.OutputFormat("Asset dumped to file {0}", fileName);
+ }
+
+ void HandleShowDigest(string module, string[] args)
+ {
+ if (args.Length < 3)
+ {
+ MainConsole.Instance.Output("Syntax: show digest ");
+ return;
+ }
+
+ AssetBase asset = m_AssetService.Get(args[2]);
+
+ if (asset == null || asset.Data.Length == 0)
+ {
+ MainConsole.Instance.Output("Asset not found");
+ return;
+ }
+
+ int i;
+
+ MainConsole.Instance.OutputFormat("Name: {0}", asset.Name);
+ MainConsole.Instance.OutputFormat("Description: {0}", asset.Description);
+ MainConsole.Instance.OutputFormat("Type: {0} (type number = {1})", (AssetType)asset.Type, asset.Type);
+ MainConsole.Instance.OutputFormat("Content-type: {0}", asset.Metadata.ContentType);
+ MainConsole.Instance.OutputFormat("Flags: {0}", asset.Metadata.Flags);
+
+ for (i = 0 ; i < 5 ; i++)
+ {
+ int off = i * 16;
+ if (asset.Data.Length <= off)
+ break;
+ int len = 16;
+ if (asset.Data.Length < off + len)
+ len = asset.Data.Length - off;
+
+ byte[] line = new byte[len];
+ Array.Copy(asset.Data, off, line, 0, len);
+
+ string text = BitConverter.ToString(line);
+ MainConsole.Instance.Output(String.Format("{0:x4}: {1}", off, text));
+ }
}
}
-}
+}
\ No newline at end of file
diff --git a/OpenSim/Services/AssetService/AssetService.cs b/OpenSim/Services/AssetService/AssetService.cs
index b3af8e3..4f4cbf6 100644
--- a/OpenSim/Services/AssetService/AssetService.cs
+++ b/OpenSim/Services/AssetService/AssetService.cs
@@ -32,7 +32,6 @@ using System.Reflection;
using Nini.Config;
using log4net;
using OpenSim.Framework;
-using OpenSim.Framework.Console;
using OpenSim.Data;
using OpenSim.Services.Interfaces;
using OpenMetaverse;
@@ -53,23 +52,6 @@ namespace OpenSim.Services.AssetService
{
m_RootInstance = this;
- MainConsole.Instance.Commands.AddCommand("kfs", false,
- "show digest",
- "show digest ",
- "Show asset digest", HandleShowDigest);
-
- MainConsole.Instance.Commands.AddCommand("kfs", false,
- "delete asset",
- "delete asset ",
- "Delete asset from database", HandleDeleteAsset);
-
- MainConsole.Instance.Commands.AddCommand("kfs", false,
- "dump asset",
- "dump asset ",
- "Dump asset to a file",
- "The filename is the same as the ID given.",
- HandleDumpAsset);
-
if (m_AssetLoader != null)
{
IConfig assetConfig = config.Configs["AssetService"];
@@ -218,111 +200,11 @@ namespace OpenSim.Services.AssetService
return m_Database.Delete(id);
}
else
- m_log.DebugFormat("[ASSET SERVICE]: Request to delete asset {0}, but flags are not Maptile", id);
-
- return false;
- }
-
- void HandleDumpAsset(string module, string[] args)
- {
- if (args.Length < 3)
- {
- MainConsole.Instance.Output("Usage is dump asset ");
- return;
- }
-
- string rawAssetId = args[2];
- UUID assetId;
-
- if (!UUID.TryParse(rawAssetId, out assetId))
- {
- MainConsole.Instance.OutputFormat("ERROR: {0} is not a valid ID format", rawAssetId);
- return;
- }
-
- AssetBase asset = m_Database.GetAsset(assetId);
- if (asset == null)
- {
- MainConsole.Instance.OutputFormat("ERROR: No asset found with ID {0}", assetId);
- return;
- }
-
- string fileName = rawAssetId;
-
- using (FileStream fs = new FileStream(fileName, FileMode.CreateNew))
- {
- using (BinaryWriter bw = new BinaryWriter(fs))
- {
- bw.Write(asset.Data);
- }
- }
-
- MainConsole.Instance.OutputFormat("Asset dumped to file {0}", fileName);
- }
-
- void HandleShowDigest(string module, string[] args)
- {
- if (args.Length < 3)
- {
- MainConsole.Instance.Output("Syntax: show digest ");
- return;
- }
-
- AssetBase asset = Get(args[2]);
-
- if (asset == null || asset.Data.Length == 0)
- {
- MainConsole.Instance.Output("Asset not found");
- return;
- }
-
- int i;
-
- MainConsole.Instance.OutputFormat("Name: {0}", asset.Name);
- MainConsole.Instance.OutputFormat("Description: {0}", asset.Description);
- MainConsole.Instance.OutputFormat("Type: {0} (type number = {1})", (AssetType)asset.Type, asset.Type);
- MainConsole.Instance.OutputFormat("Content-type: {0}", asset.Metadata.ContentType);
- MainConsole.Instance.OutputFormat("Flags: {0}", asset.Metadata.Flags);
-
- for (i = 0 ; i < 5 ; i++)
{
- int off = i * 16;
- if (asset.Data.Length <= off)
- break;
- int len = 16;
- if (asset.Data.Length < off + len)
- len = asset.Data.Length - off;
-
- byte[] line = new byte[len];
- Array.Copy(asset.Data, off, line, 0, len);
-
- string text = BitConverter.ToString(line);
- MainConsole.Instance.Output(String.Format("{0:x4}: {1}", off, text));
- }
- }
-
- void HandleDeleteAsset(string module, string[] args)
- {
- if (args.Length < 3)
- {
- MainConsole.Instance.Output("Syntax: delete asset ");
- return;
- }
-
- AssetBase asset = Get(args[2]);
-
- if (asset == null || asset.Data.Length == 0)
- {
- MainConsole.Instance.Output("Asset not found");
- return;
+ m_log.DebugFormat("[ASSET SERVICE]: Request to delete asset {0}, but flags are not Maptile", id);
}
- Delete(args[2]);
-
- //MainConsole.Instance.Output("Asset deleted");
- // TODO: Implement this
-
- MainConsole.Instance.Output("Asset deletion not supported by database");
+ return false;
}
}
-}
+}
\ No newline at end of file
--
cgit v1.1
From 7319ba62dd1791a3dade5b5453e369d955de48a2 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 5 Jan 2012 20:51:49 +0000
Subject: Move simulator asset info commands to an optional module from the
connector. Make them conform with service side commands.
This stops them appearing twice when Hypergrid is enabled.
---
.../OptionalModules/Asset/AssetInfoModule.cs | 134 +++++++++++++++++++++
.../Minimodule/Interfaces/IInventoryItem.cs | 5 +-
.../Connectors/Asset/AssetServiceConnector.cs | 45 +------
3 files changed, 138 insertions(+), 46 deletions(-)
create mode 100644 OpenSim/Region/OptionalModules/Asset/AssetInfoModule.cs
diff --git a/OpenSim/Region/OptionalModules/Asset/AssetInfoModule.cs b/OpenSim/Region/OptionalModules/Asset/AssetInfoModule.cs
new file mode 100644
index 0000000..9ea6343
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Asset/AssetInfoModule.cs
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSimulator Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using System.Text;
+using log4net;
+using Mono.Addins;
+using Nini.Config;
+using OpenMetaverse;
+using OpenSim.Framework;
+using OpenSim.Framework.Console;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+
+namespace OpenSim.Region.OptionalModules.Asset
+{
+ ///
+ /// A module that just holds commands for inspecting assets.
+ ///
+ [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "AssetInfoModule")]
+ public class AssetInfoModule : ISharedRegionModule
+ {
+// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+
+ private Scene m_scene;
+
+ public string Name { get { return "Asset Information Module"; } }
+
+ public Type ReplaceableInterface { get { return null; } }
+
+ public void Initialise(IConfigSource source)
+ {
+// m_log.DebugFormat("[ASSET INFO MODULE]: INITIALIZED MODULE");
+ }
+
+ public void PostInitialise()
+ {
+// m_log.DebugFormat("[ASSET INFO MODULE]: POST INITIALIZED MODULE");
+ }
+
+ public void Close()
+ {
+// m_log.DebugFormat("[ASSET INFO MODULE]: CLOSED MODULE");
+ }
+
+ public void AddRegion(Scene scene)
+ {
+// m_log.DebugFormat("[ASSET INFO MODULE]: REGION {0} ADDED", scene.RegionInfo.RegionName);
+ }
+
+ public void RemoveRegion(Scene scene)
+ {
+// m_log.DebugFormat("[ASSET INFO MODULE]: REGION {0} REMOVED", scene.RegionInfo.RegionName);
+ }
+
+ public void RegionLoaded(Scene scene)
+ {
+// m_log.DebugFormat("[ASSET INFO MODULE]: REGION {0} LOADED", scene.RegionInfo.RegionName);
+
+ if (m_scene == null)
+ m_scene = scene;
+
+ MainConsole.Instance.Commands.AddCommand(
+ "asset", false, "dump asset",
+ "dump asset ",
+ "Dump an asset",
+ HandleDumpAsset);
+ }
+
+ void HandleDumpAsset(string module, string[] args)
+ {
+ if (args.Length < 3)
+ {
+ MainConsole.Instance.Output("Usage is dump asset ");
+ return;
+ }
+
+ UUID assetId;
+ string rawAssetId = args[2];
+
+ if (!UUID.TryParse(rawAssetId, out assetId))
+ {
+ MainConsole.Instance.OutputFormat("ERROR: {0} is not a valid ID format", rawAssetId);
+ return;
+ }
+
+ AssetBase asset = m_scene.AssetService.Get(assetId.ToString());
+ if (asset == null)
+ {
+ MainConsole.Instance.OutputFormat("ERROR: No asset found with ID {0}", assetId);
+ return;
+ }
+
+ string fileName = rawAssetId;
+
+ using (FileStream fs = new FileStream(fileName, FileMode.CreateNew))
+ {
+ using (BinaryWriter bw = new BinaryWriter(fs))
+ {
+ bw.Write(asset.Data);
+ }
+ }
+
+ MainConsole.Instance.OutputFormat("Asset dumped to file {0}", fileName);
+ }
+ }
+}
\ No newline at end of file
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IInventoryItem.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IInventoryItem.cs
index 16cd7e4..a8e545c 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IInventoryItem.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IInventoryItem.cs
@@ -30,8 +30,7 @@ using OpenMetaverse;
using OpenMetaverse.Assets;
namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
-{
-
+{
///
/// This implements the methods needed to operate on individual inventory items.
///
@@ -39,6 +38,6 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
{
int Type { get; }
UUID AssetID { get; }
- T RetrieveAsset() where T : Asset, new();
+ T RetrieveAsset() where T : OpenMetaverse.Assets.Asset, new();
}
}
diff --git a/OpenSim/Services/Connectors/Asset/AssetServiceConnector.cs b/OpenSim/Services/Connectors/Asset/AssetServiceConnector.cs
index d7b2ff8..e4c3eaf 100644
--- a/OpenSim/Services/Connectors/Asset/AssetServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Asset/AssetServiceConnector.cs
@@ -86,11 +86,8 @@ namespace OpenSim.Services.Connectors
m_log.Error("[ASSET CONNECTOR]: No Server URI named in section AssetService");
throw new Exception("Asset connector init error");
}
- m_ServerURI = serviceURI;
- MainConsole.Instance.Commands.AddCommand("asset", false, "dump asset",
- "dump asset ",
- "dump one cached asset", HandleDumpAsset);
+ m_ServerURI = serviceURI;
}
protected void SetCache(IImprovedAssetCache cache)
@@ -328,43 +325,5 @@ namespace OpenSim.Services.Connectors
}
return false;
}
-
- private void HandleDumpAsset(string module, string[] args)
- {
- if (args.Length != 4)
- {
- MainConsole.Instance.Output("Syntax: dump asset ");
- return;
- }
-
- UUID assetID;
-
- if (!UUID.TryParse(args[2], out assetID))
- {
- MainConsole.Instance.Output("Invalid asset ID");
- return;
- }
-
- if (m_Cache == null)
- {
- MainConsole.Instance.Output("Instance uses no cache");
- return;
- }
-
- AssetBase asset = m_Cache.Get(assetID.ToString());
-
- if (asset == null)
- {
- MainConsole.Instance.Output("Asset not found in cache");
- return;
- }
-
- string fileName = args[3];
-
- FileStream fs = File.Create(fileName);
- fs.Write(asset.Data, 0, asset.Data.Length);
-
- fs.Close();
- }
}
-}
+}
\ No newline at end of file
--
cgit v1.1
From 5b160f5b7b2abf41e518e3974098b1bc82268c2a Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 5 Jan 2012 20:56:29 +0000
Subject: Rename 'show digest' console command to 'show asset'
---
OpenSim/Server/Handlers/Asset/AssetServerConnector.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs b/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs
index 9960228..61718f1 100644
--- a/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs
+++ b/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs
@@ -157,7 +157,7 @@ namespace OpenSim.Server.Handlers.Asset
{
if (args.Length < 3)
{
- MainConsole.Instance.Output("Syntax: show digest ");
+ MainConsole.Instance.Output("Syntax: show asset ");
return;
}
--
cgit v1.1
From f06acc0a854980fd66426103892742580e057974 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 5 Jan 2012 21:05:10 +0000
Subject: Add size and temporary information to "show asset" command
---
OpenSim/Server/Handlers/Asset/AssetServerConnector.cs | 2 ++
1 file changed, 2 insertions(+)
diff --git a/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs b/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs
index 61718f1..5dcb33b 100644
--- a/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs
+++ b/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs
@@ -175,6 +175,8 @@ namespace OpenSim.Server.Handlers.Asset
MainConsole.Instance.OutputFormat("Description: {0}", asset.Description);
MainConsole.Instance.OutputFormat("Type: {0} (type number = {1})", (AssetType)asset.Type, asset.Type);
MainConsole.Instance.OutputFormat("Content-type: {0}", asset.Metadata.ContentType);
+ MainConsole.Instance.OutputFormat("Size: {0} bytes", asset.Data.Length);
+ MainConsole.Instance.OutputFormat("Temporary: {0}", asset.Temporary ? "yes" : "no");
MainConsole.Instance.OutputFormat("Flags: {0}", asset.Metadata.Flags);
for (i = 0 ; i < 5 ; i++)
--
cgit v1.1
From da0fc3c8f572adba69e52e1d7f528946ab1f6f23 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 5 Jan 2012 21:11:32 +0000
Subject: Make "show asset" command available simulator side. Actually make
the service command be "show asset" instead of "show digest" this time.
Last time I accidnetally just changed the usage message.
---
.../OptionalModules/Asset/AssetInfoModule.cs | 51 ++++++++++++++++++++++
.../Server/Handlers/Asset/AssetServerConnector.cs | 10 ++---
2 files changed, 56 insertions(+), 5 deletions(-)
diff --git a/OpenSim/Region/OptionalModules/Asset/AssetInfoModule.cs b/OpenSim/Region/OptionalModules/Asset/AssetInfoModule.cs
index 9ea6343..a5207eb 100644
--- a/OpenSim/Region/OptionalModules/Asset/AssetInfoModule.cs
+++ b/OpenSim/Region/OptionalModules/Asset/AssetInfoModule.cs
@@ -88,6 +88,14 @@ namespace OpenSim.Region.OptionalModules.Asset
m_scene = scene;
MainConsole.Instance.Commands.AddCommand(
+ "asset",
+ false,
+ "show asset",
+ "show asset ",
+ "Show asset information",
+ HandleShowAsset);
+
+ MainConsole.Instance.Commands.AddCommand(
"asset", false, "dump asset",
"dump asset ",
"Dump an asset",
@@ -130,5 +138,48 @@ namespace OpenSim.Region.OptionalModules.Asset
MainConsole.Instance.OutputFormat("Asset dumped to file {0}", fileName);
}
+
+ void HandleShowAsset(string module, string[] args)
+ {
+ if (args.Length < 3)
+ {
+ MainConsole.Instance.Output("Syntax: show asset ");
+ return;
+ }
+
+ AssetBase asset = m_scene.AssetService.Get(args[2]);
+
+ if (asset == null || asset.Data.Length == 0)
+ {
+ MainConsole.Instance.Output("Asset not found");
+ return;
+ }
+
+ int i;
+
+ MainConsole.Instance.OutputFormat("Name: {0}", asset.Name);
+ MainConsole.Instance.OutputFormat("Description: {0}", asset.Description);
+ MainConsole.Instance.OutputFormat("Type: {0} (type number = {1})", (AssetType)asset.Type, asset.Type);
+ MainConsole.Instance.OutputFormat("Content-type: {0}", asset.Metadata.ContentType);
+ MainConsole.Instance.OutputFormat("Size: {0} bytes", asset.Data.Length);
+ MainConsole.Instance.OutputFormat("Temporary: {0}", asset.Temporary ? "yes" : "no");
+ MainConsole.Instance.OutputFormat("Flags: {0}", asset.Metadata.Flags);
+
+ for (i = 0 ; i < 5 ; i++)
+ {
+ int off = i * 16;
+ if (asset.Data.Length <= off)
+ break;
+ int len = 16;
+ if (asset.Data.Length < off + len)
+ len = asset.Data.Length - off;
+
+ byte[] line = new byte[len];
+ Array.Copy(asset.Data, off, line, 0, len);
+
+ string text = BitConverter.ToString(line);
+ MainConsole.Instance.Output(String.Format("{0:x4}: {1}", off, text));
+ }
+ }
}
}
\ No newline at end of file
diff --git a/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs b/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs
index 5dcb33b..9b80245 100644
--- a/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs
+++ b/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs
@@ -73,10 +73,10 @@ namespace OpenSim.Server.Handlers.Asset
server.AddStreamHandler(new AssetServerDeleteHandler(m_AssetService, allowDelete));
MainConsole.Instance.Commands.AddCommand("kfs", false,
- "show digest",
- "show digest ",
- "Show asset digest",
- HandleShowDigest);
+ "show asset",
+ "show asset ",
+ "Show asset information",
+ HandleShowAsset);
MainConsole.Instance.Commands.AddCommand("kfs", false,
"delete asset",
@@ -153,7 +153,7 @@ namespace OpenSim.Server.Handlers.Asset
MainConsole.Instance.OutputFormat("Asset dumped to file {0}", fileName);
}
- void HandleShowDigest(string module, string[] args)
+ void HandleShowAsset(string module, string[] args)
{
if (args.Length < 3)
{
--
cgit v1.1
From 5ea9740f1b2cc98601cfb15c19e190471c4c42ed Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 5 Jan 2012 22:40:49 +0000
Subject: Add a "j2k decode" region console command that allows a manual
request for a JPEG2000 decode of an asset
For debugging purposes.
---
.../Agent/TextureSender/J2KDecoderModule.cs | 18 +--
OpenSim/Region/Framework/Interfaces/IJ2KDecoder.cs | 9 +-
.../Agent/TextureSender/J2KDecoderCommandModule.cs | 145 +++++++++++++++++++++
3 files changed, 163 insertions(+), 9 deletions(-)
create mode 100644 OpenSim/Region/OptionalModules/Agent/TextureSender/J2KDecoderCommandModule.cs
diff --git a/OpenSim/Region/CoreModules/Agent/TextureSender/J2KDecoderModule.cs b/OpenSim/Region/CoreModules/Agent/TextureSender/J2KDecoderModule.cs
index 14dee84..349d3ac 100644
--- a/OpenSim/Region/CoreModules/Agent/TextureSender/J2KDecoderModule.cs
+++ b/OpenSim/Region/CoreModules/Agent/TextureSender/J2KDecoderModule.cs
@@ -137,14 +137,9 @@ namespace OpenSim.Region.CoreModules.Agent.TextureSender
}
}
- ///
- /// Provides a synchronous decode so that caller can be assured that this executes before the next line
- ///
- ///
- ///
- public void Decode(UUID assetID, byte[] j2kData)
+ public bool Decode(UUID assetID, byte[] j2kData)
{
- DoJ2KDecode(assetID, j2kData);
+ return DoJ2KDecode(assetID, j2kData);
}
#endregion IJ2KDecoder
@@ -154,11 +149,13 @@ namespace OpenSim.Region.CoreModules.Agent.TextureSender
///
/// UUID of Asset
/// JPEG2000 data
- private void DoJ2KDecode(UUID assetID, byte[] j2kData)
+ private bool DoJ2KDecode(UUID assetID, byte[] j2kData)
{
// m_log.DebugFormat(
// "[J2KDecoderModule]: Doing J2K decoding of {0} bytes for asset {1}", j2kData.Length, assetID);
+ bool decodedSuccessfully = true;
+
//int DecodeTime = 0;
//DecodeTime = Environment.TickCount;
OpenJPEG.J2KLayerInfo[] layers;
@@ -196,6 +193,7 @@ namespace OpenSim.Region.CoreModules.Agent.TextureSender
catch (Exception ex)
{
m_log.Warn("[J2KDecoderModule]: CSJ2K threw an exception decoding texture " + assetID + ": " + ex.Message);
+ decodedSuccessfully = false;
}
}
else
@@ -204,6 +202,7 @@ namespace OpenSim.Region.CoreModules.Agent.TextureSender
if (!OpenJPEG.DecodeLayerBoundaries(j2kData, out layers, out components))
{
m_log.Warn("[J2KDecoderModule]: OpenJPEG failed to decode texture " + assetID);
+ decodedSuccessfully = false;
}
}
@@ -212,6 +211,7 @@ namespace OpenSim.Region.CoreModules.Agent.TextureSender
m_log.Warn("[J2KDecoderModule]: Failed to decode layer data for texture " + assetID + ", guessing sane defaults");
// Layer decoding completely failed. Guess at sane defaults for the layer boundaries
layers = CreateDefaultLayers(j2kData.Length);
+ decodedSuccessfully = false;
}
// Cache Decoded layers
@@ -231,6 +231,8 @@ namespace OpenSim.Region.CoreModules.Agent.TextureSender
m_notifyList.Remove(assetID);
}
}
+
+ return decodedSuccessfully;
}
private OpenJPEG.J2KLayerInfo[] CreateDefaultLayers(int j2kLength)
diff --git a/OpenSim/Region/Framework/Interfaces/IJ2KDecoder.cs b/OpenSim/Region/Framework/Interfaces/IJ2KDecoder.cs
index 856eb11..0964276 100644
--- a/OpenSim/Region/Framework/Interfaces/IJ2KDecoder.cs
+++ b/OpenSim/Region/Framework/Interfaces/IJ2KDecoder.cs
@@ -35,6 +35,13 @@ namespace OpenSim.Region.Framework.Interfaces
public interface IJ2KDecoder
{
void BeginDecode(UUID assetID, byte[] j2kData, DecodedCallback callback);
- void Decode(UUID assetID, byte[] j2kData);
+
+ ///
+ /// Provides a synchronous decode so that caller can be assured that this executes before the next line
+ ///
+ ///
+ ///
+ /// true if decode was successful. false otherwise.
+ bool Decode(UUID assetID, byte[] j2kData);
}
}
diff --git a/OpenSim/Region/OptionalModules/Agent/TextureSender/J2KDecoderCommandModule.cs b/OpenSim/Region/OptionalModules/Agent/TextureSender/J2KDecoderCommandModule.cs
new file mode 100644
index 0000000..b224132
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Agent/TextureSender/J2KDecoderCommandModule.cs
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSimulator Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using System.Text;
+using log4net;
+using Mono.Addins;
+using Nini.Config;
+using OpenMetaverse;
+using OpenSim.Framework;
+using OpenSim.Framework.Console;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+
+namespace OpenSim.Region.OptionalModules.Agent.TextureSender
+{
+ ///
+ /// Commands for the J2KDecoder module. For debugging purposes.
+ ///
+ ///
+ /// Placed here so that they can be removed if not required and to keep the J2KDecoder module itself simple.
+ ///
+ [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "J2KDecoderCommandModule")]
+ public class J2KDecoderCommandModule : ISharedRegionModule
+ {
+// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+
+ private Scene m_scene;
+
+ public string Name { get { return "Asset Information Module"; } }
+
+ public Type ReplaceableInterface { get { return null; } }
+
+ public void Initialise(IConfigSource source)
+ {
+// m_log.DebugFormat("[J2K DECODER COMMAND MODULE]: INITIALIZED MODULE");
+ }
+
+ public void PostInitialise()
+ {
+// m_log.DebugFormat("[J2K DECODER COMMAND MODULE]: POST INITIALIZED MODULE");
+ }
+
+ public void Close()
+ {
+// m_log.DebugFormat("[J2K DECODER COMMAND MODULE]: CLOSED MODULE");
+ }
+
+ public void AddRegion(Scene scene)
+ {
+// m_log.DebugFormat("[J2K DECODER COMMAND MODULE]: REGION {0} ADDED", scene.RegionInfo.RegionName);
+ }
+
+ public void RemoveRegion(Scene scene)
+ {
+// m_log.DebugFormat("[J2K DECODER COMMAND MODULE]: REGION {0} REMOVED", scene.RegionInfo.RegionName);
+ }
+
+ public void RegionLoaded(Scene scene)
+ {
+// m_log.DebugFormat("[J2K DECODER COMMAND MODULE]: REGION {0} LOADED", scene.RegionInfo.RegionName);
+
+ if (m_scene == null)
+ m_scene = scene;
+
+ MainConsole.Instance.Commands.AddCommand(
+ "j2k",
+ false,
+ "j2k decode",
+ "j2k decode ",
+ "Do JPEG2000 decoding of an asset.",
+ "This is for debugging purposes. The asset id given must contain JPEG2000 data.",
+ HandleDecode);
+ }
+
+ void HandleDecode(string module, string[] args)
+ {
+ if (args.Length < 3)
+ {
+ MainConsole.Instance.Output("Usage is j2k decode ");
+ return;
+ }
+
+ UUID assetId;
+ string rawAssetId = args[2];
+
+ if (!UUID.TryParse(rawAssetId, out assetId))
+ {
+ MainConsole.Instance.OutputFormat("ERROR: {0} is not a valid ID format", rawAssetId);
+ return;
+ }
+
+ AssetBase asset = m_scene.AssetService.Get(assetId.ToString());
+ if (asset == null)
+ {
+ MainConsole.Instance.OutputFormat("ERROR: No asset found with ID {0}", assetId);
+ return;
+ }
+
+ if (asset.Type != (sbyte)AssetType.Texture)
+ {
+ MainConsole.Instance.OutputFormat("ERROR: Asset {0} is not a texture type", assetId);
+ return;
+ }
+
+ IJ2KDecoder decoder = m_scene.RequestModuleInterface();
+ if (decoder == null)
+ {
+ MainConsole.Instance.OutputFormat("ERROR: No IJ2KDecoder module available");
+ return;
+ }
+
+ if (decoder.Decode(assetId, asset.Data))
+ MainConsole.Instance.OutputFormat("Successfully decoded asset {0}", assetId);
+ else
+ MainConsole.Instance.OutputFormat("Decode of asset {0} failed", assetId); }
+ }
+}
\ No newline at end of file
--
cgit v1.1
From 2b4edd659f59a0db4e8d81924de0312799d4f744 Mon Sep 17 00:00:00 2001
From: BlueWall
Date: Thu, 5 Jan 2012 17:53:03 -0500
Subject: Adding empty ISearchModule interface
---
OpenSim/Framework/ISearchModule.cs | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
create mode 100644 OpenSim/Framework/ISearchModule.cs
diff --git a/OpenSim/Framework/ISearchModule.cs b/OpenSim/Framework/ISearchModule.cs
new file mode 100644
index 0000000..64bf72c
--- /dev/null
+++ b/OpenSim/Framework/ISearchModule.cs
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSimulator Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using OpenMetaverse;
+
+namespace OpenSim.Framework
+{
+ public interface ISearchModule
+ {
+
+ }
+}
--
cgit v1.1
From b86e7715a8d8f081fa9452d92a9d8f6d52867a12 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 5 Jan 2012 22:54:33 +0000
Subject: Improve "j2k decode" command to tell us how many layers and
components were decoded, instead of just success/failure
---
.../Agent/TextureSender/J2KDecoderModule.cs | 21 ++++++++++++++++-----
OpenSim/Region/Framework/Interfaces/IJ2KDecoder.cs | 10 ++++++++++
.../Agent/TextureSender/J2KDecoderCommandModule.cs | 16 +++++++++++++---
3 files changed, 39 insertions(+), 8 deletions(-)
diff --git a/OpenSim/Region/CoreModules/Agent/TextureSender/J2KDecoderModule.cs b/OpenSim/Region/CoreModules/Agent/TextureSender/J2KDecoderModule.cs
index 349d3ac..a1a2501 100644
--- a/OpenSim/Region/CoreModules/Agent/TextureSender/J2KDecoderModule.cs
+++ b/OpenSim/Region/CoreModules/Agent/TextureSender/J2KDecoderModule.cs
@@ -133,13 +133,20 @@ namespace OpenSim.Region.CoreModules.Agent.TextureSender
// Do Decode!
if (decode)
- DoJ2KDecode(assetID, j2kData);
+ Decode(assetID, j2kData);
}
}
public bool Decode(UUID assetID, byte[] j2kData)
{
- return DoJ2KDecode(assetID, j2kData);
+ OpenJPEG.J2KLayerInfo[] layers;
+ int components;
+ return Decode(assetID, j2kData, out layers, out components);
+ }
+
+ public bool Decode(UUID assetID, byte[] j2kData, out OpenJPEG.J2KLayerInfo[] layers, out int components)
+ {
+ return DoJ2KDecode(assetID, j2kData, out layers, out components);
}
#endregion IJ2KDecoder
@@ -149,7 +156,10 @@ namespace OpenSim.Region.CoreModules.Agent.TextureSender
///
/// UUID of Asset
/// JPEG2000 data
- private bool DoJ2KDecode(UUID assetID, byte[] j2kData)
+ /// layer data
+ /// number of components
+ /// true if decode was successful. false otherwise.
+ private bool DoJ2KDecode(UUID assetID, byte[] j2kData, out OpenJPEG.J2KLayerInfo[] layers, out int components)
{
// m_log.DebugFormat(
// "[J2KDecoderModule]: Doing J2K decoding of {0} bytes for asset {1}", j2kData.Length, assetID);
@@ -158,7 +168,9 @@ namespace OpenSim.Region.CoreModules.Agent.TextureSender
//int DecodeTime = 0;
//DecodeTime = Environment.TickCount;
- OpenJPEG.J2KLayerInfo[] layers;
+
+ // We don't get this from CSJ2K. Is it relevant?
+ components = 0;
if (!TryLoadCacheForAsset(assetID, out layers))
{
@@ -198,7 +210,6 @@ namespace OpenSim.Region.CoreModules.Agent.TextureSender
}
else
{
- int components;
if (!OpenJPEG.DecodeLayerBoundaries(j2kData, out layers, out components))
{
m_log.Warn("[J2KDecoderModule]: OpenJPEG failed to decode texture " + assetID);
diff --git a/OpenSim/Region/Framework/Interfaces/IJ2KDecoder.cs b/OpenSim/Region/Framework/Interfaces/IJ2KDecoder.cs
index 0964276..46d03b3 100644
--- a/OpenSim/Region/Framework/Interfaces/IJ2KDecoder.cs
+++ b/OpenSim/Region/Framework/Interfaces/IJ2KDecoder.cs
@@ -43,5 +43,15 @@ namespace OpenSim.Region.Framework.Interfaces
///
/// true if decode was successful. false otherwise.
bool Decode(UUID assetID, byte[] j2kData);
+
+ ///
+ /// Provides a synchronous decode so that caller can be assured that this executes before the next line
+ ///
+ ///
+ ///
+ /// layer data
+ /// number of components
+ /// true if decode was successful. false otherwise.
+ bool Decode(UUID assetID, byte[] j2kData, out OpenJPEG.J2KLayerInfo[] layers, out int components);
}
}
diff --git a/OpenSim/Region/OptionalModules/Agent/TextureSender/J2KDecoderCommandModule.cs b/OpenSim/Region/OptionalModules/Agent/TextureSender/J2KDecoderCommandModule.cs
index b224132..439096a 100644
--- a/OpenSim/Region/OptionalModules/Agent/TextureSender/J2KDecoderCommandModule.cs
+++ b/OpenSim/Region/OptionalModules/Agent/TextureSender/J2KDecoderCommandModule.cs
@@ -34,6 +34,7 @@ using log4net;
using Mono.Addins;
using Nini.Config;
using OpenMetaverse;
+using OpenMetaverse.Imaging;
using OpenSim.Framework;
using OpenSim.Framework.Console;
using OpenSim.Region.Framework.Interfaces;
@@ -137,9 +138,18 @@ namespace OpenSim.Region.OptionalModules.Agent.TextureSender
return;
}
- if (decoder.Decode(assetId, asset.Data))
- MainConsole.Instance.OutputFormat("Successfully decoded asset {0}", assetId);
+ OpenJPEG.J2KLayerInfo[] layers;
+ int components;
+ if (decoder.Decode(assetId, asset.Data, out layers, out components))
+ {
+ MainConsole.Instance.OutputFormat(
+ "Successfully decoded asset {0} with {1} layers and {2} components",
+ assetId, layers.Length, components);
+ }
else
- MainConsole.Instance.OutputFormat("Decode of asset {0} failed", assetId); }
+ {
+ MainConsole.Instance.OutputFormat("Decode of asset {0} failed", assetId);
+ }
+ }
}
}
\ No newline at end of file
--
cgit v1.1