@@ -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 } ;
1818use std:: { env, sync:: Arc , time:: Duration } ;
1919use tokio:: time:: timeout;
2020use 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 (
0 commit comments