Tx3Relay

Struct Tx3Relay 

Source
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

Source

pub async fn new(config: Tx3RelayConfig) -> Result<Self>

Construct/bind a new Tx3Relay server instance with given config

Source

pub fn local_tls_cert_digest(&self) -> &TlsCertDigest

Get the local TLS certificate digest associated with this relay

Source

pub fn local_addrs(&self) -> &[Tx3Url]

Get our bound addresses, if any

Trait Implementations§

Source§

impl Drop for Tx3Relay

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,