Changes

m
Expand on ACT data blocks
Line 1: Line 1:  
[[Category:Services]]
 
[[Category:Services]]
   −
The ACT module handles NNID accounts.
+
The ACT module handles NNID accounts. This module behaves very similarly to the [https://github.com/devkitPro/wut/blob/master/cafe/nn_act.def Wii U] implementation (nn::act)
    
= ACT service "act:u" =
 
= ACT service "act:u" =
Line 15: Line 15:  
|  
 
|  
 
| [[ACT:Initialize|Initialize]]
 
| [[ACT:Initialize|Initialize]]
|-
  −
| 0x00190044
  −
|
  −
| AcquireMii
   
|-
 
|-
 
| 0x00020040
 
| 0x00020040
 
|  
 
|  
 
| [[ACT:GetErrorCode|GetErrorCode]]
 
| [[ACT:GetErrorCode|GetErrorCode]]
 +
|-
 +
| 0x00030000
 +
|
 +
| GetLastResponseCode
 +
|-
 +
| 0x00040000
 +
|
 +
| ?
 +
|-
 +
| 0x00050082
 +
|
 +
| [[ACTU:GetCommonInfo|GetCommonInfo]]
 
|-
 
|-
 
| 0x000600C2
 
| 0x000600C2
 
|  
 
|  
| [[ACTU:GetAccountDataBlock|GetAccountDataBlock]]
+
| [[ACTU:GetAccountDataBlock|GetAccountDataBlock]]/GetAccountInfo
 +
|-
 +
| 0x00070082
 +
|
 +
| GetResultAsync
 +
|-
 +
| 0x000800C2
 +
|
 +
| GetMiiImageData
 +
|-
 +
| 0x00090180
 +
|
 +
| SetNfsPassword
 +
|-
 +
| 0x000A0040?
 +
|
 +
| ?
 
|-
 
|-
 
| 0x000B0042
 
| 0x000B0042
 
|
 
|
 
| AcquireEulaList
 
| AcquireEulaList
 +
|-
 +
| 0x000C0082
 +
|
 +
| AcquireTimeZoneList
 
|-
 
|-
 
| 0x000D0040
 
| 0x000D0040
 
|  
 
|  
 
| GenerateUuid
 
| GenerateUuid
 +
|-
 +
| 0x000E0080
 +
|
 +
| ?
 +
|-
 +
| 0x000F0140
 +
|
 +
| FindSlotNoByUuid
 +
|-
 +
| 0x00100000
 +
|
 +
| ?
 +
|-
 +
| 0x00110080
 +
|
 +
| GetTransferableId
 +
|-
 +
| 0x00120102
 +
|
 +
| AcquireNexServiceToken
 +
|-
 +
| 0x00130002
 +
|
 +
| GetNexServiceToken
 +
|-
 +
| 0x00140382
 +
|
 +
| AcquireIndependentServiceToken
 +
|-
 +
| 0x00150002
 +
|
 +
| GetIndependentServiceToken
 +
|-
 +
| 0x00160082
 +
|
 +
| AcquireAccountInfo
 +
|-
 +
| 0x00170084
 +
|
 +
| AcquireAccountIdByPrincipalId
 +
|-
 +
| 0x00180044
 +
|
 +
| AcquirePrincipalIdByAccountId
 +
|-
 +
| 0x00190044
 +
|
 +
| AcquireMii
 +
|-
 +
| 0x001A0042
 +
|
 +
| AcquireAccountInfoEx
 +
|-
 +
| 0x001B0084
 +
|
 +
| AcquireOtherTypePrincipalID?
 +
|-
 +
| 0x001C0342
 +
|
 +
| ?
 +
|-
 +
| 0x001D0004
 +
|
 +
| InquireMailAddress
 +
|-
 +
| 0x001E0082
 +
|
 +
| AcquireEula
 +
|-
 +
| 0x001F0082
 +
|
 +
| AcquireEulaLanguageList
 +
|-
 +
| 0x00200382
 +
|
 +
| ?
 +
|-
 +
| 0x00210002
 +
|
 +
| ?
 +
|-
 +
| 0x00220342
 +
|
 +
| ?
 +
|-
 
|}
 
|}
   Line 45: Line 158:  
!  Available since system-version
 
!  Available since system-version
 
!  Description
 
!  Description
 +
|-
 +
