solana_net_utils/
socket_addr_space.rs1use std::net::{IpAddr, SocketAddr};
2
3#[derive(Clone, Copy, PartialEq, Debug)]
4pub enum SocketAddrSpace {
5 Unspecified,
6 Global,
7}
8
9impl SocketAddrSpace {
10 pub fn new(allow_private_addr: bool) -> Self {
11 if allow_private_addr {
12 SocketAddrSpace::Unspecified
13 } else {
14 SocketAddrSpace::Global
15 }
16 }
17
18 #[inline]
20 #[must_use]
21 pub fn check(&self, addr: &SocketAddr) -> bool {
22 if matches!(self, SocketAddrSpace::Unspecified) {
23 return true;
24 }
25
26 match addr.ip() {
28 IpAddr::V4(addr) => {
29 !(addr.is_private() || addr.is_loopback())
33 }
34 IpAddr::V6(addr) => {
35 !addr.is_loopback()
38 }
39 }
40 }
41}