webrtc_turn/client/
permission.rs

1use std::collections::HashMap;
2use std::net::SocketAddr;
3
4#[derive(Copy, Clone, PartialEq, Debug)]
5pub(crate) enum PermState {
6    Idle,
7    Permitted,
8}
9
10impl Default for PermState {
11    fn default() -> Self {
12        PermState::Idle
13    }
14}
15
16#[derive(Default, Copy, Clone)]
17pub(crate) struct Permission {
18    st: PermState,
19}
20
21impl Permission {
22    pub(crate) fn set_state(&mut self, state: PermState) {
23        self.st = state;
24    }
25
26    pub(crate) fn state(&self) -> PermState {
27        self.st
28    }
29}
30
31// Thread-safe Permission map
32#[derive(Default)]
33pub(crate) struct PermissionMap {
34    perm_map: HashMap<String, Permission>,
35}
36
37impl PermissionMap {
38    pub(crate) fn new() -> PermissionMap {
39        PermissionMap {
40            perm_map: HashMap::new(),
41        }
42    }
43
44    pub(crate) fn insert(&mut self, addr: &SocketAddr, p: Permission) {
45        self.perm_map.insert(addr.ip().to_string(), p);
46    }
47
48    pub(crate) fn find(&self, addr: &SocketAddr) -> Option<&Permission> {
49        self.perm_map.get(&addr.ip().to_string())
50    }
51
52    pub(crate) fn delete(&mut self, addr: &SocketAddr) {
53        self.perm_map.remove(&addr.ip().to_string());
54    }
55
56    pub(crate) fn addrs(&self) -> Vec<SocketAddr> {
57        let mut a = vec![];
58        for k in self.perm_map.keys() {
59            if let Ok(ip) = k.parse() {
60                a.push(SocketAddr::new(ip, 0));
61            }
62        }
63        a
64    }
65}