webrtc_turn/client/
permission.rs1use 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#[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}