diff --git a/examples/client/main.rs b/examples/client/main.rs index 69f48fc..826d0f7 100644 --- a/examples/client/main.rs +++ b/examples/client/main.rs @@ -14,7 +14,7 @@ use rsipstack::{ transport::{udp::UdpConnection, TransportLayer}, EndpointBuilder, Error, }; -use std::net::IpAddr; +use std::net::{IpAddr, SocketAddr}; use std::{env, sync::Arc, time::Duration}; use tokio::time::timeout; use tokio::{select, time::sleep}; @@ -28,7 +28,7 @@ struct MediaSessionOption { pub random_reject: u32, pub auto_answer: bool, pub cancel_token: CancellationToken, - pub external_ip: Option, + pub external_ip: Option, pub rtp_start_port: u16, pub echo: bool, } @@ -50,7 +50,7 @@ struct Args { /// External IP address #[arg(long)] - external_ip: Option, + external_ip: Option, /// SIP server address #[arg(long)] @@ -179,13 +179,9 @@ async fn main() -> rsipstack::Result<()> { let external_ip = args .external_ip - .unwrap_or(env::var("EXTERNAL_IP").unwrap_or_default()); + .or_else(|| env::var("EXTERNAL_IP").ok().and_then(|s| s.parse().ok())); - let external = if external_ip.is_empty() { - None - } else { - Some(format!("{}:{}", external_ip, args.port).parse()?) - }; + let external = external_ip.map(|ip| SocketAddr::new(ip, args.port)); let addr = get_first_non_loopback_interface().expect("get first non loopback interface"); let connection = UdpConnection::create_connection( diff --git a/examples/client/play_file.rs b/examples/client/play_file.rs index dffd564..7718587 100644 --- a/examples/client/play_file.rs +++ b/examples/client/play_file.rs @@ -19,14 +19,10 @@ pub async fn build_rtp_conn( for p in 0..100 { let port = opt.rtp_start_port + p * 2; - if let Ok(c) = UdpConnection::create_connection( - format!("{:?}:{}", addr, port).parse()?, - opt.external_ip - .as_ref() - .map(|ip| ip.parse::().expect("Invalid external IP")), - Some(opt.cancel_token.clone()), - ) - .await + let local = SocketAddr::new(addr, port); + let external = opt.external_ip.map(|ip| SocketAddr::new(ip, port)); + if let Ok(c) = + UdpConnection::create_connection(local, external, Some(opt.cancel_token.clone())).await { conn = Some(c); break;