DSR Steam Communication

This handles setting up/closing down connections, voice packets, other steam management stuff.

Reading https://partner.steamgames.com/doc/api may be helpful.

The two primary functions of interest are

void GetSteamData_Packet(DLNRD::SteamSessionLight *SteamSessionLight, DLNRD::SteamSessionMemberLight *SteamSessionMemberLight, uint param_3,uint8_t *data, uint data_len) @141088020

and

SendSteamData_Packet1 @1410B3F58
SendSteamData_Packet2 @1410B58DC
SendSteamData_Packet3 @1410B584C
(the type is stored in the byte at data+6 at this point)

For sending SteamData packets, the send function must be queued as a task in the SteamSession. This is done by SteamSessionLight_Queue_SendSteamMessage @14109cfd0.

For steam callbacks, you want to get the callback functions from the DLNRD::SteamSurveillance class, created by Init_DLNRD::SteamSurveillance @14107b750, and it's accessed by a global pointer at 141da1ab0.

Packet Types

This list is a Work-In-Progress. Underlined types are fully understood. The functions which handle each type are labeled ``sendTypeXSteamMessage`` and ``readparseTypeXSteamMessage``

Prolog for all packets:

char magic[4] = "VRXN";
uint16_t header = 0x584;
uint8_t type

(note this is converted to big endian before sending)

4. SessionPropertyReq

9. SyncSessionMemberRequest1

10. SyncSessionMemberRequest2

11. SendHostSearchResponse

12. P2PCommunicationResponse

13. OnAuthTicket

15. Response sent by guest to type 46 packet

24. SessionProperties

29. StartGame

30. CreateSessionVisibleTask

31. CreateSessionInvisibleTask

34. SyncSessionMemberResponse

35. SearchHostResponse

36. ReceiveRandomNumber

37. SyncSessionMemberRequest3

38. Response packet sent by host upon receiving type 15

42. NotifyLeavePlayer

46. KickOutTask

49. Unk2

50. LeaveMember