From b5b7e23fc41e7045f9e803d6926e98ec7d049f0c Mon Sep 17 00:00:00 2001 From: jduncanator <1518948+jduncanator@users.noreply.github.com> Date: Thu, 12 Aug 2021 05:16:42 +1000 Subject: [PATCH] hle: Tidy-up ServiceNotImplementedException (#2535) * hle: Simplify ServiceNotImplementedException This removes the need to pass in whether the command is a Tipc command or a Hipc command to the exception constructor. * hle: Use the IPC Message type to determine command type This allows differentiating between Tipc and Hipc commands when invoking a handler that supports handling both Tipc and Hipc commands. --- .../ServiceNotImplementedException.cs | 16 +++++------ Ryujinx.HLE/HOS/Services/IpcService.cs | 4 +-- .../HOS/Services/Nfc/Nfp/NfpManager/INfp.cs | 4 +-- Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs | 4 +-- .../HOS/Services/Sockets/Nsd/IManager.cs | 28 +++++++++---------- .../HOS/Services/Time/ITimeServiceManager.cs | 12 ++++---- 6 files changed, 33 insertions(+), 35 deletions(-) diff --git a/Ryujinx.HLE/Exceptions/ServiceNotImplementedException.cs b/Ryujinx.HLE/Exceptions/ServiceNotImplementedException.cs index b15ff22914..c9247cc147 100644 --- a/Ryujinx.HLE/Exceptions/ServiceNotImplementedException.cs +++ b/Ryujinx.HLE/Exceptions/ServiceNotImplementedException.cs @@ -18,28 +18,24 @@ namespace Ryujinx.HLE.Exceptions public ServiceCtx Context { get; } public IpcMessage Request { get; } - private bool _isTipcCommand; - - public ServiceNotImplementedException(IpcService service, ServiceCtx context, bool isTipcCommand) - : this(service, context, "The service call is not implemented.", isTipcCommand) + public ServiceNotImplementedException(IpcService service, ServiceCtx context) + : this(service, context, "The service call is not implemented.") { } - public ServiceNotImplementedException(IpcService service, ServiceCtx context, string message, bool isTipcCommand) + public ServiceNotImplementedException(IpcService service, ServiceCtx context, string message) : base(message) { Service = service; Context = context; Request = context.Request; - _isTipcCommand = isTipcCommand; } - public ServiceNotImplementedException(IpcService service, ServiceCtx context, string message, Exception inner, bool isTipcCommand) + public ServiceNotImplementedException(IpcService service, ServiceCtx context, string message, Exception inner) : base(message, inner) { Service = service; Context = context; Request = context.Request; - _isTipcCommand = isTipcCommand; } protected ServiceNotImplementedException(SerializationInfo info, StreamingContext context) @@ -66,7 +62,9 @@ namespace Ryujinx.HLE.Exceptions if (callingType != null && callingMethod != null) { - var ipcCommands = _isTipcCommand ? Service.TipcCommands : Service.HipcCommands; + // If the type is past 0xF, we are using TIPC + var ipcCommands = Request.Type > IpcMessageType.TipcCloseSession ? + Service.TipcCommands : Service.HipcCommands; // Find the handler for the method called var ipcHandler = ipcCommands.FirstOrDefault(x => x.Value == callingMethod); diff --git a/Ryujinx.HLE/HOS/Services/IpcService.cs b/Ryujinx.HLE/HOS/Services/IpcService.cs index e33060712b..01ee11584e 100644 --- a/Ryujinx.HLE/HOS/Services/IpcService.cs +++ b/Ryujinx.HLE/HOS/Services/IpcService.cs @@ -153,7 +153,7 @@ namespace Ryujinx.HLE.HOS.Services { string dbgMessage = $"{service.GetType().FullName}: {commandId}"; - throw new ServiceNotImplementedException(service, context, dbgMessage, false); + throw new ServiceNotImplementedException(service, context, dbgMessage); } } @@ -194,7 +194,7 @@ namespace Ryujinx.HLE.HOS.Services { string dbgMessage = $"{GetType().FullName}: {commandId}"; - throw new ServiceNotImplementedException(this, context, dbgMessage, true); + throw new ServiceNotImplementedException(this, context, dbgMessage); } } diff --git a/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/INfp.cs b/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/INfp.cs index 6b4ea5ef24..bae485587d 100644 --- a/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/INfp.cs +++ b/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/INfp.cs @@ -505,7 +505,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp // Restore(bytes<8, 4>) public ResultCode Restore(ServiceCtx context) { - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(12)] @@ -971,7 +971,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp // RecreateApplicationArea(bytes<8, 4>, u32, buffer) public ResultCode RecreateApplicationArea(ServiceCtx context) { - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(102)] diff --git a/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs b/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs index 9efe206fc5..00bc34418c 100644 --- a/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs +++ b/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs @@ -428,7 +428,7 @@ namespace Ryujinx.HLE.HOS.Services.Nv // ForceSetClientPid(u64) -> u32 error_code public ResultCode ForceSetClientPid(ServiceCtx context) { - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(8)] @@ -455,7 +455,7 @@ namespace Ryujinx.HLE.HOS.Services.Nv // InitializeDevtools(u32, handle) -> u32 error_code; public ResultCode InitializeDevtools(ServiceCtx context) { - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(11)] // 3.0.0+ diff --git a/Ryujinx.HLE/HOS/Services/Sockets/Nsd/IManager.cs b/Ryujinx.HLE/HOS/Services/Sockets/Nsd/IManager.cs index f58953d803..a9bd7ff815 100644 --- a/Ryujinx.HLE/HOS/Services/Sockets/Nsd/IManager.cs +++ b/Ryujinx.HLE/HOS/Services/Sockets/Nsd/IManager.cs @@ -48,14 +48,14 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Nsd // GetSettingUrl() -> buffer, 0x16> public ResultCode GetSettingUrl(ServiceCtx context) { - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(10)] // GetSettingName() -> buffer, 0x16> public ResultCode GetSettingName(ServiceCtx context) { - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(11)] @@ -128,7 +128,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Nsd // ImportSettings(u32, buffer) -> buffer public ResultCode ImportSettings(ServiceCtx context) { - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(15)] // 4.0.0+ @@ -202,49 +202,49 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Nsd // GetNasServiceSetting(buffer, 0x15>) -> buffer, 0x16> public ResultCode GetNasServiceSetting(ServiceCtx context) { - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(31)] // GetNasServiceSettingEx(buffer, 0x15>) -> (u32, buffer, 0x16>) public ResultCode GetNasServiceSettingEx(ServiceCtx context) { - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(40)] // GetNasRequestFqdn() -> buffer, 0x16> public ResultCode GetNasRequestFqdn(ServiceCtx context) { - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(41)] // GetNasRequestFqdnEx() -> (u32, buffer, 0x16>) public ResultCode GetNasRequestFqdnEx(ServiceCtx context) { - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(42)] // GetNasApiFqdn() -> buffer, 0x16> public ResultCode GetNasApiFqdn(ServiceCtx context) { - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(43)] // GetNasApiFqdnEx() -> (u32, buffer, 0x16>) public ResultCode GetNasApiFqdnEx(ServiceCtx context) { - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(50)] // GetCurrentSetting() -> buffer, 0x16> public ResultCode GetCurrentSetting(ServiceCtx context) { - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(51)] // 9.0.0+ @@ -253,7 +253,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Nsd { // TODO: Write test parameter through the savedata 0x80000000000000B0 (nsdsave:/test_parameter). - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(52)] // 9.0.0+ @@ -262,7 +262,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Nsd { // TODO: Read test parameter through the savedata 0x80000000000000B0 (nsdsave:/test_parameter). - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(60)] @@ -386,14 +386,14 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Nsd // SetApplicationServerEnvironmentType(bytes<1>) public ResultCode SetApplicationServerEnvironmentType(ServiceCtx context) { - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(102)] // 10.0.0+ // DeleteApplicationServerEnvironmentType() public ResultCode DeleteApplicationServerEnvironmentType(ServiceCtx context) { - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } } } \ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Time/ITimeServiceManager.cs b/Ryujinx.HLE/HOS/Services/Time/ITimeServiceManager.cs index 8b4cd27ceb..dd15893a9f 100644 --- a/Ryujinx.HLE/HOS/Services/Time/ITimeServiceManager.cs +++ b/Ryujinx.HLE/HOS/Services/Time/ITimeServiceManager.cs @@ -149,7 +149,7 @@ namespace Ryujinx.HLE.HOS.Services.Time public ResultCode Unknown50(ServiceCtx context) { // TODO: figure out the usage of this event - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(51)] @@ -157,7 +157,7 @@ namespace Ryujinx.HLE.HOS.Services.Time public ResultCode Unknown51(ServiceCtx context) { // TODO: figure out the usage of this event - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(52)] @@ -165,7 +165,7 @@ namespace Ryujinx.HLE.HOS.Services.Time public ResultCode Unknown52(ServiceCtx context) { // TODO: figure out the usage of this event - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(60)] @@ -201,7 +201,7 @@ namespace Ryujinx.HLE.HOS.Services.Time public ResultCode GetAlarmRegistrationEvent(ServiceCtx context) { // TODO - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(201)] @@ -209,7 +209,7 @@ namespace Ryujinx.HLE.HOS.Services.Time public ResultCode UpdateSteadyAlarms(ServiceCtx context) { // TODO - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } [CommandHipc(202)] @@ -217,7 +217,7 @@ namespace Ryujinx.HLE.HOS.Services.Time public ResultCode TryGetNextSteadyClockAlarmSnapshot(ServiceCtx context) { // TODO - throw new ServiceNotImplementedException(this, context, false); + throw new ServiceNotImplementedException(this, context); } } }