/// <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) { 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; } ObjectMediaResponse resp = new ObjectMediaResponse(); resp.PrimID = primId; resp.FaceMedia = new OpenSim.Framework.PrimitiveBaseShape.MediaList().ToArray(); resp.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()); // 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 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.NoResponse; } 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; 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; }
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; } }