From 281e80ccf3353b4876eaff97b7accaf547561634 Mon Sep 17 00:00:00 2001 From: Michael Cerquoni aka Nebadon Izumi Date: Thu, 7 Jul 2011 03:18:04 -0700 Subject: add MeshUploadFlag capability fixed mesh upload with latest mesh viewer thank you dahlia and lkalif for helping to make this happen! --- .../Linden/Caps/MeshUploadFlagModule.cs | 128 +++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 OpenSim/Region/ClientStack/Linden/Caps/MeshUploadFlagModule.cs (limited to 'OpenSim/Region/ClientStack/Linden/Caps/MeshUploadFlagModule.cs') diff --git a/OpenSim/Region/ClientStack/Linden/Caps/MeshUploadFlagModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/MeshUploadFlagModule.cs new file mode 100644 index 0000000..98f9663 --- /dev/null +++ b/OpenSim/Region/ClientStack/Linden/Caps/MeshUploadFlagModule.cs @@ -0,0 +1,128 @@ +/* + * 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; +using System.Reflection; +using log4net; +using Nini.Config; +using Mono.Addins; +using OpenMetaverse; +using OpenMetaverse.StructuredData; +using OpenSim.Framework; +using OpenSim.Framework.Servers.HttpServer; +using OpenSim.Region.Framework.Interfaces; +using OpenSim.Region.Framework.Scenes; +using OpenSim.Services.Interfaces; +using Caps = OpenSim.Framework.Capabilities.Caps; + +namespace OpenSim.Region.ClientStack.Linden +{ + /// + /// MeshUploadFlag capability. This is required for uploading Mesh. + /// + /// + [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")] + public class MeshUploadFlagModule : ISharedRegionModule + { + private static readonly ILog m_log = + LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private Scene m_scene; + private UUID m_agentID; + + + #region ISharedRegionModule Members + + public void Initialise(IConfigSource source) + { + IConfig config = source.Configs["MeshUploadFlag"]; + if (config == null) + return; + } + + public void AddRegion(Scene s) + { + m_scene = s; + m_scene.EventManager.OnRegisterCaps += RegisterCaps; + } + + public void RemoveRegion(Scene s) + { + m_scene.EventManager.OnRegisterCaps -= RegisterCaps; + } + + public void RegionLoaded(Scene s) + { + } + + public void PostInitialise() + { + } + + public void Close() { } + + public string Name { get { return "MeshUploadFlagModule"; } } + + public Type ReplaceableInterface + { + get { return null; } + } + + #endregion + + public void RegisterCaps(UUID agentID, Caps caps) + { + IRequestHandler reqHandler = new RestHTTPHandler("GET", "/CAPS/" + UUID.Random(), MeshUploadFlag); + caps.RegisterHandler("MeshUploadFlag", reqHandler); + m_agentID = agentID; + } + + private Hashtable MeshUploadFlag(Hashtable mDhttpMethod) + { + m_log.DebugFormat("[SIMULATOR FEATURES MODULE]: MeshUploadFlag request"); + OSDMap data = new OSDMap(); + ScenePresence sp = m_scene.GetScenePresence(m_agentID); + data["username"] = sp.Firstname + "." + sp.Lastname; + data["display_name_next_update"] = new OSDDate(DateTime.Now); + data["legacy_first_name"] = sp.Firstname; + data["mesh_upload_status"] = "valid"; + data["display_name"] = sp.Firstname + " " + sp.Lastname; + data["legacy_last_name"] = sp.Lastname; + data["id"] = m_agentID; + data["is_display_name_default"] = true; + + //Send back data + Hashtable responsedata = new Hashtable(); + responsedata["int_response_code"] = 200; + responsedata["content_type"] = "text/plain"; + responsedata["keepalive"] = false; + responsedata["str_response_string"] = OSDParser.SerializeLLSDXmlString(data); + return responsedata; + } + + } +} \ No newline at end of file -- cgit v1.1 From 2fbc98fa5c518d549768899573fa506a22f529e6 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Thu, 7 Jul 2011 23:37:23 +0100 Subject: Make MeshUploadFlagModule non-shared rather than shared (since each scene needs its own cap) --- OpenSim/Region/ClientStack/Linden/Caps/MeshUploadFlagModule.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'OpenSim/Region/ClientStack/Linden/Caps/MeshUploadFlagModule.cs') diff --git a/OpenSim/Region/ClientStack/Linden/Caps/MeshUploadFlagModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/MeshUploadFlagModule.cs index 98f9663..2d15ca5 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/MeshUploadFlagModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/MeshUploadFlagModule.cs @@ -47,7 +47,7 @@ namespace OpenSim.Region.ClientStack.Linden /// /// [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")] - public class MeshUploadFlagModule : ISharedRegionModule + public class MeshUploadFlagModule : INonSharedRegionModule { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); -- cgit v1.1 From 3bda7711b3998d21d0ce78d99273f83d6ee73991 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Thu, 7 Jul 2011 23:49:19 +0100 Subject: Switch the MeshUploadFlag CAP module on and off with the existing config AllowMeshUpload flag in [Mesh] (in OpenSimDefaults.ini) Default is on. --- .../Linden/Caps/MeshUploadFlagModule.cs | 49 +++++++++++++++------- 1 file changed, 35 insertions(+), 14 deletions(-) (limited to 'OpenSim/Region/ClientStack/Linden/Caps/MeshUploadFlagModule.cs') diff --git a/OpenSim/Region/ClientStack/Linden/Caps/MeshUploadFlagModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/MeshUploadFlagModule.cs index 2d15ca5..c9d7ae1 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/MeshUploadFlagModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/MeshUploadFlagModule.cs @@ -45,33 +45,54 @@ namespace OpenSim.Region.ClientStack.Linden /// /// MeshUploadFlag capability. This is required for uploading Mesh. /// - /// [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")] public class MeshUploadFlagModule : INonSharedRegionModule { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + /// + /// Is this module enabled? + /// + public bool Enabled { get; private set; } + private Scene m_scene; private UUID m_agentID; - #region ISharedRegionModule Members + public MeshUploadFlagModule() + { + Enabled = true; + } + public void Initialise(IConfigSource source) { - IConfig config = source.Configs["MeshUploadFlag"]; + IConfig config = source.Configs["Mesh"]; if (config == null) + { return; + } + else + { + Enabled = config.GetBoolean("AllowMeshUpload", Enabled); + } } public void AddRegion(Scene s) { + if (!Enabled) + return; + m_scene = s; m_scene.EventManager.OnRegisterCaps += RegisterCaps; } public void RemoveRegion(Scene s) { + if (!Enabled) + return; + m_scene.EventManager.OnRegisterCaps -= RegisterCaps; } @@ -98,22 +119,23 @@ namespace OpenSim.Region.ClientStack.Linden { IRequestHandler reqHandler = new RestHTTPHandler("GET", "/CAPS/" + UUID.Random(), MeshUploadFlag); caps.RegisterHandler("MeshUploadFlag", reqHandler); - m_agentID = agentID; + m_agentID = agentID; } private Hashtable MeshUploadFlag(Hashtable mDhttpMethod) { m_log.DebugFormat("[SIMULATOR FEATURES MODULE]: MeshUploadFlag request"); + OSDMap data = new OSDMap(); - ScenePresence sp = m_scene.GetScenePresence(m_agentID); - data["username"] = sp.Firstname + "." + sp.Lastname; - data["display_name_next_update"] = new OSDDate(DateTime.Now); - data["legacy_first_name"] = sp.Firstname; - data["mesh_upload_status"] = "valid"; - data["display_name"] = sp.Firstname + " " + sp.Lastname; - data["legacy_last_name"] = sp.Lastname; - data["id"] = m_agentID; - data["is_display_name_default"] = true; + ScenePresence sp = m_scene.GetScenePresence(m_agentID); + data["username"] = sp.Firstname + "." + sp.Lastname; + data["display_name_next_update"] = new OSDDate(DateTime.Now); + data["legacy_first_name"] = sp.Firstname; + data["mesh_upload_status"] = "valid"; + data["display_name"] = sp.Firstname + " " + sp.Lastname; + data["legacy_last_name"] = sp.Lastname; + data["id"] = m_agentID; + data["is_display_name_default"] = true; //Send back data Hashtable responsedata = new Hashtable(); @@ -123,6 +145,5 @@ namespace OpenSim.Region.ClientStack.Linden responsedata["str_response_string"] = OSDParser.SerializeLLSDXmlString(data); return responsedata; } - } } \ No newline at end of file -- cgit v1.1