From abbcd30c0ad8e15440c1c99b3369df29ba3bcb20 Mon Sep 17 00:00:00 2001
From: Striven <sg.striven@cutecat.club>
Date: Tue, 11 Nov 2025 16:22:39 +0000
Subject: [PATCH] Add SessionProtocol::CreateSession method

---
 00_packet_dumps/C2S-SessionProtocol__CreateSession_V1 |    0 
 04_rendezvous/05_rmc_protocol.md                      |   13 +++---
 04_rendezvous/01_rmc_protocols/sessionprotocol.md     |   66 +++++++++++++++++++++++++++++++++
 3 files changed, 73 insertions(+), 6 deletions(-)

diff --git a/00_packet_dumps/C2S-SessionProtocol__CreateSession_V1 b/00_packet_dumps/C2S-SessionProtocol__CreateSession_V1
new file mode 100644
index 0000000..c98aac1
--- /dev/null
+++ b/00_packet_dumps/C2S-SessionProtocol__CreateSession_V1
Binary files differ
diff --git a/04_rendezvous/01_rmc_protocols/sessionprotocol.md b/04_rendezvous/01_rmc_protocols/sessionprotocol.md
new file mode 100644
index 0000000..8652e47
--- /dev/null
+++ b/04_rendezvous/01_rmc_protocols/sessionprotocol.md
@@ -0,0 +1,66 @@
+# RendezVous: RMC Protocols: SessionProtocol
+
+The session protocol is presumably responsible for managing creating a game session, joining them and leaving them. A session is first created when logging into the game.
+
+## Method: `CreateSession`
+Creates a session as the name suggests. Unknown exactly what sessions are used for.
+
+### Request
+
+##### Example
+```
+Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
+
+00000000  0D 00 50 61 72 74 79 53 65 73 73 69 6F 6E 00 10  ..PartySession..
+00000010  DD 0B D5 FC 58 74 4D 36 9F C0 09 48 59 95 0D 00  Ý.ÕüXtM6ŸÀ.HY•..
+00000020  00 00 00 00 00 00 00 00 63 00 31 30 64 64 30 62  ........c.10dd0b
+00000030  64 35 66 63 35 38 37 34 34 64 33 36 39 66 63 30  d5fc58744d369fc0
+00000040  30 39 34 38 35 39 39 35 30 64 35 63 35 37 63 35  094859950d5c57c5
+00000050  61 32 64 38 66 37 65 33 36 33 66 66 66 66 66 66  a2d8f7e363ffffff
+00000060  66 66 66 66 66 66 66 66 66 66 30 30 30 30 30 30  ffffffffff000000
+00000070  30 30 30 30 30 30 30 30 30 30 30 31 66 66 66 66  000000000001ffff
+00000080  66 66 66 66 66 66 66 66 66 66 66 66 00           ffffffffffff.
+```
+
+> [!TIP]
+> This is just the request data portion of a full packet. Check out a [full request packet dump](../../00_packet_dumps/C2S-SessionProtocol__CreateSession_V1) for this call.
+
+##### Parsing
+| Name                | Description                                                         | Type                                                     |
+|---------------------|---------------------------------------------------------------------|----------------------------------------------------------|
+| Token               | Ticket obtained via UbiServices, identifying the connecting client. | [`String`](../03_structure.md#structure-string)          |
+| Client Version Info | Information about the client version                                | [`ClientVersionInfo`](#client-version-info)              |
+| Diagnostic URL      | Unknown.                                                            | [`Station URL`](../03_structure.md#structure-stationurl) |
+
+### Successful Response
+
+> [!NOTE]
+> TODO: Example
+
+##### Parsing
+
+> [!NOTE] It is not clear what much of the response for this method is for or does, and is extracted straight from the game disassembly.
+
+| Name      |              |              | Description                              | Type                                            |
+|-----------|--------------|--------------|------------------------------------------|-------------------------------------------------|
+| Unknown 1 |              |              | Unknown.                                 | `u64`                                           |
+| Unknown 2 |              |              | Unknown.                                 | `u32`                                           |
+| String 1  |              |              | Unknown.                                 | [`String`](../03_structure.md#structure-string) |
+| UUID 1    |              |              | Unknown.                                 | [`UUID`](../03_structure.md#structure-uuid)     |
+| Unknown 3 |              |              | Unknown.                                 | `u32`                                           |
+|           |              |              |                                          |                                                 |
+|           | **Branch 1** |              | If `Unknown 3` is not equal to `0`...    |                                                 |
+|           | String 2     |              | Unknown.                                 | [`String`](../03_structure.md#structure-string) |
+|           | UUID 2       |              | Unknown.                                 | [`UUID`](../03_structure.md#structure-uuid)     |
+|           | ???          |              | There may be some additional bytes here. | Unknown.                                        |
+|           | Unknown 4    |              | Unknown.                                 | `u64`                                           |
+|           | String 3     |              | Unknown.                                 | [`String`](../03_structure.md#structure-string) |
+|           |              |              |                                          |                                                 |
+|           | **Branch 2** |              | If `Unknown 3` is equal to `0`...        |                                                 |
+|           | Unknown 5    |              | Unknown.                                 | `u32`                                           |
+|           |              |              |                                          |                                                 |
+|           |              | **Branch 3** | If `Unknown 5` is not equal to `0`...    |                                                 |
+|           |              | String 4     | Unknown.                                 | [`String`](../03_structure.md#structure-string) |
+|           |              | ???          | There may be some additional bytes here. | Unknown.                                        |
+|           |              |              |                                          |                                                 |
+|           | Unknown 6    |              | Unknown.                                 | `u32`                                           |
\ No newline at end of file
diff --git a/04_rendezvous/05_rmc_protocol.md b/04_rendezvous/05_rmc_protocol.md
index 691b4b9..6875610 100644
--- a/04_rendezvous/05_rmc_protocol.md
+++ b/04_rendezvous/05_rmc_protocol.md
@@ -16,12 +16,13 @@
 
 Here are the currently understood RMC protocols implemented in HyperScape. Some appear to be standard to Ubisoft games as a whole, while others appear to be designed specifically for the game.
 
-| Protocol                                                                     | Description                                                       | HyperScape-specific? |
-|------------------------------------------------------------------------------|-------------------------------------------------------------------|----------------------|
-| [`LoginProtocol`](./01_rmc_protocols/loginprotocol.md)                       | Used for authenticating with an RMC server using a Ubisoft token. | ✖️                   |
-| [`CloudServersProtocol`](./01_rmc_protocols/cloudserversprotocol.md)         | Used for listing datacenters for connecting to game servers.      | ✔️                   |
-| [`ApexAntitoxicityProtocol`](./01_rmc_protocols/apexantitoxicityprotocol.md) | Currently unknown, presumably for managing bans and mutes.        | ✔️                   |
-| ...                                                                          | ...                                                               | ...                  |
+| Protocol                                                                     | Description                                                                                      | HyperScape-specific? |
+|------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|----------------------|
+| [`LoginProtocol`](./01_rmc_protocols/loginprotocol.md)                       | Used for authenticating with an RMC server using a Ubisoft token.                                | ✖️                    |
+| [`CloudServersProtocol`](./01_rmc_protocols/cloudserversprotocol.md)         | Used for listing datacenters for connecting to game servers.                                     | ✔️                    |
+| [`ApexAntitoxicityProtocol`](./01_rmc_protocols/apexantitoxicityprotocol.md) | Currently unknown, possibly for managing bans and mutes.                                         | ✔️                    |
+| [`SessionProtocol`](./01_rmc_protocols/sessionprotocol.md)                   | Presumably for creating, joining and leaving game sessions, but it is unknown what that entails. | ✔️                    |
+| ...                                                                          | ...                                                                                              | ...                  |
 
 > [!NOTE]
 > This list is far from complete.

--
Gitblit v1.10.0