From 45e0cdfcada82e0771e559614d798438d87b6ad3 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Wed, 13 Oct 2010 15:44:25 -0700 Subject: Added SOP.MediaUrl and Shape.Media to the deserialization --- .../Scenes/Serialization/SceneObjectSerializer.cs | 218 ++------------------- 1 file changed, 14 insertions(+), 204 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs index 3fd61da..efd5a8e 100644 --- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs +++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs @@ -361,6 +361,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization m_SOPXmlProcessors.Add("Flags", ProcessFlags); m_SOPXmlProcessors.Add("CollisionSound", ProcessCollisionSound); m_SOPXmlProcessors.Add("CollisionSoundVolume", ProcessCollisionSoundVolume); + m_SOPXmlProcessors.Add("MediaUrl", ProcessMediaUrl); #endregion #region TaskInventoryXmlProcessors initialization @@ -436,6 +437,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization m_ShapeXmlProcessors.Add("FlexiEntry", ProcessShpFlexiEntry); m_ShapeXmlProcessors.Add("LightEntry", ProcessShpLightEntry); m_ShapeXmlProcessors.Add("SculptEntry", ProcessShpSculptEntry); + m_ShapeXmlProcessors.Add("Media", ProcessShpMedia); #endregion } @@ -703,6 +705,11 @@ namespace OpenSim.Region.Framework.Scenes.Serialization { obj.CollisionSoundVolume = reader.ReadElementContentAsFloat("CollisionSoundVolume", String.Empty); } + + private static void ProcessMediaUrl(SceneObjectPart obj, XmlTextReader reader) + { + obj.MediaUrl = reader.ReadElementContentAsString("MediaUrl", String.Empty); + } #endregion #region TaskInventoryXmlProcessors @@ -1063,6 +1070,13 @@ namespace OpenSim.Region.Framework.Scenes.Serialization shp.SculptEntry = reader.ReadElementContentAsBoolean("SculptEntry", String.Empty); } + private static void ProcessShpMedia(PrimitiveBaseShape shp, XmlTextReader reader) + { + string value = reader.ReadElementContentAsString("Media", String.Empty); + shp.Media = PrimitiveBaseShape.MediaList.FromXml(value); + } + + #endregion ////////// Write ///////// @@ -1305,210 +1319,6 @@ namespace OpenSim.Region.Framework.Scenes.Serialization return true; } - public static SceneObjectPart Xml2ToSOPPull(XmlTextReader reader) - { - SceneObjectPart obj = new SceneObjectPart(); - - reader.ReadStartElement("SceneObjectPart"); - - if (reader.Name == "AllowedDrop") - obj.AllowedDrop = reader.ReadElementContentAsBoolean("AllowedDrop", String.Empty); - else - obj.AllowedDrop = true; - - obj.CreatorID = ReadUUID(reader, "CreatorID"); - obj.FolderID = ReadUUID(reader, "FolderID"); - obj.InventorySerial = (uint)reader.ReadElementContentAsInt("InventorySerial", String.Empty); - - #region Task Inventory - - obj.TaskInventory = new TaskInventoryDictionary(); - //List invItems = new List(); - - reader.ReadStartElement("TaskInventory", String.Empty); - while (reader.Name == "TaskInventoryItem") - { - TaskInventoryItem item = new TaskInventoryItem(); - reader.ReadStartElement("TaskInventoryItem", String.Empty); - - item.AssetID = ReadUUID(reader, "AssetID"); - item.BasePermissions = (uint)reader.ReadElementContentAsInt("BasePermissions", String.Empty); - item.CreationDate = (uint)reader.ReadElementContentAsInt("CreationDate", String.Empty); - item.CreatorID = ReadUUID(reader, "CreatorID"); - item.Description = reader.ReadElementContentAsString("Description", String.Empty); - item.EveryonePermissions = (uint)reader.ReadElementContentAsInt("EveryonePermissions", String.Empty); - item.Flags = (uint)reader.ReadElementContentAsInt("Flags", String.Empty); - item.GroupID = ReadUUID(reader, "GroupID"); - item.GroupPermissions = (uint)reader.ReadElementContentAsInt("GroupPermissions", String.Empty); - item.InvType = reader.ReadElementContentAsInt("InvType", String.Empty); - item.ItemID = ReadUUID(reader, "ItemID"); - UUID oldItemID = ReadUUID(reader, "OldItemID"); // TODO: Is this useful? - item.LastOwnerID = ReadUUID(reader, "LastOwnerID"); - item.Name = reader.ReadElementContentAsString("Name", String.Empty); - item.NextPermissions = (uint)reader.ReadElementContentAsInt("NextPermissions", String.Empty); - item.OwnerID = ReadUUID(reader, "OwnerID"); - item.CurrentPermissions = (uint)reader.ReadElementContentAsInt("CurrentPermissions", String.Empty); - UUID parentID = ReadUUID(reader, "ParentID"); - UUID parentPartID = ReadUUID(reader, "ParentPartID"); - item.PermsGranter = ReadUUID(reader, "PermsGranter"); - item.PermsMask = reader.ReadElementContentAsInt("PermsMask", String.Empty); - item.Type = reader.ReadElementContentAsInt("Type", String.Empty); - - reader.ReadEndElement(); - obj.TaskInventory.Add(item.ItemID, item); - } - if (reader.NodeType == XmlNodeType.EndElement) - reader.ReadEndElement(); - - #endregion Task Inventory - - obj.Flags = (PrimFlags)reader.ReadElementContentAsInt("ObjectFlags", String.Empty); - - obj.UUID = ReadUUID(reader, "UUID"); - obj.LocalId = (uint)reader.ReadElementContentAsLong("LocalId", String.Empty); - obj.Name = reader.ReadElementString("Name"); - obj.Material = (byte)reader.ReadElementContentAsInt("Material", String.Empty); - - if (reader.Name == "PassTouches") - obj.PassTouches = reader.ReadElementContentAsBoolean("PassTouches", String.Empty); - else - obj.PassTouches = false; - - obj.RegionHandle = (ulong)reader.ReadElementContentAsLong("RegionHandle", String.Empty); - obj.ScriptAccessPin = reader.ReadElementContentAsInt("ScriptAccessPin", String.Empty); - - if (reader.Name == "PlaySoundSlavePrims") - reader.ReadInnerXml(); - if (reader.Name == "LoopSoundSlavePrims") - reader.ReadInnerXml(); - - Vector3 groupPosition = ReadVector(reader, "GroupPosition"); - Vector3 offsetPosition = ReadVector(reader, "OffsetPosition"); - obj.RotationOffset = ReadQuaternion(reader, "RotationOffset"); - obj.Velocity = ReadVector(reader, "Velocity"); - if (reader.Name == "RotationalVelocity") - ReadVector(reader, "RotationalVelocity"); - obj.AngularVelocity = ReadVector(reader, "AngularVelocity"); - obj.Acceleration = ReadVector(reader, "Acceleration"); - obj.Description = reader.ReadElementString("Description"); - reader.ReadStartElement("Color"); - if (reader.Name == "R") - { - obj.Color = Color.FromArgb((int)reader.ReadElementContentAsFloat("A", String.Empty), - (int)reader.ReadElementContentAsFloat("R", String.Empty), - (int)reader.ReadElementContentAsFloat("G", String.Empty), - (int)reader.ReadElementContentAsFloat("B", String.Empty)); - reader.ReadEndElement(); - } - obj.Text = reader.ReadElementString("Text", String.Empty); - obj.SitName = reader.ReadElementString("SitName", String.Empty); - obj.TouchName = reader.ReadElementString("TouchName", String.Empty); - - obj.LinkNum = reader.ReadElementContentAsInt("LinkNum", String.Empty); - obj.ClickAction = (byte)reader.ReadElementContentAsInt("ClickAction", String.Empty); - - reader.ReadStartElement("Shape"); - obj.Shape.ProfileCurve = (byte)reader.ReadElementContentAsInt("ProfileCurve", String.Empty); - - byte[] teData = Convert.FromBase64String(reader.ReadElementString("TextureEntry")); - obj.Shape.Textures = new Primitive.TextureEntry(teData, 0, teData.Length); - - reader.ReadInnerXml(); // ExtraParams - - obj.Shape.PathBegin = (ushort)reader.ReadElementContentAsInt("PathBegin", String.Empty); - obj.Shape.PathCurve = (byte)reader.ReadElementContentAsInt("PathCurve", String.Empty); - obj.Shape.PathEnd = (ushort)reader.ReadElementContentAsInt("PathEnd", String.Empty); - obj.Shape.PathRadiusOffset = (sbyte)reader.ReadElementContentAsInt("PathRadiusOffset", String.Empty); - obj.Shape.PathRevolutions = (byte)reader.ReadElementContentAsInt("PathRevolutions", String.Empty); - obj.Shape.PathScaleX = (byte)reader.ReadElementContentAsInt("PathScaleX", String.Empty); - obj.Shape.PathScaleY = (byte)reader.ReadElementContentAsInt("PathScaleY", String.Empty); - obj.Shape.PathShearX = (byte)reader.ReadElementContentAsInt("PathShearX", String.Empty); - obj.Shape.PathShearY = (byte)reader.ReadElementContentAsInt("PathShearY", String.Empty); - obj.Shape.PathSkew = (sbyte)reader.ReadElementContentAsInt("PathSkew", String.Empty); - obj.Shape.PathTaperX = (sbyte)reader.ReadElementContentAsInt("PathTaperX", String.Empty); - obj.Shape.PathTaperY = (sbyte)reader.ReadElementContentAsInt("PathTaperY", String.Empty); - obj.Shape.PathTwist = (sbyte)reader.ReadElementContentAsInt("PathTwist", String.Empty); - obj.Shape.PathTwistBegin = (sbyte)reader.ReadElementContentAsInt("PathTwistBegin", String.Empty); - obj.Shape.PCode = (byte)reader.ReadElementContentAsInt("PCode", String.Empty); - obj.Shape.ProfileBegin = (ushort)reader.ReadElementContentAsInt("ProfileBegin", String.Empty); - obj.Shape.ProfileEnd = (ushort)reader.ReadElementContentAsInt("ProfileEnd", String.Empty); - obj.Shape.ProfileHollow = (ushort)reader.ReadElementContentAsInt("ProfileHollow", String.Empty); - obj.Scale = ReadVector(reader, "Scale"); - obj.Shape.State = (byte)reader.ReadElementContentAsInt("State", String.Empty); - - obj.Shape.ProfileCurve = (byte)reader.ReadElementContentAsInt("ProfileCurve", String.Empty); - obj.Shape.ProfileShape = (ProfileShape)reader.ReadElementContentAsInt("ProfileShape", String.Empty); - obj.Shape.HollowShape = (HollowShape)reader.ReadElementContentAsInt("HollowShape", String.Empty); - - UUID sculptTexture = ReadUUID(reader, "SculptTexture"); - SculptType sculptType = (SculptType)reader.ReadElementContentAsInt("SculptType", String.Empty); - if (sculptTexture != UUID.Zero) - { - obj.Shape.SculptTexture = sculptTexture; - obj.Shape.SculptType = (byte)sculptType; - } - - reader.ReadInnerXml(); // SculptData - - obj.Shape.FlexiSoftness = reader.ReadElementContentAsInt("FlexiSoftness", String.Empty); - obj.Shape.FlexiTension = reader.ReadElementContentAsFloat("FlexiTension", String.Empty); - obj.Shape.FlexiDrag = reader.ReadElementContentAsFloat("FlexiDrag", String.Empty); - obj.Shape.FlexiGravity = reader.ReadElementContentAsFloat("FlexiGravity", String.Empty); - obj.Shape.FlexiWind = reader.ReadElementContentAsFloat("FlexiWind", String.Empty); - obj.Shape.FlexiForceX = reader.ReadElementContentAsFloat("FlexiForceX", String.Empty); - obj.Shape.FlexiForceY = reader.ReadElementContentAsFloat("FlexiForceY", String.Empty); - obj.Shape.FlexiForceZ = reader.ReadElementContentAsFloat("FlexiForceZ", String.Empty); - - obj.Shape.LightColorR = reader.ReadElementContentAsFloat("LightColorR", String.Empty); - obj.Shape.LightColorG = reader.ReadElementContentAsFloat("LightColorG", String.Empty); - obj.Shape.LightColorB = reader.ReadElementContentAsFloat("LightColorB", String.Empty); - obj.Shape.LightColorA = reader.ReadElementContentAsFloat("LightColorA", String.Empty); - obj.Shape.LightRadius = reader.ReadElementContentAsFloat("LightRadius", String.Empty); - obj.Shape.LightCutoff = reader.ReadElementContentAsFloat("LightCutoff", String.Empty); - obj.Shape.LightFalloff = reader.ReadElementContentAsFloat("LightFalloff", String.Empty); - obj.Shape.LightIntensity = reader.ReadElementContentAsFloat("LightIntensity", String.Empty); - - bool hasFlexi = reader.ReadElementContentAsBoolean("FlexiEntry", String.Empty); - bool hasLight = reader.ReadElementContentAsBoolean("LightEntry", String.Empty); - reader.ReadInnerXml(); // SculptEntry - - reader.ReadEndElement(); - - obj.Scale = ReadVector(reader, "Scale"); // Yes, again - obj.UpdateFlag = (byte)reader.ReadElementContentAsInt("UpdateFlag", String.Empty); // UpdateFlag - - obj.SitTargetOrientation = ReadQuaternion(reader, "SitTargetOrientation"); - obj.SitTargetPosition = ReadVector(reader, "SitTargetPosition"); - obj.SitTargetPositionLL = ReadVector(reader, "SitTargetPositionLL"); - obj.SitTargetOrientationLL = ReadQuaternion(reader, "SitTargetOrientationLL"); - obj.ParentID = (uint)reader.ReadElementContentAsLong("ParentID", String.Empty); - obj.CreationDate = reader.ReadElementContentAsInt("CreationDate", String.Empty); - int category = reader.ReadElementContentAsInt("Category", String.Empty); - obj.SalePrice = reader.ReadElementContentAsInt("SalePrice", String.Empty); - obj.ObjectSaleType = (byte)reader.ReadElementContentAsInt("ObjectSaleType", String.Empty); - int ownershipCost = reader.ReadElementContentAsInt("OwnershipCost", String.Empty); - obj.GroupID = ReadUUID(reader, "GroupID"); - obj.OwnerID = ReadUUID(reader, "OwnerID"); - obj.LastOwnerID = ReadUUID(reader, "LastOwnerID"); - obj.BaseMask = (uint)reader.ReadElementContentAsInt("BaseMask", String.Empty); - obj.OwnerMask = (uint)reader.ReadElementContentAsInt("OwnerMask", String.Empty); - obj.GroupMask = (uint)reader.ReadElementContentAsInt("GroupMask", String.Empty); - obj.EveryoneMask = (uint)reader.ReadElementContentAsInt("EveryoneMask", String.Empty); - obj.NextOwnerMask = (uint)reader.ReadElementContentAsInt("NextOwnerMask", String.Empty); - - obj.Flags = (PrimFlags)reader.ReadElementContentAsInt("Flags", String.Empty); - - obj.CollisionSound = ReadUUID(reader, "CollisionSound"); - obj.CollisionSoundVolume = reader.ReadElementContentAsFloat("CollisionSoundVolume", String.Empty); - - reader.ReadEndElement(); - - obj.GroupPosition = groupPosition; - obj.OffsetPosition = offsetPosition; - - return obj; - } - public static SceneObjectPart Xml2ToSOP(XmlTextReader reader) { SceneObjectPart obj = new SceneObjectPart(); -- cgit v1.1 From 3384f643ebbc377ecbaae885941a08484bf259f5 Mon Sep 17 00:00:00 2001 From: Teravus Ovares (Dan Olivares) Date: Thu, 14 Oct 2010 02:19:42 -0400 Subject: * Partially complete stuff for Mesh support that Melanie wanted to see before it was done. * Shouldn't break the build. * Doesn't work yet either. --- .../CoreModules/Avatar/Assets/GetMeshModule.cs | 201 +++++++++++++++++ .../Avatar/Assets/UploadObjectAssetModule.cs | 248 +++++++++++++++++++++ 2 files changed, 449 insertions(+) create mode 100644 OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs create mode 100644 OpenSim/Region/CoreModules/Avatar/Assets/UploadObjectAssetModule.cs (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs b/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs new file mode 100644 index 0000000..c1e9891 --- /dev/null +++ b/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs @@ -0,0 +1,201 @@ +/* + * 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.Collections.Specialized; +using System.Reflection; +using System.IO; +using System.Web; +using Mono.Addins; +using log4net; +using Nini.Config; +using OpenMetaverse; +using OpenMetaverse.StructuredData; +using OpenSim.Framework; +using OpenSim.Framework.Servers; +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.CoreModules.Avatar.Assets +{ + [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")] + public class GetMeshModule : INonSharedRegionModule + { + private static readonly ILog m_log = + LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private Scene m_scene; + private IAssetService m_assetService; + + #region IRegionModuleBase Members + + + public Type ReplaceableInterface + { + get { return null; } + } + + public void Initialise(IConfigSource source) + { + + } + + public void AddRegion(Scene pScene) + { + m_scene = pScene; + } + + public void RemoveRegion(Scene scene) + { + + m_scene.EventManager.OnRegisterCaps -= RegisterCaps; + m_scene = null; + } + + public void RegionLoaded(Scene scene) + { + + m_assetService = m_scene.RequestModuleInterface(); + m_scene.EventManager.OnRegisterCaps += RegisterCaps; + } + + #endregion + + + #region IRegionModule Members + + + + public void Close() { } + + public string Name { get { return "GetMeshModule"; } } + + + public void RegisterCaps(UUID agentID, Caps caps) + { + UUID capID = UUID.Random(); + + m_log.Info("[GETMESH]: /CAPS/" + capID); + caps.RegisterHandler("GetMesh", + new RestHTTPHandler("POST", "/CAPS/" + capID + "/", + delegate(Hashtable m_dhttpMethod) + { + return ProcessGetMesh(m_dhttpMethod, agentID, caps); + })); + + } + + #endregion + public Hashtable ProcessGetMesh(Hashtable request, UUID AgentId, Caps cap) + { + + Hashtable responsedata = new Hashtable(); + responsedata["int_response_code"] = 400; //501; //410; //404; + responsedata["content_type"] = "text/plain"; + responsedata["keepalive"] = false; + responsedata["str_response_string"] = "Request wasn't what was expected"; + + string meshStr = string.Empty; + + if (request.ContainsKey("mesh_id")) + meshStr = request["mesh_id"].ToString(); + + + UUID meshID = UUID.Zero; + if (!String.IsNullOrEmpty(meshStr) && UUID.TryParse(meshStr, out meshID)) + { + if (m_assetService == null) + { + responsedata["int_response_code"] = 404; //501; //410; //404; + responsedata["content_type"] = "text/plain"; + responsedata["keepalive"] = false; + responsedata["str_response_string"] = "The asset service is unavailable. So is your mesh."; + return responsedata; + } + + AssetBase mesh; + // Only try to fetch locally cached textures. Misses are redirected + mesh = m_assetService.GetCached(meshID.ToString()); + if (mesh != null) + { + if (mesh.Type == (sbyte)45) //TODO: Change to AssetType.Mesh when libomv gets updated! + { + responsedata["str_response_string"] = Convert.ToBase64String(mesh.Data); + responsedata["content_type"] = "application/vnd.ll.mesh"; + responsedata["int_response_code"] = 200; + } + // Optionally add additional mesh types here + else + { + responsedata["int_response_code"] = 404; //501; //410; //404; + responsedata["content_type"] = "text/plain"; + responsedata["keepalive"] = false; + responsedata["str_response_string"] = "Unfortunately, this asset isn't a mesh."; + return responsedata; + } + } + else + { + mesh = m_assetService.Get(meshID.ToString()); + if (mesh != null) + { + if (mesh.Type == (sbyte)45) //TODO: Change to AssetType.Mesh when libomv gets updated! + { + responsedata["str_response_string"] = Convert.ToBase64String(mesh.Data); + responsedata["content_type"] = "application/vnd.ll.mesh"; + responsedata["int_response_code"] = 200; + } + // Optionally add additional mesh types here + else + { + responsedata["int_response_code"] = 404; //501; //410; //404; + responsedata["content_type"] = "text/plain"; + responsedata["keepalive"] = false; + responsedata["str_response_string"] = "Unfortunately, this asset isn't a mesh."; + return responsedata; + } + } + + else + { + responsedata["int_response_code"] = 404; //501; //410; //404; + responsedata["content_type"] = "text/plain"; + responsedata["keepalive"] = false; + responsedata["str_response_string"] = "Your Mesh wasn't found. Sorry!"; + return responsedata; + } + } + + } + + return responsedata; + } + } +} diff --git a/OpenSim/Region/CoreModules/Avatar/Assets/UploadObjectAssetModule.cs b/OpenSim/Region/CoreModules/Avatar/Assets/UploadObjectAssetModule.cs new file mode 100644 index 0000000..2600506 --- /dev/null +++ b/OpenSim/Region/CoreModules/Avatar/Assets/UploadObjectAssetModule.cs @@ -0,0 +1,248 @@ +/* + * 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.Collections.Specialized; +using System.Reflection; +using System.IO; +using System.Web; +using Mono.Addins; +using log4net; +using Nini.Config; +using OpenMetaverse; +using OpenMetaverse.StructuredData; +using OpenSim.Framework; +using OpenSim.Framework.Servers; +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; +using OpenSim.Framework.Capabilities; + +namespace OpenSim.Region.CoreModules.Avatar.Assets +{ + [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")] + public class UploadObjectAssetModule : INonSharedRegionModule + { + private static readonly ILog m_log = + LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private Scene m_scene; + private IAssetService m_assetService; + private bool m_dumpAssetsToFile = false; + + #region IRegionModuleBase Members + + + public Type ReplaceableInterface + { + get { return null; } + } + + public void Initialise(IConfigSource source) + { + + } + + public void AddRegion(Scene pScene) + { + m_scene = pScene; + } + + public void RemoveRegion(Scene scene) + { + + m_scene.EventManager.OnRegisterCaps -= RegisterCaps; + m_scene = null; + } + + public void RegionLoaded(Scene scene) + { + + m_assetService = m_scene.RequestModuleInterface(); + m_scene.EventManager.OnRegisterCaps += RegisterCaps; + } + + #endregion + + + #region IRegionModule Members + + + + public void Close() { } + + public string Name { get { return "UploadObjectAssetModule"; } } + + + public void RegisterCaps(UUID agentID, Caps caps) + { + UUID capID = UUID.Random(); + + m_log.Info("[GETMESH]: /CAPS/" + capID); + caps.RegisterHandler("UploadObjectAsset", + + new LLSDStreamhandler("POST", + "/CAPS/" + capID.ToString(), + delegate(LLSDAssetUploadRequest req) + { + return NewAgentInventoryRequest(req,agentID); + })); + + } + + #endregion + + public LLSDAssetUploadResponse NewAgentInventoryRequest(LLSDAssetUploadRequest llsdRequest, UUID agentID) + { + //if (llsdRequest.asset_type == "texture" || + // llsdRequest.asset_type == "animation" || + // llsdRequest.asset_type == "sound") + // { + IClientAPI client = null; + + + IMoneyModule mm = m_scene.RequestModuleInterface(); + + if (mm != null) + { + if (m_scene.TryGetClient(agentID, out client)) + { + if (!mm.UploadCovered(client, mm.UploadCharge)) + { + if (client != null) + client.SendAgentAlertMessage("Unable to upload asset. Insufficient funds.", false); + + LLSDAssetUploadResponse errorResponse = new LLSDAssetUploadResponse(); + errorResponse.uploader = ""; + errorResponse.state = "error"; + return errorResponse; + } + } + } + // } + + + + string assetName = llsdRequest.name; + string assetDes = llsdRequest.description; + string capsBase = "/CAPS/UploadObjectAsset/"; + UUID newAsset = UUID.Random(); + UUID newInvItem = UUID.Random(); + UUID parentFolder = llsdRequest.folder_id; + string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000"); + + Caps.AssetUploader uploader = + new Caps.AssetUploader(assetName, assetDes, newAsset, newInvItem, parentFolder, llsdRequest.inventory_type, + llsdRequest.asset_type, capsBase + uploaderPath, MainServer.Instance, m_dumpAssetsToFile); + MainServer.Instance.AddStreamHandler( + new BinaryStreamHandler("POST", capsBase + uploaderPath, uploader.uploaderCaps)); + + string protocol = "http://"; + + if (MainServer.Instance.UseSSL) + protocol = "https://"; + + string uploaderURL = protocol + m_scene.RegionInfo.ExternalHostName + ":" + MainServer.Instance.Port.ToString() + capsBase + + uploaderPath; + + LLSDAssetUploadResponse uploadResponse = new LLSDAssetUploadResponse(); + uploadResponse.uploader = uploaderURL; + uploadResponse.state = "upload"; + + uploader.OnUpLoad += delegate( + string passetName, string passetDescription, UUID passetID, + UUID pinventoryItem, UUID pparentFolder, byte[] pdata, string pinventoryType, + string passetType) + { + UploadCompleteHandler(passetName, passetDescription, passetID, + pinventoryItem, pparentFolder, pdata, pinventoryType, + passetType,agentID); + }; + return uploadResponse; + } + + + public void UploadCompleteHandler(string assetName, string assetDescription, UUID assetID, + UUID inventoryItem, UUID parentFolder, byte[] data, string inventoryType, + string assetType,UUID AgentID) + { + sbyte assType = 0; + sbyte inType = 0; + + if (inventoryType == "sound") + { + inType = 1; + assType = 1; + } + else if (inventoryType == "animation") + { + inType = 19; + assType = 20; + } + else if (inventoryType == "wearable") + { + inType = 18; + switch (assetType) + { + case "bodypart": + assType = 13; + break; + case "clothing": + assType = 5; + break; + } + } + + AssetBase asset; + asset = new AssetBase(assetID, assetName, assType, AgentID.ToString()); + asset.Data = data; + + if (m_scene.AssetService != null) + m_scene.AssetService.Store(asset); + + InventoryItemBase item = new InventoryItemBase(); + item.Owner = AgentID; + item.CreatorId = AgentID.ToString(); + item.ID = inventoryItem; + item.AssetID = asset.FullID; + item.Description = assetDescription; + item.Name = assetName; + item.AssetType = assType; + item.InvType = inType; + item.Folder = parentFolder; + item.CurrentPermissions = 2147483647; + item.BasePermissions = 2147483647; + item.EveryOnePermissions = 0; + item.NextPermissions = 2147483647; + item.CreationDate = Util.UnixTimeSinceEpoch(); + m_scene.AddInventoryItem(item); + + } + } +} -- cgit v1.1 From b4a5ce148cf209b1bc0a1ca302275f44abf1040f Mon Sep 17 00:00:00 2001 From: Teravus Ovares (Dan Olivares) Date: Thu, 14 Oct 2010 03:22:14 -0400 Subject: Rename file + more testing and tweaking --- .../NewFileAgentInventoryVariablePriceModule.cs | 256 +++++++++++++++++++++ .../Avatar/Assets/UploadObjectAssetModule.cs | 248 -------------------- 2 files changed, 256 insertions(+), 248 deletions(-) create mode 100644 OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs delete mode 100644 OpenSim/Region/CoreModules/Avatar/Assets/UploadObjectAssetModule.cs (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs b/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs new file mode 100644 index 0000000..0bba7d4 --- /dev/null +++ b/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs @@ -0,0 +1,256 @@ +/* + * 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.Collections.Specialized; +using System.Reflection; +using System.IO; +using System.Web; +using Mono.Addins; +using log4net; +using Nini.Config; +using OpenMetaverse; +using OpenMetaverse.StructuredData; +using OpenSim.Framework; +using OpenSim.Framework.Servers; +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; +using OpenSim.Framework.Capabilities; + +namespace OpenSim.Region.CoreModules.Avatar.Assets +{ + [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")] + public class NewFileAgentInventoryVariablePriceModule : INonSharedRegionModule + { + private static readonly ILog m_log = + LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private Scene m_scene; + private IAssetService m_assetService; + private bool m_dumpAssetsToFile = false; + + #region IRegionModuleBase Members + + + public Type ReplaceableInterface + { + get { return null; } + } + + public void Initialise(IConfigSource source) + { + + } + + public void AddRegion(Scene pScene) + { + m_scene = pScene; + } + + public void RemoveRegion(Scene scene) + { + + m_scene.EventManager.OnRegisterCaps -= RegisterCaps; + m_scene = null; + } + + public void RegionLoaded(Scene scene) + { + + m_assetService = m_scene.RequestModuleInterface(); + m_scene.EventManager.OnRegisterCaps += RegisterCaps; + } + + #endregion + + + #region IRegionModule Members + + + + public void Close() { } + + public string Name { get { return "NewFileAgentInventoryVariablePriceModule"; } } + + + public void RegisterCaps(UUID agentID, Caps caps) + { + UUID capID = UUID.Random(); + + m_log.Info("[GETMESH]: /CAPS/" + capID); + caps.RegisterHandler("NewFileAgentInventoryVariablePrice", + + new LLSDStreamhandler("POST", + "/CAPS/" + capID.ToString(), + delegate(LLSDAssetUploadRequest req) + { + return NewAgentInventoryRequest(req,agentID); + })); + + } + + #endregion + + public LLSDAssetUploadResponse NewAgentInventoryRequest(LLSDAssetUploadRequest llsdRequest, UUID agentID) + { + //if (llsdRequest.asset_type == "texture" || + // llsdRequest.asset_type == "animation" || + // llsdRequest.asset_type == "sound") + // { + IClientAPI client = null; + + + IMoneyModule mm = m_scene.RequestModuleInterface(); + + if (mm != null) + { + if (m_scene.TryGetClient(agentID, out client)) + { + if (!mm.UploadCovered(client, mm.UploadCharge)) + { + if (client != null) + client.SendAgentAlertMessage("Unable to upload asset. Insufficient funds.", false); + + LLSDAssetUploadResponse errorResponse = new LLSDAssetUploadResponse(); + errorResponse.uploader = ""; + errorResponse.state = "error"; + return errorResponse; + } + } + } + // } + + + + string assetName = llsdRequest.name; + string assetDes = llsdRequest.description; + string capsBase = "/CAPS/NewFileAgentInventoryVariablePrice/"; + UUID newAsset = UUID.Random(); + UUID newInvItem = UUID.Random(); + UUID parentFolder = llsdRequest.folder_id; + string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000") + "/"; + + Caps.AssetUploader uploader = + new Caps.AssetUploader(assetName, assetDes, newAsset, newInvItem, parentFolder, llsdRequest.inventory_type, + llsdRequest.asset_type, capsBase + uploaderPath, MainServer.Instance, m_dumpAssetsToFile); + MainServer.Instance.AddStreamHandler( + new BinaryStreamHandler("POST", capsBase + uploaderPath, uploader.uploaderCaps)); + + string protocol = "http://"; + + if (MainServer.Instance.UseSSL) + protocol = "https://"; + + string uploaderURL = protocol + m_scene.RegionInfo.ExternalHostName + ":" + MainServer.Instance.Port.ToString() + capsBase + + uploaderPath; + + LLSDAssetUploadResponse uploadResponse = new LLSDAssetUploadResponse(); + uploadResponse.uploader = uploaderURL; + uploadResponse.state = "upload"; + + uploader.OnUpLoad += UploadCompleteHandler; + + /*delegate( + string passetName, string passetDescription, UUID passetID, + UUID pinventoryItem, UUID pparentFolder, byte[] pdata, string pinventoryType, + string passetType) + { + UploadCompleteHandler(passetName, passetDescription, passetID, + pinventoryItem, pparentFolder, pdata, pinventoryType, + passetType,agentID); + };*/ + return uploadResponse; + } + + + public void UploadCompleteHandler(string assetName, string assetDescription, UUID assetID, + UUID inventoryItem, UUID parentFolder, byte[] data, string inventoryType, + string assetType) + { + UUID AgentID = UUID.Zero; + sbyte assType = 0; + sbyte inType = 0; + + if (inventoryType == "sound") + { + inType = 1; + assType = 1; + } + else if (inventoryType == "animation") + { + inType = 19; + assType = 20; + } + else if (inventoryType == "wearable") + { + inType = 18; + switch (assetType) + { + case "bodypart": + assType = 13; + break; + case "clothing": + assType = 5; + break; + } + } + else if (inventoryType == "mesh") + { + inType = 45; // TODO: Replace with appropriate type + assType = 45;// TODO: Replace with appropriate type + } + + AssetBase asset; + asset = new AssetBase(assetID, assetName, assType, AgentID.ToString()); + asset.Data = data; + + if (m_scene.AssetService != null) + m_scene.AssetService.Store(asset); + + InventoryItemBase item = new InventoryItemBase(); + item.Owner = AgentID; + item.CreatorId = AgentID.ToString(); + item.ID = inventoryItem; + item.AssetID = asset.FullID; + item.Description = assetDescription; + item.Name = assetName; + item.AssetType = assType; + item.InvType = inType; + item.Folder = parentFolder; + item.CurrentPermissions = 2147483647; + item.BasePermissions = 2147483647; + item.EveryOnePermissions = 0; + item.NextPermissions = 2147483647; + item.CreationDate = Util.UnixTimeSinceEpoch(); + m_scene.AddInventoryItem(item); + + } + } +} diff --git a/OpenSim/Region/CoreModules/Avatar/Assets/UploadObjectAssetModule.cs b/OpenSim/Region/CoreModules/Avatar/Assets/UploadObjectAssetModule.cs deleted file mode 100644 index 2600506..0000000 --- a/OpenSim/Region/CoreModules/Avatar/Assets/UploadObjectAssetModule.cs +++ /dev/null @@ -1,248 +0,0 @@ -/* - * 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.Collections.Specialized; -using System.Reflection; -using System.IO; -using System.Web; -using Mono.Addins; -using log4net; -using Nini.Config; -using OpenMetaverse; -using OpenMetaverse.StructuredData; -using OpenSim.Framework; -using OpenSim.Framework.Servers; -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; -using OpenSim.Framework.Capabilities; - -namespace OpenSim.Region.CoreModules.Avatar.Assets -{ - [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")] - public class UploadObjectAssetModule : INonSharedRegionModule - { - private static readonly ILog m_log = - LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private Scene m_scene; - private IAssetService m_assetService; - private bool m_dumpAssetsToFile = false; - - #region IRegionModuleBase Members - - - public Type ReplaceableInterface - { - get { return null; } - } - - public void Initialise(IConfigSource source) - { - - } - - public void AddRegion(Scene pScene) - { - m_scene = pScene; - } - - public void RemoveRegion(Scene scene) - { - - m_scene.EventManager.OnRegisterCaps -= RegisterCaps; - m_scene = null; - } - - public void RegionLoaded(Scene scene) - { - - m_assetService = m_scene.RequestModuleInterface(); - m_scene.EventManager.OnRegisterCaps += RegisterCaps; - } - - #endregion - - - #region IRegionModule Members - - - - public void Close() { } - - public string Name { get { return "UploadObjectAssetModule"; } } - - - public void RegisterCaps(UUID agentID, Caps caps) - { - UUID capID = UUID.Random(); - - m_log.Info("[GETMESH]: /CAPS/" + capID); - caps.RegisterHandler("UploadObjectAsset", - - new LLSDStreamhandler("POST", - "/CAPS/" + capID.ToString(), - delegate(LLSDAssetUploadRequest req) - { - return NewAgentInventoryRequest(req,agentID); - })); - - } - - #endregion - - public LLSDAssetUploadResponse NewAgentInventoryRequest(LLSDAssetUploadRequest llsdRequest, UUID agentID) - { - //if (llsdRequest.asset_type == "texture" || - // llsdRequest.asset_type == "animation" || - // llsdRequest.asset_type == "sound") - // { - IClientAPI client = null; - - - IMoneyModule mm = m_scene.RequestModuleInterface(); - - if (mm != null) - { - if (m_scene.TryGetClient(agentID, out client)) - { - if (!mm.UploadCovered(client, mm.UploadCharge)) - { - if (client != null) - client.SendAgentAlertMessage("Unable to upload asset. Insufficient funds.", false); - - LLSDAssetUploadResponse errorResponse = new LLSDAssetUploadResponse(); - errorResponse.uploader = ""; - errorResponse.state = "error"; - return errorResponse; - } - } - } - // } - - - - string assetName = llsdRequest.name; - string assetDes = llsdRequest.description; - string capsBase = "/CAPS/UploadObjectAsset/"; - UUID newAsset = UUID.Random(); - UUID newInvItem = UUID.Random(); - UUID parentFolder = llsdRequest.folder_id; - string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000"); - - Caps.AssetUploader uploader = - new Caps.AssetUploader(assetName, assetDes, newAsset, newInvItem, parentFolder, llsdRequest.inventory_type, - llsdRequest.asset_type, capsBase + uploaderPath, MainServer.Instance, m_dumpAssetsToFile); - MainServer.Instance.AddStreamHandler( - new BinaryStreamHandler("POST", capsBase + uploaderPath, uploader.uploaderCaps)); - - string protocol = "http://"; - - if (MainServer.Instance.UseSSL) - protocol = "https://"; - - string uploaderURL = protocol + m_scene.RegionInfo.ExternalHostName + ":" + MainServer.Instance.Port.ToString() + capsBase + - uploaderPath; - - LLSDAssetUploadResponse uploadResponse = new LLSDAssetUploadResponse(); - uploadResponse.uploader = uploaderURL; - uploadResponse.state = "upload"; - - uploader.OnUpLoad += delegate( - string passetName, string passetDescription, UUID passetID, - UUID pinventoryItem, UUID pparentFolder, byte[] pdata, string pinventoryType, - string passetType) - { - UploadCompleteHandler(passetName, passetDescription, passetID, - pinventoryItem, pparentFolder, pdata, pinventoryType, - passetType,agentID); - }; - return uploadResponse; - } - - - public void UploadCompleteHandler(string assetName, string assetDescription, UUID assetID, - UUID inventoryItem, UUID parentFolder, byte[] data, string inventoryType, - string assetType,UUID AgentID) - { - sbyte assType = 0; - sbyte inType = 0; - - if (inventoryType == "sound") - { - inType = 1; - assType = 1; - } - else if (inventoryType == "animation") - { - inType = 19; - assType = 20; - } - else if (inventoryType == "wearable") - { - inType = 18; - switch (assetType) - { - case "bodypart": - assType = 13; - break; - case "clothing": - assType = 5; - break; - } - } - - AssetBase asset; - asset = new AssetBase(assetID, assetName, assType, AgentID.ToString()); - asset.Data = data; - - if (m_scene.AssetService != null) - m_scene.AssetService.Store(asset); - - InventoryItemBase item = new InventoryItemBase(); - item.Owner = AgentID; - item.CreatorId = AgentID.ToString(); - item.ID = inventoryItem; - item.AssetID = asset.FullID; - item.Description = assetDescription; - item.Name = assetName; - item.AssetType = assType; - item.InvType = inType; - item.Folder = parentFolder; - item.CurrentPermissions = 2147483647; - item.BasePermissions = 2147483647; - item.EveryOnePermissions = 0; - item.NextPermissions = 2147483647; - item.CreationDate = Util.UnixTimeSinceEpoch(); - m_scene.AddInventoryItem(item); - - } - } -} -- cgit v1.1 From 7e363b79c7894b8c393ec38ae60ea19f8cb65d5e Mon Sep 17 00:00:00 2001 From: Teravus Ovares (Dan Olivares) Date: Thu, 14 Oct 2010 09:24:15 -0400 Subject: * Tweaked the upload response and now at least uploading the mesh works. * Binary error on downloading the mesh though.. so still not yet working. --- .../CoreModules/Avatar/Assets/GetMeshModule.cs | 4 +-- .../NewFileAgentInventoryVariablePriceModule.cs | 33 +++++++++++++--------- 2 files changed, 21 insertions(+), 16 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs b/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs index c1e9891..bae108c 100644 --- a/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs @@ -145,7 +145,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets mesh = m_assetService.GetCached(meshID.ToString()); if (mesh != null) { - if (mesh.Type == (sbyte)45) //TODO: Change to AssetType.Mesh when libomv gets updated! + if (mesh.Type == (sbyte)49) //TODO: Change to AssetType.Mesh when libomv gets updated! { responsedata["str_response_string"] = Convert.ToBase64String(mesh.Data); responsedata["content_type"] = "application/vnd.ll.mesh"; @@ -166,7 +166,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets mesh = m_assetService.Get(meshID.ToString()); if (mesh != null) { - if (mesh.Type == (sbyte)45) //TODO: Change to AssetType.Mesh when libomv gets updated! + if (mesh.Type == (sbyte)49) //TODO: Change to AssetType.Mesh when libomv gets updated! { responsedata["str_response_string"] = Convert.ToBase64String(mesh.Data); responsedata["content_type"] = "application/vnd.ll.mesh"; diff --git a/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs b/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs index 0bba7d4..9029f58 100644 --- a/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs @@ -107,7 +107,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets m_log.Info("[GETMESH]: /CAPS/" + capID); caps.RegisterHandler("NewFileAgentInventoryVariablePrice", - new LLSDStreamhandler("POST", + new LLSDStreamhandler("POST", "/CAPS/" + capID.ToString(), delegate(LLSDAssetUploadRequest req) { @@ -117,8 +117,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets } #endregion - - public LLSDAssetUploadResponse NewAgentInventoryRequest(LLSDAssetUploadRequest llsdRequest, UUID agentID) + + public LLSDNewFileAngentInventoryVariablePriceReplyResponse NewAgentInventoryRequest(LLSDAssetUploadRequest llsdRequest, UUID agentID) { //if (llsdRequest.asset_type == "texture" || // llsdRequest.asset_type == "animation" || @@ -138,8 +138,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets if (client != null) client.SendAgentAlertMessage("Unable to upload asset. Insufficient funds.", false); - LLSDAssetUploadResponse errorResponse = new LLSDAssetUploadResponse(); - errorResponse.uploader = ""; + LLSDNewFileAngentInventoryVariablePriceReplyResponse errorResponse = new LLSDNewFileAngentInventoryVariablePriceReplyResponse(); + errorResponse.rsvp = ""; errorResponse.state = "error"; return errorResponse; } @@ -170,14 +170,19 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets string uploaderURL = protocol + m_scene.RegionInfo.ExternalHostName + ":" + MainServer.Instance.Port.ToString() + capsBase + uploaderPath; + - LLSDAssetUploadResponse uploadResponse = new LLSDAssetUploadResponse(); - uploadResponse.uploader = uploaderURL; + LLSDNewFileAngentInventoryVariablePriceReplyResponse uploadResponse = new LLSDNewFileAngentInventoryVariablePriceReplyResponse(); + + + uploadResponse.rsvp = uploaderURL; uploadResponse.state = "upload"; + uploadResponse.resource_cost = 0; + uploadResponse.upload_price = 0; - uploader.OnUpLoad += UploadCompleteHandler; + uploader.OnUpLoad += //UploadCompleteHandler; - /*delegate( + delegate( string passetName, string passetDescription, UUID passetID, UUID pinventoryItem, UUID pparentFolder, byte[] pdata, string pinventoryType, string passetType) @@ -185,16 +190,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets UploadCompleteHandler(passetName, passetDescription, passetID, pinventoryItem, pparentFolder, pdata, pinventoryType, passetType,agentID); - };*/ + }; return uploadResponse; } public void UploadCompleteHandler(string assetName, string assetDescription, UUID assetID, UUID inventoryItem, UUID parentFolder, byte[] data, string inventoryType, - string assetType) + string assetType,UUID AgentID) { - UUID AgentID = UUID.Zero; + sbyte assType = 0; sbyte inType = 0; @@ -223,8 +228,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets } else if (inventoryType == "mesh") { - inType = 45; // TODO: Replace with appropriate type - assType = 45;// TODO: Replace with appropriate type + inType = 22; // TODO: Replace with appropriate type + assType = 49;// TODO: Replace with appropriate type } AssetBase asset; -- cgit v1.1 From 6d99f0c627d9f1eefd14b7488cce34b1e2e7d933 Mon Sep 17 00:00:00 2001 From: Teravus Ovares (Dan Olivares) Date: Thu, 14 Oct 2010 09:34:37 -0400 Subject: * Whoops, That was supposed to use the HTTP VERB 'GET' not 'POST' * At this point. Visually, Mesh works OK. Remember peeps, this is still highly experimental from the viewer side as well as the Simulator side. There are known problems with the new beta viewers and attachment breaking so be careful until that's fixed. Additionally there some new properties in the Mesh Viewer that determine physics settings that are non-functional. More work will be done on that. --- OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs b/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs index bae108c..a090c0c 100644 --- a/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs @@ -104,7 +104,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets m_log.Info("[GETMESH]: /CAPS/" + capID); caps.RegisterHandler("GetMesh", - new RestHTTPHandler("POST", "/CAPS/" + capID + "/", + new RestHTTPHandler("GET", "/CAPS/" + capID, delegate(Hashtable m_dhttpMethod) { return ProcessGetMesh(m_dhttpMethod, agentID, caps); -- cgit v1.1 From 05c4e27a30e9bfa4657aac911ddbb69cafe3c9a0 Mon Sep 17 00:00:00 2001 From: Teravus Ovares (Dan Olivares) Date: Thu, 14 Oct 2010 09:57:42 -0400 Subject: * A few additional cleanup elements * At this point, I want to make sure to thank the fabulous developers of the LibOpenMetaverse library for tirelessly keeping things updated and hammering away at the protocols and providing excellent tools to figure out where things go wrong. * Special thanks to John Hurliman and Latif Khalifa for their valuable insight. --- OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs | 1 + .../Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs | 5 +++++ 2 files changed, 6 insertions(+) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs b/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs index a090c0c..b8aed0b 100644 --- a/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs @@ -113,6 +113,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets } #endregion + public Hashtable ProcessGetMesh(Hashtable request, UUID AgentId, Caps cap) { diff --git a/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs b/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs index 9029f58..35f054f 100644 --- a/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs @@ -120,6 +120,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets public LLSDNewFileAngentInventoryVariablePriceReplyResponse NewAgentInventoryRequest(LLSDAssetUploadRequest llsdRequest, UUID agentID) { + + //TODO: The Mesh uploader uploads many types of content. If you're going to implement a Money based limit + // You need to be aware of this and + + //if (llsdRequest.asset_type == "texture" || // llsdRequest.asset_type == "animation" || // llsdRequest.asset_type == "sound") -- cgit v1.1 From 41ce392d9b32c343c5239b3a9fa0ef9f83b6a96f Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Thu, 14 Oct 2010 09:05:46 -0700 Subject: Added manual xml2 serialization. Rewired only save xml2, not oars yet. Seems to be generating xml's that are successfully parsed. Needs more testing. --- .../Scenes/Serialization/SceneObjectSerializer.cs | 261 +++++++++++++-------- .../Scenes/Serialization/SceneXmlLoader.cs | 8 +- 2 files changed, 164 insertions(+), 105 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs index efd5a8e..6e3b15a 100644 --- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs +++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs @@ -316,7 +316,6 @@ namespace OpenSim.Region.Framework.Scenes.Serialization m_SOPXmlProcessors.Add("FolderID", ProcessFolderID); m_SOPXmlProcessors.Add("InventorySerial", ProcessInventorySerial); m_SOPXmlProcessors.Add("TaskInventory", ProcessTaskInventory); - m_SOPXmlProcessors.Add("ObjectFlags", ProcessObjectFlags); m_SOPXmlProcessors.Add("UUID", ProcessUUID); m_SOPXmlProcessors.Add("LocalId", ProcessLocalId); m_SOPXmlProcessors.Add("Name", ProcessName); @@ -467,11 +466,6 @@ namespace OpenSim.Region.Framework.Scenes.Serialization obj.TaskInventory = ReadTaskInventory(reader, "TaskInventory"); } - private static void ProcessObjectFlags(SceneObjectPart obj, XmlTextReader reader) - { - obj.Flags = (PrimFlags)reader.ReadElementContentAsInt("ObjectFlags", String.Empty); - } - private static void ProcessUUID(SceneObjectPart obj, XmlTextReader reader) { obj.UUID = ReadUUID(reader, "UUID"); @@ -1089,7 +1083,8 @@ namespace OpenSim.Region.Framework.Scenes.Serialization sog.ForEachPart(delegate(SceneObjectPart sop) { - SOPToXml2(writer, sop, sog.RootPart); + if (sop.UUID != sog.RootPart.UUID) + SOPToXml2(writer, sop, sog.RootPart); }); writer.WriteEndElement(); @@ -1102,19 +1097,18 @@ namespace OpenSim.Region.Framework.Scenes.Serialization writer.WriteAttributeString("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); writer.WriteAttributeString("xmlns:xsd", "http://www.w3.org/2001/XMLSchema"); + writer.WriteElementString("AllowedDrop", sop.AllowedDrop.ToString().ToLower()); WriteUUID(writer, "CreatorID", sop.CreatorID); WriteUUID(writer, "FolderID", sop.FolderID); - writer.WriteElementString("InventorySerial", (sop.Inventory != null) ? sop.InventorySerial.ToString() : "0"); + writer.WriteElementString("InventorySerial", sop.InventorySerial.ToString()); - // FIXME: Task inventory - writer.WriteStartElement("TaskInventory"); writer.WriteEndElement(); - - writer.WriteElementString("ObjectFlags", ((int)sop.Flags).ToString()); + WriteTaskInventory(writer, sop.TaskInventory); WriteUUID(writer, "UUID", sop.UUID); writer.WriteElementString("LocalId", sop.LocalId.ToString()); writer.WriteElementString("Name", sop.Name); - writer.WriteElementString("Material", ((int)sop.Material).ToString()); + writer.WriteElementString("Material", sop.Material.ToString()); + writer.WriteElementString("PassTouches", sop.PassTouches.ToString().ToLower()); writer.WriteElementString("RegionHandle", sop.RegionHandle.ToString()); writer.WriteElementString("ScriptAccessPin", sop.ScriptAccessPin.ToString()); @@ -1123,115 +1117,40 @@ namespace OpenSim.Region.Framework.Scenes.Serialization WriteQuaternion(writer, "RotationOffset", sop.RotationOffset); WriteVector(writer, "Velocity", sop.Velocity); - WriteVector(writer, "RotationalVelocity", Vector3.Zero); WriteVector(writer, "AngularVelocity", sop.AngularVelocity); WriteVector(writer, "Acceleration", sop.Acceleration); writer.WriteElementString("Description", sop.Description); - writer.WriteStartElement("Color"); - writer.WriteElementString("R", sop.Color.R.ToString(Utils.EnUsCulture)); - writer.WriteElementString("G", sop.Color.G.ToString(Utils.EnUsCulture)); - writer.WriteElementString("B", sop.Color.B.ToString(Utils.EnUsCulture)); - writer.WriteElementString("A", sop.Color.G.ToString(Utils.EnUsCulture)); - writer.WriteEndElement(); + if (sop.Color != null) + { + writer.WriteStartElement("Color"); + writer.WriteElementString("R", sop.Color.R.ToString(Utils.EnUsCulture)); + writer.WriteElementString("G", sop.Color.G.ToString(Utils.EnUsCulture)); + writer.WriteElementString("B", sop.Color.B.ToString(Utils.EnUsCulture)); + writer.WriteElementString("A", sop.Color.G.ToString(Utils.EnUsCulture)); + writer.WriteEndElement(); + } + writer.WriteElementString("Text", sop.Text); writer.WriteElementString("SitName", sop.SitName); writer.WriteElementString("TouchName", sop.TouchName); writer.WriteElementString("LinkNum", sop.LinkNum.ToString()); writer.WriteElementString("ClickAction", sop.ClickAction.ToString()); - writer.WriteStartElement("Shape"); - writer.WriteElementString("ProfileCurve", sop.Shape.ProfileCurve.ToString()); - - writer.WriteStartElement("TextureEntry"); - byte[] te; - if (sop.Shape.TextureEntry != null) - te = sop.Shape.TextureEntry; - else - te = Utils.EmptyBytes; - writer.WriteBase64(te, 0, te.Length); - writer.WriteEndElement(); // TextureEntry - - writer.WriteStartElement("ExtraParams"); - byte[] ep; - if (sop.Shape.ExtraParams != null) - ep = sop.Shape.ExtraParams; - else - ep = Utils.EmptyBytes; - writer.WriteBase64(ep, 0, ep.Length); - writer.WriteEndElement(); // ExtraParams - - writer.WriteElementString("PathBegin", Primitive.PackBeginCut(sop.Shape.PathBegin).ToString()); - writer.WriteElementString("PathCurve", sop.Shape.PathCurve.ToString()); - writer.WriteElementString("PathEnd", Primitive.PackEndCut(sop.Shape.PathEnd).ToString()); - writer.WriteElementString("PathRadiusOffset", Primitive.PackPathTwist(sop.Shape.PathRadiusOffset).ToString()); - writer.WriteElementString("PathRevolutions", Primitive.PackPathRevolutions(sop.Shape.PathRevolutions).ToString()); - writer.WriteElementString("PathScaleX", Primitive.PackPathScale(sop.Shape.PathScaleX).ToString()); - writer.WriteElementString("PathScaleY", Primitive.PackPathScale(sop.Shape.PathScaleY).ToString()); - writer.WriteElementString("PathShearX", ((byte)Primitive.PackPathShear(sop.Shape.PathShearX)).ToString()); - writer.WriteElementString("PathShearY", ((byte)Primitive.PackPathShear(sop.Shape.PathShearY)).ToString()); - writer.WriteElementString("PathSkew", Primitive.PackPathTwist(sop.Shape.PathSkew).ToString()); - writer.WriteElementString("PathTaperX", Primitive.PackPathTaper(sop.Shape.PathTaperX).ToString()); - writer.WriteElementString("PathTaperY", Primitive.PackPathTaper(sop.Shape.PathTaperY).ToString()); - writer.WriteElementString("PathTwist", Primitive.PackPathTwist(sop.Shape.PathTwist).ToString()); - writer.WriteElementString("PathTwistBegin", Primitive.PackPathTwist(sop.Shape.PathTwistBegin).ToString()); - writer.WriteElementString("PCode", sop.Shape.PCode.ToString()); - writer.WriteElementString("ProfileBegin", Primitive.PackBeginCut(sop.Shape.ProfileBegin).ToString()); - writer.WriteElementString("ProfileEnd", Primitive.PackEndCut(sop.Shape.ProfileEnd).ToString()); - writer.WriteElementString("ProfileHollow", Primitive.PackProfileHollow(sop.Shape.ProfileHollow).ToString()); - WriteVector(writer, "Scale", sop.Scale); - writer.WriteElementString("State", sop.Shape.State.ToString()); - - writer.WriteElementString("ProfileShape", sop.Shape.ProfileShape.ToString()); - writer.WriteElementString("HollowShape", sop.Shape.HollowShape.ToString()); - - writer.WriteElementString("SculptTexture", sop.Shape.SculptTexture.ToString()); - writer.WriteElementString("SculptType", sop.Shape.SculptType.ToString()); - writer.WriteStartElement("SculptData"); - byte[] sd; - if (sop.Shape.SculptData != null) - sd = sop.Shape.ExtraParams; - else - sd = Utils.EmptyBytes; - writer.WriteBase64(sd, 0, sd.Length); - writer.WriteEndElement(); // SculptData - - writer.WriteElementString("FlexiSoftness", sop.Shape.FlexiSoftness.ToString()); - writer.WriteElementString("FlexiTension", sop.Shape.FlexiTension.ToString()); - writer.WriteElementString("FlexiDrag", sop.Shape.FlexiDrag.ToString()); - writer.WriteElementString("FlexiGravity", sop.Shape.FlexiGravity.ToString()); - writer.WriteElementString("FlexiWind", sop.Shape.FlexiWind.ToString()); - writer.WriteElementString("FlexiForceX", sop.Shape.FlexiForceX.ToString()); - writer.WriteElementString("FlexiForceY", sop.Shape.FlexiForceY.ToString()); - writer.WriteElementString("FlexiForceZ", sop.Shape.FlexiForceZ.ToString()); - - writer.WriteElementString("LightColorR", sop.Shape.LightColorR.ToString()); - writer.WriteElementString("LightColorG", sop.Shape.LightColorG.ToString()); - writer.WriteElementString("LightColorB", sop.Shape.LightColorB.ToString()); - writer.WriteElementString("LightColorA", sop.Shape.LightColorA.ToString()); - writer.WriteElementString("LightRadius", sop.Shape.LightRadius.ToString()); - writer.WriteElementString("LightCutoff", sop.Shape.LightCutoff.ToString()); - writer.WriteElementString("LightFalloff", sop.Shape.LightFalloff.ToString()); - writer.WriteElementString("LightIntensity", sop.Shape.LightIntensity.ToString()); - - writer.WriteElementString("FlexyEntry", sop.Shape.FlexiEntry.ToString()); - writer.WriteElementString("LightEntry", sop.Shape.LightEntry.ToString()); - writer.WriteElementString("SculptEntry", sop.Shape.SculptEntry.ToString()); - - writer.WriteEndElement(); // Shape + WriteShape(writer, sop.Shape); WriteVector(writer, "Scale", sop.Scale); - writer.WriteElementString("UpdateFlag", "0"); + writer.WriteElementString("UpdateFlag", sop.UpdateFlag.ToString()); WriteQuaternion(writer, "SitTargetOrientation", sop.SitTargetOrientation); WriteVector(writer, "SitTargetPosition", sop.SitTargetPosition); WriteVector(writer, "SitTargetPositionLL", sop.SitTargetPositionLL); WriteQuaternion(writer, "SitTargetOrientationLL", sop.SitTargetOrientationLL); writer.WriteElementString("ParentID", sop.ParentID.ToString()); writer.WriteElementString("CreationDate", sop.CreationDate.ToString()); - writer.WriteElementString("Category", "0"); + writer.WriteElementString("Category", sop.Category.ToString()); writer.WriteElementString("SalePrice", sop.SalePrice.ToString()); - writer.WriteElementString("ObjectSaleType", ((int)sop.ObjectSaleType).ToString()); - writer.WriteElementString("OwnershipCost", "0"); + writer.WriteElementString("ObjectSaleType", sop.ObjectSaleType.ToString()); + writer.WriteElementString("OwnershipCost", sop.OwnershipCost.ToString()); WriteUUID(writer, "GroupID", sop.GroupID); WriteUUID(writer, "OwnerID", sop.OwnerID); WriteUUID(writer, "LastOwnerID", sop.LastOwnerID); @@ -1243,6 +1162,8 @@ namespace OpenSim.Region.Framework.Scenes.Serialization writer.WriteElementString("Flags", sop.Flags.ToString()); WriteUUID(writer, "CollisionSound", sop.CollisionSound); writer.WriteElementString("CollisionSoundVolume", sop.CollisionSoundVolume.ToString()); + if (sop.MediaUrl != null) + writer.WriteElementString("MediaUrl", sop.MediaUrl.ToString()); writer.WriteEndElement(); } @@ -1273,6 +1194,134 @@ namespace OpenSim.Region.Framework.Scenes.Serialization writer.WriteEndElement(); } + static void WriteTaskInventory(XmlTextWriter writer, TaskInventoryDictionary tinv) + { + if (tinv.Count > 0) // otherwise skip this + { + writer.WriteStartElement("TaskInventory"); + + foreach (TaskInventoryItem item in tinv.Values) + { + writer.WriteStartElement("TaskInventoryItem"); + + WriteUUID(writer, "AssetID", item.AssetID); + writer.WriteElementString("BasePermissions", item.BasePermissions.ToString()); + writer.WriteElementString("CreationDate", item.CreationDate.ToString()); + WriteUUID(writer, "CreatorID", item.CreatorID); + writer.WriteElementString("Description", item.Description); + writer.WriteElementString("EveryonePermissions", item.EveryonePermissions.ToString()); + writer.WriteElementString("Flags", item.Flags.ToString()); + WriteUUID(writer, "GroupID", item.GroupID); + writer.WriteElementString("GroupPermissions", item.GroupPermissions.ToString()); + writer.WriteElementString("InvType", item.InvType.ToString()); + WriteUUID(writer, "ItemID", item.ItemID); + WriteUUID(writer, "OldItemID", item.OldItemID); + WriteUUID(writer, "LastOwnerID", item.LastOwnerID); + writer.WriteElementString("Name", item.Name); + writer.WriteElementString("NextPermissions", item.NextPermissions.ToString()); + WriteUUID(writer, "OwnerID", item.OwnerID); + writer.WriteElementString("CurrentPermissions", item.CurrentPermissions.ToString()); + WriteUUID(writer, "ParentID", item.ParentID); + WriteUUID(writer, "ParentPartID", item.ParentPartID); + WriteUUID(writer, "PermsGranter", item.PermsGranter); + writer.WriteElementString("PermsMask", item.PermsMask.ToString()); + writer.WriteElementString("Type", item.Type.ToString()); + + writer.WriteEndElement(); // TaskInventoryItem + } + + writer.WriteEndElement(); // TaskInventory + } + } + + static void WriteShape(XmlTextWriter writer, PrimitiveBaseShape shp) + { + if (shp != null) + { + writer.WriteStartElement("Shape"); + + writer.WriteElementString("ProfileCurve", shp.ProfileCurve.ToString()); + + writer.WriteStartElement("TextureEntry"); + byte[] te; + if (shp.TextureEntry != null) + te = shp.TextureEntry; + else + te = Utils.EmptyBytes; + writer.WriteBase64(te, 0, te.Length); + writer.WriteEndElement(); // TextureEntry + + writer.WriteStartElement("ExtraParams"); + byte[] ep; + if (shp.ExtraParams != null) + ep = shp.ExtraParams; + else + ep = Utils.EmptyBytes; + writer.WriteBase64(ep, 0, ep.Length); + writer.WriteEndElement(); // ExtraParams + + writer.WriteElementString("PathBegin", shp.PathBegin.ToString()); + writer.WriteElementString("PathCurve", shp.PathCurve.ToString()); + writer.WriteElementString("PathEnd", shp.PathEnd.ToString()); + writer.WriteElementString("PathRadiusOffset", shp.PathRadiusOffset.ToString()); + writer.WriteElementString("PathRevolutions", shp.PathRevolutions.ToString()); + writer.WriteElementString("PathScaleX", shp.PathScaleX.ToString()); + writer.WriteElementString("PathScaleY", shp.PathScaleY.ToString()); + writer.WriteElementString("PathShearX", shp.PathShearX.ToString()); + writer.WriteElementString("PathShearY", shp.PathShearY.ToString()); + writer.WriteElementString("PathSkew", shp.PathSkew.ToString()); + writer.WriteElementString("PathTaperX", shp.PathTaperX.ToString()); + writer.WriteElementString("PathTaperY", shp.PathTaperY.ToString()); + writer.WriteElementString("PathTwist", shp.PathTwist.ToString()); + writer.WriteElementString("PathTwistBegin", shp.PathTwistBegin.ToString()); + writer.WriteElementString("PCode", shp.PCode.ToString()); + writer.WriteElementString("ProfileBegin", shp.ProfileBegin.ToString()); + writer.WriteElementString("ProfileEnd", shp.ProfileEnd.ToString()); + writer.WriteElementString("ProfileHollow", shp.ProfileHollow.ToString()); + writer.WriteElementString("State", shp.State.ToString()); + + writer.WriteElementString("ProfileShape", shp.ProfileShape.ToString()); + writer.WriteElementString("HollowShape", shp.HollowShape.ToString()); + + WriteUUID(writer, "SculptTexture", shp.SculptTexture); + writer.WriteElementString("SculptType", shp.SculptType.ToString()); + writer.WriteStartElement("SculptData"); + byte[] sd; + if (shp.SculptData != null) + sd = shp.ExtraParams; + else + sd = Utils.EmptyBytes; + writer.WriteBase64(sd, 0, sd.Length); + writer.WriteEndElement(); // SculptData + + writer.WriteElementString("FlexiSoftness", shp.FlexiSoftness.ToString()); + writer.WriteElementString("FlexiTension", shp.FlexiTension.ToString()); + writer.WriteElementString("FlexiDrag", shp.FlexiDrag.ToString()); + writer.WriteElementString("FlexiGravity", shp.FlexiGravity.ToString()); + writer.WriteElementString("FlexiWind", shp.FlexiWind.ToString()); + writer.WriteElementString("FlexiForceX", shp.FlexiForceX.ToString()); + writer.WriteElementString("FlexiForceY", shp.FlexiForceY.ToString()); + writer.WriteElementString("FlexiForceZ", shp.FlexiForceZ.ToString()); + + writer.WriteElementString("LightColorR", shp.LightColorR.ToString()); + writer.WriteElementString("LightColorG", shp.LightColorG.ToString()); + writer.WriteElementString("LightColorB", shp.LightColorB.ToString()); + writer.WriteElementString("LightColorA", shp.LightColorA.ToString()); + writer.WriteElementString("LightRadius", shp.LightRadius.ToString()); + writer.WriteElementString("LightCutoff", shp.LightCutoff.ToString()); + writer.WriteElementString("LightFalloff", shp.LightFalloff.ToString()); + writer.WriteElementString("LightIntensity", shp.LightIntensity.ToString()); + + writer.WriteElementString("FlexiEntry", shp.FlexiEntry.ToString().ToLower()); + writer.WriteElementString("LightEntry", shp.LightEntry.ToString().ToLower()); + writer.WriteElementString("SculptEntry", shp.SculptEntry.ToString().ToLower()); + + if (shp.Media != null) + writer.WriteElementString("Media", shp.Media.ToXml()); + + writer.WriteEndElement(); // Shape + } + } //////// Read ///////// public static bool Xml2ToSOG(XmlTextReader reader, SceneObjectGroup sog) @@ -1332,13 +1381,16 @@ namespace OpenSim.Region.Framework.Scenes.Serialization SOPXmlProcessor p = null; if (m_SOPXmlProcessors.TryGetValue(reader.Name, out p)) { + //m_log.DebugFormat("[XXX] Processing: {0}", reader.Name); try { p(obj, reader); } catch (Exception e) { - m_log.DebugFormat("[SceneObjectSerializer]: exception while parsing {0} in {1}-{2}: {3}", nodeName, obj.Name, obj.UUID, e); + m_log.DebugFormat("[SceneObjectSerializer]: exception while parsing {0}: {1}", nodeName, e); + if (reader.NodeType == XmlNodeType.EndElement) + reader.Read(); } } else @@ -1441,6 +1493,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization while (reader.NodeType != XmlNodeType.EndElement) { + //m_log.DebugFormat("[XXX] Processing: {0}", reader.Name); ShapeXmlProcessor p = null; if (m_ShapeXmlProcessors.TryGetValue(reader.Name, out p)) p(shape, reader); diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs index bb67ca0..c6d4e55 100644 --- a/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs +++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs @@ -280,6 +280,8 @@ namespace OpenSim.Region.Framework.Scenes.Serialization public static void SavePrimListToXml2(EntityBase[] entityList, TextWriter stream, Vector3 min, Vector3 max) { + XmlTextWriter writer = new XmlTextWriter(stream); + int primCount = 0; stream.WriteLine("\n"); @@ -297,10 +299,14 @@ namespace OpenSim.Region.Framework.Scenes.Serialization continue; } - stream.WriteLine(SceneObjectSerializer.ToXml2Format(g)); + //stream.WriteLine(SceneObjectSerializer.ToXml2Format(g)); + SceneObjectSerializer.SOGToXml2(writer, (SceneObjectGroup)ent); + stream.WriteLine(); + primCount++; } } + stream.WriteLine("\n"); stream.Flush(); } -- cgit v1.1 From ba247f729d80dbc01b1cc13cc46692691b4b4cb3 Mon Sep 17 00:00:00 2001 From: Melanie Date: Thu, 14 Oct 2010 11:08:10 +0100 Subject: Kill some magic numbers in the mesh upload module and change the mesh asset type from 45 to 49 to match OMV trunk --- .../Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs b/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs index 35f054f..d644cdd 100644 --- a/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs @@ -254,10 +254,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets item.AssetType = assType; item.InvType = inType; item.Folder = parentFolder; - item.CurrentPermissions = 2147483647; - item.BasePermissions = 2147483647; + item.CurrentPermissions = (uint)PermissionMask.All; + item.BasePermissions = (uint)PermissionMask.All; item.EveryOnePermissions = 0; - item.NextPermissions = 2147483647; + item.NextPermissions = (uint)(PermissionMask.Move | PermissionMask.Modify | PermissionMask.Transfer); item.CreationDate = Util.UnixTimeSinceEpoch(); m_scene.AddInventoryItem(item); -- cgit v1.1 From 405935492ba360806fd47fa2053601bc98969d0d Mon Sep 17 00:00:00 2001 From: Latif Khalifa Date: Thu, 14 Oct 2010 18:08:59 +0200 Subject: Don't distroy attachments when using viewer 2.1+, strip multiple attachment data --- OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index 457e0bb..51197d2 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs @@ -228,6 +228,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments "[ATTACHMENTS MODULE]: Rezzing attachment to point {0} from item {1} for {2}", (AttachmentPoint)AttachmentPt, itemID, remoteClient.Name); + // TODO: this short circuits multiple attachments functionality in LL viewer 2.1+ and should + // be removed when that functionality is implemented in opensim + AttachmentPt &= 0x7f; + SceneObjectGroup att = RezSingleAttachmentFromInventoryInternal(remoteClient, itemID, AttachmentPt); if (updateInventoryStatus) -- cgit v1.1 From c148ef25a9fcb5236731e949f6c6dbf042d07ef9 Mon Sep 17 00:00:00 2001 From: Teravus Ovares (Dan Olivares) Date: Thu, 14 Oct 2010 12:23:41 -0400 Subject: * Replacing Magic numbers with Enums --- OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs | 4 ++-- .../Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs b/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs index b8aed0b..36aaab3 100644 --- a/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs @@ -146,7 +146,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets mesh = m_assetService.GetCached(meshID.ToString()); if (mesh != null) { - if (mesh.Type == (sbyte)49) //TODO: Change to AssetType.Mesh when libomv gets updated! + if (mesh.Type == (SByte)AssetType.Mesh) { responsedata["str_response_string"] = Convert.ToBase64String(mesh.Data); responsedata["content_type"] = "application/vnd.ll.mesh"; @@ -167,7 +167,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets mesh = m_assetService.Get(meshID.ToString()); if (mesh != null) { - if (mesh.Type == (sbyte)49) //TODO: Change to AssetType.Mesh when libomv gets updated! + if (mesh.Type == (SByte)AssetType.Mesh) { responsedata["str_response_string"] = Convert.ToBase64String(mesh.Data); responsedata["content_type"] = "application/vnd.ll.mesh"; diff --git a/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs b/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs index 35f054f..0d26036 100644 --- a/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs @@ -233,8 +233,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets } else if (inventoryType == "mesh") { - inType = 22; // TODO: Replace with appropriate type - assType = 49;// TODO: Replace with appropriate type + inType = (sbyte)InventoryType.Mesh; + assType = (sbyte)AssetType.Mesh; } AssetBase asset; -- cgit v1.1 From 2d88394cd59d9bf747b77c242b75bd923b0bc5af Mon Sep 17 00:00:00 2001 From: dahlia Date: Thu, 14 Oct 2010 13:10:03 -0700 Subject: laying some groundwork for mesh physics --- OpenSim/Region/Physics/Meshing/Meshmerizer.cs | 150 ++++++++++++++------------ 1 file changed, 80 insertions(+), 70 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs index cf57c0a..e1203ea 100644 --- a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs +++ b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs @@ -256,102 +256,112 @@ namespace OpenSim.Region.Physics.Meshing PrimMesh primMesh; PrimMesher.SculptMesh sculptMesh; - List coords; - List faces; + List coords = new List(); + List faces = new List(); Image idata = null; string decodedSculptFileName = ""; if (primShape.SculptEntry) { - if (cacheSculptMaps && primShape.SculptTexture != UUID.Zero) + if (((OpenMetaverse.SculptType)primShape.SculptType) == SculptType.Mesh) + { + // add code for mesh physics proxy generation here + m_log.Debug("[MESH]: mesh proxy generation not implemented yet "); + return null; + + } + else { - decodedSculptFileName = System.IO.Path.Combine(decodedSculptMapPath, "smap_" + primShape.SculptTexture.ToString()); - try + if (cacheSculptMaps && primShape.SculptTexture != UUID.Zero) { - if (File.Exists(decodedSculptFileName)) + decodedSculptFileName = System.IO.Path.Combine(decodedSculptMapPath, "smap_" + primShape.SculptTexture.ToString()); + try { - idata = Image.FromFile(decodedSculptFileName); + if (File.Exists(decodedSculptFileName)) + { + idata = Image.FromFile(decodedSculptFileName); + } } - } - catch (Exception e) - { - m_log.Error("[SCULPT]: unable to load cached sculpt map " + decodedSculptFileName + " " + e.Message); + catch (Exception e) + { + m_log.Error("[SCULPT]: unable to load cached sculpt map " + decodedSculptFileName + " " + e.Message); + } + //if (idata != null) + // m_log.Debug("[SCULPT]: loaded cached map asset for map ID: " + primShape.SculptTexture.ToString()); } - //if (idata != null) - // m_log.Debug("[SCULPT]: loaded cached map asset for map ID: " + primShape.SculptTexture.ToString()); - } - if (idata == null) - { - if (primShape.SculptData == null || primShape.SculptData.Length == 0) - return null; - - try + if (idata == null) { - OpenMetaverse.Imaging.ManagedImage unusedData; - OpenMetaverse.Imaging.OpenJPEG.DecodeToImage(primShape.SculptData, out unusedData, out idata); - unusedData = null; + if (primShape.SculptData == null || primShape.SculptData.Length == 0) + return null; + + try + { + OpenMetaverse.Imaging.ManagedImage unusedData; + OpenMetaverse.Imaging.OpenJPEG.DecodeToImage(primShape.SculptData, out unusedData, out idata); + unusedData = null; - //idata = CSJ2K.J2kImage.FromBytes(primShape.SculptData); + //idata = CSJ2K.J2kImage.FromBytes(primShape.SculptData); - if (cacheSculptMaps && idata != null) + if (cacheSculptMaps && idata != null) + { + try { idata.Save(decodedSculptFileName, ImageFormat.MemoryBmp); } + catch (Exception e) { m_log.Error("[SCULPT]: unable to cache sculpt map " + decodedSculptFileName + " " + e.Message); } + } + } + catch (DllNotFoundException) { - try { idata.Save(decodedSculptFileName, ImageFormat.MemoryBmp); } - catch (Exception e) { m_log.Error("[SCULPT]: unable to cache sculpt map " + decodedSculptFileName + " " + e.Message); } + m_log.Error("[PHYSICS]: OpenJpeg is not installed correctly on this system. Physics Proxy generation failed. Often times this is because of an old version of GLIBC. You must have version 2.4 or above!"); + return null; + } + catch (IndexOutOfRangeException) + { + m_log.Error("[PHYSICS]: OpenJpeg was unable to decode this. Physics Proxy generation failed"); + return null; + } + catch (Exception ex) + { + m_log.Error("[PHYSICS]: Unable to generate a Sculpty physics proxy. Sculpty texture decode failed: " + ex.Message); + return null; } } - catch (DllNotFoundException) - { - m_log.Error("[PHYSICS]: OpenJpeg is not installed correctly on this system. Physics Proxy generation failed. Often times this is because of an old version of GLIBC. You must have version 2.4 or above!"); - return null; - } - catch (IndexOutOfRangeException) - { - m_log.Error("[PHYSICS]: OpenJpeg was unable to decode this. Physics Proxy generation failed"); - return null; - } - catch (Exception ex) + + PrimMesher.SculptMesh.SculptType sculptType; + switch ((OpenMetaverse.SculptType)primShape.SculptType) { - m_log.Error("[PHYSICS]: Unable to generate a Sculpty physics proxy. Sculpty texture decode failed: " + ex.Message); - return null; + case OpenMetaverse.SculptType.Cylinder: + sculptType = PrimMesher.SculptMesh.SculptType.cylinder; + break; + case OpenMetaverse.SculptType.Plane: + sculptType = PrimMesher.SculptMesh.SculptType.plane; + break; + case OpenMetaverse.SculptType.Torus: + sculptType = PrimMesher.SculptMesh.SculptType.torus; + break; + case OpenMetaverse.SculptType.Sphere: + sculptType = PrimMesher.SculptMesh.SculptType.sphere; + break; + default: + sculptType = PrimMesher.SculptMesh.SculptType.plane; + break; } - } - PrimMesher.SculptMesh.SculptType sculptType; - switch ((OpenMetaverse.SculptType)primShape.SculptType) - { - case OpenMetaverse.SculptType.Cylinder: - sculptType = PrimMesher.SculptMesh.SculptType.cylinder; - break; - case OpenMetaverse.SculptType.Plane: - sculptType = PrimMesher.SculptMesh.SculptType.plane; - break; - case OpenMetaverse.SculptType.Torus: - sculptType = PrimMesher.SculptMesh.SculptType.torus; - break; - case OpenMetaverse.SculptType.Sphere: - sculptType = PrimMesher.SculptMesh.SculptType.sphere; - break; - default: - sculptType = PrimMesher.SculptMesh.SculptType.plane; - break; - } + bool mirror = ((primShape.SculptType & 128) != 0); + bool invert = ((primShape.SculptType & 64) != 0); - bool mirror = ((primShape.SculptType & 128) != 0); - bool invert = ((primShape.SculptType & 64) != 0); + sculptMesh = new PrimMesher.SculptMesh((Bitmap)idata, sculptType, (int)lod, false, mirror, invert); + + idata.Dispose(); - sculptMesh = new PrimMesher.SculptMesh((Bitmap)idata, sculptType, (int)lod, false, mirror, invert); - - idata.Dispose(); + sculptMesh.DumpRaw(baseDir, primName, "primMesh"); - sculptMesh.DumpRaw(baseDir, primName, "primMesh"); + sculptMesh.Scale(size.X, size.Y, size.Z); - sculptMesh.Scale(size.X, size.Y, size.Z); - - coords = sculptMesh.coords; - faces = sculptMesh.faces; + coords = sculptMesh.coords; + faces = sculptMesh.faces; + } } else { -- cgit v1.1 From bcdd03c1cfcfab72d6ee4199bd1232ff3a748d6e Mon Sep 17 00:00:00 2001 From: dahlia Date: Thu, 14 Oct 2010 20:25:31 -0700 Subject: more work in progress on mesh physics - still non-functional --- OpenSim/Region/Physics/Meshing/Meshmerizer.cs | 69 ++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 2 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs index e1203ea..df44be3 100644 --- a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs +++ b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs @@ -30,9 +30,11 @@ using System; using System.Collections.Generic; using OpenSim.Framework; using OpenSim.Region.Physics.Manager; -using OpenMetaverse; +using OpenMetaverse; +using OpenMetaverse.StructuredData; using System.Drawing; -using System.Drawing.Imaging; +using System.Drawing.Imaging; +using System.IO.Compression; using PrimMesher; using log4net; using Nini.Config; @@ -268,6 +270,69 @@ namespace OpenSim.Region.Physics.Meshing { // add code for mesh physics proxy generation here m_log.Debug("[MESH]: mesh proxy generation not implemented yet "); + + OSD meshOsd; + + if (primShape.SculptData.Length > 0) + { + + + m_log.Debug("[MESH]: asset data length: " + primShape.SculptData.Length.ToString()); + byte[] header = Util.StringToBytes256(""); + + ////dump to debugging file + //string filename = System.IO.Path.Combine(decodedSculptMapPath, "mesh_" + primShape.SculptTexture.ToString()); + //BinaryWriter writer = new BinaryWriter(File.Open(filename, FileMode.Create)); + //writer.Write(primShape.SculptData); + //writer.Close(); + + } + else + { + m_log.Error("[MESH]: asset data is zero length"); + return null; + } + + try + { + meshOsd = OSDParser.DeserializeLLSDBinary(primShape.SculptData, true); + } + catch (Exception e) + { + m_log.Error("[MESH]: exception decoding mesh asset: " + e.ToString()); + return null; + } + + if (meshOsd is OSDMap) + { + OSDMap map = (OSDMap)meshOsd; + //foreach (string name in map.Keys) + // m_log.Debug("[MESH]: key:" + name + " value:" + map[name].AsString()); + OSDMap physicsParms = (OSDMap)map["physics_shape"]; + int physOffset = physicsParms["offset"].AsInteger(); + int physSize = physicsParms["size"].AsInteger(); + + if (physOffset < 0 || physSize == 0) + return null; // no mesh data in asset + + m_log.Debug("[MESH]: physOffset:" + physOffset.ToString() + " physSize:" + physSize.ToString()); + //MemoryStream ms = new MemoryStream(primShape.SculptData, physOffset, physSize); + //GZipStream gzStream = new GZipStream(ms, CompressionMode.Decompress); + + //int maxSize = physSize * 5; // arbitrary guess + //byte[] readBuffer = new byte[maxSize]; + + //int bytesRead = gzStream.Read(readBuffer, 0, maxSize); + + //OSD physMeshOsd = OSDParser.DeserializeLLSDBinary(readBuffer); + + + + + + } + + //just bail out for now until mesh code is finished return null; } -- cgit v1.1 From 0308982c58c16bfa005a401d0345b2e58b759c44 Mon Sep 17 00:00:00 2001 From: Teravus Ovares (Dan Olivares) Date: Thu, 14 Oct 2010 23:32:33 -0400 Subject: one more silly line ending thing.... *If you have problems, fetch the tree and rebase. Signed-off-by: Teravus Ovares (Dan Olivares) --- OpenSim/Region/Physics/Meshing/Meshmerizer.cs | 142 +++++++++++++------------- 1 file changed, 71 insertions(+), 71 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs index df44be3..3e3a0f0 100644 --- a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs +++ b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs @@ -30,10 +30,10 @@ using System; using System.Collections.Generic; using OpenSim.Framework; using OpenSim.Region.Physics.Manager; -using OpenMetaverse; +using OpenMetaverse; using OpenMetaverse.StructuredData; using System.Drawing; -using System.Drawing.Imaging; +using System.Drawing.Imaging; using System.IO.Compression; using PrimMesher; using log4net; @@ -266,75 +266,75 @@ namespace OpenSim.Region.Physics.Meshing if (primShape.SculptEntry) { - if (((OpenMetaverse.SculptType)primShape.SculptType) == SculptType.Mesh) - { - // add code for mesh physics proxy generation here - m_log.Debug("[MESH]: mesh proxy generation not implemented yet "); - - OSD meshOsd; - - if (primShape.SculptData.Length > 0) - { - - - m_log.Debug("[MESH]: asset data length: " + primShape.SculptData.Length.ToString()); - byte[] header = Util.StringToBytes256(""); - - ////dump to debugging file - //string filename = System.IO.Path.Combine(decodedSculptMapPath, "mesh_" + primShape.SculptTexture.ToString()); - //BinaryWriter writer = new BinaryWriter(File.Open(filename, FileMode.Create)); - //writer.Write(primShape.SculptData); - //writer.Close(); - - } - else - { - m_log.Error("[MESH]: asset data is zero length"); - return null; - } - - try - { - meshOsd = OSDParser.DeserializeLLSDBinary(primShape.SculptData, true); - } - catch (Exception e) - { - m_log.Error("[MESH]: exception decoding mesh asset: " + e.ToString()); - return null; - } - - if (meshOsd is OSDMap) - { - OSDMap map = (OSDMap)meshOsd; - //foreach (string name in map.Keys) - // m_log.Debug("[MESH]: key:" + name + " value:" + map[name].AsString()); - OSDMap physicsParms = (OSDMap)map["physics_shape"]; - int physOffset = physicsParms["offset"].AsInteger(); - int physSize = physicsParms["size"].AsInteger(); - - if (physOffset < 0 || physSize == 0) - return null; // no mesh data in asset - - m_log.Debug("[MESH]: physOffset:" + physOffset.ToString() + " physSize:" + physSize.ToString()); - //MemoryStream ms = new MemoryStream(primShape.SculptData, physOffset, physSize); - //GZipStream gzStream = new GZipStream(ms, CompressionMode.Decompress); - - //int maxSize = physSize * 5; // arbitrary guess - //byte[] readBuffer = new byte[maxSize]; - - //int bytesRead = gzStream.Read(readBuffer, 0, maxSize); - - //OSD physMeshOsd = OSDParser.DeserializeLLSDBinary(readBuffer); - - - - - - } - - //just bail out for now until mesh code is finished - return null; - + if (((OpenMetaverse.SculptType)primShape.SculptType) == SculptType.Mesh) + { + // add code for mesh physics proxy generation here + m_log.Debug("[MESH]: mesh proxy generation not implemented yet "); + + OSD meshOsd; + + if (primShape.SculptData.Length > 0) + { + + + m_log.Debug("[MESH]: asset data length: " + primShape.SculptData.Length.ToString()); + byte[] header = Util.StringToBytes256(""); + + ////dump to debugging file + //string filename = System.IO.Path.Combine(decodedSculptMapPath, "mesh_" + primShape.SculptTexture.ToString()); + //BinaryWriter writer = new BinaryWriter(File.Open(filename, FileMode.Create)); + //writer.Write(primShape.SculptData); + //writer.Close(); + + } + else + { + m_log.Error("[MESH]: asset data is zero length"); + return null; + } + + try + { + meshOsd = OSDParser.DeserializeLLSDBinary(primShape.SculptData, true); + } + catch (Exception e) + { + m_log.Error("[MESH]: exception decoding mesh asset: " + e.ToString()); + return null; + } + + if (meshOsd is OSDMap) + { + OSDMap map = (OSDMap)meshOsd; + //foreach (string name in map.Keys) + // m_log.Debug("[MESH]: key:" + name + " value:" + map[name].AsString()); + OSDMap physicsParms = (OSDMap)map["physics_shape"]; + int physOffset = physicsParms["offset"].AsInteger(); + int physSize = physicsParms["size"].AsInteger(); + + if (physOffset < 0 || physSize == 0) + return null; // no mesh data in asset + + m_log.Debug("[MESH]: physOffset:" + physOffset.ToString() + " physSize:" + physSize.ToString()); + //MemoryStream ms = new MemoryStream(primShape.SculptData, physOffset, physSize); + //GZipStream gzStream = new GZipStream(ms, CompressionMode.Decompress); + + //int maxSize = physSize * 5; // arbitrary guess + //byte[] readBuffer = new byte[maxSize]; + + //int bytesRead = gzStream.Read(readBuffer, 0, maxSize); + + //OSD physMeshOsd = OSDParser.DeserializeLLSDBinary(readBuffer); + + + + + + } + + //just bail out for now until mesh code is finished + return null; + } else { -- cgit v1.1 From cd4d7a7c351ad78c13805374b46ea8168568d89e Mon Sep 17 00:00:00 2001 From: Latif Khalifa Date: Fri, 15 Oct 2010 07:24:57 +0200 Subject: A couple of more ways attachment point is sent Signed-off-by: Teravus Ovares (Dan Olivares) --- .../Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index 51197d2..2a0c0b1 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs @@ -113,6 +113,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments if (!m_scene.Permissions.CanTakeObject(part.UUID, remoteClient.AgentId)) return; + // TODO: this short circuits multiple attachments functionality in LL viewer 2.1+ and should + // be removed when that functionality is implemented in opensim + AttachmentPt &= 0x7f; + // Calls attach with a Zero position if (AttachObject(remoteClient, part.ParentGroup, AttachmentPt, false)) { @@ -142,6 +146,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments if (m_scene.Permissions.CanTakeObject(group.UUID, remoteClient.AgentId)) { + // TODO: this short circuits multiple attachments functionality in LL viewer 2.1+ and should + // be removed when that functionality is implemented in opensim + AttachmentPt &= 0x7f; + // If the attachment point isn't the same as the one previously used // set it's offset position = 0 so that it appears on the attachment point // and not in a weird location somewhere unknown. -- cgit v1.1