Changes

Line 1: Line 1:  
[[Category:Services]]
 
[[Category:Services]]
βˆ’
= Friend Service "frd:u" =
+
= Friend User Service "frd:u" =
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 142: Line 142:  
|-
 
|-
 
| 0x002E0000
 
| 0x002E0000
βˆ’
| [[FRDU:GetServerTimeInterval|GetServerTimeInterval]]
+
| [[FRDU:GetServerTimeDifference|GetServerTimeDifference]]
 
|-
 
|-
 
| 0x002F0040
 
| 0x002F0040
Line 169: Line 169:  
|}
 
|}
   βˆ’
= "frd:n" =
+
= Friend Network Daemon Service "frd:n" =
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 176: Line 176:  
|-
 
|-
 
| 0x00010000
 
| 0x00010000
βˆ’
| GetHandleOfNdmStatusChangedEvent
+
| [[FRDN:GetHandleOfNdmStatusChangedEvent|GetHandleOfNdmStatusChangedEvent]]
 
|-
 
|-
 
| 0x00020000
 
| 0x00020000
βˆ’
| Resume
+
| [[FRDN:Resume|Resume]]
 
|-
 
|-
 
| 0x00030040
 
| 0x00030040
βˆ’
| SuspendAsync
+
| [[FRDN:SuspendAsync|SuspendAsync]]
 
|-
 
|-
 
| 0x00040000
 
| 0x00040000
βˆ’
| QueryStatus
+
| [[FRDN:QueryStatus|QueryStatus]]
 
|}
 
|}
   βˆ’
= "frd:a" =
+
= Friend Admin Service "frd:a" =
   βˆ’
This contains a similar (probably the same) command handler from 0x0001.... to 0x002F.... as them in frd:u. In addition, it also contains
+
Includes all the commands in [[Friend_Services#Friend_User_Service_.22frd:u.22|frd:u]], and, in addition:
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 201: Line 201:  
|-
 
|-
 
| 0x04020040
 
| 0x04020040
βˆ’
| ?
+
| [[FRDA:DeleteLocalAccount|DeleteLocalAccount]]
 
|-
 
|-
 
| 0x04030040
 
| 0x04030040
βˆ’
| [[FRDA:SetLocalAccountId|SetLocalAccountId]]
+
| [[FRDA:LoadLocalAccount|LoadLocalAccount]]
 
|-
 
|-
 
| 0x04040000
 
| 0x04040000
βˆ’
| ?
+
| [[FRDA:UnloadLocalAccount|UnloadLocalAccount]]
 
|-
 
|-
 
| 0x04050000
 
| 0x04050000
βˆ’
| Used in creating the user Mii. No cmdbuff parameters.
+
| [[FRDA:SaveLocalAccountData|SaveLocalAccountData]]
 
|-
 
|-
 
| 0x04060042
 
| 0x04060042
Line 216: Line 216:  
|-
 
|-
 
| 0x04070D80
 
| 0x04070D80
βˆ’
| AddFriendOffline
+
| [[FRDA:AddFriendOffline|AddFriendOffline]]
 
|-
 
|-
 
| 0x040802C0
 
| 0x040802C0
βˆ’
| ?
+
| [[FRDA:UpdateFriendScreenName|UpdateFriendScreenName]]
 
|-
 
|-
 
| 0x04090100
 
| 0x04090100
Line 225: Line 225:  
|-
 
|-
 
| 0x040A0100
 
| 0x040A0100
βˆ’
| UpdatePlayingGame
+
| [[FRDA:UpdatePlayingGame|UpdatePlayingGame]]
 
|-
 
|-
 
| 0x040B00C0
 
| 0x040B00C0
βˆ’
| UpdatePreferences
+
| [[FRDA:UpdatePreference|UpdatePreference]]
 
|-  
 
|-  
 
| 0x040C0800
 
| 0x040C0800
Line 234: Line 234:  
|-
 
|-
 
| 0x040D0100
 
| 0x040D0100
βˆ’
| UpdateFavoriteGame
+
| [[FRDA:UpdateFavoriteGame|UpdateFavoriteGame]]
 
|-
 
|-
 
| 0x040E0040
 
| 0x040E0040
βˆ’
| UpdateNcPrincipalId
+
| [[FRDA:SetNcPrincipalId|SetNcPrincipalId]]
 
|-
 
|-
βˆ’
| 0x040F...
+
| 0x040F0240
βˆ’
| UpdateComment
+
| [[FRDA:UpdateComment|UpdateComment]]
 
|-
 
|-
 
| 0x04100000
 
| 0x04100000
βˆ’
| ?
+
| [[FRDA:IncrementMoveCount|IncrementMoveCount]]
 
|}
 
|}
 +
 +
