ipstack_geph/stream/
mod.rs1use std::net::{IpAddr, Ipv4Addr, SocketAddr, SocketAddrV4, SocketAddrV6};
2
3pub use self::tcp_wrapper::IpStackTcpStream;
4pub use self::udp::IpStackUdpStream;
5pub use self::unknown::IpStackUnknownTransport;
6
7mod tcb;
8mod tcp;
9mod tcp_wrapper;
10mod udp;
11mod unknown;
12
13pub enum IpStackStream {
14 Tcp(IpStackTcpStream),
15 Udp(IpStackUdpStream),
16 UnknownTransport(IpStackUnknownTransport),
17 UnknownNetwork(Vec<u8>),
18}
19
20impl IpStackStream {
21 pub fn local_addr(&self) -> SocketAddr {
22 match self {
23 IpStackStream::Tcp(tcp) => tcp.local_addr(),
24 IpStackStream::Udp(udp) => udp.local_addr(),
25 IpStackStream::UnknownNetwork(_) => {
26 SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(0, 0, 0, 0), 0))
27 }
28 IpStackStream::UnknownTransport(unknown) => match unknown.src_addr() {
29 IpAddr::V4(addr) => SocketAddr::V4(SocketAddrV4::new(addr, 0)),
30 IpAddr::V6(addr) => SocketAddr::V6(SocketAddrV6::new(addr, 0, 0, 0)),
31 },
32 }
33 }
34 pub fn peer_addr(&self) -> SocketAddr {
35 match self {
36 IpStackStream::Tcp(tcp) => tcp.peer_addr(),
37 IpStackStream::Udp(udp) => udp.peer_addr(),
38 IpStackStream::UnknownNetwork(_) => {
39 SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(0, 0, 0, 0), 0))
40 }
41 IpStackStream::UnknownTransport(unknown) => match unknown.dst_addr() {
42 IpAddr::V4(addr) => SocketAddr::V4(SocketAddrV4::new(addr, 0)),
43 IpAddr::V6(addr) => SocketAddr::V6(SocketAddrV6::new(addr, 0, 0, 0)),
44 },
45 }
46 }
47}