@@ -13,7 +13,7 @@ use std::{
1313
1414use anyhow:: { anyhow, Result } ;
1515use clap:: Parser ;
16- use proto:: crypto:: rustls:: QuicClientConfig ;
16+ use proto:: { crypto:: rustls:: QuicClientConfig , TransportConfig } ;
1717use rustls:: pki_types:: CertificateDer ;
1818use tracing:: { error, info} ;
1919use url:: Url ;
@@ -101,8 +101,13 @@ async fn run(options: Opt) -> Result<()> {
101101 client_crypto. key_log = Arc :: new ( rustls:: KeyLogFile :: new ( ) ) ;
102102 }
103103
104- let client_config =
104+ let mut transport = TransportConfig :: default ( ) ;
105+ transport
106+ . send_observed_address_reports ( true )
107+ . receive_observed_address_reports ( true ) ;
108+ let mut client_config =
105109 quinn:: ClientConfig :: new ( Arc :: new ( QuicClientConfig :: try_from ( client_crypto) ?) ) ;
110+ client_config. transport_config ( Arc :: new ( transport) ) ;
106111 let mut endpoint = quinn:: Endpoint :: client ( options. bind ) ?;
107112 endpoint. set_default_client_config ( client_config) ;
108113
@@ -117,6 +122,18 @@ async fn run(options: Opt) -> Result<()> {
117122 . await
118123 . map_err ( |e| anyhow ! ( "failed to connect: {}" , e) ) ?;
119124 eprintln ! ( "connected at {:?}" , start. elapsed( ) ) ;
125+ let mut external_addresses = conn. observed_external_addr ( ) ;
126+ tokio:: spawn ( async move {
127+ loop {
128+ if let Some ( new_addr) = * external_addresses. borrow_and_update ( ) {
129+ info ! ( %new_addr, "new external address report" ) ;
130+ }
131+ if external_addresses. changed ( ) . await . is_err ( ) {
132+ break ;
133+ }
134+ }
135+ } ) ;
136+
120137 let ( mut send, mut recv) = conn
121138 . open_bi ( )
122139 . await
0 commit comments