SignalingMethod

Enum SignalingMethod 

pub enum SignalingMethod {
    Http(HttpSignalingInfo),
    Https(HttpSignalingInfo),
    HttpsProxy(u16, HttpSignalingInfo),
    P2p {
        relay_peer_id: PeerId,
    },
}
Expand description

WebRTC signaling transport method configuration.

SignalingMethod defines how WebRTC signaling messages (offers and answers) are transported between peers. Different methods provide flexibility for various network environments and infrastructure requirements.

§Method Types

  • HTTP/HTTPS: Direct connections to signaling servers
  • HTTPS Proxy: Connections through SSL gateway/proxy servers
  • P2P Relay: Signaling through existing peer connections

Each method encapsulates the necessary connection information to establish the signaling channel, which is used before the actual WebRTC peer-to-peer connection is established.

§Usage

Signaling methods can be parsed from string representations or constructed programmatically. They support serialization for storage and network transmission.

§Example

// Direct HTTPS signaling
let method = "/https/signal.example.com/443".parse::<SignalingMethod>()?;

// P2P relay through an existing peer
let method = SignalingMethod::P2p { relay_peer_id: peer_id };

Variants§

§

Http(HttpSignalingInfo)

HTTP signaling server connection.

Uses plain HTTP for signaling message exchange. Typically used for local development or testing environments where encryption is not required.

§

Https(HttpSignalingInfo)

HTTPS signaling server connection.

Uses secure HTTPS for signaling message exchange. Recommended for production environments to protect signaling data in transit.

§

HttpsProxy(u16, HttpSignalingInfo)

HTTPS proxy signaling connection.

Uses an SSL gateway/proxy server to reach the actual signaling server. The first parameter is the cluster ID for routing, and the second parameter contains the proxy server connection information.

§

P2p

P2P relay signaling through an existing peer connection.

Uses an already-established peer connection to relay signaling messages to other peers. This enables signaling when direct access to signaling servers is unavailable and provides redundancy in the signaling process.

Fields

§relay_peer_id: PeerId

The peer ID of the relay peer that will forward signaling messages.

Implementations§

§

impl SignalingMethod

pub fn can_connect_directly(&self) -> bool

Determines if this signaling method supports direct connections.

Direct connection methods (HTTP, HTTPS, HTTPS Proxy) can establish signaling channels immediately without requiring existing peer connections. P2P relay methods require an already-established peer connection to function.

§Returns
  • true for HTTP, HTTPS, and HTTPS Proxy methods
  • false for P2P relay methods

This is useful for connection strategy decisions and determining whether bootstrap connections are needed before signaling can occur.

pub fn http_url(&self) -> Option<String>

Constructs the HTTP(S) URL for sending WebRTC offers.

This method generates the appropriate URL endpoint for sending WebRTC signaling messages based on the signaling method configuration.

§URL Formats
  • HTTP: http://{host}:{port}/mina/webrtc/signal
  • HTTPS: https://{host}:{port}/mina/webrtc/signal
  • HTTPS Proxy: https://{host}:{port}/clusters/{cluster_id}/mina/webrtc/signal
§Returns
  • Some(String) containing the signaling URL for HTTP-based methods
  • None for P2P relay methods that don’t use HTTP endpoints
§Example
let method = SignalingMethod::Https(info);
let url = method.http_url(); // Some("https://signal.example.com:443/mina/webrtc/signal")

pub fn p2p_relay_peer_id(&self) -> Option<PeerId>

Extracts the relay peer ID for P2P signaling methods.

For P2P relay signaling methods, this returns the peer ID of the intermediate peer that will forward signaling messages. This is used to identify which existing peer connection should be used for relaying.

§Returns
  • Some(PeerId) for P2P relay methods
  • None for direct connection methods (HTTP/HTTPS)
§Usage

This method is typically used when setting up message routing for P2P relay signaling to determine which peer connection should handle the signaling traffic.

Trait Implementations§

§

impl BinProtRead for SignalingMethod

