From 5115f640c213e06857d4b0a04aabf1ef0208cb03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20L=C3=B3pez=20Guimaraes?= <112760654+DaniElectra@users.noreply.github.com> Date: Wed, 21 Aug 2024 20:01:05 +0200 Subject: [PATCH] act: Add more command names and implement GetErrorCode (#237) * act: Add more command names and implement GetErrorCode The command names have been extracted from 3dbrew and the JavaScript bindings that the NNID settings uses internally. The error names have been extracted from the Wii U implementation (102-XXXX), which are compatible with the 3DS ones except for 022-5XXX, which are error codes specific to the 3DS. * act: Split error codes into separate file --- src/core/CMakeLists.txt | 2 + src/core/hle/service/act/act.cpp | 22 +- src/core/hle/service/act/act.h | 16 +- src/core/hle/service/act/act_a.cpp | 50 +- src/core/hle/service/act/act_errors.cpp | 757 ++++++++++++++++++++++++ src/core/hle/service/act/act_errors.h | 613 +++++++++++++++++++ src/core/hle/service/act/act_u.cpp | 25 +- 7 files changed, 1474 insertions(+), 11 deletions(-) create mode 100644 src/core/hle/service/act/act_errors.cpp create mode 100644 src/core/hle/service/act/act_errors.h diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index de4439ecea..331bc9cfbc 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -203,6 +203,8 @@ add_library(citra_core STATIC hle/service/ac/ac_u.h hle/service/act/act.cpp hle/service/act/act.h + hle/service/act/act_errors.cpp + hle/service/act/act_errors.h hle/service/act/act_a.cpp hle/service/act/act_a.h hle/service/act/act_u.cpp diff --git a/src/core/hle/service/act/act.cpp b/src/core/hle/service/act/act.cpp index ddac50e2d2..46c4b62bca 100644 --- a/src/core/hle/service/act/act.cpp +++ b/src/core/hle/service/act/act.cpp @@ -7,6 +7,7 @@ #include "core/hle/kernel/shared_memory.h" #include "core/hle/service/act/act.h" #include "core/hle/service/act/act_a.h" +#include "core/hle/service/act/act_errors.h" #include "core/hle/service/act/act_u.h" namespace Service::ACT { @@ -31,15 +32,28 @@ void Module::Interface::Initialize(Kernel::HLERequestContext& ctx) { rb.Push(ResultSuccess); } -void Module::Interface::GetAccountDataBlock(Kernel::HLERequestContext& ctx) { +void Module::Interface::GetErrorCode(Kernel::HLERequestContext& ctx) { IPC::RequestParser rp(ctx); - const auto unknown = rp.Pop(); + const auto result = rp.Pop(); + + LOG_DEBUG(Service_ACT, "called result={:08X}", result.raw); + + const u32 error_code = GetACTErrorCode(result); + + IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); + rb.Push(ResultSuccess); + rb.Push(error_code); +} + +void Module::Interface::GetAccountInfo(Kernel::HLERequestContext& ctx) { + IPC::RequestParser rp(ctx); + const auto account_slot = rp.Pop(); const auto size = rp.Pop(); const auto block_id = rp.Pop(); [[maybe_unused]] auto output_buffer = rp.PopMappedBuffer(); - LOG_DEBUG(Service_ACT, "(STUBBED) called unknown={:02X}, size={:08X}, block_id={:08X}", unknown, - size, block_id); + LOG_DEBUG(Service_ACT, "(STUBBED) called account_slot={:02X}, size={:08X}, block_id={:08X}", + account_slot, size, block_id); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); rb.Push(ResultSuccess); diff --git a/src/core/hle/service/act/act.h b/src/core/hle/service/act/act.h index cbd5e6eb1d..ec9f954bb5 100644 --- a/src/core/hle/service/act/act.h +++ b/src/core/hle/service/act/act.h @@ -38,9 +38,19 @@ class Module final { void Initialize(Kernel::HLERequestContext& ctx); /** - * ACT::GetAccountDataBlock service function. + * ACT::GetErrorCode service function. * Inputs: - * 1 : u8 Unknown + * 1 : Result code + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : Error code + */ + void GetErrorCode(Kernel::HLERequestContext& ctx); + + /** + * ACT::GetAccountInfo service function. + * Inputs: + * 1 : Account slot * 2 : Size * 3 : Block ID * 4 : Output Buffer Mapping Translation Header ((Size << 4) | 0xC) @@ -48,7 +58,7 @@ class Module final { * Outputs: * 1 : Result of function, 0 on success, otherwise error code */ - void GetAccountDataBlock(Kernel::HLERequestContext& ctx); + void GetAccountInfo(Kernel::HLERequestContext& ctx); }; private: diff --git a/src/core/hle/service/act/act_a.cpp b/src/core/hle/service/act/act_a.cpp index 41d8da4a4e..2810160225 100644 --- a/src/core/hle/service/act/act_a.cpp +++ b/src/core/hle/service/act/act_a.cpp @@ -12,15 +12,61 @@ ACT_A::ACT_A(std::shared_ptr act) : Module::Interface(std::move(act), "a // act:u shared commands // clang-format off {0x0001, &ACT_A::Initialize, "Initialize"}, - {0x0002, nullptr, "GetErrorCode"}, - {0x0006, &ACT_A::GetAccountDataBlock, "GetAccountDataBlock"}, + {0x0002, &ACT_A::GetErrorCode, "GetErrorCode"}, + {0x0003, nullptr, "GetLastResponseCode"}, + {0x0005, nullptr, "GetCommonInfo"}, + {0x0006, &ACT_A::GetAccountInfo, "GetAccountInfo"}, + {0x0007, nullptr, "GetResultAsync"}, + {0x0008, nullptr, "GetMiiImageData"}, + {0x0009, nullptr, "SetNfsPassword"}, {0x000B, nullptr, "AcquireEulaList"}, + {0x000C, nullptr, "AcquireTimeZoneList"}, {0x000D, nullptr, "GenerateUuid"}, + {0x000F, nullptr, "FindSlotNoByUuid"}, + {0x0010, nullptr, "SaveData"}, + {0x0011, nullptr, "GetTransferableId"}, + {0x0012, nullptr, "AcquireNexServiceToken"}, + {0x0013, nullptr, "GetNexServiceToken"}, + {0x0014, nullptr, "AcquireIndependentServiceToken"}, + {0x0015, nullptr, "GetIndependentServiceToken"}, + {0x0016, nullptr, "AcquireAccountInfo"}, + {0x0017, nullptr, "AcquireAccountIdByPrincipalId"}, + {0x0018, nullptr, "AcquirePrincipalIdByAccountId"}, + {0x0019, nullptr, "AcquireMii"}, + {0x001A, nullptr, "AcquireAccountInfoEx"}, + {0x001D, nullptr, "InquireMailAddress"}, + {0x001E, nullptr, "AcquireEula"}, + {0x001F, nullptr, "AcquireEulaLanguageList"}, // act:a + {0x0402, nullptr, "CreateConsoleAccount"}, + {0x0403, nullptr, "CommitConsoleAccount"}, + {0x0404, nullptr, "UnbindServerAccount"}, + {0x0405, nullptr, "DeleteConsoleAccount"}, + {0x0407, nullptr, "UnloadConsoleAccount"}, + {0x0408, nullptr, "EnableAccountPasswordCache"}, + {0x0409, nullptr, "SetDefaultAccount"}, + {0x040A, nullptr, "ReplaceAccountId"}, + {0x040B, nullptr, "GetSupportContext"}, + {0x0412, nullptr, "UpdateMii"}, {0x0413, nullptr, "UpdateMiiImage"}, + {0x0414, nullptr, "InquireAccountIdAvailability"}, + {0x0415, nullptr, "BindToNewServerAccount"}, + {0x0416, nullptr, "BindToExistentServerAccount"}, + {0x0417, nullptr, "InquireBindingToExistentServerAccount"}, + {0x041A, nullptr, "AcquireAccountTokenEx"}, {0x041B, nullptr, "AgreeEula"}, + {0x041C, nullptr, "SyncAccountInfo"}, + {0x041E, nullptr, "UpdateAccountPassword"}, + {0x041F, nullptr, "ReissueAccountPassword"}, + {0x0420, nullptr, "SetAccountPasswordInput"}, {0x0421, nullptr, "UploadMii"}, {0x0423, nullptr, "ValidateMailAddress"}, + {0x0423, nullptr, "SendConfirmationMail"}, + {0x0428, nullptr, "ApproveByCreditCard"}, + {0x0428, nullptr, "SendCoppaCodeMail"}, + {0x042F, nullptr, "UpdateAccountInfoEx"}, + {0x0430, nullptr, "UpdateAccountMailAddress"}, + {0x0435, nullptr, "DeleteServerAccount"}, // clang-format on }; RegisterHandlers(functions); diff --git a/src/core/hle/service/act/act_errors.cpp b/src/core/hle/service/act/act_errors.cpp new file mode 100644 index 0000000000..cab975d00e --- /dev/null +++ b/src/core/hle/service/act/act_errors.cpp @@ -0,0 +1,757 @@ +// Copyright 2024 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "core/hle/service/act/act_errors.h" + +namespace Service::ACT { + +u32 GetACTErrorCode(Result result) { + u32 error_code = ErrCodes::Unknown; + if (result.module == ErrorModule::ACT) { + switch (result.description) { + case ErrDescriptions::MySuccess: + error_code = ErrCodes::MySuccess; + break; + case ErrDescriptions::MailAddressNotConfirmed: + error_code = ErrCodes::MailAddressNotConfirmed; + break; + case ErrDescriptions::LibraryError: + error_code = ErrCodes::LibraryError; + break; + case ErrDescriptions::NotInitialized: + error_code = ErrCodes::NotInitialized; + break; + case ErrDescriptions::AlreadyInitialized: + error_code = ErrCodes::AlreadyInitialized; + break; + case ErrDescriptions::ErrDesc103: + error_code = ErrCodes::ErrCode225103; + break; + case ErrDescriptions::ErrDesc104: + error_code = ErrCodes::ErrCode225104; + break; + case ErrDescriptions::Busy: + error_code = ErrCodes::Busy; + break; + case ErrDescriptions::ErrDesc112: + error_code = ErrCodes::ErrCode225112; + break; + case ErrDescriptions::NotImplemented: + error_code = ErrCodes::NotImplemented; + break; + case ErrDescriptions::Deprecated: + error_code = ErrCodes::Deprecated; + break; + case ErrDescriptions::DevelopmentOnly: + error_code = ErrCodes::DevelopmentOnly; + break; + case ErrDescriptions::InvalidArgument: + error_code = ErrCodes::InvalidArgument; + break; + case ErrDescriptions::InvalidPointer: + error_code = ErrCodes::InvalidPointer; + break; + case ErrDescriptions::OutOfRange: + error_code = ErrCodes::OutOfRange; + break; + case ErrDescriptions::InvalidSize: + error_code = ErrCodes::InvalidSize; + break; + case ErrDescriptions::InvalidFormat: + error_code = ErrCodes::InvalidFormat; + break; + case ErrDescriptions::InvalidHandle: + error_code = ErrCodes::InvalidHandle; + break; + case ErrDescriptions::InvalidValue: + error_code = ErrCodes::InvalidValue; + break; + case ErrDescriptions::InternalError: + error_code = ErrCodes::InternalError; + break; + case ErrDescriptions::EndOfStream: + error_code = ErrCodes::EndOfStream; + break; + case ErrDescriptions::FileError: + error_code = ErrCodes::FileError; + break; + case ErrDescriptions::FileNotFound: + error_code = ErrCodes::FileNotFound; + break; + case ErrDescriptions::FileVersionMismatch: + error_code = ErrCodes::FileVersionMismatch; + break; + case ErrDescriptions::FileIOError: + error_code = ErrCodes::FileIOError; + break; + case ErrDescriptions::FileTypeMismatch: + error_code = ErrCodes::FileTypeMismatch; + break; + case ErrDescriptions::ErrDesc315: + error_code = ErrCodes::ErrCode225315; + break; + case ErrDescriptions::OutOfResource: + error_code = ErrCodes::OutOfResource; + break; + case ErrDescriptions::ShortOfBuffer: + error_code = ErrCodes::ShortOfBuffer; + break; + case ErrDescriptions::OutOfMemory: + error_code = ErrCodes::OutOfMemory; + break; + case ErrDescriptions::OutOfGlobalHeap: + error_code = ErrCodes::OutOfGlobalHeap; + break; + case ErrDescriptions::ErrDesc350: + error_code = ErrCodes::ErrCode225350; + break; + case ErrDescriptions::ErrDesc351: + error_code = ErrCodes::ErrCode225351; + break; + case ErrDescriptions::ErrDesc352: + error_code = ErrCodes::ErrCode225352; + break; + case ErrDescriptions::ErrDesc360: + error_code = ErrCodes::ErrCode225360; + break; + case ErrDescriptions::ErrDesc361: + error_code = ErrCodes::ErrCode225361; + break; + case ErrDescriptions::ErrDesc362: + error_code = ErrCodes::ErrCode225362; + break; + case ErrDescriptions::ErrDesc363: + error_code = ErrCodes::ErrCode225363; + break; + case ErrDescriptions::AccountManagementError: + error_code = ErrCodes::AccountManagementError; + break; + case ErrDescriptions::AccountNotFound: + error_code = ErrCodes::AccountNotFound; + break; + case ErrDescriptions::SlotsFull: + error_code = ErrCodes::SlotsFull; + break; + case ErrDescriptions::AccountNotLoaded: + error_code = ErrCodes::AccountNotLoaded; + break; + case ErrDescriptions::AccountAlreadyLoaded: + error_code = ErrCodes::AccountAlreadyLoaded; + break; + case ErrDescriptions::AccountLocked: + error_code = ErrCodes::AccountLocked; + break; + case ErrDescriptions::NotNetworkAccount: + error_code = ErrCodes::NotNetworkAccount; + break; + case ErrDescriptions::NotLocalAccount: + error_code = ErrCodes::NotLocalAccount; + break; + case ErrDescriptions::AccountNotCommited: + error_code = ErrCodes::AccountCommited; + break; + case ErrDescriptions::ErrDesc431: + error_code = ErrCodes::ErrCode225431; + break; + case ErrDescriptions::ErrDesc432: + error_code = ErrCodes::ErrCode225432; + break; + case ErrDescriptions::ErrDesc433: + error_code = ErrCodes::ErrCode225433; + break; + case ErrDescriptions::ErrDesc451: + error_code = ErrCodes::ErrCode221101; + break; + case ErrDescriptions::AuthenticationError: + error_code = ErrCodes::AuthenticationError; + break; + case ErrDescriptions::HttpError: + error_code = ErrCodes::HttpError; + break; + case ErrDescriptions::ErrDesc502: + error_code = ErrCodes::ErrCode225502; + break; + case ErrDescriptions::ErrDesc503: + error_code = ErrCodes::ErrCode225503; + break; + case ErrDescriptions::ErrDesc504: + error_code = ErrCodes::ErrCode225504; + break; + case ErrDescriptions::ErrDesc505: + error_code = ErrCodes::ErrCode225505; + break; + case ErrDescriptions::ErrDesc506: + error_code = ErrCodes::ErrCode225506; + break; + case ErrDescriptions::ErrDesc507: + error_code = ErrCodes::ErrCode225507; + break; + case ErrDescriptions::ErrDesc508: + error_code = ErrCodes::ErrCode225508; + break; + case ErrDescriptions::ErrDesc509: + error_code = ErrCodes::ErrCode225509; + break; + case ErrDescriptions::ErrDesc510: + error_code = ErrCodes::ErrCode225510; + break; + case ErrDescriptions::ErrDesc511: + error_code = ErrCodes::ErrCode225511; + break; + case ErrDescriptions::ErrDesc512: + error_code = ErrCodes::ErrCode225512; + break; + case ErrDescriptions::ErrDesc513: + error_code = ErrCodes::ErrCode225513; + break; + case ErrDescriptions::ErrDesc514: + error_code = ErrCodes::ErrCode225514; + break; + case ErrDescriptions::ErrDesc515: + error_code = ErrCodes::ErrCode225515; + break; + case ErrDescriptions::ErrDesc516: + error_code = ErrCodes::ErrCode225516; + break; + case ErrDescriptions::ErrDesc517: + error_code = ErrCodes::ErrCode225517; + break; + case ErrDescriptions::ErrDesc518: + error_code = ErrCodes::ErrCode225518; + break; + case ErrDescriptions::ErrDesc519: + error_code = ErrCodes::ErrCode225519; + break; + case ErrDescriptions::ErrDesc520: + error_code = ErrCodes::ErrCode225520; + break; + case ErrDescriptions::ErrDesc521: + error_code = ErrCodes::ErrCode225521; + break; + case ErrDescriptions::ErrDesc522: + error_code = ErrCodes::ErrCode225522; + break; + case ErrDescriptions::ErrDesc523: + error_code = ErrCodes::ErrCode225523; + break; + case ErrDescriptions::ErrDesc524: + error_code = ErrCodes::ErrCode225524; + break; + case ErrDescriptions::ErrDesc525: + error_code = ErrCodes::ErrCode225525; + break; + case ErrDescriptions::ErrDesc526: + error_code = ErrCodes::ErrCode225526; + break; + case ErrDescriptions::ErrDesc527: + error_code = ErrCodes::ErrCode225527; + break; + case ErrDescriptions::ErrDesc528: + error_code = ErrCodes::ErrCode225528; + break; + case ErrDescriptions::ErrDesc529: + error_code = ErrCodes::ErrCode225529; + break; + case ErrDescriptions::ErrDesc530: + error_code = ErrCodes::ErrCode225530; + break; + case ErrDescriptions::ErrDesc531: + error_code = ErrCodes::ErrCode225531; + break; + case ErrDescriptions::ErrDesc532: + error_code = ErrCodes::ErrCode225532; + break; + case ErrDescriptions::ErrDesc533: + error_code = ErrCodes::ErrCode225533; + break; + case ErrDescriptions::ErrDesc534: + error_code = ErrCodes::ErrCode225534; + break; + case ErrDescriptions::ErrDesc535: + error_code = ErrCodes::ErrCode225535; + break; + case ErrDescriptions::ErrDesc536: + error_code = ErrCodes::ErrCode225536; + break; + case ErrDescriptions::ErrDesc537: + error_code = ErrCodes::ErrCode225537; + break; + case ErrDescriptions::ErrDesc538: + error_code = ErrCodes::ErrCode225538; + break; + case ErrDescriptions::ErrDesc539: + error_code = ErrCodes::ErrCode225539; + break; + case ErrDescriptions::ErrDesc540: + error_code = ErrCodes::ErrCode225540; + break; + case ErrDescriptions::ErrDesc541: + error_code = ErrCodes::ErrCode225541; + break; + case ErrDescriptions::ErrDesc542: + error_code = ErrCodes::ErrCode225542; + break; + case ErrDescriptions::ErrDesc543: + error_code = ErrCodes::ErrCode225543; + break; + case ErrDescriptions::ErrDesc544: + error_code = ErrCodes::ErrCode225544; + break; + case ErrDescriptions::ErrDesc545: + error_code = ErrCodes::ErrCode225545; + break; + case ErrDescriptions::ErrDesc546: + error_code = ErrCodes::ErrCode225546; + break; + case ErrDescriptions::ErrDesc547: + error_code = ErrCodes::ErrCode225547; + break; + case ErrDescriptions::ErrDesc548: + error_code = ErrCodes::ErrCode225548; + break; + case ErrDescriptions::ErrDesc549: + error_code = ErrCodes::ErrCode225549; + break; + case ErrDescriptions::ErrDesc550: + error_code = ErrCodes::ErrCode225550; + break; + case ErrDescriptions::ErrDesc551: + error_code = ErrCodes::ErrCode225551; + break; + case ErrDescriptions::ErrDesc552: + error_code = ErrCodes::ErrCode225552; + break; + case ErrDescriptions::ErrDesc553: + error_code = ErrCodes::ErrCode225553; + break; + case ErrDescriptions::RequestError: + error_code = ErrCodes::RequestError; + break; + case ErrDescriptions::BadFormatParameter: + error_code = ErrCodes::BadFormatParameter; + break; + case ErrDescriptions::BadFormatRequest: + error_code = ErrCodes::BadFormatRequest; + break; + case ErrDescriptions::RequestParameterMissing: + error_code = ErrCodes::RequestParameterMissing; + break; + case ErrDescriptions::WrongHttpMethod: + error_code = ErrCodes::WrongHttpMethod; + break; + case ErrDescriptions::ResponseError: + error_code = ErrCodes::ResponseError; + break; + case ErrDescriptions::BadFormatResponse: + error_code = ErrCodes::BadFormatResponse; + break; + case ErrDescriptions::ResponseItemMissing: + error_code = ErrCodes::ResponseItemMissing; + break; + case ErrDescriptions::ResponseTooLarge: + error_code = ErrCodes::ResponseTooLarge; + break; + case ErrDescriptions::InvalidCommonParameter: + error_code = ErrCodes::InvalidCommonParameter; + break; + case ErrDescriptions::InvalidPlatformId: + error_code = ErrCodes::InvalidPlatformId; + break; + case ErrDescriptions::UnauthorizedDevice: + error_code = ErrCodes::UnauthorizedDevice; + break; + case ErrDescriptions::InvalidSerialId: + error_code = ErrCodes::InvalidSerialId; + break; + case ErrDescriptions::InvalidMacAddress: + error_code = ErrCodes::InvalidMacAddress; + break; + case ErrDescriptions::InvalidRegion: + error_code = ErrCodes::InvalidRegion; + break; + case ErrDescriptions::InvalidCountry: + error_code = ErrCodes::InvalidCountry; + break; + case ErrDescriptions::InvalidLanguage: + error_code = ErrCodes::InvalidLanguage; + break; + case ErrDescriptions::UnauthorizedClient: + error_code = ErrCodes::UnauthorizedClient; + break; + case ErrDescriptions::DeviceIdEmpty: + error_code = ErrCodes::DeviceIdEmpty; + break; + case ErrDescriptions::SerialIdEmpty: + error_code = ErrCodes::SerialIdEmpty; + break; + case ErrDescriptions::PlatformIdEmpty: + error_code = ErrCodes::PlatformIdEmpty; + break; + case ErrDescriptions::InvalidUniqueId: + error_code = ErrCodes::InvalidUniqueId; + break; + case ErrDescriptions::InvalidClientId: + error_code = ErrCodes::InvalidClientId; + break; + case ErrDescriptions::InvalidClientKey: + error_code = ErrCodes::InvalidClientKey; + break; + case ErrDescriptions::InvalidNexClientId: + error_code = ErrCodes::InvalidNexClientId; + break; + case ErrDescriptions::InvalidGameServerId: + error_code = ErrCodes::InvalidGameServerId; + break; + case ErrDescriptions::GameServerIdEnvironmentNotFound: + error_code = ErrCodes::GameServerIdEnvironmentNotFound; + break; + case ErrDescriptions::GameServerIdUniqueIdNotLinked: + error_code = ErrCodes::GameServerIdUniqueIdNotLinked; + break; + case ErrDescriptions::ClientIdUniqueIdNotLinked: + error_code = ErrCodes::ClientIdUniqueIdNotLinked; + break; + case ErrDescriptions::DeviceMismatch: + error_code = ErrCodes::DeviceMismatch; + break; + case ErrDescriptions::CountryMismatch: + error_code = ErrCodes::CountryMismatch; + break; + case ErrDescriptions::EulaNotAccepted: + error_code = ErrCodes::EulaNotAccepted; + break; + case ErrDescriptions::UpdateRequired: + error_code = ErrCodes::UpdateRequired; + break; + case ErrDescriptions::SystemUpdateRequired: + error_code = ErrCodes::SystemUpdateRequired; + break; + case ErrDescriptions::ApplicationUpdateRequired: + error_code = ErrCodes::ApplicationUpdateRequired; + break; + case ErrDescriptions::UnauthorizedRequest: + error_code = ErrCodes::UnauthorizedRequest; + break; + case ErrDescriptions::RequestForbidden: + error_code = ErrCodes::RequestForbidden; + break; + case ErrDescriptions::ResourceNotFound: + error_code = ErrCodes::ResourceNotFound; + break; + case ErrDescriptions::PidNotFound: + error_code = ErrCodes::PidNotFound; + break; + case ErrDescriptions::NexAccountNotFound: + error_code = ErrCodes::NexAccountNotFound; + break; + case ErrDescriptions::GenerateTokenFailure: + error_code = ErrCodes::GenerateTokenFailure; + break; + case ErrDescriptions::RequestNotFound: + error_code = ErrCodes::RequestNotFound; + break; + case ErrDescriptions::MasterPinNotFound: + error_code = ErrCodes::MasterPinNotFound; + break; + case ErrDescriptions::MailTextNotFound: + error_code = ErrCodes::MailTextNotFound; + break; + case ErrDescriptions::SendMailFailure: + error_code = ErrCodes::SendMailFailure; + break; + case ErrDescriptions::ApprovalIdNotFound: + error_code = ErrCodes::ApprovalIdNotFound; + break; + case ErrDescriptions::InvalidEulaParameter: + error_code = ErrCodes::InvalidEulaParameter; + break; + case ErrDescriptions::InvalidEulaCountry: + error_code = ErrCodes::InvalidEulaCountry; + break; + case ErrDescriptions::InvalidEulaCountryAndVersion: + error_code = ErrCodes::InvalidEulaCountryAndVersion; + break; + case ErrDescriptions::EulaNotFound: + error_code = ErrCodes::EulaNotFound; + break; + case ErrDescriptions::PhraseNotAcceptable: + error_code = ErrCodes::PhraseNotAcceptable; + break; + case ErrDescriptions::AccountIdAlreadyExists: + error_code = ErrCodes::AccountIdAlreadyExists; + break; + case ErrDescriptions::AccountIdNotAcceptable: + error_code = ErrCodes::AccountIdNotAcceptable; + break; + case ErrDescriptions::AccountPasswordNotAcceptable: + error_code = ErrCodes::AccountPasswordNotAcceptable; + break; + case ErrDescriptions::MiiNameNotAcceptable: + error_code = ErrCodes::MiiNameNotAcceptable; + break; + case ErrDescriptions::MailAddressNotAcceptable: + error_code = ErrCodes::MailAddressNotAcceptable; + break; + case ErrDescriptions::AccountIdFormatInvalid: + error_code = ErrCodes::AccountIdFormatInvalid; + break; + case ErrDescriptions::AccountIdPasswordSame: + error_code = ErrCodes::AccountIdPasswordSame; + break; + case ErrDescriptions::AccountIdCharNotAcceptable: + error_code = ErrCodes::AccountIdCharNotAcceptable; + break; + case ErrDescriptions::AccountIdSuccessiveSymbol: + error_code = ErrCodes::AccountIdSuccessiveSymbol; + break; + case ErrDescriptions::AccountIdSymbolPositionNotAcceptable: + error_code = ErrCodes::AccountIdSymbolPositionNotAcceptable; + break; + case ErrDescriptions::AccountIdTooManyDigit: + error_code = ErrCodes::AccountIdTooManyDigit; + break; + case ErrDescriptions::AccountPasswordCharNotAcceptable: + error_code = ErrCodes::AccountPasswordCharNotAcceptable; + break; + case ErrDescriptions::AccountPasswordTooFewCharTypes: + error_code = ErrCodes::AccountPasswordTooFewCharTypes; + break; + case ErrDescriptions::AccountPasswordSuccessiveSameChar: + error_code = ErrCodes::AccountPasswordSuccessiveSameChar; + break; + case ErrDescriptions::MailAddressDomainNameNotAcceptable: + error_code = ErrCodes::MailAddressDomainNameNotAcceptable; + break; + case ErrDescriptions::MailAddressDomainNameNotResolved: + error_code = ErrCodes::MailAddressDomainNameNotResolved; + break; + case ErrDescriptions::ErrDesc787: + error_code = ErrCodes::ErrCode222587; + break; + case ErrDescriptions::ReachedAssociationLimit: + error_code = ErrCodes::ReachedAssociationLimit; + break; + case ErrDescriptions::ReachedRegistrationLimit: + error_code = ErrCodes::ReachedRegistrationLimit; + break; + case ErrDescriptions::CoppaNotAccepted: + error_code = ErrCodes::CoppaNotAccepted; + break; + case ErrDescriptions::ParentalControlsRequired: + error_code = ErrCodes::ParentalControlsRequired; + break; + case ErrDescriptions::MiiNotRegistered: + error_code = ErrCodes::MiiNotRegistered; + break; + case ErrDescriptions::DeviceEulaCountryMismatch: + error_code = ErrCodes::DeviceEulaCountryMismatch; + break; + case ErrDescriptions::PendingMigration: + error_code = ErrCodes::PendingMigration; + break; + case ErrDescriptions::WrongUserInput: + error_code = ErrCodes::WrongUserInput; + break; + case ErrDescriptions::WrongAccountPassword: + error_code = ErrCodes::WrongAccountPassword; + break; + case ErrDescriptions::WrongMailAddress: + error_code = ErrCodes::WrongMailAddress; + break; + case ErrDescriptions::WrongAccountPasswordOrMailAddress: + error_code = ErrCodes::WrongAccountPasswordOrMailAddress; + break; + case ErrDescriptions::WrongConfirmationCode: + error_code = ErrCodes::WrongConfirmationCode; + break; + case ErrDescriptions::WrongBirthDateOrMailAddress: + error_code = ErrCodes::WrongBirthDateOrMailAddress; + break; + case ErrDescriptions::WrongAccountMail: + error_code = ErrCodes::WrongAccountMail; + break; + case ErrDescriptions::AccountAlreadyDeleted: + error_code = ErrCodes::AccountAlreadyDeleted; + break; + case ErrDescriptions::AccountIdChanged: + error_code = ErrCodes::AccountIdChanged; + break; + case ErrDescriptions::AuthenticationLocked: + error_code = ErrCodes::AuthenticationLocked; + break; + case ErrDescriptions::DeviceInactive: + error_code = ErrCodes::DeviceInactive; + break; + case ErrDescriptions::CoppaAgreementCanceled: + error_code = ErrCodes::CoppaAgreementCanceled; + break; + case ErrDescriptions::DomainAccountAlreadyExists: + error_code = ErrCodes::DomainAccountAlreadyExists; + break; + case ErrDescriptions::AccountTokenExpired: + error_code = ErrCodes::AccountTokenExpired; + break; + case ErrDescriptions::InvalidAccountToken: + error_code = ErrCodes::InvalidAccountToken; + break; + case ErrDescriptions::AuthenticationRequired: + error_code = ErrCodes::AuthenticationRequired; + break; + case ErrDescriptions::ErrDesc844: + error_code = ErrCodes::ErrCode225844; + break; + case ErrDescriptions::ConfirmationCodeExpired: + error_code = ErrCodes::ConfirmationCodeExpired; + break; + case ErrDescriptions::MailAddressNotValidated: + error_code = ErrCodes::MailAddressNotValidated; + break; + case ErrDescriptions::ExcessiveMailSendRequest: + error_code = ErrCodes::ExcessiveMailSendRequest; + break; + case ErrDescriptions::CreditCardError: + error_code = ErrCodes::CreditCardError; + break; + case ErrDescriptions::CreditCardGeneralFailure: + error_code = ErrCodes::CreditCardGeneralFailure; + break; + case ErrDescriptions::CreditCardDeclined: + error_code = ErrCodes::CreditCardDeclined; + break; + case ErrDescriptions::CreditCardBlacklisted: + error_code = ErrCodes::CreditCardBlacklisted; + break; + case ErrDescriptions::InvalidCreditCardNumber: + error_code = ErrCodes::InvalidCreditCardNumber; + break; + case ErrDescriptions::InvalidCreditCardDate: + error_code = ErrCodes::InvalidCreditCardDate; + break; + case ErrDescriptions::InvalidCreditCardPin: + error_code = ErrCodes::InvalidCreditCardPin; + break; + case ErrDescriptions::InvalidPostalCode: + error_code = ErrCodes::InvalidPostalCode; + break; + case ErrDescriptions::InvalidLocation: + error_code = ErrCodes::InvalidLocation; + break; + case ErrDescriptions::CreditCardDateExpired: + error_code = ErrCodes::CreditCardDateExpired; + break; + case ErrDescriptions::CreditCardNumberWrong: + error_code = ErrCodes::CreditCardNumberWrong; + break; + case ErrDescriptions::CreditCardPinWrong: + error_code = ErrCodes::CreditCardPinWrong; + break; + case ErrDescriptions::Banned: + error_code = ErrCodes::Banned; + break; + case ErrDescriptions::BannedAccount: + error_code = ErrCodes::BannedAccount; + break; + case ErrDescriptions::BannedAccountAll: + error_code = ErrCodes::BannedAccountAll; + break; + case ErrDescriptions::BannedAccountInApplication: + error_code = ErrCodes::BannedAccountInApplication; + break; + case ErrDescriptions::BannedAccountInNexService: + error_code = ErrCodes::BannedAccountInNexService; + break; + case ErrDescriptions::BannedAccountInIndependentService: + error_code = ErrCodes::BannedAccountInIndependentService; + break; + case ErrDescriptions::BannedDevice: + error_code = ErrCodes::BannedDevice; + break; + case ErrDescriptions::BannedDeviceAll: + error_code = ErrCodes::BannedDeviceAll; + break; + case ErrDescriptions::BannedDeviceInApplication: + error_code = ErrCodes::BannedDeviceInApplication; + break; + case ErrDescriptions::BannedDeviceInNexService: + error_code = ErrCodes::BannedDeviceInNexService; + break; + case ErrDescriptions::BannedDeviceInIndependentService: + error_code = ErrCodes::BannedDeviceInIndependentService; + break; + case ErrDescriptions::BannedAccountTemporarily: + error_code = ErrCodes::BannedAccountTemporarily; + break; + case ErrDescriptions::BannedAccountAllTemporarily: + error_code = ErrCodes::BannedAccountAllTemporarily; + break; + case ErrDescriptions::BannedAccountInApplicationTemporarily: + error_code = ErrCodes::BannedAccountInApplicationTemporarily; + break; + case ErrDescriptions::BannedAccountInNexServiceTemporarily: + error_code = ErrCodes::BannedAccountInNexServiceTemporarily; + break; + case ErrDescriptions::BannedAccountInIndependentServiceTemporarily: + error_code = ErrCodes::BannedAccountInIndependentServiceTemporarily; + break; + case ErrDescriptions::BannedDeviceTemporarily: + error_code = ErrCodes::BannedDeviceTemporarily; + break; + case ErrDescriptions::BannedDeviceAllTemporarily: + error_code = ErrCodes::BannedDeviceAllTemporarily; + break; + case ErrDescriptions::BannedDeviceInApplicationTemporarily: + error_code = ErrCodes::BannedDeviceInApplicationTemporarily; + break; + case ErrDescriptions::BannedDeviceInNexServiceTemporarily: + error_code = ErrCodes::BannedDeviceInNexServiceTemporarily; + break; + case ErrDescriptions::BannedDeviceInIndependentServiceTemporarily: + error_code = ErrCodes::BannedDeviceInIndependentServiceTemporarily; + break; + case ErrDescriptions::ServiceNotProvided: + error_code = ErrCodes::ServiceNotProvided; + break; + case ErrDescriptions::UnderMaintenance: + error_code = ErrCodes::UnderMaintenance; + break; + case ErrDescriptions::ServiceClosed: + error_code = ErrCodes::ServiceClosed; + break; + case ErrDescriptions::NintendoNetworkClosed: + error_code = ErrCodes::NintendoNetworkClosed; + break; + case ErrDescriptions::NotProvidedCountry: + error_code = ErrCodes::NotProvidedCountry; + break; + case ErrDescriptions::RestrictionError: + error_code = ErrCodes::RestrictionError; + break; + case ErrDescriptions::RestrictedByAge: + error_code = ErrCodes::RestrictedByAge; + break; + case ErrDescriptions::RestrictedByParentalControls: + error_code = ErrCodes::RestrictedByParentalControls; + break; + case ErrDescriptions::OnGameInternetCommunicationRestricted: + error_code = ErrCodes::OnGameInternetCommunicationRestricted; + break; + case ErrDescriptions::InternalServerError: + error_code = ErrCodes::InternalServerError; + break; + case ErrDescriptions::UnknownServerError: + error_code = ErrCodes::UnknownServerError; + break; + case ErrDescriptions::UnauthenticatedAfterSalvage: + error_code = ErrCodes::UnauthenticatedAfterSalvage; + break; + case ErrDescriptions::AuthenticationFailureUnknown: + error_code = ErrCodes::AuthenticationFailureUnknown; + break; + } + } + + return error_code; +} + +} // namespace Service::ACT diff --git a/src/core/hle/service/act/act_errors.h b/src/core/hle/service/act/act_errors.h new file mode 100644 index 0000000000..8a65eaedaf --- /dev/null +++ b/src/core/hle/service/act/act_errors.h @@ -0,0 +1,613 @@ +// Copyright 2024 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include "core/hle/service/service.h" + +namespace Service::ACT { + +namespace ErrDescriptions { +enum { + MySuccess = 0, + MailAddressNotConfirmed = 1, + + // Library errors + LibraryError = 100, + NotInitialized = 101, + AlreadyInitialized = 102, + ErrDesc103 = 103, + ErrDesc104 = 104, + Busy = 111, + ErrDesc112 = 112, + NotImplemented = 191, + Deprecated = 192, + DevelopmentOnly = 193, + + InvalidArgument = 200, + InvalidPointer = 201, + OutOfRange = 202, + InvalidSize = 203, + InvalidFormat = 204, + InvalidHandle = 205, + InvalidValue = 206, + + InternalError = 300, + EndOfStream = 301, + FileError = 310, + FileNotFound = 311, + FileVersionMismatch = 312, + FileIOError = 313, + FileTypeMismatch = 314, + ErrDesc315 = 315, + + OutOfResource = 330, + ShortOfBuffer = 331, + OutOfMemory = 340, + OutOfGlobalHeap = 341, + + ErrDesc350 = 350, + ErrDesc351 = 351, + ErrDesc352 = 352, + ErrDesc360 = 360, + ErrDesc361 = 361, + ErrDesc362 = 362, + ErrDesc363 = 363, + + // Account management errors + AccountManagementError = 400, + AccountNotFound = 401, + SlotsFull = 402, + AccountNotLoaded = 411, + AccountAlreadyLoaded = 412, + AccountLocked = 413, + NotNetworkAccount = 421, + NotLocalAccount = 422, + AccountNotCommited = 423, + + ErrDesc431 = 431, + ErrDesc432 = 432, + ErrDesc433 = 433, + + ErrDesc451 = 451, + + AuthenticationError = 500, + + // HTTP errors + HttpError = 501, + ErrDesc502 = 502, + ErrDesc503 = 503, + ErrDesc504 = 504, + ErrDesc505 = 505, + ErrDesc506 = 506, + ErrDesc507 = 507, + ErrDesc508 = 508, + ErrDesc509 = 509, + ErrDesc510 = 510, + ErrDesc511 = 511, + ErrDesc512 = 512, + ErrDesc513 = 513, + ErrDesc514 = 514, + ErrDesc515 = 515, + ErrDesc516 = 516, + ErrDesc517 = 517, + ErrDesc518 = 518, + ErrDesc519 = 519, + ErrDesc520 = 520, + ErrDesc521 = 521, + ErrDesc522 = 522, + ErrDesc523 = 523, + ErrDesc524 = 524, + ErrDesc525 = 525, + ErrDesc526 = 526, + ErrDesc527 = 527, + ErrDesc528 = 528, + ErrDesc529 = 529, + ErrDesc530 = 530, + ErrDesc531 = 531, + ErrDesc532 = 532, + ErrDesc533 = 533, + ErrDesc534 = 534, + ErrDesc535 = 535, + ErrDesc536 = 536, + ErrDesc537 = 537, + ErrDesc538 = 538, + ErrDesc539 = 539, + ErrDesc540 = 540, + ErrDesc541 = 541, + ErrDesc542 = 542, + ErrDesc543 = 543, + ErrDesc544 = 544, + ErrDesc545 = 545, + ErrDesc546 = 546, + ErrDesc547 = 547, + ErrDesc548 = 548, + ErrDesc549 = 549, + ErrDesc550 = 550, + ErrDesc551 = 551, + ErrDesc552 = 552, + ErrDesc553 = 553, + + // Request errors + RequestError = 600, + BadFormatParameter = 601, + BadFormatRequest = 602, + RequestParameterMissing = 603, + WrongHttpMethod = 604, + + // Response errors + ResponseError = 620, + BadFormatResponse = 621, + ResponseItemMissing = 622, + ResponseTooLarge = 623, + + // Invalid parameter errors + InvalidCommonParameter = 650, + InvalidPlatformId = 651, + UnauthorizedDevice = 652, + InvalidSerialId = 653, + InvalidMacAddress = 654, + InvalidRegion = 655, + InvalidCountry = 656, + InvalidLanguage = 657, + UnauthorizedClient = 658, + DeviceIdEmpty = 659, + SerialIdEmpty = 660, + PlatformIdEmpty = 661, + + InvalidUniqueId = 671, + InvalidClientId = 672, + InvalidClientKey = 673, + + InvalidNexClientId = 681, + InvalidGameServerId = 682, + GameServerIdEnvironmentNotFound = 683, + GameServerIdUniqueIdNotLinked = 684, + ClientIdUniqueIdNotLinked = 685, + + DeviceMismatch = 701, + CountryMismatch = 702, + EulaNotAccepted = 703, + + // Update required errors + UpdateRequired = 710, + SystemUpdateRequired = 711, + ApplicationUpdateRequired = 712, + + UnauthorizedRequest = 720, + RequestForbidden = 722, + + // Resource not found errors + ResourceNotFound = 730, + PidNotFound = 731, + NexAccountNotFound = 732, + GenerateTokenFailure = 733, + RequestNotFound = 734, + MasterPinNotFound = 735, + MailTextNotFound = 736, + SendMailFailure = 737, + ApprovalIdNotFound = 738, + + // EULA errors + InvalidEulaParameter = 740, + InvalidEulaCountry = 741, + InvalidEulaCountryAndVersion = 742, + EulaNotFound = 743, + + // Not acceptable errors + PhraseNotAcceptable = 770, + AccountIdAlreadyExists = 771, + AccountIdNotAcceptable = 772, + AccountPasswordNotAcceptable = 773, + MiiNameNotAcceptable = 774, + MailAddressNotAcceptable = 775, + AccountIdFormatInvalid = 776, + AccountIdPasswordSame = 777, + AccountIdCharNotAcceptable = 778, + AccountIdSuccessiveSymbol = 779, + AccountIdSymbolPositionNotAcceptable = 780, + AccountIdTooManyDigit = 781, + AccountPasswordCharNotAcceptable = 782, + AccountPasswordTooFewCharTypes = 783, + AccountPasswordSuccessiveSameChar = 784, + MailAddressDomainNameNotAcceptable = 785, + MailAddressDomainNameNotResolved = 786, + ErrDesc787 = 787, + + ReachedAssociationLimit = 791, + ReachedRegistrationLimit = 792, + CoppaNotAccepted = 793, + ParentalControlsRequired = 794, + MiiNotRegistered = 795, + DeviceEulaCountryMismatch = 796, + PendingMigration = 797, + + // Wrong user input errors + WrongUserInput = 810, + WrongAccountPassword = 811, + WrongMailAddress = 812, + WrongAccountPasswordOrMailAddress = 813, + WrongConfirmationCode = 814, + WrongBirthDateOrMailAddress = 815, + WrongAccountMail = 816, + + AccountAlreadyDeleted = 831, + AccountIdChanged = 832, + AuthenticationLocked = 833, + DeviceInactive = 834, + CoppaAgreementCanceled = 835, + DomainAccountAlreadyExists = 836, + + AccountTokenExpired = 841, + InvalidAccountToken = 842, + AuthenticationRequired = 843, + ErrDesc844 = 844, + + ConfirmationCodeExpired = 851, + + MailAddressNotValidated = 861, + ExcessiveMailSendRequest = 862, + + // Credit card errors + CreditCardError = 870, + CreditCardGeneralFailure = 871, + CreditCardDeclined = 872, + CreditCardBlacklisted = 873, + InvalidCreditCardNumber = 874, + InvalidCreditCardDate = 875, + InvalidCreditCardPin = 876, + InvalidPostalCode = 877, + InvalidLocation = 878, + CreditCardDateExpired = 879, + CreditCardNumberWrong = 880, + CreditCardPinWrong = 881, + + // Ban errors + Banned = 900, + BannedAccount = 901, + BannedAccountAll = 902, + BannedAccountInApplication = 903, + BannedAccountInNexService = 904, + BannedAccountInIndependentService = 905, + BannedDevice = 911, + BannedDeviceAll = 912, + BannedDeviceInApplication = 913, + BannedDeviceInNexService = 914, + BannedDeviceInIndependentService = 915, + BannedAccountTemporarily = 921, + BannedAccountAllTemporarily = 922, + BannedAccountInApplicationTemporarily = 923, + BannedAccountInNexServiceTemporarily = 924, + BannedAccountInIndependentServiceTemporarily = 925, + BannedDeviceTemporarily = 931, + BannedDeviceAllTemporarily = 932, + BannedDeviceInApplicationTemporarily = 933, + BannedDeviceInNexServiceTemporarily = 934, + BannedDeviceInIndependentServiceTemporarily = 935, + + // Service not provided errors + ServiceNotProvided = 950, + UnderMaintenance = 951, + ServiceClosed = 952, + NintendoNetworkClosed = 953, + NotProvidedCountry = 954, + + // Restriction errors + RestrictionError = 970, + RestrictedByAge = 971, + RestrictedByParentalControls = 980, + OnGameInternetCommunicationRestricted = 981, + + InternalServerError = 991, + UnknownServerError = 992, + + UnauthenticatedAfterSalvage = 998, + AuthenticationFailureUnknown = 999, +}; +} + +namespace ErrCodes { +enum { + MySuccess = 220000, // 022-0000 + MailAddressNotConfirmed = 220001, // 022-0001 + + // Library errors + LibraryError = 220500, // 022-0500 + NotInitialized = 220501, // 022-0501 + AlreadyInitialized = 220502, // 022-0502 + ErrCode225103 = 225103, // 022-5103 + ErrCode225104 = 225104, // 022-5104 + Busy = 220511, // 022-0511 + ErrCode225112 = 225112, // 022-5112 + NotImplemented = 220591, // 022-0591 + Deprecated = 220592, // 022-0592 + DevelopmentOnly = 220593, // 022-0593 + + InvalidArgument = 220600, // 022-0600 + InvalidPointer = 220601, // 022-0601 + OutOfRange = 220602, // 022-0602 + InvalidSize = 220603, // 022-0603 + InvalidFormat = 220604, // 022-0604 + InvalidHandle = 220605, // 022-0605 + InvalidValue = 220606, // 022-0606 + + InternalError = 220700, // 022-0700 + EndOfStream = 220701, // 022-0701 + FileError = 220710, // 022-0710 + FileNotFound = 220711, // 022-0711 + FileVersionMismatch = 220712, // 022-0712 + FileIOError = 220713, // 022-0713 + FileTypeMismatch = 220714, // 022-0714 + ErrCode225315 = 225315, // 022-5315 + + OutOfResource = 220730, // 022-0730 + ShortOfBuffer = 220731, // 022-0731 + OutOfMemory = 220740, // 022-0740 + OutOfGlobalHeap = 220741, // 022-0741 + + ErrCode225350 = 225350, // 022-5350 + ErrCode225351 = 225351, // 022-5351 + ErrCode225352 = 225352, // 022-5352 + ErrCode225360 = 225360, // 022-5360 + ErrCode225361 = 225361, // 022-5361 + ErrCode225362 = 225362, // 022-5362 + ErrCode225363 = 225363, // 022-5363 + + // Account management errors + AccountManagementError = 221000, // 022-1000 + AccountNotFound = 221001, // 022-1001 + SlotsFull = 221002, // 022-1002 + AccountNotLoaded = 221011, // 022-1011 + AccountAlreadyLoaded = 221012, // 022-1012 + AccountLocked = 221013, // 022-1013 + NotNetworkAccount = 221021, // 022-1021 + NotLocalAccount = 221022, // 022-1022 + AccountCommited = 221023, // 022-1023 + + ErrCode225431 = 225431, // 022-5431 + ErrCode225432 = 225432, // 022-5432 + ErrCode225433 = 225433, // 022-5433 + + ErrCode221101 = 221101, // 022-1101 + + AuthenticationError = 222000, // 022-2000 + + // HTTP errors + HttpError = 222100, // 022-2100 + ErrCode225502 = 225502, // 022-5502 + ErrCode225503 = 225503, // 022-5503 + ErrCode225504 = 225504, // 022-5504 + ErrCode225505 = 225505, // 022-5505 + ErrCode225506 = 225506, // 022-5506 + ErrCode225507 = 225507, // 022-5507 + ErrCode225508 = 225508, // 022-5508 + ErrCode225509 = 225509, // 022-5509 + ErrCode225510 = 225510, // 022-5510 + ErrCode225511 = 225511, // 022-5511 + ErrCode225512 = 225512, // 022-5512 + ErrCode225513 = 225513, // 022-5513 + ErrCode225514 = 225514, // 022-5514 + ErrCode225515 = 225515, // 022-5515 + ErrCode225516 = 225516, // 022-5516 + ErrCode225517 = 225517, // 022-5517 + ErrCode225518 = 225518, // 022-5518 + ErrCode225519 = 225519, // 022-5519 + ErrCode225520 = 225520, // 022-5520 + ErrCode225521 = 225521, // 022-5521 + ErrCode225522 = 225522, // 022-5522 + ErrCode225523 = 225523, // 022-5523 + ErrCode225524 = 225524, // 022-5524 + ErrCode225525 = 225525, // 022-5525 + ErrCode225526 = 225526, // 022-5526 + ErrCode225527 = 225527, // 022-5527 + ErrCode225528 = 225528, // 022-5528 + ErrCode225529 = 225529, // 022-5529 + ErrCode225530 = 225530, // 022-5530 + ErrCode225531 = 225531, // 022-5531 + ErrCode225532 = 225532, // 022-5532 + ErrCode225533 = 225533, // 022-5533 + ErrCode225534 = 225534, // 022-5534 + ErrCode225535 = 225535, // 022-5535 + ErrCode225536 = 225536, // 022-5536 + ErrCode225537 = 225537, // 022-5537 + ErrCode225538 = 225538, // 022-5538 + ErrCode225539 = 225539, // 022-5539 + ErrCode225540 = 225540, // 022-5540 + ErrCode225541 = 225541, // 022-5541 + ErrCode225542 = 225542, // 022-5542 + ErrCode225543 = 225543, // 022-5543 + ErrCode225544 = 225544, // 022-5544 + ErrCode225545 = 225545, // 022-5545 + ErrCode225546 = 225546, // 022-5546 + ErrCode225547 = 225547, // 022-5547 + ErrCode225548 = 225548, // 022-5548 + ErrCode225549 = 225549, // 022-5549 + ErrCode225550 = 225550, // 022-5550 + ErrCode225551 = 225551, // 022-5551 + ErrCode225552 = 225552, // 022-5552 + ErrCode225553 = 225553, // 022-5553 + + // Request errors + RequestError = 222400, // 022-2400 + BadFormatParameter = 222401, // 022-2401 + BadFormatRequest = 222402, // 022-2402 + RequestParameterMissing = 222403, // 022-2403 + WrongHttpMethod = 222404, // 022-2404 + + // Response errors + ResponseError = 222420, // 022-2420 + BadFormatResponse = 222421, // 022-2421 + ResponseItemMissing = 222422, // 022-2422 + ResponseTooLarge = 222423, // 022-2423 + + // Invalid parameter errors + InvalidCommonParameter = 222450, // 022-2450 + InvalidPlatformId = 222451, // 022-2451 + UnauthorizedDevice = 222452, // 022-2452 + InvalidSerialId = 222453, // 022-2453 + InvalidMacAddress = 222454, // 022-2454 + InvalidRegion = 222455, // 022-2455 + InvalidCountry = 222456, // 022-2456 + InvalidLanguage = 222457, // 022-2457 + UnauthorizedClient = 222458, // 022-2458 + DeviceIdEmpty = 222459, // 022-2459 + SerialIdEmpty = 222460, // 022-2460 + PlatformIdEmpty = 222461, // 022-2461 + + InvalidUniqueId = 222471, // 022-2471 + InvalidClientId = 222472, // 022-2472 + InvalidClientKey = 222473, // 022-2473 + + InvalidNexClientId = 222481, // 022-2481 + InvalidGameServerId = 222482, // 022-2482 + GameServerIdEnvironmentNotFound = 222483, // 022-2483 + GameServerIdUniqueIdNotLinked = 222484, // 022-2484 + ClientIdUniqueIdNotLinked = 222485, // 022-2485 + + DeviceMismatch = 222501, // 022-2501 + CountryMismatch = 222502, // 022-2502 + EulaNotAccepted = 222503, // 022-2503 + + // Update required errors + UpdateRequired = 222510, // 022-2510 + SystemUpdateRequired = 222511, // 022-2511 + ApplicationUpdateRequired = 222512, // 022-2512 + + UnauthorizedRequest = 222520, // 022-2520 + RequestForbidden = 222522, // 022-2522 + + // Resource not found errors + ResourceNotFound = 222530, // 022-2530 + PidNotFound = 222531, // 022-2531 + NexAccountNotFound = 222532, // 022-2532 + GenerateTokenFailure = 222533, // 022-2533 + RequestNotFound = 222534, // 022-2534 + MasterPinNotFound = 222535, // 022-2535 + MailTextNotFound = 222536, // 022-2536 + SendMailFailure = 222537, // 022-2537 + ApprovalIdNotFound = 222538, // 022-2538 + + // EULA errors + InvalidEulaParameter = 222540, // 022-2540 + InvalidEulaCountry = 222541, // 022-2541 + InvalidEulaCountryAndVersion = 222542, // 022-2542 + EulaNotFound = 222543, // 022-2543 + + // Not acceptable errors + PhraseNotAcceptable = 222570, // 022-2570 + AccountIdAlreadyExists = 222571, // 022-2571 + AccountIdNotAcceptable = 222572, // 022-2572 + AccountPasswordNotAcceptable = 222573, // 022-2573 + MiiNameNotAcceptable = 222574, // 022-2574 + MailAddressNotAcceptable = 222575, // 022-2575 + AccountIdFormatInvalid = 222576, // 022-2576 + AccountIdPasswordSame = 222577, // 022-2577 + AccountIdCharNotAcceptable = 222578, // 022-2578 + AccountIdSuccessiveSymbol = 222579, // 022-2579 + AccountIdSymbolPositionNotAcceptable = 222580, // 022-2580 + AccountIdTooManyDigit = 222581, // 022-2581 + AccountPasswordCharNotAcceptable = 222582, // 022-2582 + AccountPasswordTooFewCharTypes = 222583, // 022-2583 + AccountPasswordSuccessiveSameChar = 222584, // 022-2584 + MailAddressDomainNameNotAcceptable = 222585, // 022-2585 + MailAddressDomainNameNotResolved = 222586, // 022-2586 + ErrCode222587 = 222587, // 022-2587 + + ReachedAssociationLimit = 222591, // 022-2591 + ReachedRegistrationLimit = 222592, // 022-2592 + CoppaNotAccepted = 222593, // 022-2593 + ParentalControlsRequired = 222594, // 022-2594 + MiiNotRegistered = 222595, // 022-2595 + DeviceEulaCountryMismatch = 222596, // 022-2596 + PendingMigration = 222597, // 022-2597 + + // Wrong user input errors + WrongUserInput = 222610, // 022-2610 + WrongAccountPassword = 222611, // 022-2611 + WrongMailAddress = 222612, // 022-2612 + WrongAccountPasswordOrMailAddress = 222613, // 022-2613 + WrongConfirmationCode = 222614, // 022-2614 + WrongBirthDateOrMailAddress = 222615, // 022-2615 + WrongAccountMail = 222616, // 022-2616 + + AccountAlreadyDeleted = 222631, // 022-2631 + AccountIdChanged = 222632, // 022-2632 + AuthenticationLocked = 222633, // 022-2633 + DeviceInactive = 222634, // 022-2634 + CoppaAgreementCanceled = 222635, // 022-2635 + DomainAccountAlreadyExists = 222636, // 022-2636 + + AccountTokenExpired = 222641, // 022-2641 + InvalidAccountToken = 222642, // 022-2642 + AuthenticationRequired = 222643, // 022-2643 + ErrCode225844 = 225844, // 022-5844 + + ConfirmationCodeExpired = 222651, // 022-2651 + + MailAddressNotValidated = 222661, // 022-2661 + ExcessiveMailSendRequest = 222662, // 022-2662 + + // Credit card errors + CreditCardError = 222670, // 022-2670 + CreditCardGeneralFailure = 222671, // 022-2671 + CreditCardDeclined = 222672, // 022-2672 + CreditCardBlacklisted = 222673, // 022-2673 + InvalidCreditCardNumber = 222674, // 022-2674 + InvalidCreditCardDate = 222675, // 022-2675 + InvalidCreditCardPin = 222676, // 022-2676 + InvalidPostalCode = 222677, // 022-2677 + InvalidLocation = 222678, // 022-2678 + CreditCardDateExpired = 222679, // 022-2679 + CreditCardNumberWrong = 222680, // 022-2680 + CreditCardPinWrong = 222681, // 022-2681 + + // Ban errors + Banned = 222800, // 022-2800 + BannedAccount = 222801, // 022-2801 + BannedAccountAll = 222802, // 022-2802 + BannedAccountInApplication = 222803, // 022-2803 + BannedAccountInNexService = 222804, // 022-2804 + BannedAccountInIndependentService = 222805, // 022-2805 + BannedDevice = 222811, // 022-2811 + BannedDeviceAll = 222812, // 022-2812 + BannedDeviceInApplication = 222813, // 022-2813 + BannedDeviceInNexService = 222814, // 022-2814 + BannedDeviceInIndependentService = 222815, // 022-2815 + BannedAccountTemporarily = 222821, // 022-2821 + BannedAccountAllTemporarily = 222822, // 022-2822 + BannedAccountInApplicationTemporarily = 222823, // 022-2823 + BannedAccountInNexServiceTemporarily = 222824, // 022-2824 + BannedAccountInIndependentServiceTemporarily = 222825, // 022-2825 + BannedDeviceTemporarily = 222831, // 022-2831 + BannedDeviceAllTemporarily = 222832, // 022-2832 + BannedDeviceInApplicationTemporarily = 222833, // 022-2833 + BannedDeviceInNexServiceTemporarily = 222834, // 022-2834 + BannedDeviceInIndependentServiceTemporarily = 222835, // 022-2835 + + // Service not provided errors + ServiceNotProvided = 222880, // 022-2880 + UnderMaintenance = 222881, // 022-2881 + ServiceClosed = 222882, // 022-2882 + NintendoNetworkClosed = 222883, // 022-2883 + NotProvidedCountry = 222884, // 022-2884 + + // Restriction errors + RestrictionError = 222900, // 022-2900 + RestrictedByAge = 222901, // 022-2901 + RestrictedByParentalControls = 222910, // 022-2910 + OnGameInternetCommunicationRestricted = 222911, // 022-2911 + + InternalServerError = 222931, // 022-2931 + UnknownServerError = 222932, // 022-2932 + + UnauthenticatedAfterSalvage = 222998, // 022-2998 + AuthenticationFailureUnknown = 222999, // 022-2999 + Unknown = 229999, // 022-9999 +}; +} + +/// Gets the ACT error code for the given result +u32 GetACTErrorCode(Result result); + +} // namespace Service::ACT diff --git a/src/core/hle/service/act/act_u.cpp b/src/core/hle/service/act/act_u.cpp index d28c3b07fe..a55c303c19 100644 --- a/src/core/hle/service/act/act_u.cpp +++ b/src/core/hle/service/act/act_u.cpp @@ -11,10 +11,31 @@ ACT_U::ACT_U(std::shared_ptr act) : Module::Interface(std::move(act), "a static const FunctionInfo functions[] = { // clang-format off {0x0001, &ACT_U::Initialize, "Initialize"}, - {0x0002, nullptr, "GetErrorCode"}, - {0x0006, &ACT_U::GetAccountDataBlock, "GetAccountDataBlock"}, + {0x0002, &ACT_U::GetErrorCode, "GetErrorCode"}, + {0x0003, nullptr, "GetLastResponseCode"}, + {0x0005, nullptr, "GetCommonInfo"}, + {0x0006, &ACT_U::GetAccountInfo, "GetAccountInfo"}, + {0x0007, nullptr, "GetResultAsync"}, + {0x0008, nullptr, "GetMiiImageData"}, + {0x0009, nullptr, "SetNfsPassword"}, {0x000B, nullptr, "AcquireEulaList"}, + {0x000C, nullptr, "AcquireTimeZoneList"}, {0x000D, nullptr, "GenerateUuid"}, + {0x000F, nullptr, "FindSlotNoByUuid"}, + {0x0010, nullptr, "SaveData"}, + {0x0011, nullptr, "GetTransferableId"}, + {0x0012, nullptr, "AcquireNexServiceToken"}, + {0x0013, nullptr, "GetNexServiceToken"}, + {0x0014, nullptr, "AcquireIndependentServiceToken"}, + {0x0015, nullptr, "GetIndependentServiceToken"}, + {0x0016, nullptr, "AcquireAccountInfo"}, + {0x0017, nullptr, "AcquireAccountIdByPrincipalId"}, + {0x0018, nullptr, "AcquirePrincipalIdByAccountId"}, + {0x0019, nullptr, "AcquireMii"}, + {0x001A, nullptr, "AcquireAccountInfoEx"}, + {0x001D, nullptr, "InquireMailAddress"}, + {0x001E, nullptr, "AcquireEula"}, + {0x001F, nullptr, "AcquireEulaLanguageList"}, // clang-format on }; RegisterHandlers(functions);