Mesh Protocol - RainMz/NintendoClients GitHub Wiki
| Protocol Port |
Description |
| 0 |
Unreliable |
| 1 |
Reliable |
| Message Type |
Description |
| 0x01 |
Join request |
| 0x02 |
Join response |
| 0x04 |
Leave request |
| 0x08 |
Leave response |
| 0x10 |
Destroy mesh |
| 0x11 |
Destroy response |
| 0x20 |
Update mesh |
| 0x21 |
Kickout notice |
| 0x22 |
Dummy message |
| 0x23 |
Dummy ack |
| 0x24 |
Connection failure notice |
| 0x40 |
Greeting |
| 0x41 |
Migration finish |
| 0x42 |
Greeting response |
| 0x44 |
Migration start |
| 0x48 |
Migration response |
| 0x49 |
Multi migration start |
| 0x4A |
Multi migration rank decision |
| 0x80 |
Connection report |
| 0x81 |
Relay route directions |
The following version numbers are advertised during the connection request:
| Pia version |
Version |
| 5.19 - 5.20 |
0 |
| 5.21 - 5.27 |
1 |
| 5.28 - 5.29 |
2 |
| 5.30 - 5.43 |
3 |
Join request
Up to 5.10:
| Type |
Description |
| Uint8 |
Message type (1) |
| Uint8 |
Station index |
| Uint16 |
Padding (always 0) |
| StationAddress |
Station address |
| Uint32 |
Ack id |
5.11 - 5.18:
| Type |
Description |
| Uint8 |
Message type (1) |
| Uint8 |
Station index |
| Uint32 |
Ack id |
Join response (success)
If the join response is too big to be sent in a single packet it is split into fragments.
Up to 3.10:
| Type |
Description |
| Uint8 |
Message type (2) |
| Uint8 |
Number of stations in mesh, including joining station |
| Uint8 |
Index of host station |
| Uint8 |
Index of joining station |
| Uint8 |
Number of fragments |
| Uint8 |
Fragment index |
| Uint8 |
Number of station info entries in current fragment (N) |
| Uint8 |
Base index of station info in current fragment |
| StationInfo (xN) |
Station info list |
| Uint32 |
Ack id |
4.8 - 4.10:
| Type |
Description |
| Uint8 |
Message type (2) |
| Uint8 |
Number of stations in mesh, including joining station |
| Uint8 |
Index of host station |
| Uint8 |
Index of joining station |
| Uint8 |
Number of fragments |
| Uint8 |
Fragment index |
| Uint8 |
Number of station info entries in current fragment (N) |
| Uint8 |
Base index of station info in current fragment |
| Uint8 |
Maximum number of stations in first mesh |
| Uint8 |
Maximum number of stations in second mesh |
| Uint16 |
Padding |
| StationInfo (xN) |
Station info list |
| Uint32 |
Ack id |
5.18
| Type |
Description |
| Uint8 |
Message type (2) |
| Uint8 |
Number of stations in mesh, including joining station |
| Uint8 |
Index of host station |
| Uint8 |
Index of joining station |
| Uint8 |
Number of fragments |
| Uint8 |
Fragment index |
| Uint8 |
Number of station info entries in current fragment (N) |
| Uint8 |
Base index of station info entries in current fragment |
| Uint8 |
Maximum number of stations in first mesh |
| Uint8 |
Maximum number of stations in second mesh |
| Uint8 |
Maximum number of stations (total) |
| Uint8 |
Padding |
| Uint32 |
Update counter (incremented on each mesh update) |
| StationInfo (xN) |
Station info list |
| Uint32 |
Ack id |
Join response (denying)
| Offset |
Size |
Description |
| 0x0 |
1 |
Message type (2) |
| 0x1 |
1 |
Always 0 |
| 0x2 |
1 |
Always 0xFF |
| 0x3 |
1 |
Always 0xFF |
| 0x4 |
1 |
Reason |
Leave request
| Offset |
Size |
Description |
| 0x0 |
1 |
Message type |
| 0x1 |
1 |
Station index |
| 0x2 |
2 |
Padding |
| 0x4 |
8 |
StationAddress |
Leave response
| Offset |
Size |
Description |
| 0x0 |
1 |
Message type |
| 0x1 |
1 |
Station index |
| 0x2 |
2 |
Padding |
| 0x4 |
8 |
StationAddress |
Destroy request
| Offset |
Size |
Description |
| 0x0 |
1 |
Message type |
| 0x1 |
1 |
Station index |
| 0x2 |
2 |
Padding |
| 0x4 |
8 |
StationAddress |
Destroy response
| Offset |
Size |
Description |
| 0x0 |
1 |
Message type |
| 0x1 |
1 |
Station index |
Update mesh
Because this message is sent through the reliable mesh protocol it does not need to be split into fragments like the join response.
| Offset |
Size |
Description |
| 0x0 |
1 |
Message type |
| 0x1 |
1 |
Number of stations |
| 0x2 |
1 |
Host index |
| 0x3 |
1 |
Always 0 |
| 0x4 |
4 |
Update counter (incremented on each mesh update) |
| 0x8 |
1 |
Number of fragments |
| 0x9 |
1 |
Fragment index |
| 0xA |
1 |
Number of station info entries in current fragment |
| 0xB |
1 |
Base index of station info entries in current fragment |
| 0xC |
|
StationInfo entries |
StationInfo
Up to 5.9:
| Type |
Description |
| StationConnectionInfo |
Connection info |
| Uint8 |
Station index |
|
Padding such that the size becomes a multiple of 4 bytes. |
5.10 - 5.18:
| Offset |
Size |
Description |
| 0x0 |
0x3E |
StationLocation. If it takes up less than 0x3E bytes the remaining bytes are filled with 0's. |
| 0x3E |
1 |
Station index |
| 0x3F |
1 |
Padding |