Skip to content

Commit db19d8b

Browse files
use in example
1 parent abc646a commit db19d8b

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

quinn/examples/client.rs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use std::{
1313

1414
use anyhow::{anyhow, Result};
1515
use clap::Parser;
16-
use proto::crypto::rustls::QuicClientConfig;
16+
use proto::{crypto::rustls::QuicClientConfig, TransportConfig};
1717
use rustls::pki_types::CertificateDer;
1818
use tracing::{error, info};
1919
use 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

quinn/examples/server.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,10 @@ async fn run(options: Opt) -> Result<()> {
127127
let mut server_config =
128128
quinn::ServerConfig::with_crypto(Arc::new(QuicServerConfig::try_from(server_crypto)?));
129129
let transport_config = Arc::get_mut(&mut server_config.transport).unwrap();
130-
transport_config.max_concurrent_uni_streams(0_u8.into());
130+
transport_config
131+
.max_concurrent_uni_streams(0_u8.into())
132+
.send_observed_address_reports(true)
133+
.receive_observed_address_reports(true);
131134

132135
let root = Arc::<Path>::from(options.root.clone());
133136
if !root.exists() {
@@ -176,6 +179,21 @@ async fn handle_connection(root: Arc<Path>, conn: quinn::Incoming) -> Result<()>
176179
.protocol
177180
.map_or_else(|| "<none>".into(), |x| String::from_utf8_lossy(&x).into_owned())
178181
);
182+
183+
let mut external_addresses = connection.observed_external_addr();
184+
tokio::spawn(
185+
async move {
186+
loop {
187+
if let Some(new_addr) = *external_addresses.borrow_and_update() {
188+
info!(%new_addr, "new external address report");
189+
}
190+
if external_addresses.changed().await.is_err() {
191+
break;
192+
}
193+
}
194+
}
195+
.instrument(span.clone()),
196+
);
179197
async {
180198
info!("established");
181199

0 commit comments

Comments
 (0)