public static object DeleteObject(object msg) { DeleteObjectMessage data = (DeleteObjectMessage)msg; switch (data.type) { case "node": NetUtil.ReleaseNode((ushort)data.id); break; case "segment": NetUtil.ReleaseSegment((ushort)data.id, !data.keep_nodes); break; case "building": ManagersUtil.ReleaseBuilding((ushort)data.id); break; case "prop": ManagersUtil.ReleaseProp((ushort)data.id); break; case "tree": ManagersUtil.ReleaseTree(data.id); break; default: throw new Exception("Unknown type '" + data.type + "'"); } return(GetObjectFromIdInternal(data.id, null, data.type)); }
public override byte[] Handle(string path, Stream request, OSHttpRequest httpRequest, OSHttpResponse httpResponse) { OSDMap map; if (ServiceHelper.TryGetOSD(httpRequest, out map)) { DeleteObjectMessage message = new DeleteObjectMessage(); message.Deserialize(map); DeleteObjectReplyMessage reply = new DeleteObjectReplyMessage(); UUID ownerID = CableBeachUtils.MessageToUUID(message.Identity, message.AgentID); InventoryFolderBase folder = new InventoryFolderBase(message.ObjectID, ownerID); if (m_InventoryService.GetFolder(folder) != null) { m_InventoryService.PurgeFolder(folder); reply.Success = m_InventoryService.DeleteFolders(ownerID, new List<UUID> { message.ObjectID }); if (!reply.Success) { m_log.Error("[CABLE BEACH INVENTORY]: failed to delete folder " + message.ObjectID); reply.Message = "failed to delete folder"; } } else { reply.Success = m_InventoryService.DeleteItems(ownerID, new List<UUID> { message.ObjectID }); if (!reply.Success) { m_log.Error("[CABLE BEACH INVENTORY]: failed to delete item " + message.ObjectID); reply.Message = "failed to delete item"; } } return ServiceHelper.MakeResponse(httpResponse, reply.Serialize()); } else { m_log.Error("[CABLE BEACH INVENTORY]: delete_object called with invalid data"); httpResponse.StatusCode = (int)HttpStatusCode.BadRequest; return Utils.EmptyBytes; } }