§

fn binprot_read<__BinProtR>( __binprot_r: &mut __BinProtR, ) -> Result<SignalingMethod, Error>
where __BinProtR: Read + ?Sized,

§

impl BinProtWrite for SignalingMethod

§

fn binprot_write<__BinProtW>( &self, __binprot_w: &mut __BinProtW, ) -> Result<(), Error>
where __BinProtW: Write,

§

impl Clone for SignalingMethod

§

fn clone(&self) -> SignalingMethod

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl Debug for SignalingMethod

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl<'de> Deserialize<'de> for SignalingMethod

§

fn deserialize<D>( deserializer: D, ) -> Result<SignalingMethod, <D as Deserializer<'de>>::Error>
where D: Deserializer<'de>,

Deserializes a signaling method from a string.

This uses the FromStr implementation to parse the string representation back into a SignalingMethod instance.

§Errors

Returns a deserialization error if the string cannot be parsed as a valid signaling method.

§

impl Display for SignalingMethod

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the signaling method as a URL path string.

This implementation converts the signaling method into its string representation following the URL format patterns. The formatted string can be parsed back using FromStr.

§Format Patterns
  • HTTP: /http/{host}/{port}
  • HTTPS: /https/{host}/{port}
  • HTTPS Proxy: /https_proxy/{cluster_id}/{host}/{port}
  • P2P Relay: /p2p/{peer_id}
§

impl FromStr for SignalingMethod

§

fn from_str( s: &str, ) -> Result<SignalingMethod, <SignalingMethod as FromStr>::Err>

Parses a string representation into a SignalingMethod.

This method parses URL-like strings that represent different signaling transport methods. The parser supports the following formats:

§Supported Formats
  • HTTP: /http/{host}/{port}
  • HTTPS: /https/{host}/{port}
  • HTTPS Proxy: /https_proxy/{cluster_id}/{host}/{port}
  • P2P Relay: /p2p/{peer_id}
§Examples
use openmina::signaling_method::SignalingMethod;

// HTTP signaling
let method: SignalingMethod = "/http/localhost/8080".parse()?;

// HTTPS signaling
let method: SignalingMethod = "/https/signal.example.com/443".parse()?;

// HTTPS proxy with cluster ID
let method: SignalingMethod = "/https_proxy/123/proxy.example.com/443".parse()?;
§Errors

Returns SignalingMethodParseError for various parsing failures:

  • Missing components (host, port, etc.)
  • Unknown method types
  • Invalid numeric values (ports, cluster IDs)
  • Invalid host formats
§

type Err = SignalingMethodParseError

The associated error which can be returned from parsing.
§

impl Ord for SignalingMethod

§

fn cmp(&self, other: &SignalingMethod) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
§

impl PartialEq for SignalingMethod

§

fn eq(&self, other: &SignalingMethod) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
§

impl PartialOrd for SignalingMethod

§

fn partial_cmp(&self, other: &SignalingMethod) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
§

impl Serialize for SignalingMethod

§

fn serialize<S>( &self, serializer: S, ) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
where S: Serializer,

Serializes the signaling method as a string.

This uses the Display implementation to convert the signaling method to its string representation for serialization.

§

impl Eq for SignalingMethod

§

impl StructuralPartialEq for SignalingMethod

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
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

§

impl<T> BinProtSize for T
where T: BinProtWrite,

§

fn binprot_size(&self) -> usize

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Comparable<K> for Q
where Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromBinProtStream for T
where T: BinProtRead,

Source§

fn read_from_stream<R>(r: &mut R) -> Result<Self, Error>
where R: Read,

Decodes bytes from reader of byte stream into the specified type T. This function assumes that the data is prepended with 8-bytes little endian integer specirying the size. Read more
§

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.

§

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

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

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

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> ToSmolStr for T
where T: Display + ?Sized,

§

fn to_smolstr(&self) -> SmolStr

Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
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<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
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

§

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

§

impl<T> MaybeSendSync for T