1use std::net::SocketAddr;
2#[cfg(feature = "tls")]
3use std::sync::Arc;
4
5#[cfg(feature = "tls")]
6use crate::tls::TlsInfo;
7
8#[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 pub fn id(&self) -> u64 {
48 self.id
49 }
50
51 pub fn peer_addr(&self) -> SocketAddr {
53 self.peer_addr
54 }
55
56 pub fn local_addr(&self) -> SocketAddr {
58 self.local_addr
59 }
60
61 #[cfg(feature = "tls")]
63 pub fn tls(&self) -> Option<&TlsInfo> {
64 self.tls.as_deref()
65 }
66}
67
68#[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 pub fn id(&self) -> u64 {
102 self.id
103 }
104
105 pub fn peer_addr(&self) -> SocketAddr {
107 self.peer_addr
108 }
109
110 pub fn local_addr(&self) -> SocketAddr {
112 self.local_addr
113 }
114
115 #[cfg(feature = "tls")]
117 pub fn tls(&self) -> Option<&TlsInfo> {
118 self.tls.as_deref()
119 }
120}