Skip to content

Commit d2eca5f

Browse files
committed
Refactor: Use IpAddr type for external IP configuration and simplify SocketAddr creation in client examples.
1 parent 8bac6bd commit d2eca5f

2 files changed

Lines changed: 9 additions & 13 deletions

File tree

examples/client/main.rs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use rsipstack::{
1414
transport::{udp::UdpConnection, TransportLayer},
1515
EndpointBuilder, Error,
1616
};
17-
use std::net::IpAddr;
17+
use std::net::{IpAddr, SocketAddr};
1818
use std::{env, sync::Arc, time::Duration};
1919
use tokio::time::timeout;
2020
use tokio::{select, time::sleep};
@@ -28,7 +28,7 @@ struct MediaSessionOption {
2828
pub random_reject: u32,
2929
pub auto_answer: bool,
3030
pub cancel_token: CancellationToken,
31-
pub external_ip: Option<String>,
31+
pub external_ip: Option<IpAddr>,
3232
pub rtp_start_port: u16,
3333
pub echo: bool,
3434
}
@@ -50,7 +50,7 @@ struct Args {
5050

5151
/// External IP address
5252
#[arg(long)]
53-
external_ip: Option<String>,
53+
external_ip: Option<IpAddr>,
5454

5555
/// SIP server address
5656
#[arg(long)]
@@ -179,13 +179,9 @@ async fn main() -> rsipstack::Result<()> {
179179

180180
let external_ip = args
181181
.external_ip
182-
.unwrap_or(env::var("EXTERNAL_IP").unwrap_or_default());
182+
.or_else(|| env::var("EXTERNAL_IP").ok().and_then(|s| s.parse().ok()));
183183

184-
let external = if external_ip.is_empty() {
185-
None
186-
} else {
187-
Some(format!("{}:{}", external_ip, args.port).parse()?)
188-
};
184+
let external = external_ip.map(|ip| SocketAddr::new(ip, args.port));
189185

190186
let addr = get_first_non_loopback_interface().expect("get first non loopback interface");
191187
let connection = UdpConnection::create_connection(

examples/client/play_file.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ pub async fn build_rtp_conn(
1919

2020
for p in 0..100 {
2121
let port = opt.rtp_start_port + p * 2;
22+
let local = SocketAddr::new(addr, port);
23+
let external = opt.external_ip.map(|ip| SocketAddr::new(ip, port));
2224
if let Ok(c) = UdpConnection::create_connection(
23-
format!("{:?}:{}", addr, port).parse()?,
24-
opt.external_ip
25-
.as_ref()
26-
.map(|ip| ip.parse::<SocketAddr>().expect("Invalid external IP")),
25+
local,
26+
external,
2727
Some(opt.cancel_token.clone()),
2828
)
2929
.await

0 commit comments

Comments
 (0)