solana_streamer/
socket.rs1use std::net::{IpAddr, SocketAddr};
2
3#[derive(Clone, Copy)]
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 #[must_use]
20 pub fn check(&self, addr: &SocketAddr) -> bool {
21 if matches!(self, SocketAddrSpace::Unspecified) {
22 return true;
23 }
24 match addr.ip() {
26 IpAddr::V4(addr) => {
27 !(addr.is_private() || addr.is_loopback())
31 }
32 IpAddr::V6(addr) => {
33 !addr.is_loopback()
36 }
37 }
38 }
39}