Go to file
John Brooks 346971368b core: Refactor network reconnection to fix onion republication
A race would cause a call to AddOnionPorts that was blocked waiting for
a control connection to try to publish the service twice, because the
onion republication wasn't done until after the connection status
change.

This is fixed by refactoring the control connection setup to do all
setup before signalling the state change, including copying the list of
onions to publish. The code is slightly cleaner now as well.
2016-09-15 18:16:00 -06:00
backend core: Change the 'Ricochet' API again 2016-09-10 23:00:26 -06:00
cli core: Load contacts from config 2016-08-29 20:46:41 -06:00
core core: Refactor network reconnection to fix onion republication 2016-09-15 18:16:00 -06:00
rpc core: Load contacts from config 2016-08-29 20:46:41 -06:00
.gitignore gitignore 2016-08-02 17:36:28 -06:00
README.md Fix README markup. 2016-08-03 01:39:03 +02:00

README.md

This is an idea for the architecture of a Ricochet client. Don't get excited. It doesn't do anything.

The idea is to implement all client backend logic in Go, and export a RPC API for frontends.

Benefits:

  • We can have all network-facing and critical logic in Go, without being forced to use Go for frontends (because it lacks decent UI capability)
  • We can keep the current Qt UI implementation as one frontend
  • It's easy to build new frontends in anything that can use gRPC (like cli)
  • Backends are headless and frontends are detachable and interchangable
  • Can do some fancy sandboxing

Other ideas:

  • This is currently using RPC only for the backend<->frontend; would it make sense to RPC any other layers or distinct components? Could have security benefits.
  • In particular, we still have one process that has access to private keys, tor config, and untrusted network traffic. That sucks.
  • Can do frontend connection to backend over authorized onion for advanced setups

Structure:

  • core is the client logic implementation
  • rpc has gRPC/protobuf definitions & generated code
  • backend is the backend RPC server
  • cli is an example frontend client