|
|
|
@ -44,6 +44,218 @@ static constexpr u32 SanitizeJPEGSize(std::size_t size) { |
|
|
|
return static_cast<u32>(std::min(size, max_jpeg_image_size)); |
|
|
|
} |
|
|
|
|
|
|
|
class IManagerForSystemService final : public ServiceFramework<IManagerForSystemService> { |
|
|
|
public: |
|
|
|
explicit IManagerForSystemService(Common::UUID user_id) |
|
|
|
: ServiceFramework("IManagerForSystemService") { |
|
|
|
// clang-format off
|
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{0, nullptr, "CheckAvailability"}, |
|
|
|
{1, nullptr, "GetAccountId"}, |
|
|
|
{2, nullptr, "EnsureIdTokenCacheAsync"}, |
|
|
|
{3, nullptr, "LoadIdTokenCache"}, |
|
|
|
{100, nullptr, "SetSystemProgramIdentification"}, |
|
|
|
{101, nullptr, "RefreshNotificationTokenAsync"}, // 7.0.0+
|
|
|
|
{110, nullptr, "GetServiceEntryRequirementCache"}, // 4.0.0+
|
|
|
|
{111, nullptr, "InvalidateServiceEntryRequirementCache"}, // 4.0.0+
|
|
|
|
{112, nullptr, "InvalidateTokenCache"}, // 4.0.0 - 6.2.0
|
|
|
|
{113, nullptr, "GetServiceEntryRequirementCacheForOnlinePlay"}, // 6.1.0+
|
|
|
|
{120, nullptr, "GetNintendoAccountId"}, |
|
|
|
{121, nullptr, "CalculateNintendoAccountAuthenticationFingerprint"}, // 9.0.0+
|
|
|
|
{130, nullptr, "GetNintendoAccountUserResourceCache"}, |
|
|
|
{131, nullptr, "RefreshNintendoAccountUserResourceCacheAsync"}, |
|
|
|
{132, nullptr, "RefreshNintendoAccountUserResourceCacheAsyncIfSecondsElapsed"}, |
|
|
|
{133, nullptr, "GetNintendoAccountVerificationUrlCache"}, // 9.0.0+
|
|
|
|
{134, nullptr, "RefreshNintendoAccountVerificationUrlCache"}, // 9.0.0+
|
|
|
|
{135, nullptr, "RefreshNintendoAccountVerificationUrlCacheAsyncIfSecondsElapsed"}, // 9.0.0+
|
|
|
|
{140, nullptr, "GetNetworkServiceLicenseCache"}, // 5.0.0+
|
|
|
|
{141, nullptr, "RefreshNetworkServiceLicenseCacheAsync"}, // 5.0.0+
|
|
|
|
{142, nullptr, "RefreshNetworkServiceLicenseCacheAsyncIfSecondsElapsed"}, // 5.0.0+
|
|
|
|
{150, nullptr, "CreateAuthorizationRequest"}, |
|
|
|
}; |
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
RegisterHandlers(functions); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
// 3.0.0+
|
|
|
|
class IFloatingRegistrationRequest final : public ServiceFramework<IFloatingRegistrationRequest> { |
|
|
|
public: |
|
|
|
explicit IFloatingRegistrationRequest(Common::UUID user_id) |
|
|
|
: ServiceFramework("IFloatingRegistrationRequest") { |
|
|
|
// clang-format off
|
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{0, nullptr, "GetSessionId"}, |
|
|
|
{12, nullptr, "GetAccountId"}, |
|
|
|
{13, nullptr, "GetLinkedNintendoAccountId"}, |
|
|
|
{14, nullptr, "GetNickname"}, |
|
|
|
{15, nullptr, "GetProfileImage"}, |
|
|
|
{21, nullptr, "LoadIdTokenCache"}, |
|
|
|
{100, nullptr, "RegisterUser"}, // [1.0.0-3.0.2] RegisterAsync
|
|
|
|
{101, nullptr, "RegisterUserWithUid"}, // [1.0.0-3.0.2] RegisterWithUidAsync
|
|
|
|
{102, nullptr, "RegisterNetworkServiceAccountAsync"}, // 4.0.0+
|
|
|
|
{103, nullptr, "RegisterNetworkServiceAccountWithUidAsync"}, // 4.0.0+
|
|
|
|
{110, nullptr, "SetSystemProgramIdentification"}, |
|
|
|
{111, nullptr, "EnsureIdTokenCacheAsync"}, |
|
|
|
}; |
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
RegisterHandlers(functions); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
class IAdministrator final : public ServiceFramework<IAdministrator> { |
|
|
|
public: |
|
|
|
explicit IAdministrator(Common::UUID user_id) : ServiceFramework("IAdministrator") { |
|
|
|
// clang-format off
|
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{0, nullptr, "CheckAvailability"}, |
|
|
|
{1, nullptr, "GetAccountId"}, |
|
|
|
{2, nullptr, "EnsureIdTokenCacheAsync"}, |
|
|
|
{3, nullptr, "LoadIdTokenCache"}, |
|
|
|
{100, nullptr, "SetSystemProgramIdentification"}, |
|
|
|
{101, nullptr, "RefreshNotificationTokenAsync"}, // 7.0.0+
|
|
|
|
{110, nullptr, "GetServiceEntryRequirementCache"}, // 4.0.0+
|
|
|
|
{111, nullptr, "InvalidateServiceEntryRequirementCache"}, // 4.0.0+
|
|
|
|
{112, nullptr, "InvalidateTokenCache"}, // 4.0.0 - 6.2.0
|
|
|
|
{113, nullptr, "GetServiceEntryRequirementCacheForOnlinePlay"}, // 6.1.0+
|
|
|
|
{120, nullptr, "GetNintendoAccountId"}, |
|
|
|
{121, nullptr, "CalculateNintendoAccountAuthenticationFingerprint"}, // 9.0.0+
|
|
|
|
{130, nullptr, "GetNintendoAccountUserResourceCache"}, |
|
|
|
{131, nullptr, "RefreshNintendoAccountUserResourceCacheAsync"}, |
|
|
|
{132, nullptr, "RefreshNintendoAccountUserResourceCacheAsyncIfSecondsElapsed"}, |
|
|
|
{133, nullptr, "GetNintendoAccountVerificationUrlCache"}, // 9.0.0+
|
|
|
|
{134, nullptr, "RefreshNintendoAccountVerificationUrlCacheAsync"}, // 9.0.0+
|
|
|
|
{135, nullptr, "RefreshNintendoAccountVerificationUrlCacheAsyncIfSecondsElapsed"}, // 9.0.0+
|
|
|
|
{140, nullptr, "GetNetworkServiceLicenseCache"}, // 5.0.0+
|
|
|
|
{141, nullptr, "RefreshNetworkServiceLicenseCacheAsync"}, // 5.0.0+
|
|
|
|
{142, nullptr, "RefreshNetworkServiceLicenseCacheAsyncIfSecondsElapsed"}, // 5.0.0+
|
|
|
|
{150, nullptr, "CreateAuthorizationRequest"}, |
|
|
|
{200, nullptr, "IsRegistered"}, |
|
|
|
{201, nullptr, "RegisterAsync"}, |
|
|
|
{202, nullptr, "UnregisterAsync"}, |
|
|
|
{203, nullptr, "DeleteRegistrationInfoLocally"}, |
|
|
|
{220, nullptr, "SynchronizeProfileAsync"}, |
|
|
|
{221, nullptr, "UploadProfileAsync"}, |
|
|
|
{222, nullptr, "SynchronizaProfileAsyncIfSecondsElapsed"}, |
|
|
|
{250, nullptr, "IsLinkedWithNintendoAccount"}, |
|
|
|
{251, nullptr, "CreateProcedureToLinkWithNintendoAccount"}, |
|
|
|
{252, nullptr, "ResumeProcedureToLinkWithNintendoAccount"}, |
|
|
|
{255, nullptr, "CreateProcedureToUpdateLinkageStateOfNintendoAccount"}, |
|
|
|
{256, nullptr, "ResumeProcedureToUpdateLinkageStateOfNintendoAccount"}, |
|
|
|
{260, nullptr, "CreateProcedureToLinkNnidWithNintendoAccount"}, // 3.0.0+
|
|
|
|
{261, nullptr, "ResumeProcedureToLinkNnidWithNintendoAccount"}, // 3.0.0+
|
|
|
|
{280, nullptr, "ProxyProcedureToAcquireApplicationAuthorizationForNintendoAccount"}, |
|
|
|
{290, nullptr, "GetRequestForNintendoAccountUserResourceView"}, // 8.0.0+
|
|
|
|
{300, nullptr, "TryRecoverNintendoAccountUserStateAsync"}, // 6.0.0+
|
|
|
|
{400, nullptr, "IsServiceEntryRequirementCacheRefreshRequiredForOnlinePlay"}, // 6.1.0+
|
|
|
|
{401, nullptr, "RefreshServiceEntryRequirementCacheForOnlinePlayAsync"}, // 6.1.0+
|
|
|
|
{900, nullptr, "GetAuthenticationInfoForWin"}, // 9.0.0+
|
|
|
|
{901, nullptr, "ImportAsyncForWin"}, // 9.0.0+
|
|
|
|
{997, nullptr, "DebugUnlinkNintendoAccountAsync"}, |
|
|
|
{998, nullptr, "DebugSetAvailabilityErrorDetail"}, |
|
|
|
}; |
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
RegisterHandlers(functions); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
class IAuthorizationRequest final : public ServiceFramework<IAuthorizationRequest> { |
|
|
|
public: |
|
|
|
explicit IAuthorizationRequest(Common::UUID user_id) |
|
|
|
: ServiceFramework("IAuthorizationRequest") { |
|
|
|
// clang-format off
|
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{0, nullptr, "GetSessionId"}, |
|
|
|
{10, nullptr, "InvokeWithoutInteractionAsync"}, |
|
|
|
{19, nullptr, "IsAuthorized"}, |
|
|
|
{20, nullptr, "GetAuthorizationCode"}, |
|
|
|
{21, nullptr, "GetIdToken"}, |
|
|
|
{22, nullptr, "GetState"}, |
|
|
|
}; |
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
RegisterHandlers(functions); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
class IOAuthProcedure final : public ServiceFramework<IOAuthProcedure> { |
|
|
|
public: |
|
|
|
explicit IOAuthProcedure(Common::UUID user_id) : ServiceFramework("IOAuthProcedure") { |
|
|
|
// clang-format off
|
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{0, nullptr, "PrepareAsync"}, |
|
|
|
{1, nullptr, "GetRequest"}, |
|
|
|
{2, nullptr, "ApplyResponse"}, |
|
|
|
{3, nullptr, "ApplyResponseAsync"}, |
|
|
|
{10, nullptr, "Suspend"}, |
|
|
|
}; |
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
RegisterHandlers(functions); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
// 3.0.0+
|
|
|
|
class IOAuthProcedureForExternalNsa final : public ServiceFramework<IOAuthProcedureForExternalNsa> { |
|
|
|
public: |
|
|
|
explicit IOAuthProcedureForExternalNsa(Common::UUID user_id) |
|
|
|
: ServiceFramework("IOAuthProcedureForExternalNsa") { |
|
|
|
// clang-format off
|
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{0, nullptr, "PrepareAsync"}, |
|
|
|
{1, nullptr, "GetRequest"}, |
|
|
|
{2, nullptr, "ApplyResponse"}, |
|
|
|
{3, nullptr, "ApplyResponseAsync"}, |
|
|
|
{10, nullptr, "Suspend"}, |
|
|
|
{100, nullptr, "GetAccountId"}, |
|
|
|
{101, nullptr, "GetLinkedNintendoAccountId"}, |
|
|
|
{102, nullptr, "GetNickname"}, |
|
|
|
{103, nullptr, "GetProfileImage"}, |
|
|
|
}; |
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
RegisterHandlers(functions); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
class IOAuthProcedureForNintendoAccountLinkage final |
|
|
|
: public ServiceFramework<IOAuthProcedureForNintendoAccountLinkage> { |
|
|
|
public: |
|
|
|
explicit IOAuthProcedureForNintendoAccountLinkage(Common::UUID user_id) |
|
|
|
: ServiceFramework("IOAuthProcedureForNintendoAccountLinkage") { |
|
|
|
// clang-format off
|
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{0, nullptr, "PrepareAsync"}, |
|
|
|
{1, nullptr, "GetRequest"}, |
|
|
|
{2, nullptr, "ApplyResponse"}, |
|
|
|
{3, nullptr, "ApplyResponseAsync"}, |
|
|
|
{10, nullptr, "Suspend"}, |
|
|
|
{100, nullptr, "GetRequestWithTheme"}, |
|
|
|
{101, nullptr, "IsNetworkServiceAccountReplaced"}, |
|
|
|
{199, nullptr, "GetUrlForIntroductionOfExtraMembership"}, // 2.0.0 - 5.1.0
|
|
|
|
}; |
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
RegisterHandlers(functions); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
class INotifier final : public ServiceFramework<INotifier> { |
|
|
|
public: |
|
|
|
explicit INotifier(Common::UUID user_id) : ServiceFramework("INotifier") { |
|
|
|
// clang-format off
|
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{0, nullptr, "GetSystemEvent"}, |
|
|
|
}; |
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
RegisterHandlers(functions); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
class IProfileCommon : public ServiceFramework<IProfileCommon> { |
|
|
|
public: |
|
|
|
explicit IProfileCommon(const char* name, bool editor_commands, Common::UUID user_id, |
|
|
|
@ -226,6 +438,54 @@ public: |
|
|
|
: IProfileCommon("IProfileEditor", true, user_id, profile_manager) {} |
|
|
|
}; |
|
|
|
|
|
|
|
class IAsyncContext final : public ServiceFramework<IAsyncContext> { |
|
|
|
public: |
|
|
|
explicit IAsyncContext(Common::UUID user_id) : ServiceFramework("IAsyncContext") { |
|
|
|
// clang-format off
|
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{0, nullptr, "GetSystemEvent"}, |
|
|
|
{1, nullptr, "Cancel"}, |
|
|
|
{2, nullptr, "HasDone"}, |
|
|
|
{3, nullptr, "GetResult"}, |
|
|
|
}; |
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
RegisterHandlers(functions); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
class ISessionObject final : public ServiceFramework<ISessionObject> { |
|
|
|
public: |
|
|
|
explicit ISessionObject(Common::UUID user_id) : ServiceFramework("ISessionObject") { |
|
|
|
// clang-format off
|
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{999, nullptr, "Dummy"}, |
|
|
|
}; |
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
RegisterHandlers(functions); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
class IGuestLoginRequest final : public ServiceFramework<IGuestLoginRequest> { |
|
|
|
public: |
|
|
|
explicit IGuestLoginRequest(Common::UUID) : ServiceFramework("IGuestLoginRequest") { |
|
|
|
// clang-format off
|
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{0, nullptr, "GetSessionId"}, |
|
|
|
{11, nullptr, "Unknown"}, // 1.0.0 - 2.3.0 (the name is blank on Switchbrew)
|
|
|
|
{12, nullptr, "GetAccountId"}, |
|
|
|
{13, nullptr, "GetLinkedNintendoAccountId"}, |
|
|
|
{14, nullptr, "GetNickname"}, |
|
|
|
{15, nullptr, "GetProfileImage"}, |
|
|
|
{21, nullptr, "LoadIdTokenCache"}, // 3.0.0+
|
|
|
|
}; |
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
RegisterHandlers(functions); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
class IManagerForApplication final : public ServiceFramework<IManagerForApplication> { |
|
|
|
public: |
|
|
|
explicit IManagerForApplication(Common::UUID user_id) |
|
|
|
@ -265,6 +525,87 @@ private: |
|
|
|
Common::UUID user_id; |
|
|
|
}; |
|
|
|
|
|
|
|
// 6.0.0+
|
|
|
|
class IAsyncNetworkServiceLicenseKindContext final |
|
|
|
: public ServiceFramework<IAsyncNetworkServiceLicenseKindContext> { |
|
|
|
public: |
|
|
|
explicit IAsyncNetworkServiceLicenseKindContext(Common::UUID user_id) |
|
|
|
: ServiceFramework("IAsyncNetworkServiceLicenseKindContext") { |
|
|
|
// clang-format off
|
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{0, nullptr, "GetSystemEvent"}, |
|
|
|
{1, nullptr, "Cancel"}, |
|
|
|
{2, nullptr, "HasDone"}, |
|
|
|
{3, nullptr, "GetResult"}, |
|
|
|
{4, nullptr, "GetNetworkServiceLicenseKind"}, |
|
|
|
}; |
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
RegisterHandlers(functions); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
// 8.0.0+
|
|
|
|
class IOAuthProcedureForUserRegistration final |
|
|
|
: public ServiceFramework<IOAuthProcedureForUserRegistration> { |
|
|
|
public: |
|
|
|
explicit IOAuthProcedureForUserRegistration(Common::UUID user_id) |
|
|
|
: ServiceFramework("IOAuthProcedureForUserRegistration") { |
|
|
|
// clang-format off
|
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{0, nullptr, "PrepareAsync"}, |
|
|
|
{1, nullptr, "GetRequest"}, |
|
|
|
{2, nullptr, "ApplyResponse"}, |
|
|
|
{3, nullptr, "ApplyResponseAsync"}, |
|
|
|
{10, nullptr, "Suspend"}, |
|
|
|
{100, nullptr, "GetAccountId"}, |
|
|
|
{101, nullptr, "GetLinkedNintendoAccountId"}, |
|
|
|
{102, nullptr, "GetNickname"}, |
|
|
|
{103, nullptr, "GetProfileImage"}, |
|
|
|
{110, nullptr, "RegisterUserAsync"}, |
|
|
|
{111, nullptr, "GetUid"}, |
|
|
|
}; |
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
RegisterHandlers(functions); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
class DAUTH_O final : public ServiceFramework<DAUTH_O> { |
|
|
|
public: |
|
|
|
explicit DAUTH_O(Common::UUID) : ServiceFramework("dauth:o") { |
|
|
|
// clang-format off
|
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{0, nullptr, "EnsureAuthenticationTokenCacheAsync"}, // [5.0.0-5.1.0] GeneratePostData
|
|
|
|
{1, nullptr, "LoadAuthenticationTokenCache"}, // 6.0.0+
|
|
|
|
{2, nullptr, "InvalidateAuthenticationTokenCache"}, // 6.0.0+
|
|
|
|
{10, nullptr, "EnsureEdgeTokenCacheAsync"}, // 6.0.0+
|
|
|
|
{11, nullptr, "LoadEdgeTokenCache"}, // 6.0.0+
|
|
|
|
{12, nullptr, "InvalidateEdgeTokenCache"}, // 6.0.0+
|
|
|
|
}; |
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
RegisterHandlers(functions); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
// 6.0.0+
|
|
|
|
class IAsyncResult final : public ServiceFramework<IAsyncResult> { |
|
|
|
public: |
|
|
|
explicit IAsyncResult(Common::UUID user_id) : ServiceFramework("IAsyncResult") { |
|
|
|
// clang-format off
|
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{0, nullptr, "GetResult"}, |
|
|
|
{1, nullptr, "Cancel"}, |
|
|
|
{2, nullptr, "IsAvailable"}, |
|
|
|
{3, nullptr, "GetSystemEvent"}, |
|
|
|
}; |
|
|
|
// clang-format on
|
|
|
|
|
|
|
|
RegisterHandlers(functions); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
void Module::Interface::GetUserCount(Kernel::HLERequestContext& ctx) { |
|
|
|
LOG_DEBUG(Service_ACC, "called"); |
|
|
|
IPC::ResponseBuilder rb{ctx, 3}; |
|
|
|
|