Skip to main content

rs_netty/context/
info.rs

1use std::net::SocketAddr;
2#[cfg(feature = "tls")]
3use std::sync::Arc;
4
5#[cfg(feature = "tls")]
6use crate::tls::TlsInfo;
7
8/// Identity information for one TCP connection.
9#[cfg_attr(feature = "tls", derive(Clone))]
10#[cfg_attr(not(feature = "tls"), derive(Clone, Copy))]
11pub struct ConnInfo {
12    id: u64,
13    peer_addr: SocketAddr,
14    local_addr: SocketAddr,
15    #[cfg(feature = "tls")]
16    tls: Option<Arc<TlsInfo>>,
17}
18
19impl ConnInfo {
20    #[cfg(not(feature = "tls"))]
21    pub(crate) fn new(id: u64, peer_addr: SocketAddr, local_addr: SocketAddr) -> Self {
22        Self {
23            id,
24            peer_addr,
25            local_addr,
26            #[cfg(feature = "tls")]
27            tls: None,
28        }
29    }
30
31    #[cfg(feature = "tls")]
32    pub(crate) fn new_with_tls(
33        id: u64,
34        peer_addr: SocketAddr,
35        local_addr: SocketAddr,
36        tls: Option<Arc<TlsInfo>>,
37    ) -> Self {
38        Self {
39            id,
40            peer_addr,
41            local_addr,
42            tls,
43        }
44    }
45
46    /// Framework-assigned connection id.
47    pub fn id(&self) -> u64 {
48        self.id
49    }
50
51    /// Remote peer address.
52    pub fn peer_addr(&self) -> SocketAddr {
53        self.peer_addr
54    }
55
56    /// Local socket address.
57    pub fn local_addr(&self) -> SocketAddr {
58        self.local_addr
59    }
60
61    /// TLS metadata for this connection, when TLS is enabled and negotiated.
62    #[cfg(feature = "tls")]
63    pub fn tls(&self) -> Option<&TlsInfo> {
64        self.tls.as_deref()
65    }
66}
67
68/// Identity information for one UDP datagram.
69#[cfg_attr(feature = "tls", derive(Clone))]
70#[cfg_attr(not(feature = "tls"), derive(Clone, Copy))]
71pub struct DatagramInfo {
72    id: u64,
73    peer_addr: SocketAddr,
74    local_addr: SocketAddr,
75    #[cfg(feature = "tls")]
76    tls: Option<Arc<TlsInfo>>,
77}
78
79impl DatagramInfo {
80    pub(crate) fn new(id: u64, peer_addr: SocketAddr, local_addr: SocketAddr) -> Self {
81        Self {
82            id,
83            peer_addr,
84            local_addr,
85            #[cfg(feature = "tls")]
86            tls: None,
87        }
88    }
89
90    pub(crate) fn from_conn(info: ConnInfo) -> Self {
91        Self {
92            id: info.id(),
93            peer_addr: info.peer_addr(),
94            local_addr: info.local_addr(),
95            #[cfg(feature = "tls")]
96            tls: info.tls,
97        }
98    }
99
100    /// Framework-assigned socket id.
101    pub fn id(&self) -> u64 {
102        self.id
103    }
104
105    /// Peer address for the current datagram.
106    pub fn peer_addr(&self) -> SocketAddr {
107        self.peer_addr
108    }
109
110    /// Local socket address.
111    pub fn local_addr(&self) -> SocketAddr {
112        self.local_addr
113    }
114
115    /// TLS metadata for this TCP-derived context, or `None` for UDP datagrams.
116    #[cfg(feature = "tls")]
117    pub fn tls(&self) -> Option<&TlsInfo> {
118        self.tls.as_deref()
119    }
120}