rwws/PROTOCOL.md
2024-08-20 18:09:20 +02:00

48 lines
No EOL
1.6 KiB
Markdown

This file documents the websocket /api/ws
## Format
Packet id then arguments \
Some packets don't have arguments so send just the packet id \
There can be multiple packets in one message, those with variable length arguments have to be terminated
## Authentication
The first message from the server is:
- `0x6d 0x73`
The client should reply, in a single message:
1. `0xb6 0xc4`
2. client version (byte), right now it's 0
3. length of access key (byte)
4. access key, decoded from base64
Authentication complete, the server will send a disconnect if something's wrong, otherwise it will pong. \
If the client version is incorrect, the server sends a 0x01 disconnect, and doesn't verify the access key.
## Commands
### Client -> Server
- `0x00` - Ping
* no body
* the server replies with 0x00 Pong
* also a keepalive, sent by client in at most 30 second intervals otherwise the server disconnects
- `0x01` - Disconnect
* first there's the reason as byte, see below
* second argument is a signed byte - message length in bytes
* then the utf8 encoded message
* after that the server doesn't wait for a reply it just closes the connection
- `0x02` - Settings
* setting id followed by value (length varies) terminated with 0x00
### Server -> Client
- `0x00` - Pong
* the body is a single signed long (8 bytes) which the current unix time
* a response to client's command of the same id
## Disconnect reasons
- `0x00` - unspecified
- `0x01` - incompatible client
- `0x02` - timeout (client didn't send ping)
- `0x03` - access key revoked
- `0x04` - server error
## Settings
- `0x00` - not used