1 use super::*;
2
3 use crate::agent::agent_config::AgentConfig;
4 use crate::agent::agent_vnet_test::{connect_with_vnet, on_connected};
5 use crate::agent::Agent;
6 use crate::error::Error;
7 use crate::url::{ProtoType, SchemeType, Url};
8
9 use std::result::Result;
10 use std::time::Duration;
11 use tokio::net::UdpSocket;
12 use turn::auth::AuthHandler;
13
14 pub(crate) struct OptimisticAuthHandler;
15
16 impl AuthHandler for OptimisticAuthHandler {
auth_handle( &self, _username: &str, _realm: &str, _src_addr: SocketAddr, ) -> Result<Vec<u8>, turn::Error>17 fn auth_handle(
18 &self,
19 _username: &str,
20 _realm: &str,
21 _src_addr: SocketAddr,
22 ) -> Result<Vec<u8>, turn::Error> {
23 Ok(turn::auth::generate_auth_key(
24 "username",
25 "webrtc.rs",
26 "password",
27 ))
28 }
29 }
30
31 //use std::io::Write;
32
33 #[tokio::test]
test_relay_only_connection() -> Result<(), Error>34 async fn test_relay_only_connection() -> Result<(), Error> {
35 /*env_logger::Builder::new()
36 .format(|buf, record| {
37 writeln!(
38 buf,
39 "{}:{} [{}] {} - {}",
40 record.file().unwrap_or("unknown"),
41 record.line().unwrap_or(0),
42 record.level(),
43 chrono::Local::now().format("%H:%M:%S.%6f"),
44 record.args()
45 )
46 })
47 .filter(None, log::LevelFilter::Trace)
48 .init();*/
49
50 let server_listener = Arc::new(UdpSocket::bind("127.0.0.1:0").await?);
51 let server_port = server_listener.local_addr()?.port();
52
53 let server = turn::server::Server::new(turn::server::config::ServerConfig {
54 realm: "webrtc.rs".to_owned(),
55 auth_handler: Arc::new(OptimisticAuthHandler {}),
56 conn_configs: vec![turn::server::config::ConnConfig {
57 conn: server_listener,
58 relay_addr_generator: Box::new(turn::relay::relay_none::RelayAddressGeneratorNone {
59 address: "127.0.0.1".to_owned(),
60 net: Arc::new(util::vnet::net::Net::new(None)),
61 }),
62 }],
63 channel_bind_timeout: Duration::from_secs(0),
64 alloc_close_notify: None,
65 })
66 .await?;
67
68 let cfg0 = AgentConfig {
69 network_types: supported_network_types(),
70 urls: vec![Url {
71 scheme: SchemeType::Turn,
72 host: "127.0.0.1".to_owned(),
73 username: "username".to_owned(),
74 password: "password".to_owned(),
75 port: server_port,
76 proto: ProtoType::Udp,
77 }],
78 candidate_types: vec![CandidateType::Relay],
79 ..Default::default()
80 };
81
82 let a_agent = Arc::new(Agent::new(cfg0).await?);
83 let (a_notifier, mut a_connected) = on_connected();
84 a_agent.on_connection_state_change(a_notifier);
85
86 let cfg1 = AgentConfig {
87 network_types: supported_network_types(),
88 urls: vec![Url {
89 scheme: SchemeType::Turn,
90 host: "127.0.0.1".to_owned(),
91 username: "username".to_owned(),
92 password: "password".to_owned(),
93 port: server_port,
94 proto: ProtoType::Udp,
95 }],
96 candidate_types: vec![CandidateType::Relay],
97 ..Default::default()
98 };
99
100 let b_agent = Arc::new(Agent::new(cfg1).await?);
101 let (b_notifier, mut b_connected) = on_connected();
102 b_agent.on_connection_state_change(b_notifier);
103
104 connect_with_vnet(&a_agent, &b_agent).await?;
105
106 let _ = a_connected.recv().await;
107 let _ = b_connected.recv().await;
108
109 a_agent.close().await?;
110 b_agent.close().await?;
111 server.close().await?;
112
113 Ok(())
114 }
115