mirror of
https://github.com/aaru-dps/Aaru.Server.git
synced 2025-12-16 19:24:27 +00:00
Show decoded and hex view of data taken from tested media.
This commit is contained in:
Submodule DiscImageChef.Helpers updated: d6f8938721...6937468728
@@ -1,10 +1,20 @@
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
using DiscImageChef.CommonTypes.Metadata;
|
||||
using DiscImageChef.Decoders.ATA;
|
||||
using DiscImageChef.Decoders.Bluray;
|
||||
using DiscImageChef.Decoders.CD;
|
||||
using DiscImageChef.Decoders.DVD;
|
||||
using DiscImageChef.Decoders.SCSI;
|
||||
using DiscImageChef.Server.Models;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Cartridge = DiscImageChef.Decoders.Bluray.Cartridge;
|
||||
using DDS = DiscImageChef.Decoders.Bluray.DDS;
|
||||
using DMI = DiscImageChef.Decoders.Xbox.DMI;
|
||||
using Spare = DiscImageChef.Decoders.Bluray.Spare;
|
||||
|
||||
namespace DiscImageChef.Server.Areas.Admin.Controllers
|
||||
{
|
||||
@@ -125,5 +135,335 @@ namespace DiscImageChef.Server.Areas.Admin.Controllers
|
||||
}
|
||||
|
||||
bool TestedMediaExists(int id) => _context.TestedMedia.Any(e => e.Id == id);
|
||||
|
||||
/* public static string Zero(int n, int max)
|
||||
{
|
||||
var s = $"{n:X}";
|
||||
|
||||
while(s.Length < max)
|
||||
s = '0' + s;
|
||||
|
||||
return s;
|
||||
}*/
|
||||
|
||||
public IActionResult ViewData(int id, string data)
|
||||
{
|
||||
if(string.IsNullOrWhiteSpace(data))
|
||||
return NotFound();
|
||||
|
||||
TestedMedia testedMedia = _context.TestedMedia.FirstOrDefault(m => m.Id == id);
|
||||
|
||||
if(testedMedia == null)
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
var model = new TestedMediaDataModel
|
||||
{
|
||||
TestedMediaId = id, DataName = data
|
||||
};
|
||||
|
||||
byte[] buffer;
|
||||
|
||||
switch(data)
|
||||
{
|
||||
case nameof(testedMedia.AdipData):
|
||||
buffer = testedMedia.AdipData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.AtipData):
|
||||
buffer = testedMedia.AtipData;
|
||||
model.Decoded = ATIP.Prettify(buffer);
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.BluBcaData):
|
||||
buffer = testedMedia.BluBcaData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.BluDdsData):
|
||||
buffer = testedMedia.BluDdsData;
|
||||
model.Decoded = DDS.Prettify(buffer);
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.BluDiData):
|
||||
buffer = testedMedia.BluDiData;
|
||||
model.Decoded = DI.Prettify(buffer);
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.BluPacData):
|
||||
buffer = testedMedia.BluPacData;
|
||||
model.Decoded = Cartridge.Prettify(buffer);
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.BluSaiData):
|
||||
buffer = testedMedia.BluSaiData;
|
||||
model.Decoded = Spare.Prettify(buffer);
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.C2PointersData):
|
||||
buffer = testedMedia.C2PointersData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.CmiData):
|
||||
buffer = testedMedia.CmiData;
|
||||
model.Decoded = CSS_CPRM.PrettifyLeadInCopyright(buffer);
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.CorrectedSubchannelData):
|
||||
buffer = testedMedia.CorrectedSubchannelData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.CorrectedSubchannelWithC2Data):
|
||||
buffer = testedMedia.CorrectedSubchannelWithC2Data;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.DcbData):
|
||||
buffer = testedMedia.DcbData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.DmiData):
|
||||
buffer = testedMedia.DmiData;
|
||||
|
||||
if(DMI.IsXbox(buffer))
|
||||
model.Decoded = DMI.PrettifyXbox(buffer);
|
||||
else if(DMI.IsXbox360(buffer))
|
||||
model.Decoded = DMI.PrettifyXbox360(buffer);
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.DvdAacsData):
|
||||
buffer = testedMedia.DvdAacsData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.DvdBcaData):
|
||||
buffer = testedMedia.DvdBcaData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.DvdDdsData):
|
||||
buffer = testedMedia.DvdDdsData;
|
||||
model.Decoded = Decoders.DVD.DDS.Prettify(buffer);
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.DvdLayerData):
|
||||
buffer = testedMedia.DvdLayerData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.DvdSaiData):
|
||||
buffer = testedMedia.DvdSaiData;
|
||||
model.Decoded = Decoders.DVD.Spare.Prettify(buffer);
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.EmbossedPfiData):
|
||||
buffer = testedMedia.EmbossedPfiData;
|
||||
model.Decoded = PFI.Prettify(buffer);
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.FullTocData):
|
||||
buffer = testedMedia.FullTocData;
|
||||
model.Decoded = FullTOC.Prettify(buffer);
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.HdCmiData):
|
||||
buffer = testedMedia.HdCmiData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.HLDTSTReadRawDVDData):
|
||||
buffer = testedMedia.HLDTSTReadRawDVDData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.IdentifyData):
|
||||
buffer = testedMedia.IdentifyData;
|
||||
model.Decoded = Identify.Prettify(buffer);
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.IntersessionLeadInData):
|
||||
buffer = testedMedia.IntersessionLeadInData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.IntersessionLeadOutData):
|
||||
buffer = testedMedia.IntersessionLeadOutData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.LeadInData):
|
||||
buffer = testedMedia.LeadInData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.LeadOutData):
|
||||
buffer = testedMedia.LeadOutData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ModeSense6Data):
|
||||
buffer = testedMedia.ModeSense6Data;
|
||||
model.Decoded = Modes.PrettifyModeHeader6(buffer, PeripheralDeviceTypes.DirectAccess);
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ModeSense10Data):
|
||||
buffer = testedMedia.ModeSense10Data;
|
||||
model.Decoded = Modes.PrettifyModeHeader10(buffer, PeripheralDeviceTypes.DirectAccess);
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.NecReadCddaData):
|
||||
buffer = testedMedia.NecReadCddaData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.PfiData):
|
||||
buffer = testedMedia.PfiData;
|
||||
model.Decoded = PFI.Prettify(buffer);
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.PioneerReadCddaData):
|
||||
buffer = testedMedia.PioneerReadCddaData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.PioneerReadCddaMsfData):
|
||||
buffer = testedMedia.PioneerReadCddaMsfData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.PlextorReadCddaData):
|
||||
buffer = testedMedia.PlextorReadCddaData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.PlextorReadRawDVDData):
|
||||
buffer = testedMedia.PlextorReadRawDVDData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.PmaData):
|
||||
buffer = testedMedia.PmaData;
|
||||
model.Decoded = PMA.Prettify(buffer);
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.PQSubchannelData):
|
||||
buffer = testedMedia.PQSubchannelData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.PQSubchannelWithC2Data):
|
||||
buffer = testedMedia.PQSubchannelWithC2Data;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.PriData):
|
||||
buffer = testedMedia.PriData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.Read6Data):
|
||||
buffer = testedMedia.Read6Data;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.Read10Data):
|
||||
buffer = testedMedia.Read10Data;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.Read12Data):
|
||||
buffer = testedMedia.Read12Data;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.Read16Data):
|
||||
buffer = testedMedia.Read16Data;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ReadCdData):
|
||||
buffer = testedMedia.ReadCdData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ReadCdFullData):
|
||||
buffer = testedMedia.ReadCdFullData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ReadCdMsfData):
|
||||
buffer = testedMedia.ReadCdMsfData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ReadDmaData):
|
||||
buffer = testedMedia.ReadDmaData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ReadDmaLba48Data):
|
||||
buffer = testedMedia.ReadDmaLba48Data;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ReadDmaLbaData):
|
||||
buffer = testedMedia.ReadDmaLbaData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ReadDmaRetryData):
|
||||
buffer = testedMedia.ReadDmaRetryData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ReadDmaRetryLbaData):
|
||||
buffer = testedMedia.ReadDmaRetryLbaData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ReadLba48Data):
|
||||
buffer = testedMedia.ReadLba48Data;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ReadLbaData):
|
||||
buffer = testedMedia.ReadLbaData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ReadLong10Data):
|
||||
buffer = testedMedia.ReadLong10Data;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ReadLong16Data):
|
||||
buffer = testedMedia.ReadLong16Data;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ReadLongData):
|
||||
buffer = testedMedia.ReadLongData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ReadLongLbaData):
|
||||
buffer = testedMedia.ReadLongLbaData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ReadLongRetryData):
|
||||
buffer = testedMedia.ReadLongRetryData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ReadLongRetryLbaData):
|
||||
buffer = testedMedia.ReadLongRetryLbaData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ReadRetryLbaData):
|
||||
buffer = testedMedia.ReadRetryLbaData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ReadSectorsData):
|
||||
buffer = testedMedia.ReadSectorsData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.ReadSectorsRetryData):
|
||||
buffer = testedMedia.ReadSectorsRetryData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.RWSubchannelData):
|
||||
buffer = testedMedia.RWSubchannelData;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.RWSubchannelWithC2Data):
|
||||
buffer = testedMedia.RWSubchannelWithC2Data;
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.TocData):
|
||||
buffer = testedMedia.TocData;
|
||||
model.Decoded = TOC.Prettify(buffer);
|
||||
|
||||
break;
|
||||
case nameof(testedMedia.Track1PregapData):
|
||||
buffer = testedMedia.Track1PregapData;
|
||||
|
||||
break;
|
||||
default: return NotFound();
|
||||
}
|
||||
|
||||
model.RawDataAsHex = PrintHex.ByteArrayToHexArrayString(buffer);
|
||||
|
||||
if(model.RawDataAsHex != null)
|
||||
model.RawDataAsHex = HttpUtility.HtmlEncode(model.RawDataAsHex).Replace("\n", "<br/>");
|
||||
|
||||
if(model.Decoded != null)
|
||||
model.Decoded = HttpUtility.HtmlEncode(model.Decoded).Replace("\n", "<br/>");
|
||||
|
||||
return View(model);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
@model TestedMediaDataModel
|
||||
|
||||
@{
|
||||
ViewBag.Title = $"{Model.DataName} data";
|
||||
Layout = "_Layout";
|
||||
}
|
||||
<h2>Showing data from @Model.DataName for tested media id @Model.TestedMediaId</h2>
|
||||
@if (Model.Decoded is null &&
|
||||
Model.RawDataAsHex is null)
|
||||
{
|
||||
<div>No data found</div>
|
||||
}
|
||||
|
||||
@if (Model.RawDataAsHex != null)
|
||||
{
|
||||
<h4>Hex dump:</h4>
|
||||
<div>
|
||||
<code style="white-space: pre">@Html.Raw(Model.RawDataAsHex)</code>
|
||||
</div>
|
||||
}
|
||||
|
||||
|
||||
@if (Model.Decoded != null)
|
||||
{
|
||||
<h4>Decoded information:</h4>
|
||||
<div>
|
||||
@Html.Raw(Model.Decoded)
|
||||
</div>
|
||||
}
|
||||
10
DiscImageChef.Server/Models/TestedMediaDataModel.cs
Normal file
10
DiscImageChef.Server/Models/TestedMediaDataModel.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
namespace DiscImageChef.Server.Models
|
||||
{
|
||||
public class TestedMediaDataModel
|
||||
{
|
||||
public int TestedMediaId { get; set; }
|
||||
public string DataName { get; set; }
|
||||
public string RawDataAsHex { get; set; }
|
||||
public string Decoded { get; set; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user