Browse Source

ns: add IDynamicRightsInterface

Liam 2 năm trước cách đây
mục cha
commit
c31ac45332

+ 2 - 0
src/core/CMakeLists.txt

@@ -749,6 +749,8 @@ add_library(core STATIC
     hle/service/ns/document_interface.h
     hle/service/ns/download_task_interface.cpp
     hle/service/ns/download_task_interface.h
+    hle/service/ns/dynamic_rights_interface.cpp
+    hle/service/ns/dynamic_rights_interface.h
     hle/service/ns/ecommerce_interface.cpp
     hle/service/ns/ecommerce_interface.h
     hle/service/ns/factory_reset_interface.cpp

+ 62 - 0
src/core/hle/service/ns/dynamic_rights_interface.cpp

@@ -0,0 +1,62 @@
+// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "core/hle/service/cmif_serialization.h"
+#include "core/hle/service/ns/dynamic_rights_interface.h"
+
+namespace Service::NS {
+
+IDynamicRightsInterface::IDynamicRightsInterface(Core::System& system_)
+    : ServiceFramework{system_, "DynamicRightsInterface"} {
+    // clang-format off
+    static const FunctionInfo functions[] = {
+        {0, nullptr, "RequestApplicationRightsOnServer"},
+        {1, nullptr, "RequestAssignRights"},
+        {4, nullptr, "DeprecatedRequestAssignRightsToResume"},
+        {5, D<&IDynamicRightsInterface::VerifyActivatedRightsOwners>, "VerifyActivatedRightsOwners"},
+        {6, nullptr, "DeprecatedGetApplicationRightsStatus"},
+        {7, nullptr, "RequestPrefetchForDynamicRights"},
+        {8, nullptr, "GetDynamicRightsState"},
+        {9, nullptr, "RequestApplicationRightsOnServerToResume"},
+        {10, nullptr, "RequestAssignRightsToResume"},
+        {11, nullptr, "GetActivatedRightsUsers"},
+        {12, nullptr, "GetApplicationRightsStatus"},
+        {13, D<&IDynamicRightsInterface::GetRunningApplicationStatus>, "GetRunningApplicationStatus"},
+        {14, nullptr, "SelectApplicationLicense"},
+        {15, nullptr, "RequestContentsAuthorizationToken"},
+        {16, nullptr, "QualifyUser"},
+        {17, nullptr, "QualifyUserWithProcessId"},
+        {18, D<&IDynamicRightsInterface::NotifyApplicationRightsCheckStart>, "NotifyApplicationRightsCheckStart"},
+        {19, nullptr, "UpdateUserList"},
+        {20, nullptr, "IsRightsLostUser"},
+        {21, nullptr, "SetRequiredAddOnContentsOnContentsAvailabilityTransition"},
+        {22, nullptr, "GetLimitedApplicationLicense"},
+        {23, nullptr, "GetLimitedApplicationLicenseUpgradableEvent"},
+        {24, nullptr, "NotifyLimitedApplicationLicenseUpgradableEventForDebug"},
+        {25, nullptr, "RequestProceedDynamicRightsState"},
+    };
+    // clang-format on
+
+    RegisterHandlers(functions);
+}
+
+IDynamicRightsInterface::~IDynamicRightsInterface() = default;
+
+Result IDynamicRightsInterface::NotifyApplicationRightsCheckStart() {
+    LOG_WARNING(Service_NS, "(STUBBED) called");
+    R_SUCCEED();
+}
+
+Result IDynamicRightsInterface::GetRunningApplicationStatus(Out<u32> out_status,
+                                                            u64 rights_handle) {
+    LOG_WARNING(Service_NS, "(STUBBED) called, rights_handle={:#x}", rights_handle);
+    *out_status = 0;
+    R_SUCCEED();
+}
+
+Result IDynamicRightsInterface::VerifyActivatedRightsOwners(u64 rights_handle) {
+    LOG_WARNING(Service_NS, "(STUBBED) called, rights_handle={:#x}", rights_handle);
+    R_SUCCEED();
+}
+
+} // namespace Service::NS

+ 22 - 0
src/core/hle/service/ns/dynamic_rights_interface.h

@@ -0,0 +1,22 @@
+// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "core/hle/service/cmif_types.h"
+#include "core/hle/service/service.h"
+
+namespace Service::NS {
+
+class IDynamicRightsInterface final : public ServiceFramework<IDynamicRightsInterface> {
+public:
+    explicit IDynamicRightsInterface(Core::System& system_);
+    ~IDynamicRightsInterface() override;
+
+private:
+    Result NotifyApplicationRightsCheckStart();
+    Result GetRunningApplicationStatus(Out<u32> out_status, u64 rights_handle);
+    Result VerifyActivatedRightsOwners(u64 rights_handle);
+};
+
+} // namespace Service::NS

+ 2 - 1
src/core/hle/service/ns/ns.cpp

@@ -16,6 +16,7 @@
 #include "core/hle/service/ns/content_management_interface.h"
 #include "core/hle/service/ns/document_interface.h"
 #include "core/hle/service/ns/download_task_interface.h"
+#include "core/hle/service/ns/dynamic_rights_interface.h"
 #include "core/hle/service/ns/ecommerce_interface.h"
 #include "core/hle/service/ns/factory_reset_interface.h"
 #include "core/hle/service/ns/language.h"
@@ -549,7 +550,7 @@ void IReadOnlyApplicationControlDataInterface::GetApplicationControlData(HLERequ
 NS::NS(const char* name, Core::System& system_) : ServiceFramework{system_, name} {
     // clang-format off
     static const FunctionInfo functions[] = {
-        {7988, nullptr, "GetDynamicRightsInterface"},
+        {7988, &NS::PushInterface<IDynamicRightsInterface>, "GetDynamicRightsInterface"},
         {7989, &NS::PushInterface<IReadOnlyApplicationControlDataInterface>, "GetReadOnlyApplicationControlDataInterface"},
         {7991, &NS::PushInterface<IReadOnlyApplicationRecordInterface>, "GetReadOnlyApplicationRecordInterface"},
         {7992, &NS::PushInterface<IECommerceInterface>, "GetECommerceInterface"},