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]
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     })
44     .await?;
45 
46     let cfg0 = AgentConfig {
47         network_types: vec![NetworkType::Udp4],
48         urls: vec![Url {
49             scheme: SchemeType::Stun,
50             host: "127.0.0.1".to_owned(),
51             port: server_port,
52             ..Default::default()
53         }],
54         candidate_types: vec![CandidateType::ServerReflexive],
55         ..Default::default()
56     };
57 
58     let a_agent = Arc::new(Agent::new(cfg0).await?);
59     let (a_notifier, mut a_connected) = on_connected();
60     a_agent.on_connection_state_change(a_notifier).await;
61 
62     let cfg1 = AgentConfig {
63         network_types: vec![NetworkType::Udp4],
64         urls: vec![Url {
65             scheme: SchemeType::Stun,
66             host: "127.0.0.1".to_owned(),
67             port: server_port,
68             ..Default::default()
69         }],
70         candidate_types: vec![CandidateType::ServerReflexive],
71         ..Default::default()
72     };
73 
74     let b_agent = Arc::new(Agent::new(cfg1).await?);
75     let (b_notifier, mut b_connected) = on_connected();
76     b_agent.on_connection_state_change(b_notifier).await;
77 
78     connect_with_vnet(&a_agent, &b_agent).await?;
79 
80     let _ = a_connected.recv().await;
81     let _ = b_connected.recv().await;
82 
83     a_agent.close().await?;
84     b_agent.close().await?;
85     server.close().await?;
86 
87     Ok(())
88 }
89