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
This commit is contained in:
Daniel López Guimaraes 2024-08-21 20:01:05 +02:00 committed by GitHub
parent d8760dee6a
commit 5115f640c2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 1474 additions and 11 deletions

View File

@ -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

View File

@ -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<u8>();
const auto result = rp.Pop<Result>();
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<u8>();
const auto size = rp.Pop<u32>();
const auto block_id = rp.Pop<u32>();
[[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);

View File

@ -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:

View File

@ -12,15 +12,61 @@ ACT_A::ACT_A(std::shared_ptr<Module> 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);

View File

@ -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

View File

@ -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

View File

@ -11,10 +11,31 @@ ACT_U::ACT_U(std::shared_ptr<Module> 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);