| 0x04010080
 +
|
 +
| ?
 +
|-
 +
| 0x04020000
 +
|
 +
| [[ACTA:CreateConsoleAccount|CreateConsoleAccount]]
 +
|-
 +
| 0x04030040
 +
|
 +
| CommitConsoleAccount
 +
|-
 +
| 0x04040080
 +
|
 +
| [[ACTA:UnbindServerAccount|UnbindServerAccount]]
 +
|-
 +
| 0x04050040
 +
|
 +
| DeleteConsoleAccount
 +
|-
 +
| 0x04060240
 +
|
 +
| ?
 +
|-
 +
| 0x04070000
 +
|
 +
| ?
 +
|-
 +
| 0x04080080
 +
|
 +
| EnableAccountPasswordCache
 +
|-
 +
| 0x04090040
 +
|
 +
| [[ACTA:SetDefaultAccount|SetDefaultAccount]]
 +
|-
 +
| 0x040A0040
 +
|
 +
| ReplaceAccountId
 +
|-
 +
| 0x040B0040
 +
|
 +
| GetSupportContext
 +
|-
 +
| 0x040C0100
 +
|
 +
| ?
 +
|-
 +
| 0x040D00C0
 +
|
 +
| ?
 +
|-
 +
| 0x040E02C0
 +
|
 +
| ?
 +
|-
 +
| 0x040F0280
 +
|
 +
| ?
 +
|-
 +
| 0x04100040
 +
|
 +
| ?
 +
|-
 +
| 0x04110040
 +
|
 +
| ?
 +
|-
 +
| 0x041207C0
 +
|
 +
| [[ACTA:UpdateMii|UpdateMii]]
 
|-
 
|-
 
| 0x041300C2
 
| 0x041300C2
 
|  
 
|  
 
| UpdateMiiImage
 
| UpdateMiiImage
 +
|-
 +
| 0x04140182
 +
|
 +
| InquireAccountIdAvailability
 +
|-
 +
| 0x04150EC4
 +
|
 +
| BindToNewServerAccount
 +
|-
 +
| 0x041602C4
 +
|
 +
| BindToExistentServerAccount
 +
|-
 +
| 0x041702C4
 +
|
 +
| InquireBindingToExistentServerAccount
 +
|-
 +
| 0x04180042
 +
|
 +
| ?
 +
|-
 +
| 0x04190042
 +
|
 +
| ?
 +
|-
 +
| 0x041A01C2
 +
|
 +
| AcquireAccountTokenEx
 
|-
 
|-
 
| 0x041B0142
 
| 0x041B0142
 
|  
 
|  
 
| AgreeEula
 
| AgreeEula
 +
|-
 +
| 0x041C0042
 +
|
 +
| SyncAccountInfo
 +
|-
 +
| 0x041D0080
 +
|
 +
| ?
 +
|-
 +
| 0x041E0182
 +
|
 +
| UpdateAccountPassword
 +
|-
 +
| 0x041F0042
 +
|
 +
| ReissueAccountPassword
 +
|-
 +
| 0x04200180
 +
|
 +
| SetAccountPasswordInput
 
|-
 
|-
 
| 0x04210042
 
| 0x04210042
 
|  
 
|  
 
| UploadMii
 
| UploadMii
 +
|-
 +
| 0x04220042
 +
|
 +
| ?
 
|-
 
|-
 
| 0x04230082
 
| 0x04230082
 
|  
 
|  
 
| ValidateMailAddress
 
| ValidateMailAddress
 +
|-
 +
| 0x04240044
 +
|
 +
| ?
 +
|-
 +
| 0x04250042
 +
|
 +
| SendConfirmationMail
 +
|-
 +
| 0x04260044
 +
|
 +
| ?
 +
|-
 +
| 0x04270084
 +
|
 +
| ?
 +
|-
 +
| 0x04280044
 +
|
 +
| ApproveByCreditCard
 +
|-
 +
| 0x04290082
 +
|
 +
| SendCoppaCodeMail
 +
|-
 +
| 0x042A0080
 +
|
 +
| ?
 +
|-
 +
| 0x042B01C4
 +
|
 +
| ?
 +
|-
 +
| 0x042C0042
 +
|
 +
| ?
 +
|-
 +
| 0x042D0042
 +
|
 +
| ?
 +
|-
 +
| 0x042E0080
 +
