pub enum SipConnection {
Channel(ChannelConnection),
Udp(UdpConnection),
Tcp(TcpConnection),
TcpListener(TcpListenerConnection),
Tls(TlsConnection),
TlsListener(TlsListenerConnection),
WebSocket(WebSocketConnection),
WebSocketListener(WebSocketListenerConnection),
}
Expand description
SIP Connection
SipConnection
is an enum that abstracts different transport protocols
used for SIP communication. It provides a unified interface for sending
SIP messages regardless of the underlying transport mechanism.
§Supported Transports
Udp
- UDP transport for connectionless communicationChannel
- In-memory channel for testing and local communicationTcp
- TCP transport for reliable connection-oriented communicationTls
- TLS transport for secure communication over TCPWebSocket
- WebSocket transport for web-based SIP clients
§Key Features
- Transport abstraction - uniform interface across protocols
- Reliability detection - distinguishes reliable vs unreliable transports
- Address management - tracks local and remote addresses
- Message sending - handles protocol-specific message transmission
- Via header processing - automatic received parameter handling
§Examples
use rsipstack::transport::{SipConnection, SipAddr};
use rsip::SipMessage;
// Send a message through any connection type
async fn send_message(
connection: &SipConnection,
message: SipMessage,
destination: Option<&SipAddr>
) -> rsipstack::Result<()> {
connection.send(message, destination).await?;
Ok(())
}
// Check if transport is reliable
let is_reliable = connection.is_reliable();
if is_reliable {
println!("Using reliable transport");
} else {
println!("Using unreliable transport - retransmissions may be needed");
}
§Transport Characteristics
§UDP
- Connectionless and unreliable
- Requires retransmission handling
- Lower overhead
- Default SIP transport
§TCP
- Connection-oriented and reliable
- No retransmission needed
- Higher overhead
- Better for large messages
§TLS
- Secure TCP with encryption
- Reliable transport
- Certificate-based authentication
- Used for SIPS URIs
§WebSocket
- Web-friendly transport
- Reliable connection
- Firewall and NAT friendly
- Used in web applications
§Via Header Processing
SipConnection automatically handles Via header processing for incoming messages, adding ‘received’ and ‘rport’ parameters as needed per RFC 3261.
Variants§
Channel(ChannelConnection)
Udp(UdpConnection)
Tcp(TcpConnection)
TcpListener(TcpListenerConnection)
Tls(TlsConnection)
TlsListener(TlsListenerConnection)
WebSocket(WebSocketConnection)
WebSocketListener(WebSocketListenerConnection)
Implementations§
Source§impl SipConnection
impl SipConnection
pub fn is_reliable(&self) -> bool
pub fn cancel_token(&self) -> Option<CancellationToken>
pub fn get_addr(&self) -> &SipAddr
pub async fn send( &self, msg: SipMessage, destination: Option<&SipAddr>, ) -> Result<()>
pub async fn serve_loop(&self, sender: TransportSender) -> Result<()>
pub async fn close(&self) -> Result<()>
Source§impl SipConnection
impl SipConnection
pub fn update_msg_received( msg: SipMessage, addr: SocketAddr, transport: Transport, ) -> Result<SipMessage>
pub fn resolve_bind_address(addr: SocketAddr) -> SocketAddr
pub fn build_via_received( via: &mut Via, addr: SocketAddr, transport: Transport, ) -> Result<()>
pub fn parse_target_from_via(via: &Via) -> Result<(Transport, HostWithPort)>
pub fn get_destination(msg: &SipMessage) -> Result<SocketAddr>
Trait Implementations§
Source§impl Clone for SipConnection
impl Clone for SipConnection
Source§fn clone(&self) -> SipConnection
fn clone(&self) -> SipConnection
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl Debug for SipConnection
impl Debug for SipConnection
Source§impl Display for SipConnection
impl Display for SipConnection
Source§impl From<ChannelConnection> for SipConnection
impl From<ChannelConnection> for SipConnection
Source§fn from(connection: ChannelConnection) -> Self
fn from(connection: ChannelConnection) -> Self
Converts to this type from the input type.
Source§impl From<TcpConnection> for SipConnection
impl From<TcpConnection> for SipConnection
Source§fn from(connection: TcpConnection) -> Self
fn from(connection: TcpConnection) -> Self
Converts to this type from the input type.
Source§impl From<TcpListenerConnection> for SipConnection
impl From<TcpListenerConnection> for SipConnection
Source§fn from(connection: TcpListenerConnection) -> Self
fn from(connection: TcpListenerConnection) -> Self
Converts to this type from the input type.
Source§impl From<TlsConnection> for SipConnection
impl From<TlsConnection> for SipConnection
Source§fn from(connection: TlsConnection) -> Self
fn from(connection: TlsConnection) -> Self
Converts to this type from the input type.
Source§impl From<TlsListenerConnection> for SipConnection
Available on crate feature rustls
only.
impl From<TlsListenerConnection> for SipConnection
Available on crate feature
rustls
only.Source§fn from(connection: TlsListenerConnection) -> Self
fn from(connection: TlsListenerConnection) -> Self
Converts to this type from the input type.
Source§impl From<UdpConnection> for SipConnection
impl From<UdpConnection> for SipConnection
Source§fn from(connection: UdpConnection) -> Self
fn from(connection: UdpConnection) -> Self
Converts to this type from the input type.
Source§impl From<WebSocketConnection> for SipConnection
impl From<WebSocketConnection> for SipConnection
Source§fn from(connection: WebSocketConnection) -> Self
fn from(connection: WebSocketConnection) -> Self
Converts to this type from the input type.
Source§impl From<WebSocketListenerConnection> for SipConnection
Available on crate feature websocket
only.
impl From<WebSocketListenerConnection> for SipConnection
Available on crate feature
websocket
only.Source§fn from(connection: WebSocketListenerConnection) -> Self
fn from(connection: WebSocketListenerConnection) -> Self
Converts to this type from the input type.
Auto Trait Implementations§
impl Freeze for SipConnection
impl !RefUnwindSafe for SipConnection
impl Send for SipConnection
impl Sync for SipConnection
impl Unpin for SipConnection
impl !UnwindSafe for SipConnection
Blanket Implementations§
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
Causes
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
Causes
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
Causes
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
Causes
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
Causes
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
Causes
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
Causes
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
Causes
self
to use its UpperHex
implementation when
Debug
-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Pipes by value. This is generally the method you want to use. Read more
Source§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,
Borrows
self
and passes that borrow into the pipe function. Read moreSource§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,
Mutably borrows
self
and passes that borrow into the pipe function. Read moreSource§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
Source§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
Source§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
Borrows
self
, then passes self.as_ref()
into the pipe function.Source§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
Mutably borrows
self
, then passes self.as_mut()
into the pipe
function.Source§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
Borrows
self
, then passes self.deref()
into the pipe function.Source§impl<T> PipeAsRef for T
impl<T> PipeAsRef for T
Source§impl<T> PipeBorrow for T
impl<T> PipeBorrow for T
Source§impl<T> PipeDeref for T
impl<T> PipeDeref for T
Source§impl<T> PipeRef for T
impl<T> PipeRef for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Immutable access to the
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
Mutable access to the
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
Immutable access to the
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
Mutable access to the
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Immutable access to the
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Mutable access to the
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
Calls
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
Calls
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
Calls
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§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
Calls
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
Calls
.tap_ref()
only in debug builds, and is erased in release
builds.Source§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
Calls
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
Calls
.tap_deref()
only in debug builds, and is erased in release
builds.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&Self) -> R,
fn tap<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&Self) -> R,
Provides immutable access for inspection. Read more
Source§fn tap_dbg<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&Self) -> R,
fn tap_dbg<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&Self) -> R,
Calls
tap
in debug builds, and does nothing in release builds.Source§fn tap_mut<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&mut Self) -> R,
fn tap_mut<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&mut Self) -> R,
Provides mutable access for modification. Read more
Source§fn tap_mut_dbg<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&mut Self) -> R,
fn tap_mut_dbg<F, R>(self, func: F) -> Selfwhere
F: FnOnce(&mut Self) -> R,
Calls
tap_mut
in debug builds, and does nothing in release builds.Source§impl<T, U> TapAsRef<U> for Twhere
U: ?Sized,
impl<T, U> TapAsRef<U> for Twhere
U: ?Sized,
Source§fn tap_ref<F, R>(self, func: F) -> Self
fn tap_ref<F, R>(self, func: F) -> Self
Provides immutable access to the reference for inspection.
Source§fn tap_ref_dbg<F, R>(self, func: F) -> Self
fn tap_ref_dbg<F, R>(self, func: F) -> Self
Calls
tap_ref
in debug builds, and does nothing in release builds.Source§fn tap_ref_mut<F, R>(self, func: F) -> Self
fn tap_ref_mut<F, R>(self, func: F) -> Self
Provides mutable access to the reference for modification.
Source§impl<T, U> TapBorrow<U> for Twhere
U: ?Sized,
impl<T, U> TapBorrow<U> for Twhere
U: ?Sized,
Source§fn tap_borrow<F, R>(self, func: F) -> Self
fn tap_borrow<F, R>(self, func: F) -> Self
Provides immutable access to the borrow for inspection. Read more
Source§fn tap_borrow_dbg<F, R>(self, func: F) -> Self
fn tap_borrow_dbg<F, R>(self, func: F) -> Self
Calls
tap_borrow
in debug builds, and does nothing in release builds.Source§fn tap_borrow_mut<F, R>(self, func: F) -> Self
fn tap_borrow_mut<F, R>(self, func: F) -> Self
Provides mutable access to the borrow for modification.
Source§impl<T> TapDeref for T
impl<T> TapDeref for T
Source§fn tap_deref_dbg<F, R>(self, func: F) -> Self
fn tap_deref_dbg<F, R>(self, func: F) -> Self
Calls
tap_deref
in debug builds, and does nothing in release builds.Source§fn tap_deref_mut<F, R>(self, func: F) -> Self
fn tap_deref_mut<F, R>(self, func: F) -> Self
Mutably dereferences
self
for modification.