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