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.
Implementations§
§impl SignalingMethod
impl SignalingMethod
pub fn can_connect_directly(&self) -> bool
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 methodsfalse
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>
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 methodsNone
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>
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 methodsNone
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
impl BinProtRead for SignalingMethod
fn binprot_read<__BinProtR>( __binprot_r: &mut __BinProtR, ) -> Result<SignalingMethod, Error>
§impl BinProtWrite for SignalingMethod
impl BinProtWrite for SignalingMethod
fn binprot_write<__BinProtW>(
&self,
__binprot_w: &mut __BinProtW,
) -> Result<(), Error>where
__BinProtW: Write,
§impl Clone for SignalingMethod
impl Clone for SignalingMethod
§fn clone(&self) -> SignalingMethod
fn clone(&self) -> SignalingMethod
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl Debug for SignalingMethod
impl Debug for SignalingMethod
§impl<'de> Deserialize<'de> for SignalingMethod
impl<'de> Deserialize<'de> for SignalingMethod
§fn deserialize<D>(
deserializer: D,
) -> Result<SignalingMethod, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
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
impl Display for SignalingMethod
§fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
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
impl FromStr for SignalingMethod
§fn from_str(
s: &str,
) -> Result<SignalingMethod, <SignalingMethod as FromStr>::Err>
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
type Err = SignalingMethodParseError
§impl Ord for SignalingMethod
impl Ord for SignalingMethod
§impl PartialEq for SignalingMethod
impl PartialEq for SignalingMethod
§impl PartialOrd for SignalingMethod
impl PartialOrd for SignalingMethod
§impl Serialize for SignalingMethod
impl Serialize for SignalingMethod
§fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
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§
impl Freeze for SignalingMethod
impl RefUnwindSafe for SignalingMethod
impl Send for SignalingMethod
impl Sync for SignalingMethod
impl Unpin for SignalingMethod
impl UnwindSafe for SignalingMethod
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
§impl<T> BinProtSize for Twhere
T: BinProtWrite,
impl<T> BinProtSize for Twhere
T: BinProtWrite,
fn binprot_size(&self) -> usize
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
§impl<T> Conv for T
impl<T> Conv for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
Source§impl<T> FromBinProtStream for Twhere
T: BinProtRead,
impl<T> FromBinProtStream for Twhere
T: BinProtRead,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
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) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
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
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.