/// <summary> /// Handle a fetch request for media textures /// </summary> /// <param name="omr"></param> /// <returns></returns> protected byte[] HandleObjectMediaRequest(ObjectMediaRequest omr) { UUID primId = omr.PrimID; ISceneChildEntity part = m_scene.GetSceneObjectPart(primId); if (null == part) { MainConsole.Instance.WarnFormat( "[MOAP]: Received a GET ObjectMediaRequest for prim {0} but this doesn't exist in region {1}", primId, m_scene.RegionInfo.RegionName); return(MainServer.BlankResponse); } ObjectMediaResponse resp = new ObjectMediaResponse { PrimID = primId, FaceMedia = new PrimitiveBaseShape.MediaList().ToArray(), Version = "x-mv:0000000001/00000000-0000-0000-0000-000000000000" }; if (null != part.Shape.Media) { lock (part.Shape.Media) resp.FaceMedia = part.Shape.Media.ToArray(); resp.Version = part.MediaUrl; } return(OSDParser.SerializeLLSDXmlBytes(resp.Serialize())); }
/// <summary> /// Handle a fetch request for media textures /// </summary> /// <param name = "omr"></param> /// <returns></returns> protected string HandleObjectMediaRequest(ObjectMediaRequest omr) { UUID primId = omr.PrimID; ISceneChildEntity part = m_scene.GetSceneObjectPart(primId); if (null == part) { MainConsole.Instance.WarnFormat( "[MOAP]: Received a GET ObjectMediaRequest for prim {0} but this doesn't exist in region {1}", primId, m_scene.RegionInfo.RegionName); return(string.Empty); } ObjectMediaResponse resp = new ObjectMediaResponse { PrimID = primId, FaceMedia = new PrimitiveBaseShape.MediaList().ToArray(), Version = "x-mv:0000000001/00000000-0000-0000-0000-000000000000" }; if (null != part.Shape.Media) { lock (part.Shape.Media) resp.FaceMedia = part.Shape.Media.ToArray(); resp.Version = part.MediaUrl; } string rawResp = OSDParser.SerializeLLSDXmlString(resp.Serialize()); // MainConsole.Instance.DebugFormat("[MOAP]: Got HandleObjectMediaRequestGet raw response is [{0}]", rawResp); return(rawResp); }
/// <summary> /// Handle a fetch request for media textures /// </summary> /// <param name="omr"></param> /// <returns></returns> protected string HandleObjectMediaRequest(ObjectMediaRequest omr) { UUID primId = omr.PrimID; SceneObjectPart part = m_scene.GetSceneObjectPart(primId); if (null == part) { m_log.WarnFormat( "[MOAP]: Received a GET ObjectMediaRequest for prim {0} but this doesn't exist in region {1}", primId, m_scene.RegionInfo.RegionName); return(string.Empty); } if (null == part.Shape.Media) { return(string.Empty); } ObjectMediaResponse resp = new ObjectMediaResponse(); resp.PrimID = primId; lock (part.Shape.Media) resp.FaceMedia = part.Shape.Media.ToArray(); resp.Version = part.MediaUrl; string rawResp = OSDParser.SerializeLLSDXmlString(resp.Serialize()); // m_log.DebugFormat("[MOAP]: Got HandleObjectMediaRequestGet raw response is [{0}]", rawResp); return(rawResp); }
/// <summary> /// Handle a fetch request for media textures /// </summary> /// <param name="omr"></param> /// <returns></returns> protected string HandleObjectMediaRequest(ObjectMediaRequest omr) { UUID primId = omr.PrimID; SceneObjectPart part = m_scene.GetSceneObjectPart(primId); if (null == part) { m_log.WarnFormat( "[MOAP]: Received a GET ObjectMediaRequest for prim {0} but this doesn't exist in region {1}", primId, m_scene.RegionInfo.RegionName); return(string.Empty); } if (part.Shape.Media == null) { return(string.Empty); } MediaEntry[] currentML = part.Shape.Media.ToArray(); int nentries = currentML.Length; int nsides = part.GetNumberOfSides(); if (nentries > nsides) { nentries = nsides; } Primitive.TextureEntry te = part.Shape.Textures; bool isnull = true; for (int face = 0; face < nentries; ++face) { Primitive.TextureEntryFace teFace = te.GetFace((uint)face); if (!teFace.MediaFlags) { currentML[face] = null; } else { isnull = false; } } if (isnull) { //remove the damm thing part.Shape.Media = null; part.MediaUrl = null; return(string.Empty); } ObjectMediaResponse resp = new ObjectMediaResponse(); resp.PrimID = primId; resp.FaceMedia = currentML; resp.Version = part.MediaUrl; string rawResp = OSDParser.SerializeLLSDXmlString(resp.Serialize()); // m_log.DebugFormat("[MOAP]: Got HandleObjectMediaRequestGet raw response is [{0}]", rawResp); return(rawResp); }
private void ObjectMediaHandler(Capability cap, IHttpClientContext context, IHttpRequest request, IHttpResponse response) { ObjectMediaMessage message; if (LLUtil.TryGetMessage <ObjectMediaMessage>(request.Body, out message)) { if (message.Request is ObjectMediaRequest) { ObjectMediaRequest mediaRequest = (ObjectMediaRequest)message.Request; ISceneEntity entity; if (m_scene.TryGetEntity(mediaRequest.PrimID, out entity) && entity is LLPrimitive) { LLPrimitive prim = (LLPrimitive)entity; ObjectMediaResponse reply = new ObjectMediaResponse(); reply.PrimID = prim.ID; reply.FaceMedia = prim.Prim.FaceMedia ?? new MediaEntry[0]; reply.Version = prim.Prim.MediaVersion ?? String.Empty; LLUtil.SendLLSDXMLResponse(response, reply.Serialize()); } else { m_log.Warn("Received an ObjectMedia request for unknown prim " + mediaRequest.PrimID); } } else if (message.Request is ObjectMediaUpdate) { ObjectMediaUpdate update = (ObjectMediaUpdate)message.Request; ISceneEntity entity; if (m_scene.TryGetEntity(update.PrimID, out entity) && entity is LLPrimitive) { LLPrimitive prim = (LLPrimitive)entity; int lastVersion = ParseMediaVersion(prim.Prim.MediaVersion); prim.Prim.FaceMedia = update.FaceMedia; prim.Prim.MediaVersion = CreateMediaVersion(lastVersion + 1, cap.OwnerID); // Set the CurrentURL fields for (int i = 0; i < prim.Prim.FaceMedia.Length; i++) { MediaEntry entry = prim.Prim.FaceMedia[i]; if (entry != null && String.IsNullOrEmpty(entry.CurrentURL)) { entry.CurrentURL = entry.HomeURL; } } // Set the texture face media flags for (int i = 0; i < prim.Prim.Textures.FaceTextures.Length; i++) { Primitive.TextureEntryFace face = prim.Prim.Textures.FaceTextures[i]; MediaEntry entry = (update.FaceMedia.Length > i) ? update.FaceMedia[i] : null; if (entry != null) { if (face == null) { face = prim.Prim.Textures.CreateFace((uint)i); } face.MediaFlags = true; } else if (face != null) { face.MediaFlags = false; } } m_scene.EntityAddOrUpdate(this, prim, UpdateFlags.FullUpdate, 0); } else { m_log.Warn("Could not update ObjectMedia for " + update.PrimID + ", prim not found"); } } else { m_log.Warn("Unrecognized ObjectMedia message: " + message.Request); } } else { m_log.Warn("Received invalid data for ObjectMedia"); response.Status = System.Net.HttpStatusCode.BadRequest; } }