Friend Service "frd:u"
"frd:n"
Command Header
|
Description
|
0x00010000
|
GetHandleOfNdmStatusChangedEvent
|
0x00020000
|
Resume
|
0x00030040
|
SuspendAsync
|
0x00040000
|
QueryStatus
|
"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
Command Header
|
Description
|
0x04010100
|
CreateLocalAccount
|
0x04020040
|
?
|
0x04030040
|
SetLocalAccountId
|
0x04040000
|
?
|
0x04050000
|
Used in creating the user Mii. No cmdbuff parameters.
|
0x04060042
|
AddFriendOnline
|
0x04070D80
|
AddFriendOffline
|
0x040802C0
|
?
|
0x04090100
|
RemoveFriend
|
0x040A0100
|
UpdatePlayingGame
|
0x040B00C0
|
UpdatePreferences
|
0x040C0800
|
UpdateMii
|
0x040D0100
|
UpdateFavoriteGame
|
0x040E0040
|
UpdateNcPrincipalId
|
0x040F...
|
UpdateComment
|
0x04100000
|
?
|
HTTPS Requests
Trusted RootCAs
No RootCertChain(s) are used. For the nasc site, friends-module uses HTTPC:AddDefaultCert with the following certIDs: 0x1, 0x2, and 0x3.
Types
FriendKey
Offset
|
Size
|
Description
|
0x0
|
0x4
|
Principal ID
|
0x4
|
0x4
|
padding
|
0x8
|
0x8
|
Friend Code
|
GameKey
Offset
|
Size
|
Description
|
0x0
|
0x8
|
u64, Title ID
|
0x8
|
0x2
|
u16, Title Version
|
0xA
|
0x6
|
Unused padding.
|
Presence
Offset
|
Size
|
Description
|
0x0
|
0x4
|
u32 JoinAvailabilityFlag
|
0x4
|
0x4
|
u32 MatchmakeSystemType
|
0x8
|
0x4
|
u32 JoinGameID
|
0xC
|
0x4
|
u32 JoinGameMode
|
0x10
|
0x4
|
u32 OwnerPrincipalID
|
0x14
|
0x4
|
u32 JoinGroupID
|
0x18
|
0x14
|
u8 ApplicationArg[20]
|
Mii Data
Offset
|
Size
|
Description
|
0x0
|
0x1
|
bool, ProfanityFlag
|
0x1
|
0x1
|
Mii character set
|
0x2
|
0x1
|
bool, DirtyFlag
|
0x3
|
0x1
|
padding
|
0x4
|
0x5C
|
Mii data
|
Profile
Offset
|
Size
|
Description
|
0x0
|
0x1
|
u8, Region
|
0x1
|
0x1
|
u8, Country
|
0x2
|
0x1
|
u8, Area
|
0x3
|
0x1
|
u8, Language
|
0x4
|
0x1
|
u8, Platform, always 2 (PLATFORM_CTR)
|
0x5
|
0x3
|
padding
|
FriendProfile
Offset
|
Size
|
Description
|
0x0
|
0x8
|
Profile
|
0x8
|
0x10
|
GameKey of favorite game
|
0x18
|
0x4
|
u32, NcPrincipalID
|
0x1C
|
0x22
|
16-Character UTF-16 Personal Message (16 characters + null termination)
|
0x3E
|
0x2
|
padding
|
0x40
|
0x8
|
NEX Timestamp when this friend was last seen online
|
FriendInfo
Offset
|
Size
|
Description
|
0x0
|
0x10
|
FriendKey of this friend
|
0x10
|
0x8
|
NEX Timestamp when this friend was added to the friends list
|
0x18
|
0x1
|
The relationship with this friend
|
0x19
|
0x7
|
padding
|
0x20
|
0x48
|
FriendProfile of this friend
|
0x68
|
0x16
|
10-Character UTF-16 Screen Name (10 characters + null termination)
|
0x7E
|
0x1
|
u8, Mii character set
|
0x7F
|
0x1
|
padding
|
0x80
|
0x60
|
This friend's Mii
|
Notification Events
The friends module exposes a "Notification Events" system that allows client sessions to be notified of various related events.
A client sets its per-session notification event signaling handle using FRDU:AttachToEventNotification.
The client can then customize for which Notification Event Types it shall receive notifications using FRDU:SetNotifcationMask.
Once the handle has been signaled by the friends module, the client can use FRDU:GetEventNotification to receive the notifications.
Notification Event Types
Value
|
Description
|
1
|
The console went online.
|
2
|
The console went offline.
|
3
|
A friend is now present (went online).
|
5
|
A friend changed their Mii.
|
6
|
A friend changed their Profile.
|
7
|
A friend is no longer present (went offline).
|
8
|
A friend has added you back as a friend (if you had added them before as a "provisionally registered" friend).
|
9
|
A friend sent you a **joinable** game invitation(?) (only signaled when the console's JoinGameID matches that of the friend).
|
146
|
A friend changed their favorite game.
|
147
|
A friend changed their personal message.
|
149
|
A friend sent you an invitation. (signaled regardless of whether the console's JoinGameID matches that of the friend)
|
Relationship Types
Every valid entry in the internal friends list contains a relationship field.
Value
|
Description
|
0
|
The target has been added locally and on the server, but is only "provisionally registered." The target has not added you as a friend.
|
1
|
The target has been added locally and on the server and is fully registered: the target has also added you as a friend.
|
2
|
No relationship between you and the target has been found: neither you nor the target have added each other.
|
3
|
The relationship has been deleted: the target has deleted your friend card.
|
4
|
The target has been added locally: you were not online when you added the target. (presumably only happens when the "Local" method of adding a friend is used. When the system connects to the internet, a background task runs to register this relationship on the friends server.)
|
Attribute Flags
Flag
|
Description
|
0x1
|
Unknown (something like "target ever registered you"?), set when relationship type is 1, 3 or 4
|
0x2
|
Unknown, set only when relationship type is 1
|
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.
Official servers only support the letters L, C, S, D, I, T, J or U.
Value
|
Server Type Letter
|
0
|
L
|
1
|
C
|
2
|
S
|
3
|
D
|
4
|
I
|
5
|
T
|
6
|
U (fallback to default value)
|
7
|
J
|
8
|
X
|
9
|
A
|
10
|
B
|
11
|
C
|
12
|
D
|
13
|
E
|
14
|
F
|
15
|
G
|
16
|
H
|
17
|
I
|
18
|
J
|
19
|
K
|
20
|
L
|
21
|
M
|
22
|
N
|
23
|
O
|
24
|
P
|
25
|
Q
|
>=26
|
U
|