From b2e88b04a85b41cc60af3485d88c90429e84a218 Mon Sep 17 00:00:00 2001
From: BaronKiko <BaronKiko@users.noreply.github.com>
Date: Tue, 16 Apr 2019 00:22:55 +0100
Subject: Config option to ignore missing services (#658)

* Implemented config option to ignore missing services

* Removed unused using statement

* Resolved comments from review
---
 Ryujinx.HLE/HOS/Services/IpcService.cs | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

(limited to 'Ryujinx.HLE/HOS/Services/IpcService.cs')

diff --git a/Ryujinx.HLE/HOS/Services/IpcService.cs b/Ryujinx.HLE/HOS/Services/IpcService.cs
index 71683ce3..2a4a9319 100644
--- a/Ryujinx.HLE/HOS/Services/IpcService.cs
+++ b/Ryujinx.HLE/HOS/Services/IpcService.cs
@@ -89,13 +89,29 @@ namespace Ryujinx.HLE.HOS.Services
             long sfciMagic =      context.RequestData.ReadInt64();
             int  commandId = (int)context.RequestData.ReadInt64();
 
-            if (service.Commands.TryGetValue(commandId, out ServiceProcessRequest processRequest))
+            bool serviceExists = service.Commands.TryGetValue(commandId, out ServiceProcessRequest processRequest);
+
+            if (ServiceConfiguration.IgnoreMissingServices || serviceExists)
             {
+                long result = 0;
+
                 context.ResponseData.BaseStream.Seek(_isDomain ? 0x20 : 0x10, SeekOrigin.Begin);
 
-                Logger.PrintDebug(LogClass.KernelIpc, $"{service.GetType().Name}: {processRequest.Method.Name}");
+                if (serviceExists)
+                {
+                    Logger.PrintDebug(LogClass.KernelIpc, $"{service.GetType().Name}: {processRequest.Method.Name}");
 
-                long result = processRequest(context);
+                    result = processRequest(context);
+                }
+                else
+                {
+                    string serviceName;
+                    DummyService dummyService = service as DummyService;
+
+                    serviceName = (dummyService == null) ? service.GetType().FullName : dummyService.ServiceName;
+
+                    Logger.PrintWarning(LogClass.KernelIpc, $"Missing service {serviceName}: {commandId} ignored");
+                }
 
                 if (_isDomain)
                 {
-- 
cgit v1.2.3-70-g09d2