xref: /webrtc/turn/src/allocation/five_tuple.rs (revision 26682c3d)
1ffe74184SMartin Algesten #[cfg(test)]
2ffe74184SMartin Algesten mod five_tuple_test;
3ffe74184SMartin Algesten 
4ffe74184SMartin Algesten use crate::proto::*;
5ffe74184SMartin Algesten 
6ffe74184SMartin Algesten use std::fmt;
7ffe74184SMartin Algesten use std::net::{Ipv4Addr, SocketAddr};
8ffe74184SMartin Algesten 
9ffe74184SMartin Algesten // FiveTuple is the combination (client IP address and port, server IP
10ffe74184SMartin Algesten // address and port, and transport protocol (currently one of UDP,
11ffe74184SMartin Algesten // TCP, or TLS)) used to communicate between the client and the
12ffe74184SMartin Algesten // server.  The 5-tuple uniquely identifies this communication
13ffe74184SMartin Algesten // stream.  The 5-tuple also uniquely identifies the Allocation on
14ffe74184SMartin Algesten // the server.
15*26682c3dSlogist322 #[derive(PartialEq, Eq, Clone, Copy, Hash)]
16ffe74184SMartin Algesten pub struct FiveTuple {
17ffe74184SMartin Algesten     pub protocol: Protocol,
18ffe74184SMartin Algesten     pub src_addr: SocketAddr,
19ffe74184SMartin Algesten     pub dst_addr: SocketAddr,
20ffe74184SMartin Algesten }
21ffe74184SMartin Algesten 
22ffe74184SMartin Algesten impl Default for FiveTuple {
default() -> Self23ffe74184SMartin Algesten     fn default() -> Self {
24ffe74184SMartin Algesten         FiveTuple {
25ffe74184SMartin Algesten             protocol: PROTO_UDP,
26ffe74184SMartin Algesten             src_addr: SocketAddr::new(Ipv4Addr::new(0, 0, 0, 0).into(), 0),
27ffe74184SMartin Algesten             dst_addr: SocketAddr::new(Ipv4Addr::new(0, 0, 0, 0).into(), 0),
28ffe74184SMartin Algesten         }
29ffe74184SMartin Algesten     }
30ffe74184SMartin Algesten }
31ffe74184SMartin Algesten 
32ffe74184SMartin Algesten impl fmt::Display for FiveTuple {
fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result33ffe74184SMartin Algesten     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
34ffe74184SMartin Algesten         write!(f, "{}_{}_{}", self.protocol, self.src_addr, self.dst_addr)
35ffe74184SMartin Algesten     }
36ffe74184SMartin Algesten }
37*26682c3dSlogist322 
38*26682c3dSlogist322 impl fmt::Debug for FiveTuple {
fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result39*26682c3dSlogist322     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
40*26682c3dSlogist322         f.debug_struct("FiveTuple")
41*26682c3dSlogist322             .field("protocol", &self.protocol)
42*26682c3dSlogist322             .field("src_addr", &self.src_addr)
43*26682c3dSlogist322             .field("dst_addr", &self.dst_addr)
44*26682c3dSlogist322             .finish()
45*26682c3dSlogist322     }
46*26682c3dSlogist322 }
47