Changes

Jump to navigation Jump to search
4,809 bytes added ,  23:17, 14 October 2023
Move data blocks to main page of ACT
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 363: Line 363:  
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]]
 +
| ?
 +
|-
 +
| 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]]
 +
| ?
 +
|-
 +
| 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]]
 +
| ?
 +
|-
 +
| 0x1B
 +
| 0x16
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| MiiName (NUL-terminated UTF-16 Mii name)
 +
|-
 +
| 0x1C
 +
| 0x11
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| AccountId? (ASCII NUL-terminated Nintendo Network ID)
 +
|-
 +
| 0x1D
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| ?
 +
|-
 +
| 0x1E
 +
| 0x41
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| TimeZoneId (ASCII Time Zone Location)
 +
|-
 +
| 0x1F
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| ?
 +
|-
 +
| 0x20
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| IsMailAddressValidated
 +
|-
 +
| 0x21
 +
| 0x4C
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| ?
 +
|-
 +
| 0x24
 +
| 0x1
 +
| [[ACTU:GetAccountDataBlock|GetAccountInfo]]
 +
| ?
 +
|-
 +
| 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]]
 +
| 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.
127

edits

Navigation menu