HightowerConnection

Struct HightowerConnection 

Source
pub struct HightowerConnection { /* private fields */ }
Expand description

Main connection to Hightower gateway with integrated WireGuard transport

Implementations§

Source§

impl HightowerConnection

Source

pub async fn connect( gateway_url: impl Into<String>, auth_token: impl Into<String>, ) -> Result<Self, ClientError>

Connect to a Hightower gateway

This method handles everything:

  • Checks for existing stored connection and restores if available
  • Otherwise: Generates WireGuard keypair, registers with gateway
  • Creates transport server on 0.0.0.0:0
  • Discovers network info via STUN using actual bound port
  • Adds gateway as peer
  • Persists connection info to storage (default: ~/.hightower-client/data)

Returns a ready-to-use connection with working transport

Source

pub async fn connect_ephemeral( gateway_url: impl Into<String>, auth_token: impl Into<String>, ) -> Result<Self, ClientError>

Connect without using persistent storage

Source

pub async fn connect_with_storage( gateway_url: impl Into<String>, auth_token: impl Into<String>, storage_dir: impl Into<PathBuf>, ) -> Result<Self, ClientError>

Connect with custom storage directory

Source

pub async fn connect_fresh( gateway_url: impl Into<String>, auth_token: impl Into<String>, ) -> Result<Self, ClientError>

Force a fresh registration even if stored connection exists

Source

pub async fn connect_with_auth_token( auth_token: impl Into<String>, ) -> Result<Self, ClientError>

Connect using default gateway (http://127.0.0.1:8008)

Source

pub fn node_id(&self) -> &str

Get the node ID assigned by the gateway

Source

pub fn assigned_ip(&self) -> &str

Get the IP address assigned by the gateway

Source

pub fn transport(&self) -> &TransportServer

Get the transport for sending/receiving data

Source

pub async fn ping_gateway(&self) -> Result<(), ClientError>

Ping the gateway over WireGuard to verify connectivity

Source

pub async fn get_peer_info( &self, node_id_or_ip: &str, ) -> Result<PeerInfo, ClientError>

Get peer information from the gateway

Accepts either a node_id (e.g., “ht-festive-penguin-abc123”) or an assigned IP (e.g., “100.64.0.5”)

Source

pub async fn dial(&self, peer: &str, port: u16) -> Result<Stream, ClientError>

Dial a peer by node ID or assigned IP

This method:

  1. Fetches peer info from gateway (public key, endpoint, etc.)
  2. Adds peer to WireGuard if not already present
  3. Dials the peer over the WireGuard network
§Arguments
  • peer - Node ID (e.g., “ht-festive-penguin”) or assigned IP (e.g., “100.64.0.5”)
  • port - Port to connect to on the peer
§Example
let connection = conn.dial("ht-festive-penguin-abc123", 8080).await?;
connection.send(b"Hello, peer!").await?;
Source

pub async fn disconnect(self) -> Result<(), ClientError>

Disconnect from the gateway and deregister

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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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,