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);