Expand description
Remote copy protocol definitions for source-destination communication.
§Protocol Overview
The remote copy protocol uses TCP for communication between source and destination. The source listens on two ports: a control port for bidirectional messages and a data port for file transfers. Both sides exchange messages to coordinate directory creation, file transfers, and completion.
See docs/remote_protocol.md for the full protocol specification.
§Message Flow
Source Destination
| |
| ---- Directory(root, meta) -------> | Create root, store metadata
| ---- Directory(child, meta) ------> | Create child, store metadata
| ---- Symlink(...) ----------------> | Create symlink
| ---- DirStructureComplete --------> | Structure complete
| |
| <--- DirectoryCreated(root) ------- |
| <--- DirectoryCreated(child) ------ |
| |
| ~~~~ File(f, total=N) ~~~~~~~~~~~~> | Write file, track count
| ~~~~ File(...) ~~~~~~~~~~~~~~~~~~-> | ...
| | All files done → apply metadata
| |
| <--- DestinationDone -------------- | Close send side
| (close send side) | (detect EOF)
| (detect EOF) | Close connection§Error Communication
The protocol uses asymmetric error communication:
- Source → Destination: Must communicate failures (FileSkipped, SymlinkSkipped) so destination can track file counts correctly
- Destination → Source: Does NOT communicate failures. Destination handles errors locally and source continues sending the full structure.
§Shutdown Sequence
Shutdown is coordinated through TCP connection closure:
- Destination sends
DestinationDoneand closes its send side - Source detects EOF on recv, closes its send side
- Destination detects EOF on recv, closes connection
Structs§
- File
- File header sent on unidirectional streams, followed by raw file data.
- File
Metadata - Wrapper that includes size for comparison purposes.
- Metadata
- Rcpd
Config - Runtime
Stats - runtime statistics collected from a process (CPU time, memory usage)
- Source
Master Hello - SrcDst
- Tracing
Hello
Enums§
- Destination
Message - Messages sent from destination to source on the control stream.
- Master
Hello - Rcpd
Result - Rcpd
Role - Source
Message - Messages sent from source to destination on the control stream.
Type Aliases§
- Cert
Fingerprint - TLS certificate fingerprint (SHA-256 of DER-encoded certificate).