|
 +
| ?
 +
|-
 +
| 0x042F0084
 +
|
 +
| UpdateAccountInfoEx
 +
|-
 +
| 0x04300044
 +
|
 +
| UpdateAccountMailAddress
 +
|-
 +
| 0x04310042
 +
|
 +
| ?
 +
|-
 +
| 0x04320042
 +
|
 +
| ?
 +
|-
 +
| 0x04330042
 +
|
 +
| ?
 +
|-
 +
| 0x04340003
 +
|
 +
| ?
 +
|-
 +
| 0x04350042
 +
|
 +
| DeleteServerAccount
 
|}
 
|}
   Line 66: Line 375:  
This is the service used by regular applications.
 
This is the service used by regular applications.
   −
=HTTPS Requests=
+
= Account slots =
 +
 
 +
Like the friends sysmodule, the ACT module supports multiple accounts internally, although this functionality is not exposed to the users. Unlike the Wii U which supports up to 12 accounts, the 3DS only has 8 account slots.
 +
 
 +
Some commands require require the account slot as an argument, which is 1-indexed. The value for using the current loaded account is 0xFE.
 +
 
 +
= DataBlocks =
 +
 
 +
Data blocks can be accessed from specific commands depending on the data that is requested. These follow a similar order to the Wii U [https://github.com/decaf-emu/decaf-emu/blob/master/src/libdecaf/src/nn/act/nn_act_enum.h ACTInfoTypes].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
!  BlkID
 +
!  Size
 +
!  Command needed
 +
!  Description
 +
|-
 +
| 0x1
 +
| 0x1
 +
| [[ACTU:GetCommonInfo|GetCommonInfo]]
 +
| Number of accounts
 +
|-
 +
| 0x2
 +
| 0x1
 +
| [[ACTU:GetCommonInfo|GetCommonInfo]]
 +
| Current account slot
 +
|-
 +
| 0x3
 +
| 0x1
 +
| [[ACTU:GetCommonInfo|GetCommonInfo]]
 +
| Default account slot
 +
|-
 +
| 0x4
 +
| 0x8
 +
| [[ACTU:GetCommonInfo|GetCommonInfo]]
 +
| ?
 +
|-
 +
| 0x5
 +
| 0x4
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| PersistentId
 +
|-
 +
| 0x6
 +
| 0x8
 +
| [[ACTU:GetCommonInfo|GetCommonInfo]]/[[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| CommonTransferableIdBase on GetCommonInfo / TransferableIdBase on GetAccountInfo
 +
|-
 +
| 0x7
 +
| 0x60
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| [[Mii#Mii_format|MiiData]]
 +
|-
 +
| 0x8
 +
| 0x11
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| AccountId (ASCII NUL-terminated Nintendo Network ID)
 +
|-
 +
| 0x9
 +
| 0x101
 +
| AcquireAccountInfo
 +
| Mail address
 +
|-
 +
| 0xA
 +
| 0x4
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| Birthday {u16 year; u8 month; u8 day;}
 +
|-
 +
| 0xB
 +
| 0x3
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| ASCII NUL-terminated Country Name
 +
|-
 +
| 0xC
 +
| 0x4
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| PrincipalId
 +
|-
 +
| 0xE
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| IsPasswordCacheEnabled
 +
|-
 +
| 0xF
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| Does nothing?
 +
|-
 +
| 0x11
 +
| 0xA0
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| struct{u32 PersistentID; u32 padding; u64 TransferableIDBase; u8[0x60] MiiData; char16_t[0xB] MachinUserName?; char[0x11] AccountID; u8 padding; struct{u16 year; u8 month; u8 day;}Birthday; u32 PrincipalID;}
 +
|-
 +
| 0x12
 +
| 0x4
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| ?
 +
|-
 +
| 0x13
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| Gender
 +
|-
 +
| 0x14
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| LastAuthenticationResult
 +
|-
 +
| 0x15
 +
| 0x11
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| AssignedAccountId (ASCII NUL-terminated Nintendo Network ID)
 +
|-
 +
| 0x16
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| ParentalControlSlotNo
 +
|-
 +
| 0x17
 +
| 0x4
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| SimpleAddressId ([[Config_Savegame#CountryInfo|CountryInfo]])
 +
|-
 +
| 0x19
 +
| 0x8
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| UtcOffset
 +
|-
 +
| 0x1A
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| IsCommited
 +
|-
 +
| 0x1B
 +
| 0x16
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| MiiName (NUL-terminated UTF-16 Mii name)
 +
|-
 +
| 0x1C
 +
| 0x11
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| NfsPassword
 +
|-
 +
| 0x1D
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| Bool: if EciVirtualAccount has a value
 +
|-
 +
| 0x1E
 +
| 0x41
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| TimeZoneId (ASCII Time Zone Location)
 +
|-
 +
| 0x1F
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| IsMiiUpdated
 +
|-
 +
| 0x20
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| IsMailAddressValidated
 +
|-
 +
| 0x21
 +
| 0x4C
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| ?
 +
|-
 +
| 0x24
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| IsServerAccountDeleted
 +
|-
 +
| 0x25
 +
| 0x101
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| MiiImageUrl (ASCII NUL-terminated URL to account mii image)
 +
|-
 +
| 0x26
 +
| 0x4
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| AssignedPrincipalId
 +
|-
 +
| 0x27
 +
| 0x4
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| ? (Only accessible with param[1] = 0xFE)
 +
|-
 +
| 0x28
 +
| 0x24
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| struct{char[0x21] NnasSubDomain?; char[0x3] NnasNfsEnv;}
 +
|-
 +
| 0x29
 +
| 0x24
 +
| [[ACTU:GetCommonInfo|GetCommonInfo]]
 +
| struct{char[0x21] DefaultNnasSubDomain?; char[0x3] DefaultNnasNfsEnv;}
 +
|-
 +
| 0x2A
 +
| 0x8
 +
| [[ACTU:GetCommonInfo|GetCommonInfo]]
 +
| ?
 +
|-
 +
| 0x2B
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| FpLocalAccountId
 +
|-
 +
| 0x2C
 +
| 0x2
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| Age
 +
|-
 +
| 0x2D
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| IsEnabledReceiveAds
 +
|-
 +
| 0x2E
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| IsOffDeviceAccessEnabled
 +
|-
 +
| 0x2F
 +
| 0x4
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| [[Cfg:TranslateCountryInfo|Translated]] SimpleAddressId ([[Config_Savegame#CountryInfo|CountryInfo]])
 +
|}
 +
 
 +
= HTTPS Requests =
    
With each request, ACT-sysmodule specifies request-header "X-Nintendo-Device-Model". This is the only *dedicated* request-header that's contains anything Old3DS/New3DS specific. This was implemented with [[9.0.0-20|9.0.0-X]], and presumably [[8.1.0-0_New3DS]]. The value is from a string initialized during ACT-sysmodule startup. The value-string is the [[Cfg:GetSystemModel|codename]] string for all 5 of the model values from [[Cfg:GetSystemModel]]. When the output from GetSystemModel is >=5(switch statement default case), it runs this: "len = snprintf(outstr, outmaxsize, "3DS-%u", model);"
 
With each request, ACT-sysmodule specifies request-header "X-Nintendo-Device-Model". This is the only *dedicated* request-header that's contains anything Old3DS/New3DS specific. This was implemented with [[9.0.0-20|9.0.0-X]], and presumably [[8.1.0-0_New3DS]]. The value is from a string initialized during ACT-sysmodule startup. The value-string is the [[Cfg:GetSystemModel|codename]] string for all 5 of the model values from [[Cfg:GetSystemModel]]. When the output from GetSystemModel is >=5(switch statement default case), it runs this: "len = snprintf(outstr, outmaxsize, "3DS-%u", model);"
   −
==Trusted Root CAs==
+
== Trusted Root CAs ==
 
ACT module uses a [[HTTP_Services|RootCertChain]] for all HTTPS requests, the only trusted root CA is [[SSLC:RootCertChainAddDefaultCert|default]] CertID 0x3.
 
ACT module uses a [[HTTP_Services|RootCertChain]] for all HTTPS requests, the only trusted root CA is [[SSLC:RootCertChainAddDefaultCert|default]] CertID 0x3.
   −
=New3DS=
+
= New3DS =
 
Even though ACT-sysmodule uses [[PTM_Services|ptm:s]], it doesn't use CheckNew3DS at all.
 
Even though ACT-sysmodule uses [[PTM_Services|ptm:s]], it doesn't use CheckNew3DS at all.
106

edits