1 use super::candidate_relay_test::OptimisticAuthHandler;
2 use super::*;
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::url::{SchemeType, Url};
7 use std::time::Duration;
8 use tokio::net::UdpSocket;
9
10 //use std::io::Write;
11
12 #[tokio::test]
test_server_reflexive_only_connection() -> Result<()>13 async fn test_server_reflexive_only_connection() -> Result<()> {
14 /*env_logger::Builder::new()
15 .format(|buf, record| {
16 writeln!(
17 buf,
18 "{}:{} [{}] {} - {}",
19 record.file().unwrap_or("unknown"),
20 record.line().unwrap_or(0),
21 record.level(),
22 chrono::Local::now().format("%H:%M:%S.%6f"),
23 record.args()
24 )
25 })
26 .filter(None, log::LevelFilter::Trace)
27 .init();*/
28
29 let server_listener = Arc::new(UdpSocket::bind("127.0.0.1:0").await?);
30 let server_port = server_listener.local_addr()?.port();
31
32 let server = turn::server::Server::new(turn::server::config::ServerConfig {
33 realm: "webrtc.rs".to_owned(),
34 auth_handler: Arc::new(OptimisticAuthHandler {}),
35 conn_configs: vec![turn::server::config::ConnConfig {
36 conn: server_listener,
37 relay_addr_generator: Box::new(turn::relay::relay_none::RelayAddressGeneratorNone {
38 address: "127.0.0.1".to_owned(),
39 net: Arc::new(util::vnet::net::Net::new(None)),
40 }),
41 }],
42 channel_bind_timeout: Duration::from_secs(0),
43 alloc_close_notify: None,
44 })
45 .await?;
46
47 let cfg0 = AgentConfig {
48 network_types: vec![NetworkType::Udp4],
49 urls: vec![Url {
50 scheme: SchemeType::Stun,
51 host: "127.0.0.1".to_owned(),
52 port: server_port,
53 ..Default::default()
54 }],
55 candidate_types: vec![CandidateType::ServerReflexive],
56 ..Default::default()
57 };
58
59 let a_agent = Arc::new(Agent::new(cfg0).await?);
60 let (a_notifier, mut a_connected) = on_connected();
61 a_agent.on_connection_state_change(a_notifier);
62
63 let cfg1 = AgentConfig {
64 network_types: vec![NetworkType::Udp4],
65 urls: vec![Url {
66 scheme: SchemeType::Stun,
67 host: "127.0.0.1".to_owned(),
68 port: server_port,
69 ..Default::default()
70 }],
71 candidate_types: vec![CandidateType::ServerReflexive],
72 ..Default::default()
73 };
74
75 let b_agent = Arc::new(Agent::new(cfg1).await?);
76 let (b_notifier, mut b_connected) = on_connected();
77 b_agent.on_connection_state_change(b_notifier);
78
79 connect_with_vnet(&a_agent, &b_agent).await?;
80
81 let _ = a_connected.recv().await;
82 let _ = b_connected.recv().await;
83
84 a_agent.close().await?;
85 b_agent.close().await?;
86 server.close().await?;
87
88 Ok(())
89 }
90