Skip to content

Commit 542361e

Browse files
improve direct addr initi
1 parent caa3280 commit 542361e

3 files changed

Lines changed: 62 additions & 31 deletions

File tree

iroh/examples/transfer.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,16 +248,18 @@ impl EndpointArgs {
248248

249249
let node_id = endpoint.node_id();
250250
println!("Our node id:\n\t{node_id}");
251+
252+
let eps = endpoint.direct_addresses().initialized().await?;
251253
println!("Our direct addresses:");
252-
for local_endpoint in endpoint.direct_addresses().initialized().await? {
254+
for local_endpoint in eps {
253255
println!("\t{} (type: {:?})", local_endpoint.addr, local_endpoint.typ)
254256
}
255257

256258
if self.relay_only {
257259
let relay_url = endpoint.home_relay().initialized().await?;
258260
println!("Our home relay server:\t{relay_url}");
259261
} else if !self.no_relay {
260-
let relay_url = tokio::time::timeout(Duration::from_secs(5), async {
262+
let relay_url = tokio::time::timeout(Duration::from_secs(2), async {
261263
endpoint
262264
.home_relay()
263265
.initialized()

iroh/src/magicsock.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1729,6 +1729,9 @@ impl Actor {
17291729
mut watcher: impl Watcher<Value = Vec<transports::Addr>> + Send + Sync,
17301730
sender: UdpSender,
17311731
) {
1732+
// Initialize addresses
1733+
self.update_direct_addresses(None);
1734+
17321735
// Setup network monitoring
17331736
let mut current_netmon_state = self.netmon_watcher.get().expect("missing network state");
17341737

iroh/src/net_report.rs

Lines changed: 55 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ use n0_future::{
3939
use n0_watcher::{Watchable, Watcher};
4040
use tokio::task::JoinSet;
4141
use tokio_util::sync::CancellationToken;
42-
use tracing::{debug, trace};
42+
use tracing::{debug, trace, warn};
4343

4444
#[cfg(not(wasm_browser))]
4545
use self::reportgen::QadProbeReport;
@@ -489,45 +489,71 @@ impl Client {
489489
biased;
490490

491491
val = v4_buf.join_next(), if !v4_buf.is_empty() => {
492-
if let Some(Ok(Some(Ok(res)))) = val {
493-
match res {
494-
Ok((r, conn)) => {
495-
debug!(?r, "got v4 QAD conn");
496-
let url = r.node.clone();
497-
reports.push(ProbeReport::QadIpv4(r));
498-
if self.qad_conns.v4.is_none() {
499-
self.qad_conns.v4.replace((url, conn));
500-
} else {
501-
conn.conn.close(QUIC_ADDR_DISC_CLOSE_CODE, QUIC_ADDR_DISC_CLOSE_REASON);
492+
match val {
493+
Some(Ok(Some(Ok(res)))) => {
494+
match res {
495+
Ok((r, conn)) => {
496+
debug!(?r, "got v4 QAD conn");
497+
let url = r.node.clone();
498+
reports.push(ProbeReport::QadIpv4(r));
499+
if self.qad_conns.v4.is_none() {
500+
self.qad_conns.v4.replace((url, conn));
501+
} else {
502+
conn.conn.close(QUIC_ADDR_DISC_CLOSE_CODE, QUIC_ADDR_DISC_CLOSE_REASON);
503+
}
504+
}
505+
Err(err) => {
506+
debug!("probe v4 failed: {:?}", err);
502507
}
503508
}
504-
Err(err) => {
505-
debug!("probe v4 failed: {:?}", err);
509+
}
510+
Some(Err(err)) => {
511+
if err.is_panic() {
512+
panic!("probe v4 paniced: {:?}", err);
506513
}
514+
warn!("probe v4 failed: {:?}", err);
515+
}
516+
Some(Ok(None)) => {
517+
debug!("probe v4 canceled");
518+
}
519+
Some(Ok(Some(Err(time::Elapsed { .. })))) => {
520+
debug!("probe v4 timed out");
507521
}
508-
} else {
509-
dbg!(val);
522+
None => {}
510523
}
511524
}
512525
val = v6_buf.join_next(), if !v6_buf.is_empty() => {
513-
if let Some(Ok(Some(Ok(res)))) = val {
514-
match res {
515-
Ok((r, conn)) => {
516-
debug!(?r, "got v6 QAD conn");
517-
let url = r.node.clone();
518-
reports.push(ProbeReport::QadIpv6(r));
519-
if self.qad_conns.v6.is_none() {
520-
self.qad_conns.v6.replace((url, conn));
521-
} else {
522-
conn.conn.close(QUIC_ADDR_DISC_CLOSE_CODE, QUIC_ADDR_DISC_CLOSE_REASON);
526+
match val {
527+
Some(Ok(Some(Ok(res)))) => {
528+
match res {
529+
Ok((r, conn)) => {
530+
debug!(?r, "got v6 QAD conn");
531+
let url = r.node.clone();
532+
reports.push(ProbeReport::QadIpv6(r));
533+
if self.qad_conns.v6.is_none() {
534+
self.qad_conns.v6.replace((url, conn));
535+
} else {
536+
conn.conn.close(QUIC_ADDR_DISC_CLOSE_CODE, QUIC_ADDR_DISC_CLOSE_REASON);
537+
}
538+
}
539+
Err(err) => {
540+
debug!("probe v6 failed: {:?}", err);
523541
}
524542
}
525-
Err(err) => {
526-
debug!("probe v6 failed: {:?}", err);
543+
}
544+
Some(Err(err)) => {
545+
if err.is_panic() {
546+
panic!("probe v6 paniced: {:?}", err);
527547
}
548+
warn!("probe v6 failed: {:?}", err);
549+
}
550+
Some(Ok(None)) => {
551+
debug!("probe v6 canceled");
552+
}
553+
Some(Ok(Some(Err(time::Elapsed { .. })))) => {
554+
debug!("probe v6 timed out");
528555
}
529-
} else {
530-
dbg!(val);
556+
None => {}
531557
}
532558
}
533559
else => {

0 commit comments

Comments
 (0)