ACT Services: Difference between revisions

DaniElectra (talk | contribs)
Add more ACT commands
DaniElectra (talk | contribs)
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.