1#[cfg(test)]
2mod addr_test;
3
4use std::net::{IpAddr, Ipv4Addr, SocketAddr};
5
6use super::*;
7
8#[derive(PartialEq, Eq, Debug)]
10pub struct Addr {
11    ip: IpAddr,
12    port: u16,
13}
14
15impl Default for Addr {
16    fn default() -> Self {
17        Addr {
18            ip: IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)),
19            port: 0,
20        }
21    }
22}
23
24impl fmt::Display for Addr {
25    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
26        write!(f, "{}:{}", self.ip, self.port)
27    }
28}
29
30impl Addr {
31    pub fn network(&self) -> String {
33        "turn".to_owned()
34    }
35
36    pub fn from_socket_addr(n: &SocketAddr) -> Self {
38        let ip = n.ip();
39        let port = n.port();
40
41        Addr { ip, port }
42    }
43
44    pub fn equal_ip(&self, other: &Addr) -> bool {
46        self.ip == other.ip
47    }
48}
49
50#[derive(PartialEq, Eq, Default)]
52pub struct FiveTuple {
53    pub client: Addr,
54    pub server: Addr,
55    pub proto: Protocol,
56}
57
58impl fmt::Display for FiveTuple {
59    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
60        write!(f, "{}->{} ({})", self.client, self.server, self.proto)
61    }
62}