3.2. Network Protocol

checkpoint, size, version, and session_id are sent as 64-bit little-endian numbers.

3.2.1. Client to Server

Prefix Data Description
joedb client_version first message, sent at connection time
P checkpoint pull
L checkpoint lock-pull
p checkpoint size data locked-push
U checkpoint size data push-unlock
u   unlock
H checkpoint hash (32 bytes) check SHA-256 hash code
i   ping (used to keep the connection alive)
Q   quit

3.2.2. Server to Client

Prefix Data Description
joedb server_version session_id checkpoint
reply to joedb.
server_version = 0 means client_version is rejected.
P checkpoint size data reply to P
L checkpoint size data reply to L
U   reply to U or p when the push succeeded
C   reply to U or p when the push failed (conflict)
R   reply to U or p when the push failed (read-only)
u   reply to u (no timeout)
t   reply to u, U, or p in case of timeout
H   reply to H, hash is matching
h   reply to H, hash mismatch
i   reply to i