From 453c4d1f28df72e4cd9f534c6cc72266fae50564 Mon Sep 17 00:00:00 2001 From: Yohoki Date: Mon, 6 May 2024 04:17:07 -0500 Subject: [PATCH 1/5] Implement CmifCommand(10101) - BcatService.RequestSyncDeliveryCacheWithDirectoryName --- .../Bcat/Ipc/ServiceCreator/BcatService.cs | 11 +++++++++++ src/Ryujinx.Horizon/Sdk/Bcat/IBcatService.cs | 1 + 2 files changed, 12 insertions(+) diff --git a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs index 91beec20da..a17365c929 100644 --- a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs +++ b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs @@ -1,3 +1,4 @@ +using Ryujinx.Common.Logging; using Ryujinx.Horizon.Bcat.Types; using Ryujinx.Horizon.Common; using Ryujinx.Horizon.Sdk.Bcat; @@ -16,5 +17,15 @@ namespace Ryujinx.Horizon.Bcat.Ipc return Result.Success; } + + [CmifCommand(10101)] + public Result RequestSyncDeliveryCacheWithDirectoryName(out IDeliveryCacheProgressService deliveryCacheProgressService) + { + // Temporary fix for Endless Ocean Luminous (010067B017588000). + // Just pretend the network request failed and pretend that everything is fine. + deliveryCacheProgressService = new DeliveryCacheProgressService(); + + return BcatResult.InternetRequestDenied; + } } } diff --git a/src/Ryujinx.Horizon/Sdk/Bcat/IBcatService.cs b/src/Ryujinx.Horizon/Sdk/Bcat/IBcatService.cs index 9201c4b26f..ba7c8c021c 100644 --- a/src/Ryujinx.Horizon/Sdk/Bcat/IBcatService.cs +++ b/src/Ryujinx.Horizon/Sdk/Bcat/IBcatService.cs @@ -6,5 +6,6 @@ namespace Ryujinx.Horizon.Sdk.Bcat internal interface IBcatService : IServiceObject { Result RequestSyncDeliveryCache(out IDeliveryCacheProgressService deliveryCacheProgressService); + Result RequestSyncDeliveryCacheWithDirectoryName(out IDeliveryCacheProgressService deliveryCacheProgressService); } } From c1921c982b38ae82ce23b026f037a5f2133ed45e Mon Sep 17 00:00:00 2001 From: Yohoki Date: Mon, 6 May 2024 05:53:57 -0500 Subject: [PATCH 2/5] Removed Logging, Clean Comments --- src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs index a17365c929..5a78879462 100644 --- a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs +++ b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs @@ -1,4 +1,3 @@ -using Ryujinx.Common.Logging; using Ryujinx.Horizon.Bcat.Types; using Ryujinx.Horizon.Common; using Ryujinx.Horizon.Sdk.Bcat; @@ -21,8 +20,7 @@ namespace Ryujinx.Horizon.Bcat.Ipc [CmifCommand(10101)] public Result RequestSyncDeliveryCacheWithDirectoryName(out IDeliveryCacheProgressService deliveryCacheProgressService) { - // Temporary fix for Endless Ocean Luminous (010067B017588000). - // Just pretend the network request failed and pretend that everything is fine. + // Just have the network request fail and pretend that everything is fine. deliveryCacheProgressService = new DeliveryCacheProgressService(); return BcatResult.InternetRequestDenied; From 047418ca1fce95851cf6046fbdce4bb44c0f8314 Mon Sep 17 00:00:00 2001 From: Yohoki Date: Mon, 6 May 2024 14:45:11 -0500 Subject: [PATCH 3/5] Update `RequestSyncDeliveryCacheWithDirectoryName` to accept two parameters. --- src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs | 2 +- src/Ryujinx.Horizon/Sdk/Bcat/IBcatService.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs index 5a78879462..19b4e65ebf 100644 --- a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs +++ b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs @@ -18,7 +18,7 @@ namespace Ryujinx.Horizon.Bcat.Ipc } [CmifCommand(10101)] - public Result RequestSyncDeliveryCacheWithDirectoryName(out IDeliveryCacheProgressService deliveryCacheProgressService) + public Result RequestSyncDeliveryCacheWithDirectoryName(out IDeliveryCacheProgressService deliveryCacheProgressService, LibHac.Bcat.DirectoryName arg1) { // Just have the network request fail and pretend that everything is fine. deliveryCacheProgressService = new DeliveryCacheProgressService(); diff --git a/src/Ryujinx.Horizon/Sdk/Bcat/IBcatService.cs b/src/Ryujinx.Horizon/Sdk/Bcat/IBcatService.cs index ba7c8c021c..9bab3bcbda 100644 --- a/src/Ryujinx.Horizon/Sdk/Bcat/IBcatService.cs +++ b/src/Ryujinx.Horizon/Sdk/Bcat/IBcatService.cs @@ -6,6 +6,6 @@ namespace Ryujinx.Horizon.Sdk.Bcat internal interface IBcatService : IServiceObject { Result RequestSyncDeliveryCache(out IDeliveryCacheProgressService deliveryCacheProgressService); - Result RequestSyncDeliveryCacheWithDirectoryName(out IDeliveryCacheProgressService deliveryCacheProgressService); + Result RequestSyncDeliveryCacheWithDirectoryName(out IDeliveryCacheProgressService deliveryCacheProgressService, LibHac.Bcat.DirectoryName arg1); } } From d34f7b0b640ec86280de46b2cfdf0c8aac4d0e14 Mon Sep 17 00:00:00 2001 From: Yohoki Date: Mon, 6 May 2024 20:22:32 -0500 Subject: [PATCH 4/5] Add Bcat.DirectoryName and Resolved conflicts between new DirectoryName type and LibHac.Bcat.DirectoryName type --- .../Bcat/Ipc/ServiceCreator/BcatService.cs | 2 +- .../Ipc/ServiceCreator/DeliveryCacheDirectoryService.cs | 2 +- .../Bcat/Ipc/ServiceCreator/DeliveryCacheFileService.cs | 2 +- .../Ipc/ServiceCreator/DeliveryCacheStorageService.cs | 2 +- src/Ryujinx.Horizon/Sdk/Bcat/DirectoryName.cs | 9 +++++++++ src/Ryujinx.Horizon/Sdk/Bcat/IBcatService.cs | 2 +- .../Sdk/Bcat/IDeliveryCacheDirectoryService.cs | 2 +- .../Sdk/Bcat/IDeliveryCacheFileService.cs | 2 +- .../Sdk/Bcat/IDeliveryCacheStorageService.cs | 2 +- 9 files changed, 17 insertions(+), 8 deletions(-) create mode 100644 src/Ryujinx.Horizon/Sdk/Bcat/DirectoryName.cs diff --git a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs index 19b4e65ebf..aa037847b3 100644 --- a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs +++ b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs @@ -18,7 +18,7 @@ namespace Ryujinx.Horizon.Bcat.Ipc } [CmifCommand(10101)] - public Result RequestSyncDeliveryCacheWithDirectoryName(out IDeliveryCacheProgressService deliveryCacheProgressService, LibHac.Bcat.DirectoryName arg1) + public Result RequestSyncDeliveryCacheWithDirectoryName(out IDeliveryCacheProgressService deliveryCacheProgressService, DirectoryName directoryName) { // Just have the network request fail and pretend that everything is fine. deliveryCacheProgressService = new DeliveryCacheProgressService(); diff --git a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheDirectoryService.cs b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheDirectoryService.cs index 1559c833c2..f8eb778bde 100644 --- a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheDirectoryService.cs +++ b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheDirectoryService.cs @@ -20,7 +20,7 @@ namespace Ryujinx.Horizon.Bcat.Ipc } [CmifCommand(0)] - public Result Open(DirectoryName directoryName) + public Result Open(LibHac.Bcat.DirectoryName directoryName) { return _libHacService.Get.Open(ref directoryName).ToHorizonResult(); } diff --git a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheFileService.cs b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheFileService.cs index bd5c418d9b..9d8f8524a4 100644 --- a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheFileService.cs +++ b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheFileService.cs @@ -20,7 +20,7 @@ namespace Ryujinx.Horizon.Bcat.Ipc } [CmifCommand(0)] - public Result Open(DirectoryName directoryName, FileName fileName) + public Result Open(LibHac.Bcat.DirectoryName directoryName, FileName fileName) { return _libHacService.Get.Open(ref directoryName, ref fileName).ToHorizonResult(); } diff --git a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheStorageService.cs b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheStorageService.cs index ecbc4bdb75..4d44fecf6f 100644 --- a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheStorageService.cs +++ b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheStorageService.cs @@ -58,7 +58,7 @@ namespace Ryujinx.Horizon.Bcat.Ipc } [CmifCommand(10)] - public Result EnumerateDeliveryCacheDirectory(out int count, [Buffer(HipcBufferFlags.Out | HipcBufferFlags.MapAlias)] Span directoryNames) + public Result EnumerateDeliveryCacheDirectory(out int count, [Buffer(HipcBufferFlags.Out | HipcBufferFlags.MapAlias)] Span directoryNames) { return _libHacService.Get.EnumerateDeliveryCacheDirectory(out count, directoryNames).ToHorizonResult(); } diff --git a/src/Ryujinx.Horizon/Sdk/Bcat/DirectoryName.cs b/src/Ryujinx.Horizon/Sdk/Bcat/DirectoryName.cs new file mode 100644 index 0000000000..aa68cbc7aa --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Bcat/DirectoryName.cs @@ -0,0 +1,9 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.Horizon.Sdk.Bcat +{ + [StructLayout(LayoutKind.Sequential, Size = 0x20, Pack = 0x1)] + struct DirectoryName + { + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Bcat/IBcatService.cs b/src/Ryujinx.Horizon/Sdk/Bcat/IBcatService.cs index 9bab3bcbda..8e104afbc7 100644 --- a/src/Ryujinx.Horizon/Sdk/Bcat/IBcatService.cs +++ b/src/Ryujinx.Horizon/Sdk/Bcat/IBcatService.cs @@ -6,6 +6,6 @@ namespace Ryujinx.Horizon.Sdk.Bcat internal interface IBcatService : IServiceObject { Result RequestSyncDeliveryCache(out IDeliveryCacheProgressService deliveryCacheProgressService); - Result RequestSyncDeliveryCacheWithDirectoryName(out IDeliveryCacheProgressService deliveryCacheProgressService, LibHac.Bcat.DirectoryName arg1); + Result RequestSyncDeliveryCacheWithDirectoryName(out IDeliveryCacheProgressService deliveryCacheProgressService, DirectoryName directoryName); } } diff --git a/src/Ryujinx.Horizon/Sdk/Bcat/IDeliveryCacheDirectoryService.cs b/src/Ryujinx.Horizon/Sdk/Bcat/IDeliveryCacheDirectoryService.cs index f2f6c5b54e..a18dfccbbe 100644 --- a/src/Ryujinx.Horizon/Sdk/Bcat/IDeliveryCacheDirectoryService.cs +++ b/src/Ryujinx.Horizon/Sdk/Bcat/IDeliveryCacheDirectoryService.cs @@ -8,7 +8,7 @@ namespace Ryujinx.Horizon.Sdk.Bcat internal interface IDeliveryCacheDirectoryService : IServiceObject { Result GetCount(out int count); - Result Open(DirectoryName directoryName); + Result Open(LibHac.Bcat.DirectoryName directoryName); Result Read(out int entriesRead, Span entriesBuffer); } } diff --git a/src/Ryujinx.Horizon/Sdk/Bcat/IDeliveryCacheFileService.cs b/src/Ryujinx.Horizon/Sdk/Bcat/IDeliveryCacheFileService.cs index 1cba63cedc..fcc03c3c13 100644 --- a/src/Ryujinx.Horizon/Sdk/Bcat/IDeliveryCacheFileService.cs +++ b/src/Ryujinx.Horizon/Sdk/Bcat/IDeliveryCacheFileService.cs @@ -9,7 +9,7 @@ namespace Ryujinx.Horizon.Sdk.Bcat { Result GetDigest(out Digest digest); Result GetSize(out long size); - Result Open(DirectoryName directoryName, FileName fileName); + Result Open(LibHac.Bcat.DirectoryName directoryName, FileName fileName); Result Read(long offset, out long bytesRead, Span data); } } diff --git a/src/Ryujinx.Horizon/Sdk/Bcat/IDeliveryCacheStorageService.cs b/src/Ryujinx.Horizon/Sdk/Bcat/IDeliveryCacheStorageService.cs index f83114d91e..df33a68d40 100644 --- a/src/Ryujinx.Horizon/Sdk/Bcat/IDeliveryCacheStorageService.cs +++ b/src/Ryujinx.Horizon/Sdk/Bcat/IDeliveryCacheStorageService.cs @@ -9,6 +9,6 @@ namespace Ryujinx.Horizon.Sdk.Bcat { Result CreateDirectoryService(out IDeliveryCacheDirectoryService service); Result CreateFileService(out IDeliveryCacheFileService service); - Result EnumerateDeliveryCacheDirectory(out int count, Span directoryNames); + Result EnumerateDeliveryCacheDirectory(out int count, Span directoryNames); } } From 26e02d3d9d480305b86d43ae1fe26e6ab91eef10 Mon Sep 17 00:00:00 2001 From: Yohoki Date: Fri, 17 May 2024 03:17:05 -0500 Subject: [PATCH 5/5] Changed return to `BcatResult.Success` instead of pretending no internet. Allow game to either handle it or fail by itself. --- src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs index aa037847b3..e4a7f87907 100644 --- a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs +++ b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/BcatService.cs @@ -20,10 +20,9 @@ namespace Ryujinx.Horizon.Bcat.Ipc [CmifCommand(10101)] public Result RequestSyncDeliveryCacheWithDirectoryName(out IDeliveryCacheProgressService deliveryCacheProgressService, DirectoryName directoryName) { - // Just have the network request fail and pretend that everything is fine. deliveryCacheProgressService = new DeliveryCacheProgressService(); - return BcatResult.InternetRequestDenied; + return BcatResult.Success; } } }