remote file access using RPC
- Install rust
- Install docker or podman, for
cross
- Install
cross
cargo install cross
- Add compilation targets defined in makefile
cargo b # build
cargo r --bin rfs_client # run client
cargo r --bin rfs_server # run server
cargo r --bin rfs_client -- --help # view help
cargo r --bin rfs_server -- --help # view help
make report # build report
make exe # build all targets (x86 windows, x86 linux, aarch64 linux)
This project contains an RPC-like library (rfs
) and server/client executables.
The executables (rfs_server
, rfs_client
) contain the following features:
- UDP only communications
- Implementations of various messaging protocols with various levels of fault tolerance
- At-most-once invocation semantics
- At-least-once invocation semantics
As the project imposes restrictions on what types of libraries can be used, the following protocols/stuff is custom:
- arbitrary serialization/deserialization
- request/reply formats
- proc-macro boilerplate code generation, inspired by
tarpc
There may be times when dispatch matches the method signature for a method early and routes the payload to the wrong method handler. This can happen if any method signature is a prefix of another, such as:
- SomeInterface::method
- SomeInterface::method_b
If this occurs, check that the signature collision unit test passes.
When rfs_server
is run on a windows machine and connected to from a unix machine,
the file paths in the filesystem tree window are displayed in full.
This is because unix paths do not take into account windows path delimiters \
,
while windows paths take into account both types /
and \
.