=Save Data=
 +
 +
See [[FRD_Savegame|FRD Savegame]].
    
=HTTPS Requests=
 
=HTTPS Requests=
Line 327: Line 331:  
| 0x14
 
| 0x14
 
| u8 ApplicationArg[20]
 
| u8 ApplicationArg[20]
 +
|}
 +
 +
==Preference==
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset !! Size !! Description
 +
|-
 +
| 0x0 || 0x1 || bool IsPublicMode, whether or not the online status is shown
 +
|-
 +
| 0x1 || 0x1 || bool IsShowGameMode, whether or not the currently played game is shown
 +
|-
 +
| 0x2 || 0x1 || bool IsShowPlayedMode, whether or not the play history is shown
 
|}
 
|}
   Line 463: Line 479:  
| 0x60
 
| 0x60
 
| This friend's [[Friend_Services#Mii_Data|Mii]]
 
| This friend's [[Friend_Services#Mii_Data|Mii]]
 +
|}
 +
 +
 +
 +
==GameAuthenticationData==
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset !! Size !! Description
 +
|-
 +
| 0x0 || 0x4 || [[Friend_Services#NASC_Result|NASC Login Result]]
 +
|-
 +
| 0x4 || 0x4 || HTTP Status Code
 +
|-
 +
| 0x8 || 0x20 || Server Address (string)
 +
|-
 +
| 0x28 || 0x2 || Server Port
 +
|-
 +
| 0x2A || 0x6 || padding
 +
|-
 +
| 0x30 || 0x100 || Token for game server authentication (string)
 +
|-
 +
| 0x130 || 0x8 || NEX Timestamp for server time
 +
|}
 +
 +
==ServiceLocatorData==
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset !! Size !! Description
 +
|-
 +
| 0x0 || 0x4 || [[Friend_Services#NASC_Result|NASC SVCLOC Result]]
 +
|-
 +
| 0x4 || 0x4 || HTTP Status Code
 +
|-
 +
| 0x8 || 0x80 || Service Host (string)
 +
|-
 +
| 0x88 || 0x100 || Service Token (string)
 +
|-
 +
| 0x188 || 0x1 || <code>statusdata</code> from NASC response
 +
|-
 +
| 0x189 || 0x7 || padding
 +
|-
 +
| 0x190 || 0x8 || NEX Timestamp for server time
 +
|}
 +
 +
=Approach Contexts=
 +
The approach context (in the form of an [[Friend_Services#Encrypted_ApproachContext_Payload|encrypted payload]]) of the console can be retrieved using [[FRDU:GetMyApproachContext]].
 +
 +
[[Friend_Services#Encrypted_ApproachContext_Payload|Encrypted payloads]] can be decrypted using [[FRDU:DecryptApproachContext]].
 +
 +
It is possible to add a friend using an [[Friend_Services#Encrypted_ApproachContext_Payload|encrypted payload]] using [[FRDU:AddFriendWithApproach]].
 +
 +
==ApproachContext==
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset !! Size !! Description
 +
|-
 +
| 0x0 || 0x48 || [[Friend_Services#Friend_Profile|Friend Profile]] of the console that created this approach context
 +
|-
 +
| 0x48 || 0x1 || bool, Has Mii
 +
|-
 +
| 0x49 || 0x1 || bool, Profanity Flag
 +
|-
 +
| 0x4A || 0x1 || u8, [[Mii#Mii_format|Mii Character Set]]
 +
|-
 +
| 0x4B || 0x70 || [[Friend_Services#Mii_Data|Friend Mii Data]] wrapped using [[APT:Wrap]] (Unwrapped size: 0x60)
 +
|-
 +
| 0xBB || 0x16 || 10-Character UTF-16 Screen Name (10 characters + null termination)
 +
|-
 +
| 0xD1 || 0x10F || unused
 +
|}
 +
 +
==Encrypted ApproachContext Payload==
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset !! Size !! Description
 +
|-
 +
| 0x0 || 0x1 || (u8) unknown, initialized to 1 internally, set to 1 when the PS encryption command succeeds, otherwise 0. Must be 1 when decrypting, otherwise error 0xE0E0C4E9 is returned
 +
|-
 +
| 0x1 || 0x1 || (u8) unknown, always set to 0
 +
|-
 +
| 0x2 || 0x1 || (u8) unknown, initialized to 2 internally, always set to either 1 when the PS encryption command succeeds, or otherwise 0. Must be 1 when decrypting, otherwise error 0xE0E0C4E9 is returned
 +
|-
 +
| 0x3 || 0x1 || (u8) unknown, always set to 0
 +
|-
 +
| 0x4 || 0x4 || u32, Principal ID (part of nonce)
 +
|-
 +
| 0x8 || 0x8 || u64, Friend Code (part of nonce)
 +
|-
 +
| 0x10 || 0x1E0 || [[Friend_Services#ApproachContext|ApproachContext]]
 +
|-
 +
| 0x1F0 || 0x10 || AES-CCM MAC over the encrypted payload at 0x10 thru 0x1F0
 +
|}
 +
 +
==Decrypted ApproachContext Payload==
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset !! Size !! Description
 +
|-
 +
| 0x0 || 0x1 || (u8) unknown, initialized to 1 internally, set to 1 when the PS encryption command succeeds, otherwise 0. Must be 1 when decrypting, otherwise error 0xE0E0C4E9 is returned
 +
|-
 +
| 0x1 || 0x1 || (u8) unknown, always set to 0
 +
|-
 +
| 0x2 || 0x1 || (u8) unknown, initialized to 2 internally, always set to either 1 when the PS encryption command succeeds, or otherwise 0. Must be 1 when decrypting, otherwise error 0xE0E0C4E9 is returned
 +
|-
 +
| 0x3 || 0x1 || (u8) unknown, always set to 0
 +
|-
 +
| 0x4 || 0x1 || bool, Has Mii
 +
|-
 +
| 0x5 || 0x1 || bool, Profanity Flag
 +
|-
 +
| 0x6 || 0x1 || u8, [[Mii#Mii_format|Mii Character Set]]
 +
|-
 +
| 0x7 || 0x1 || padding
 +
|-
 +
| 0x8 || 0x10 || [[Friend_Services#FriendKey|FriendKey]] of the console that created this approach context
 +
|-
 +
| 0x18 || 0x48 || [[Friend_Services#FriendProfile|FriendProfile]] of the console that created this approach context
 +
|-
 +
| 0x60 || 0x60 || [[Friend_Services#Mii_Data|Friend Mii Data]] of the console that created this approach context
 +
|-
 +
| 0xC0 || 0x16 || 10-Character UTF-16 Screen Name (10 characters + null termination)
 +
|-
 +
| 0xD6 || 0x12A || unused
 
|}
 
|}
   Line 475: Line 616:     
==Notification Event Types==
 
==Notification Event Types==
 +
The following event types are accessible to all frd:u and frd:a sessions:
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
βˆ’
! Value
+
! Value !! Description
βˆ’
! Description
+
|-
 +
| 1 || The console went online.
 +
|-
 +
| 2 || The console went offline.
 +
|-
 +
| 3 || A friend is now present (went online).
 
|-
 
|-
βˆ’
| 1
+
| 4 || A friend changed their presence, and the current system's JoinGameID is the same as their new or old JoinGameID.
βˆ’
| The console went online.
   
|-
 
|-
βˆ’
| 2
+
| 5 || A friend changed their Mii.
βˆ’
| The console went offline.
   
|-
 
|-
βˆ’
| 3
+
| 6 || A friend changed their [[Friend_Services#Profile|Profile]].
βˆ’
| A friend is now present (went online).
   
|-
 
|-
βˆ’
| 5
+
| 7 || A friend is no longer present (went offline).
βˆ’
| A friend changed their Mii.
   
|-
 
|-
βˆ’
| 6
+
| 8 || A friend has added you back as a friend (if you had added them before as a "provisionally registered" friend).
βˆ’
| A friend changed their [[Friend_Services#Profile|Profile]].
   
|-
 
|-
βˆ’
| 7
+
| 9 || A friend sent you an invitation, and the current system's JoinGameID matches that of the friend.
βˆ’
| A friend is no longer present (went offline).
+
|}
 +
 
 +
The following values, while signaled internally normally, are not exposed to sessions in any way:
 +
{| class="wikitable" border="1"
 
|-
 
|-
βˆ’
| 8
+
! Value !! Description
βˆ’
| A friend has added you back as a friend (if you had added them before as a "provisionally registered" friend).
   
|-
 
|-
βˆ’
| 9
+
| 145
βˆ’
| A friend sent you a **joinable** game invitation(?) (only signaled when the console's JoinGameID matches that of the friend).
+
| A friend changed their game mode description.
 
|-
 
|-
 
| 146
 
| 146
Line 509: Line 653:  
| 147
 
| 147
 
| A friend changed their personal message.
 
| A friend changed their personal message.
 +
|-
 +
| 148
 +
| A friend changed their presence, but their JoinGameID does not match that of the system.
 
|-
 
|-
 
| 149
 
| 149
βˆ’
| A friend sent you an invitation. (signaled regardless of whether the console's JoinGameID matches that of the friend)
+
| A friend sent you an invitation, but their JoinGameID does not match that of the system.
 
|}
 
|}
   Line 573: Line 720:  
|}
 
|}
   βˆ’
= Server Types =
+
=NASC Result=
βˆ’
The server type is stored internally as a combination of two values, the first value represents the server type letter and the second value is the number that follows it. For example, the production server type is "L1", so the first value is 0 and the second value is 1.
  βˆ’
 
  βˆ’
[https://github.com/kinnay/NintendoClients/wiki/Hpp-Server Official servers] only support the letters L, C, S, D, I, T, J or U.
  βˆ’
 
   
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
βˆ’
! Value
+
! Value !! Description
βˆ’
! Server Type Letter
   
|-
 
|-
βˆ’
| 0
+
| 001 || Success.
βˆ’
| L
   
|-
 
|-
βˆ’
| 1
+
| 101 || Game server is under maintenance.
βˆ’
| C
   
|-
 
|-
βˆ’
| 2
+
| 102 || Device is banned.
βˆ’
| S
   
|-
 
|-
βˆ’
| 3
+
| 107 || Invalid product code.
βˆ’
| D
   
|-
 
|-
βˆ’
| 4
+
| 109 || Invalid/missing request parameter.
βˆ’
| I
   
|-
 
|-
βˆ’
| 5
+
| 110 || Game server is no longer available.
βˆ’
| T
   
|-
 
|-
βˆ’
| 6
+
| 112 || Invalid SVC.
βˆ’
| U (fallback to default value)
   
|-
 
|-
βˆ’
| 7
+
| 119 || Invalid FPD version.
βˆ’
| J
   
|-
 
|-
βˆ’
| 8
+
| 120 || Invalid title version.
βˆ’
| X
   
|-
 
|-
βˆ’
| 9
+
| 121 || Invalid device certificate.
βˆ’
| A
   
|-
 
|-
βˆ’
| 10
+
| 122 || Invalid PID HMAC.
βˆ’
| B
   
|-
 
|-
βˆ’
| 11
+
| 123 || ROM ID is banned.
βˆ’
| C
   
|-
 
|-
βˆ’
| 12
+
| 125 || Invalid Game ID.
βˆ’
| D
   
|-
 
|-
βˆ’
| 13
+
| 127 || Invalid key hash.
βˆ’
| E
+
|}
βˆ’
|-
+
 
βˆ’
| 14
+
 
βˆ’
| F
+
= Server Types =
βˆ’
|-
+
The server type is stored internally as a combination of two values, the first value represents the server type letter and the second value is the number that follows it. For example, the production server type is "L1", so the first value is 0 and the second value is 1.
βˆ’
| 15
+
 
βˆ’
| G
+
[https://github.com/kinnay/NintendoClients/wiki/Hpp-Server Official servers] only support the letters L, C, S, D, I, T, J or U.
βˆ’
|-
+
 
βˆ’
| 16
+
{| class="wikitable" border="1"
βˆ’
| H
  βˆ’
|-
  βˆ’
| 17
  βˆ’
| I
  βˆ’
|-
  βˆ’
| 18
  βˆ’
| J
  βˆ’
|-
  βˆ’
| 19
  βˆ’
| K
  βˆ’
|-
  βˆ’
| 20
  βˆ’
| L
  βˆ’
|-
  βˆ’
| 21
  βˆ’
| M
  βˆ’
|-
  βˆ’
| 22
  βˆ’
| N
  βˆ’
|-
  βˆ’
| 23
  βˆ’
| O
  βˆ’
|-
  βˆ’
| 24
  βˆ’
| P
   
|-
 
|-
βˆ’
| 25
+
! Value !! 0 !! 1 !! 2 !! 3 !! 4 !! 5 !! 6 !! 7 !! 8 !! 9 !! 10 !! 11 !! 12 !! 13 !! 14 !! 15 !! 16 !! 17 !! 18 !! 19 !! 20 !! 21 !! 22 !! 23 !! 24 !! 25 !! >=26
βˆ’
| Q
   
|-
 
|-
βˆ’
| >=26
+
! Letter
βˆ’
| U
+
| L || C || S || D || I || T || U (fallback to default value) || J || X || A || B || C || D || E || F || G || H || I || J || K || L || M || N || O || P || Q || U
 
|}
 
|}
Trusted
588

edits