Skip to main content

SocialWebNet

Struct SocialWebNet 

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

The node’s managed WireGuard mesh: a set of peer tunnels sharing this node’s static keypair.

Implementations§

Source§

impl SocialWebNet

Source

pub fn new( keys: WgKeypair, bind_ip: IpAddr, read_timeout: Option<Duration>, ) -> SocialWebNet

Create an empty mesh for this node. bind_ip is where per-peer sockets bind (e.g. 0.0.0.0 / :: in production, 127.0.0.1 in tests); read_timeout bounds each pump so a quiet peer does not stall the loop.

Source

pub fn public_key_hex(&self) -> String

This node’s WireGuard public key as lowercase hex — what peers need to address it.

Source

pub fn peers(&self) -> Vec<String>

The peer ids currently in the mesh.

Source

pub fn add_peer( &mut self, peer_id: &str, peer_pubkey_hex: &str, endpoint: Option<SocketAddr>, ) -> Result<SocketAddr, String>

Add a peer to the mesh: bind a fresh socket and build its tunnel.

peer_pubkey_hex is the peer’s WireGuard public key (64 hex chars — as stored on a SocialPeer / carried in a ConnectionIdentifier). endpoint is where to send to if already known (else None, and it is learned by roaming from the first authenticated packet). Returns the local socket address bound for this peer, so the caller can advertise it back through the coordination plane. Idempotent-ish: adding an existing peer id replaces its tunnel (a fresh socket + handshake state).

Source

pub fn remove_peer(&mut self, peer_id: &str) -> bool

Remove a peer and drop its tunnel/socket. Returns whether the peer was present.

Source

pub fn local_addr(&self, peer_id: &str) -> Option<SocketAddr>

The local socket address bound for a peer, if present.

Source

pub fn set_peer_endpoint( &mut self, peer_id: &str, addr: SocketAddr, ) -> Result<(), String>

Point a peer’s tunnel at addr (e.g. once its endpoint is learned from the coordination plane).

Source

pub fn has_session(&self, peer_id: &str) -> bool

Whether a live WireGuard session exists with a peer.

Source

pub fn initiate_handshake(&mut self, peer_id: &str) -> Result<(), String>

Start the handshake with a peer (initiator side). Requires the peer’s endpoint to be set.

Source

pub fn send_to(&mut self, peer_id: &str, inner: &[u8]) -> Result<bool, String>

Encrypt and send one inner IPv6 packet to a peer. See WgTunnel::send_packet for the pre-session behaviour (a handshake init is sent and the caller retries once established).

Source

pub fn send_datagram( &mut self, peer_id: &str, src_port: u16, dst_port: u16, payload: &[u8], ) -> Result<bool, String>

Frame payload as an overlay IPv6/UDP datagram addressed to dst_port (from src_port) and send it to a peer. This is the application-message path over the mesh: the receiver recovers (src_port, dst_port, payload) with mesh_datagram::decode_datagram on the MeshPacket::inner it pumps. See super::mesh_datagram::ports for well-known ports.

Source

pub fn pump(&mut self, peer_id: &str) -> Result<TunnelEvent, String>

Pump one datagram for a single peer. See WgTunnel::pump.

Source

pub fn pump_all(&mut self) -> Vec<Result<MeshPacket, (String, String)>>

Pump every peer once, returning any decrypted inner packets (tagged by peer). Control-only traffic and idle sockets produce nothing. A per-peer error is surfaced against that peer id rather than aborting the whole sweep.

Source

pub fn tick_all(&mut self) -> Vec<(String, String)>

Drive WireGuard timers for every peer once (call ~1 Hz). Per-peer errors are collected, not fatal.

Auto Trait Implementations§

Blanket Implementations§

§

impl<S, A> Aggregate<Result<S, Error>> for A
where A: Aggregate<S>,

§

fn from_shares<T>(iter: T) -> Result<A, Error>
where T: IntoIterator<Item = Result<S, Error>>,

Aggregate shares in an MPC protocol.
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
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

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

§

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
§

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.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,