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 de4439ece..331bc9cfb 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 ddac50e2d..46c4b62bc 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 cbd5e6eb1..ec9f954bb 100644 --- a/src/core/hle/service/act/act.h +++ b/src/core/hle/service/act/act.h @@ -38,9 +38,19 @@ public: 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 @@ public: * 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 41d8da4a4..281016022 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 000000000..cab975d00 --- /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 000000000..8a65eaeda --- /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 d28c3b07f..a55c303c1 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);