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/BunchOfCaps/BunchOfCaps.cs | 40 ++++--- .../Linden/Caps/MeshUploadFlagModule.cs | 128 +++++++++++++++++++++ 2 files changed, 150 insertions(+), 18 deletions(-) create mode 100644 OpenSim/Region/ClientStack/Linden/Caps/MeshUploadFlagModule.cs (limited to 'OpenSim/Region/ClientStack/Linden') diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs index 6786ac5..d3bb0bc 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) Contributors, http://opensimulator.org/ * See CONTRIBUTORS.TXT for a full list of copyright holders. * @@ -595,21 +595,25 @@ namespace OpenSim.Region.ClientStack.Linden Vector3 scale = inner_instance_list["scale"].AsVector3(); Quaternion rotation = inner_instance_list["rotation"].AsQuaternion(); +// no longer used - begin ------------------------ // int physicsShapeType = inner_instance_list["physics_shape_type"].AsInteger(); // int material = inner_instance_list["material"].AsInteger(); // int mesh = inner_instance_list["mesh"].AsInteger(); - OSDMap permissions = (OSDMap)inner_instance_list["permissions"]; - int base_mask = permissions["base_mask"].AsInteger(); - int everyone_mask = permissions["everyone_mask"].AsInteger(); - UUID creator_id = permissions["creator_id"].AsUUID(); - UUID group_id = permissions["group_id"].AsUUID(); - int group_mask = permissions["group_mask"].AsInteger(); +// OSDMap permissions = (OSDMap)inner_instance_list["permissions"]; +// int base_mask = permissions["base_mask"].AsInteger(); +// int everyone_mask = permissions["everyone_mask"].AsInteger(); +// UUID creator_id = permissions["creator_id"].AsUUID(); +// UUID group_id = permissions["group_id"].AsUUID(); +// int group_mask = permissions["group_mask"].AsInteger(); // bool is_owner_group = permissions["is_owner_group"].AsBoolean(); // UUID last_owner_id = permissions["last_owner_id"].AsUUID(); - int next_owner_mask = permissions["next_owner_mask"].AsInteger(); - UUID owner_id = permissions["owner_id"].AsUUID(); - int owner_mask = permissions["owner_mask"].AsInteger(); +// int next_owner_mask = permissions["next_owner_mask"].AsInteger(); +// UUID owner_id = permissions["owner_id"].AsUUID(); +// int owner_mask = permissions["owner_mask"].AsInteger(); +// no longer used - end ------------------------ + + UUID owner_id = m_HostCapsObj.AgentID; SceneObjectPart prim = new SceneObjectPart(owner_id, pbs, position, Quaternion.Identity, Vector3.Zero); @@ -619,19 +623,19 @@ namespace OpenSim.Region.ClientStack.Linden rotations.Add(rotation); positions.Add(position); prim.UUID = UUID.Random(); - prim.CreatorID = creator_id; + prim.CreatorID = owner_id; prim.OwnerID = owner_id; - prim.GroupID = group_id; + prim.GroupID = UUID.Zero; prim.LastOwnerID = prim.OwnerID; prim.CreationDate = Util.UnixTimeSinceEpoch(); prim.Name = assetName; prim.Description = ""; - prim.BaseMask = (uint)base_mask; - prim.EveryoneMask = (uint)everyone_mask; - prim.GroupMask = (uint)group_mask; - prim.NextOwnerMask = (uint)next_owner_mask; - prim.OwnerMask = (uint)owner_mask; +// prim.BaseMask = (uint)base_mask; +// prim.EveryoneMask = (uint)everyone_mask; +// prim.GroupMask = (uint)group_mask; +// prim.NextOwnerMask = (uint)next_owner_mask; +// prim.OwnerMask = (uint)owner_mask; if (grp == null) grp = new SceneObjectGroup(prim); @@ -1123,4 +1127,4 @@ namespace OpenSim.Region.ClientStack.Linden } } -} +} \ No newline at end of file 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