Skip to content

Commit 5c72476

Browse files
committed
feat: add custom listen addresses
1 parent 42e4632 commit 5c72476

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

src/cli/commands.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ pub fn get_args() -> Command {
99
.subcommand_required(true)
1010
.arg_required_else_help(true)
1111
.arg(arg!(-v --debug "Print debug information"))
12+
.arg(arg!(-a --address <IP_ADDRESS> "IP address to listen on"))
13+
.arg(arg!(-p --port <PORT> "Port number to listen on"))
1214
.subcommand(
1315
Command::new("share")
1416
.about("Send a file or directory to another peer")

src/main.rs

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -424,12 +424,35 @@ async fn start_network(
424424
spawn(event_loop.run());
425425
spawn(handle_network_events(event_stream, app.clone()));
426426

427-
client
428-
.start_listening("/ip4/0.0.0.0/udp/0/quic-v1".parse().unwrap())
429-
.await
430-
.expect("Listening not to fail.");
427+
// Get IP and port from command line args, defaulting to 0.0.0.0:0
428+
let matches = cli::commands::get_args().get_matches();
429+
let default_ip = "0.0.0.0".to_string();
430+
let default_port = "0".to_string();
431+
let ip = matches.get_one::<String>("address").unwrap_or(&default_ip);
432+
let port = matches.get_one::<String>("port").unwrap_or(&default_port);
433+
434+
let addr = format!("/ip4/{ip}/udp/{port}/quic-v1")
435+
.parse()
436+
.unwrap_or_else(|e| {
437+
tracing::error!("Failed to parse listening address: {}", e);
438+
eprintln!("Error: Invalid listening address format. Please check your IP and port.");
439+
std::process::exit(1);
440+
});
441+
442+
client.start_listening(addr).await.unwrap_or_else(|e| {
443+
tracing::error!("Failed to start listening: {}", e);
444+
eprintln!(
445+
"Error: Could not start listening on the specified address. The port might be in use."
446+
);
447+
std::process::exit(1);
448+
});
449+
450+
let listening_addrs: Vec<Multiaddr> = client.get_listening_addrs().await.unwrap_or_else(|e| {
451+
tracing::error!("Failed to get listening addresses: {}", e);
452+
eprintln!("Error: Could not get listening addresses. Please try again.");
453+
std::process::exit(1);
454+
});
431455

432-
let listening_addrs: Vec<Multiaddr> = client.get_listening_addrs().await.unwrap();
433456
{
434457
let mut app = app.lock();
435458
app.listening_addrs = listening_addrs;

0 commit comments

Comments
 (0)