Striven
2025-09-10 efb55753c680578cf2d68eabf5e5465b7ec9b86c
Add Register and GetDatacenters methods
3 files added
4 files modified
224 ■■■■■ changed files
00_packet_dumps/C2S-CloudServersProtocol__GetDatacenters_V1 patch | view | raw | blame | history
00_packet_dumps/C2S-LoginProtocol__LoginWithToken_V1 patch | view | raw | blame | history
00_packet_dumps/C2S-LoginProtocol__Register_V1 patch | view | raw | blame | history
04_rendezvous/01_protocols/01_loginprotocol.md 144 ●●●●● patch | view | raw | blame | history
04_rendezvous/01_protocols/02_cloudserversprotocol.md 34 ●●●●● patch | view | raw | blame | history
04_rendezvous/03_rendezvous_structure.md 24 ●●●● patch | view | raw | blame | history
04_rendezvous/05_rmc_protocol.md 22 ●●●● patch | view | raw | blame | history
00_packet_dumps/C2S-CloudServersProtocol__GetDatacenters_V1
Binary files differ
00_packet_dumps/C2S-LoginProtocol__LoginWithToken_V1
Binary files differ
00_packet_dumps/C2S-LoginProtocol__Register_V1
Binary files differ
04_rendezvous/01_protocols/01_loginprotocol.md
@@ -5,67 +5,62 @@
### Request
##### Full Packet Example
##### Example
```
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000  ED 0C 00 00 0E 00 4C 6F 67 69 6E 50 72 6F 74 6F  í.....LoginProto
00000010  63 6F 6C 00 01 05 00 00 00 21 00 4C 6F 67 69 6E  col......!.Login
00000020  50 72 6F 74 6F 63 6F 6C 3A 3A 4C 6F 67 69 6E 57  Protocol::LoginW
00000030  69 74 68 54 6F 6B 65 6E 5F 56 31 00 01 00 00 00  ithToken_V1.....
00000040  12 00 43 6C 69 65 6E 74 56 65 72 73 69 6F 6E 49  ..ClientVersionI
00000050  6E 66 6F 00 01 00 06 00 54 49 43 4B 45 54 00 03  nfo.....TICKET..
00000060  00 00 00 05 00 27 00 00 00 04 6E 02 7B 22 72 64  .....'....n.{"rd
00000070  76 5F 64 65 62 75 67 22 3A 22 30 2E 30 2E 31 22  v_debug":"0.0.1"
00000080  2C 22 72 64 76 5F 69 6E 74 72 6F 73 70 65 63 74  ,"rdv_introspect
00000090  69 6F 6E 22 3A 22 31 2E 31 32 2E 30 22 2C 22 72  ion":"1.12.0","r
000000A0  64 76 5F 6C 6F 67 69 6E 5F 71 75 65 75 65 22 3A  dv_login_queue":
000000B0  22 30 2E 30 2E 34 22 2C 22 72 64 76 5F 6D 61 74  "0.0.4","rdv_mat
000000C0  63 68 6D 61 6B 69 6E 67 22 3A 22 33 2E 31 36 2E  chmaking":"3.16.
000000D0  30 22 2C 22 72 64 76 5F 70 6C 61 79 65 72 73 74  0","rdv_playerst
000000E0  61 74 73 32 22 3A 22 32 2E 31 2E 33 22 2C 22 72  ats2":"2.1.3","r
000000F0  36 5F 73 65 73 73 69 6F 6E 22 3A 22 30 2E 30 2E  6_session":"0.0.
00000100  35 22 2C 22 72 36 61 7A 75 72 65 73 61 73 22 3A  5","r6azuresas":
00000110  22 30 2E 31 2E 31 22 2C 22 72 36 63 6C 6F 75 64  "0.1.1","r6cloud
00000120  73 65 72 76 65 72 73 22 3A 22 30 2E 38 2E 32 22  servers":"0.8.2"
00000130  2C 22 72 36 63 6F 6D 6D 65 72 63 65 22 3A 22 30  ,"r6commerce":"0
00000140  2E 33 2E 31 22 2C 22 72 36 63 6F 6E 66 69 67 22  .3.1","r6config"
00000150  3A 22 32 2E 30 2E 35 22 2C 22 72 36 64 79 6E 61  :"2.0.5","r6dyna
00000160  6D 69 63 73 68 6F 70 22 3A 22 31 2E 30 2E 30 22  micshop":"1.0.0"
00000170  2C 22 72 36 65 6E 64 67 61 6D 65 22 3A 22 30 2E  ,"r6endgame":"0.
00000180  37 2E 30 22 2C 22 72 36 66 65 61 74 73 6F 66 61  7.0","r6featsofa
00000190  72 6D 73 22 3A 22 30 2E 38 2E 30 22 2C 22 72 36  rms":"0.8.0","r6
000001A0  66 6C 65 65 74 22 3A 22 30 2E 31 2E 30 22 2C 22  fleet":"0.1.0","
000001B0  72 36 6B 61 72 6D 61 22 3A 22 31 2E 34 2E 31 22  r6karma":"1.4.1"
000001C0  2C 22 72 36 6D 61 74 63 68 6D 61 6B 69 6E 67 22  ,"r6matchmaking"
000001D0  3A 22 35 2E 30 2E 39 22 2C 22 72 36 70 65 6E 61  :"5.0.9","r6pena
000001E0  6C 74 69 65 73 22 3A 22 30 2E 35 2E 30 22 2C 22  lties":"0.5.0","
000001F0  72 36 70 6C 61 79 65 72 70 72 6F 66 69 6C 65 22  r6playerprofile"
00000200  3A 22 32 2E 35 2E 32 22 2C 22 72 36 70 6C 61 79  :"2.5.2","r6play
00000210  65 72 73 74 61 74 69 73 74 69 63 73 22 3A 22 32  erstatistics":"2
00000220  2E 30 2E 32 33 22 2C 22 72 36 72 65 63 6F 22 3A  .0.23","r6reco":
00000230  22 31 2E 30 2E 30 22 2C 22 72 36 72 65 77 61 72  "1.0.0","r6rewar
00000240  64 73 22 3A 22 30 2E 31 35 2E 30 22 2C 22 72 36  ds":"0.15.0","r6
00000250  73 65 61 73 6F 6E 73 22 3A 22 31 31 2E 30 2E 30  seasons":"11.0.0
00000260  22 2C 22 72 36 73 65 72 76 69 63 65 61 6C 69 61  ","r6servicealia
00000270  73 65 73 22 3A 22 30 2E 33 2E 37 22 2C 22 72 36  ses":"0.3.7","r6
00000280  73 65 73 73 69 6F 6E 6D 61 6E 61 67 65 72 22 3A  sessionmanager":
00000290  22 30 2E 31 33 2E 31 22 2C 22 72 36 73 74 6F 72  "0.13.1","r6stor
000002A0  65 22 3A 22 30 2E 38 2E 30 22 2C 22 72 36 75 62  e":"0.8.0","r6ub
000002B0  69 73 65 72 76 69 63 65 73 22 3A 22 31 2E 30 2E  iservices":"1.0.
000002C0  30 22 2C 22 73 61 6E 64 62 6F 78 64 61 74 61 22  0","sandboxdata"
000002D0  3A 22 30 2E 30 2E 30 22 7D 00 08 00 70 72 75 64  :"0.0.0"}...prud
000002E0  70 3A 2F 00                                      p:/.
00000000  6E 02 7B 22 72 64 76 5F 64 65 62 75 67 22 3A 22  n.{"rdv_debug":"
00000010  30 2E 30 2E 31 22 2C 22 72 64 76 5F 69 6E 74 72  0.0.1","rdv_intr
00000020  6F 73 70 65 63 74 69 6F 6E 22 3A 22 31 2E 31 32  ospection":"1.12
00000030  2E 30 22 2C 22 72 64 76 5F 6C 6F 67 69 6E 5F 71  .0","rdv_login_q
00000040  75 65 75 65 22 3A 22 30 2E 30 2E 34 22 2C 22 72  ueue":"0.0.4","r
00000050  64 76 5F 6D 61 74 63 68 6D 61 6B 69 6E 67 22 3A  dv_matchmaking":
00000060  22 33 2E 31 36 2E 30 22 2C 22 72 64 76 5F 70 6C  "3.16.0","rdv_pl
00000070  61 79 65 72 73 74 61 74 73 32 22 3A 22 32 2E 31  ayerstats2":"2.1
00000080  2E 33 22 2C 22 72 36 5F 73 65 73 73 69 6F 6E 22  .3","r6_session"
00000090  3A 22 30 2E 30 2E 35 22 2C 22 72 36 61 7A 75 72  :"0.0.5","r6azur
000000A0  65 73 61 73 22 3A 22 30 2E 31 2E 31 22 2C 22 72  esas":"0.1.1","r
000000B0  36 63 6C 6F 75 64 73 65 72 76 65 72 73 22 3A 22  6cloudservers":"
000000C0  30 2E 38 2E 32 22 2C 22 72 36 63 6F 6D 6D 65 72  0.8.2","r6commer
000000D0  63 65 22 3A 22 30 2E 33 2E 31 22 2C 22 72 36 63  ce":"0.3.1","r6c
000000E0  6F 6E 66 69 67 22 3A 22 32 2E 30 2E 35 22 2C 22  onfig":"2.0.5","
000000F0  72 36 64 79 6E 61 6D 69 63 73 68 6F 70 22 3A 22  r6dynamicshop":"
00000100  31 2E 30 2E 30 22 2C 22 72 36 65 6E 64 67 61 6D  1.0.0","r6endgam
00000110  65 22 3A 22 30 2E 37 2E 30 22 2C 22 72 36 66 65  e":"0.7.0","r6fe
00000120  61 74 73 6F 66 61 72 6D 73 22 3A 22 30 2E 38 2E  atsofarms":"0.8.
00000130  30 22 2C 22 72 36 66 6C 65 65 74 22 3A 22 30 2E  0","r6fleet":"0.
00000140  31 2E 30 22 2C 22 72 36 6B 61 72 6D 61 22 3A 22  1.0","r6karma":"
00000150  31 2E 34 2E 31 22 2C 22 72 36 6D 61 74 63 68 6D  1.4.1","r6matchm
00000160  61 6B 69 6E 67 22 3A 22 35 2E 30 2E 39 22 2C 22  aking":"5.0.9","
00000170  72 36 70 65 6E 61 6C 74 69 65 73 22 3A 22 30 2E  r6penalties":"0.
00000180  35 2E 30 22 2C 22 72 36 70 6C 61 79 65 72 70 72  5.0","r6playerpr
00000190  6F 66 69 6C 65 22 3A 22 32 2E 35 2E 32 22 2C 22  ofile":"2.5.2","
000001A0  72 36 70 6C 61 79 65 72 73 74 61 74 69 73 74 69  r6playerstatisti
000001B0  63 73 22 3A 22 32 2E 30 2E 32 33 22 2C 22 72 36  cs":"2.0.23","r6
000001C0  72 65 63 6F 22 3A 22 31 2E 30 2E 30 22 2C 22 72  reco":"1.0.0","r
000001D0  36 72 65 77 61 72 64 73 22 3A 22 30 2E 31 35 2E  6rewards":"0.15.
000001E0  30 22 2C 22 72 36 73 65 61 73 6F 6E 73 22 3A 22  0","r6seasons":"
000001F0  31 31 2E 30 2E 30 22 2C 22 72 36 73 65 72 76 69  11.0.0","r6servi
00000200  63 65 61 6C 69 61 73 65 73 22 3A 22 30 2E 33 2E  cealiases":"0.3.
00000210  37 22 2C 22 72 36 73 65 73 73 69 6F 6E 6D 61 6E  7","r6sessionman
00000220  61 67 65 72 22 3A 22 30 2E 31 33 2E 31 22 2C 22  ager":"0.13.1","
00000230  72 36 73 74 6F 72 65 22 3A 22 30 2E 38 2E 30 22  r6store":"0.8.0"
00000240  2C 22 72 36 75 62 69 73 65 72 76 69 63 65 73 22  ,"r6ubiservices"
00000250  3A 22 31 2E 30 2E 30 22 2C 22 73 61 6E 64 62 6F  :"1.0.0","sandbo
00000260  78 64 61 74 61 22 3A 22 30 2E 30 2E 30 22 7D 00  xdata":"0.0.0"}.
00000270  08 00 70 72 75 64 70 3A 2F 00                    ..prudp:/.
```
_[Full Request Packet](../../00_packet_dumps/C2S-LoginProtocol__LoginWithToken_V1)_
> [!NOTE]
> While this is a real packet sent, the ticket has been replaced with a dummy for security reasons. The normal ticket is a base64-encoded [JWT](../../03_ubisoft_services/04_initial_login_flow.md#ticket).
##### Parsing
| Name                | Description                                                         | Type                                             |
|---------------------|---------------------------------------------------------------------|--------------------------------------------------|
| Token               | Ticket obtained via UbiServices, identifying the connecting client. | [`String`](../03_rendezvous_structure.md#string) |
|---------------------|---------------------------------------------------------------------|---------------------------------------------------------------------|
| Token               | Ticket obtained via UbiServices, identifying the connecting client. | [`String`](../03_rendezvous_structure.md#structure-string)          |
| Client Version Info | Information about the client version                                | [`ClientVersionInfo`](#client-version-info)      |
| Diagnostic URL      | Unknown.                                                            | [`String`](../03_rendezvous_structure.md#string) |
| Diagnostic URL      | Unknown.                                                            | [`Station URL`](../03_rendezvous_structure.md#structure-stationurl) |
### Successful Response
@@ -74,9 +69,50 @@
##### Parsing
| Name                 | Description                                                        | Type                                             |
|----------------------|--------------------------------------------------------------------|--------------------------------------------------|
| User PID             | ID of the user profile that the connected client is identified as. | [`UUID`](../03_rendezvous_structure.md#uuid)     |
| Protocol URL         | Unknown.                                                           | [`String`](../03_rendezvous_structure.md#string) |
|----------------------|--------------------------------------------------------------------|---------------------------------------------------------------------|
| User PID             | ID of the user profile that the connected client is identified as. | [`UUID`](../03_rendezvous_structure.md#structure-uuid)              |
| Protocol URL         | Unknown.                                                           | [`Station URL`](../03_rendezvous_structure.md#structure-stationurl) |
| Required Redirection | Unknown exactly. Presumably self-explanatory.                      | `bool`                                           |
## Method: `Register`
Currently unknown exactly what this method does, although it is called after receiving a successful response from the [LoginWithToken method](#method-loginwithtoken).
### Request
##### Example
```
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000  04 00 00 00 2F 00 70 72 75 64 70 3A 2F 61 64 64  ..../.prudp:/add
00000010  72 65 73 73 3D 30 30 30 2E 30 30 30 2E 30 30 2E  ress=000.000.00.
00000020  30 30 30 3B 70 6F 72 74 3D 39 31 30 33 3B 73 69  000;port=9103;si
00000030  64 3D 31 35 00 2E 00 70 72 75 64 70 3A 2F 61 64  d=15...prudp:/ad
00000040  64 72 65 73 73 3D 30 30 30 30 30 30 30 30 30 30  dress=0000000000
00000050  30 30 30 3B 70 6F 72 74 3D 39 31 30 33 3B 73 69  000;port=9103;si
00000060  64 3D 31 35 00 2D 00 70 72 75 64 70 3A 2F 61 64  d=15.-.prudp:/ad
00000070  64 72 65 73 73 3D 30 30 30 30 30 30 30 30 30 30  dress=0000000000
00000080  30 30 3B 70 6F 72 74 3D 39 31 30 33 3B 73 69 64  00;port=9103;sid
00000090  3D 31 35 00 2D 00 70 72 75 64 70 3A 2F 61 64 64  =15.-.prudp:/add
000000A0  72 65 73 73 3D 30 30 30 30 30 30 30 30 30 30 30  ress=00000000000
000000B0  30 3B 70 6F 72 74 3D 39 31 30 33 3B 73 69 64 3D  0;port=9103;sid=
000000C0  31 35 00                                         15.
```
_[Full Request Packet](../../00_packet_dumps/C2S-LoginProtocol__Register_V1)_
> [!NOTE]
> While this is a real packet sent, local IP addresses have been replaced with dummies for privacy reasons. It is currently unknown how the IP addresses are produced.
##### Parsing
| Name         | Description | Type                                                                                                                             |
|--------------|-------------|----------------------------------------------------------------------------------------------------------------------------------|
| Station URLs | Unknown.    | [`List`](../03_rendezvous_structure.md#structure-listt)`<`[`Station URL`](../03_rendezvous_structure.md#structure-stationurl)`>` |
### Response
> [!NOTE]
> TODO: Example
##### Parsing
| Name          | Description                                   | Type                                                                |
|---------------|-----------------------------------------------|---------------------------------------------------------------------|
| Connection ID | Unknown exactly. Presumably self-explanatory. | `u32`                                                               |
| Url Public    | Unknown.                                      | [`Station URL`](../03_rendezvous_structure.md#structure-stationurl) |
04_rendezvous/01_protocols/02_cloudserversprotocol.md
@@ -0,0 +1,34 @@
## Overview
## Method: `GetDatacenters`
Fetches a list of available datacenters to the client. Currently unknown exactly what the datacenters are for and whether they contain actual URLs.
### Request
##### Example
_[Full Request Packet](../../00_packet_dumps/C2S-CloudServersProtocol__GetDatacenters_V1)_
##### Parsing
The request data is empty for this method.
### Successful Response
> [!NOTE]
> TODO: Example
##### Parsing
| Name        | Description                                    | Type                                                                                               |
|-------------|------------------------------------------------|----------------------------------------------------------------------------------------------------|
| Datacenters | A list of datacenters available to the client. | [`List`](../03_rendezvous_structure.md#structure-listt)`<`[`Datacenter`](#structure-datacenter)`>` |
## Structure: `Datacenter`
> [!NOTE]
> TODO: Example
##### Parsing
| Name     | Description | Type                                                       |
|----------|-------------|------------------------------------------------------------|
| String 1 | Unknown.    | [`String`](../03_rendezvous_structure.md#structure-string) |
| String 2 | Unknown.    | [`String`](../03_rendezvous_structure.md#structure-string) |
| String 3 | Unknown.    | [`String`](../03_rendezvous_structure.md#structure-string) |
04_rendezvous/03_rendezvous_structure.md
@@ -2,7 +2,7 @@
## Common Structures
### `Buffer`
### Structure: `Buffer`
##### Example
```
@@ -18,7 +18,7 @@
The length of the data is `4`, with the bytes being: `.{ 1, 2, 3, 4 }`.
### `String`
### Structure: `String`
##### Example
```
@@ -28,12 +28,12 @@
##### Parsing
| Name   | Description                                                 | Type                |
|--------|-------------------------------------------------------------|---------------------|
| Buffer | The UTF-8 encoded, null-terminated string data as a buffer. | [`Buffer`](#buffer) |
|--------|-------------------------------------------------------------|-------------------------------|
| Buffer | The UTF-8 encoded, null-terminated string data as a buffer. | [`Buffer`](#structure-buffer) |
Strings in RendezVous are null-terminated [buffers](#buffer) in UTF-8 encoding.
Strings in RendezVous are null-terminated [buffers](#structure-buffer) in UTF-8 encoding.
### `List<T>`
### Structure: `List<T>`
##### Example
```
@@ -48,6 +48,16 @@
| Number of Items | The number of individual items in the list. | `u32`                |
| Items           | The items in the list.                      | `T[Number of Items]` |
### `UUID`
### Structure: `StationURL`
> [!NOTE]
> TODO: Example
##### Parsing
| Name | Description             | Type                          |
|------|-------------------------|-------------------------------|
| URL  | The URL of the station. | [`String`](#structure-string) |
### Structure: `UUID`
> TODO
04_rendezvous/05_rmc_protocol.md
@@ -16,9 +16,9 @@
##### Parsing
| Name          | Description                                                                                                                                                 | Type                                            |
|---------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|
|---------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------|
| Packet Length | The total number of bytes in the packet, not including the length itself.                                                                                   | `u32`                                           |
| Protocol Name | The protocol service on the server that is responsible for managing this request                                                                            | [`String`](./03_rendezvous_structure.md#string) |
| Protocol Name | The protocol service on the server that is responsible for managing this request                                                                            | [`String`](./03_rendezvous_structure.md#structure-string) |
| Is Request?   | Whether or not this packet is for a _request_.                                                                                                              | `bool`                                          |
| ...           | See [Request Packet Format](#request-packet-format) or [Response Packet Format](#response-packet-format) for parsing the packet depending on `Is Request?`. | ...                                             |
@@ -47,11 +47,11 @@
##### Parsing
| Name           | Description                                                                                                                               | Type                                                                              |
|----------------|-------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------|
|----------------|-------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|
| ...            | See [Base Packet Format](#base-packet-format) for parsing the prologue of a request packet.                                               | ...                                                                               |
| Call ID        | The nonce token for this call to identify the response associated with this request.                                                      | `u32`                                                                             |
| Method Name    | The method to call on the server.                                                                                                         | [`String`](./03_rendezvous_structure.md#string)                                   |
| Class Versions | Version information about the data in the request                                                                                         | [`List`](./03_rendezvous_structure.md#list)`<`[`ClassVersion`](#class-version)`>` |
| Method Name    | The method to call on the server.                                                                                                         | [`String`](./03_rendezvous_structure.md#structure-string)                                    |
| Class Versions | Version information about the data in the request                                                                                         | [`List`](./03_rendezvous_structure.md#structure-listt)`<`[`ClassVersion`](#class-version)`>` |
| Request Data   | Raw data to pass to the request handler, see the respective [protocol and method specification](#known-protocols) to write and read this. | `<remaining bytes>`                                                               |
### `ClassVersion`
@@ -63,8 +63,8 @@
```
| Name           | Description                                       | Type                                            |
|----------------|---------------------------------------------------|-------------------------------------------------|
| Structure Name | The name of the structure to assign a version to. | [`String`](./03_rendezvous_structure.md#string) |
|----------------|---------------------------------------------------|-----------------------------------------------------------|
| Structure Name | The name of the structure to assign a version to. | [`String`](./03_rendezvous_structure.md#structure-string) |
| Version        | The version of the structure.                     | `u16`                                           |
## Response Packet Format
@@ -91,18 +91,18 @@
##### Parsing
| Name          | Description                                                                                                                                | Type                                            |
|---------------|--------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|
|---------------|--------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------|
| ...           | See [Response Packet Format](#response-packet-format) for parsing the prologue of a successful response packet.                            | ...                                             |
| Call ID       | The nonce token for the call to associate the response to the request.                                                                     | `u32`                                           |
| Method Name   | The method that was called by the client.                                                                                                  | [`String`](./03_rendezvous_structure.md#string) |
| Method Name   | The method that was called by the client.                                                                                                  | [`String`](./03_rendezvous_structure.md#structure-string) |
| Response Data | Raw data to pass to the response handler, see the respective [protocol and method specification](#known-protocols) to write and read this. | `<remaining bytes>`                             |
### Unsuccessful Response Format
##### Parsing
| Name            | Description                                                                                                        | Type                                            |
|-----------------|--------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|
|-----------------|--------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------|
| ...             | See [Response Packet Format](#response-packet-format) for parsing the prologue of an unsuccessful response packet. | ...                                             |
| Error Namespace | The category of error that occurred.                                                                               | [`String`](./03_rendezvous_structure.md#string) |
| Error Namespace | The category of error that occurred.                                                                               | [`String`](./03_rendezvous_structure.md#structure-string) |
| Error Code      | The code of the error in the specified namespace                                                                   | `u16`                                           |
| Call ID         | The nonce token for the call to associate the response to the request.                                             | `u32`                                           |