pub struct Tx3Relay { /* private fields */ }Expand description
A tx3-rst relay server.
Note: unless you are writing test code, rather than using this directly
you probably want to use the commandline binary executable tx3-relay.
§The tx3 relay protocol
Tx3 relay functions via TLS secured control streams, and rendezvous TCP splicing. A client (typically behind a NAT) who wishes to be addressable establishes a TLS secured control stream to a known relay server. If the relay server agrees to relay, a single “all-clear” byte is sent back in response.
client relay server
--+--- --------+---
| --- control open (TLS) --> |
| <-- "all-clear" (TLS) ---- |The client then takes the relay server’s url, replaces its tls cert digest with the client’s own tls cert digest to publish as the client’s url.
A peer who wishes to contact the client opens a TCP connection to the relay server, and forwards in plain-text the 32 byte certificate digest of the target it wishes to connect to. The server generates a unique 32 byte “splice token” to identify the incoming connection, and forwards that splice token over the secure control channel to the target client.
If the client wishes to accept the incoming connection, it opens a new TCP connection to the relay server, and forwards that splice token. The server splices the connections together, and the client and peer proceed to handshake TLS over the resulting tunnelled connection.
client relay server peer
--+--- ------+----- --+-
| | <-- tls digest over (TCP) -- |
| <-- splice token (TLS) -- | |
| -- splice token (TCP) --> | |
| relay server splices TCP connections |
| <------------------- TLS handshaking ------------------> |Implementations§
Source§impl Tx3Relay
impl Tx3Relay
Sourcepub async fn new(config: Tx3RelayConfig) -> Result<Self>
pub async fn new(config: Tx3RelayConfig) -> Result<Self>
Construct/bind a new Tx3Relay server instance with given config
Sourcepub fn local_tls_cert_digest(&self) -> &TlsCertDigest
pub fn local_tls_cert_digest(&self) -> &TlsCertDigest
Get the local TLS certificate digest associated with this relay
Sourcepub fn local_addrs(&self) -> &[Tx3Url]
pub fn local_addrs(&self) -> &[Tx3Url]
Get our bound addresses, if any