rtc_ice/agent/
agent_proto.rs1use super::*;
2
3impl sansio::Protocol<TransportMessage<BytesMut>, (), ()> for Agent {
4 type Rout = TransportMessage<BytesMut>;
5 type Wout = TransportMessage<BytesMut>;
6 type Eout = Event;
7 type Error = Error;
8 type Time = Instant;
9
10 fn handle_read(&mut self, msg: TransportMessage<BytesMut>) -> Result<()> {
11 if let Some(local_index) =
12 self.find_local_candidate(msg.transport.local_addr, msg.transport.transport_protocol)
13 {
14 self.handle_inbound_candidate_msg(local_index, msg)
15 } else {
16 warn!(
17 "[{}]: Discarded message, not a valid local candidate from {:?}:{}",
18 self.get_name(),
19 msg.transport.transport_protocol,
20 msg.transport.local_addr,
21 );
22 Err(Error::ErrUnhandledStunpacket)
23 }
24 }
25
26 fn poll_read(&mut self) -> Option<Self::Rout> {
27 None
28 }
29
30 fn handle_write(&mut self, _msg: ()) -> std::result::Result<(), Self::Error> {
31 Ok(())
32 }
33
34 fn poll_write(&mut self) -> Option<Self::Wout> {
35 self.write_outs.pop_front()
36 }
37
38 fn handle_event(&mut self, _evt: ()) -> std::result::Result<(), Self::Error> {
39 Ok(())
40 }
41
42 fn poll_event(&mut self) -> Option<Self::Eout> {
43 self.event_outs.pop_front()
44 }
45
46 fn handle_timeout(&mut self, now: Self::Time) -> std::result::Result<(), Self::Error> {
47 if self.ufrag_pwd.remote_credentials.is_some()
48 && self.last_checking_time + self.get_timeout_interval() <= now
49 {
50 self.contact(now);
51 }
52 Ok(())
53 }
54
55 fn poll_timeout(&mut self) -> Option<Self::Time> {
56 if self.ufrag_pwd.remote_credentials.is_some() {
57 Some(self.last_checking_time + self.get_timeout_interval())
58 } else {
59 None
60 }
61 }
62
63 fn close(&mut self) -> std::result::Result<(), Self::Error> {
64 self.set_selected_pair(None);
65 self.delete_all_candidates(false);
66 self.update_connection_state(ConnectionState::Closed);
67
68 Ok(())
69 }
70}