|
|
|
@ -27,8 +27,10 @@ public: |
|
|
|
{10200, &PlayReport::RequestImmediateTransmission, "RequestImmediateTransmission"}, |
|
|
|
{10300, &PlayReport::GetTransmissionStatus, "GetTransmissionStatus"}, |
|
|
|
{10400, &PlayReport::GetSystemSessionId, "GetSystemSessionId"}, |
|
|
|
{20100, &PlayReport::SaveSystemReport, "SaveSystemReport"}, |
|
|
|
{20101, &PlayReport::SaveSystemReportWithUser, "SaveSystemReportWithUser"}, |
|
|
|
{20100, &PlayReport::SaveSystemReportOld, "SaveSystemReport"}, |
|
|
|
{20101, &PlayReport::SaveSystemReportWithUserOld, "SaveSystemReportWithUser"}, |
|
|
|
{20102, &PlayReport::SaveSystemReport, "SaveSystemReport"}, |
|
|
|
{20103, &PlayReport::SaveSystemReportWithUser, "SaveSystemReportWithUser"}, |
|
|
|
{20200, nullptr, "SetOperationMode"}, |
|
|
|
{30100, nullptr, "ClearStorage"}, |
|
|
|
{30200, nullptr, "ClearStatistics"}, |
|
|
|
@ -121,24 +123,21 @@ private: |
|
|
|
rb.Push(system_session_id); |
|
|
|
} |
|
|
|
|
|
|
|
void SaveSystemReport(HLERequestContext& ctx) { |
|
|
|
void SaveSystemReportOld(HLERequestContext& ctx) { |
|
|
|
IPC::RequestParser rp{ctx}; |
|
|
|
const auto title_id = rp.PopRaw<u64>(); |
|
|
|
|
|
|
|
const auto data1 = ctx.ReadBufferA(0); |
|
|
|
const auto data2 = ctx.ReadBufferX(0); |
|
|
|
|
|
|
|
LOG_DEBUG(Service_PREPO, "called, title_id={:016X}, data1_size={:016X}, data2_size={:016X}", |
|
|
|
LOG_ERROR(Service_PREPO, "called, title_id={:016X}, data1_size={:016X}, data2_size={:016X}", |
|
|
|
title_id, data1.size(), data2.size()); |
|
|
|
|
|
|
|
const auto& reporter{system.GetReporter()}; |
|
|
|
reporter.SavePlayReport(Core::Reporter::PlayReportType::System, title_id, {data1, data2}); |
|
|
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
|
rb.Push(ResultSuccess); |
|
|
|
} |
|
|
|
|
|
|
|
void SaveSystemReportWithUser(HLERequestContext& ctx) { |
|
|
|
void SaveSystemReportWithUserOld(HLERequestContext& ctx) { |
|
|
|
IPC::RequestParser rp{ctx}; |
|
|
|
const auto user_id = rp.PopRaw<u128>(); |
|
|
|
const auto title_id = rp.PopRaw<u64>(); |
|
|
|
@ -146,7 +145,7 @@ private: |
|
|
|
const auto data1 = ctx.ReadBufferA(0); |
|
|
|
const auto data2 = ctx.ReadBufferX(0); |
|
|
|
|
|
|
|
LOG_DEBUG(Service_PREPO, |
|
|
|
LOG_ERROR(Service_PREPO, |
|
|
|
"called, user_id={:016X}{:016X}, title_id={:016X}, data1_size={:016X}, " |
|
|
|
"data2_size={:016X}", |
|
|
|
user_id[1], user_id[0], title_id, data1.size(), data2.size()); |
|
|
|
@ -158,6 +157,49 @@ private: |
|
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
|
rb.Push(ResultSuccess); |
|
|
|
} |
|
|
|
|
|
|
|
// (21.0.0+) buffers: [0x9 (X), 0x5 (A)], inbytes: 0x10
|
|
|
|
void SaveSystemReport(HLERequestContext& ctx) { |
|
|
|
IPC::RequestParser rp{ctx}; |
|
|
|
const auto field0 = rp.PopRaw<u64>(); |
|
|
|
const auto title_id = rp.PopRaw<u64>(); |
|
|
|
|
|
|
|
const auto data_x = ctx.ReadBufferX(0); |
|
|
|
const auto data_a = ctx.ReadBufferA(0); |
|
|
|
|
|
|
|
LOG_ERROR(Service_PREPO, |
|
|
|
"called, field0={}, title_id={:016X}, data_a_size={}, data_x_size={}", |
|
|
|
field0, title_id, data_a.size(), data_x.size()); |
|
|
|
|
|
|
|
const auto& reporter{system.GetReporter()}; |
|
|
|
reporter.SavePlayReport(Core::Reporter::PlayReportType::System, title_id, {data_a, data_x}); |
|
|
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
|
rb.Push(ResultSuccess); |
|
|
|
} |
|
|
|
|
|
|
|
// (21.0.0+) buffers: [0x9 (X), 0x5 (A)], inbytes: 0x20
|
|
|
|
void SaveSystemReportWithUser(HLERequestContext& ctx) { |
|
|
|
IPC::RequestParser rp{ctx}; |
|
|
|
|
|
|
|
const auto user_id = rp.PopRaw<u128>(); |
|
|
|
const auto title_id = rp.PopRaw<u64>(); |
|
|
|
const auto reserved = rp.PopRaw<u64>(); |
|
|
|
|
|
|
|
const auto data_x = ctx.ReadBufferX(0); |
|
|
|
const auto data_a = ctx.ReadBufferA(0); |
|
|
|
|
|
|
|
LOG_ERROR(Service_PREPO, |
|
|
|
"called, user_id={:016X}{:016X}, title_id={:016X}, reserved={}, data_a_size={}, data_x_size={}", |
|
|
|
user_id[1], user_id[0], title_id, reserved, data_a.size(), data_x.size()); |
|
|
|
|
|
|
|
const auto& reporter{system.GetReporter()}; |
|
|
|
reporter.SavePlayReport(Core::Reporter::PlayReportType::System, title_id, {data_a, data_x}, |
|
|
|
std::nullopt, user_id); |
|
|
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
|
rb.Push(ResultSuccess); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
void LoopProcess(Core::System& system) { |
|
|
|
|