use std::net::SocketAddr;
#[cfg(feature = "tls")]
use std::sync::Arc;
#[cfg(feature = "tls")]
use crate::tls::TlsInfo;
#[cfg_attr(feature = "tls", derive(Clone))]
#[cfg_attr(not(feature = "tls"), derive(Clone, Copy))]
pub struct ConnInfo {
id: u64,
peer_addr: SocketAddr,
local_addr: SocketAddr,
#[cfg(feature = "tls")]
tls: Option<Arc<TlsInfo>>,
}
impl ConnInfo {
#[cfg(not(feature = "tls"))]
pub(crate) fn new(id: u64, peer_addr: SocketAddr, local_addr: SocketAddr) -> Self {
Self {
id,
peer_addr,
local_addr,
#[cfg(feature = "tls")]
tls: None,
}
}
#[cfg(feature = "tls")]
pub(crate) fn new_with_tls(
id: u64,
peer_addr: SocketAddr,
local_addr: SocketAddr,
tls: Option<Arc<TlsInfo>>,
) -> Self {
Self {
id,
peer_addr,
local_addr,
tls,
}
}
pub fn id(&self) -> u64 {
self.id
}
pub fn peer_addr(&self) -> SocketAddr {
self.peer_addr
}
pub fn local_addr(&self) -> SocketAddr {
self.local_addr
}
#[cfg(feature = "tls")]
pub fn tls(&self) -> Option<&TlsInfo> {
self.tls.as_deref()
}
}
#[cfg_attr(feature = "tls", derive(Clone))]
#[cfg_attr(not(feature = "tls"), derive(Clone, Copy))]
pub struct DatagramInfo {
id: u64,
peer_addr: SocketAddr,
local_addr: SocketAddr,
#[cfg(feature = "tls")]
tls: Option<Arc<TlsInfo>>,
}
impl DatagramInfo {
pub(crate) fn new(id: u64, peer_addr: SocketAddr, local_addr: SocketAddr) -> Self {
Self {
id,
peer_addr,
local_addr,
#[cfg(feature = "tls")]
tls: None,
}
}
pub(crate) fn from_conn(info: ConnInfo) -> Self {
Self {
id: info.id(),
peer_addr: info.peer_addr(),
local_addr: info.local_addr(),
#[cfg(feature = "tls")]
tls: info.tls,
}
}
pub fn id(&self) -> u64 {
self.id
}
pub fn peer_addr(&self) -> SocketAddr {
self.peer_addr
}
pub fn local_addr(&self) -> SocketAddr {
self.local_addr
}
#[cfg(feature = "tls")]
pub fn tls(&self) -> Option<&TlsInfo> {
self.tls.as_deref()
}
}