#[cfg(feature = "open-metrics")]
use crate::MetricsRegistries;
use libp2p::{
core::{muxing::StreamMuxerBox, transport},
identity::Keypair,
PeerId, Transport as _,
};
const MAX_STREAM_DATA_ENV_STR: &str = "ANT_MAX_STREAM_DATA";
pub(crate) fn build_transport(
keypair: &Keypair,
#[cfg(feature = "open-metrics")] registries: &mut MetricsRegistries,
) -> transport::Boxed<(PeerId, StreamMuxerBox)> {
let trans = generate_quic_transport(keypair);
#[cfg(feature = "open-metrics")]
let trans = libp2p::metrics::BandwidthTransport::new(trans, &mut registries.standard_metrics);
let trans = trans.map(|(peer_id, muxer), _| (peer_id, StreamMuxerBox::new(muxer)));
trans.boxed()
}
fn generate_quic_transport(
keypair: &Keypair,
) -> libp2p::quic::GenTransport<libp2p::quic::tokio::Provider> {
let mut quic_config = libp2p::quic::Config::new(keypair);
if let Ok(val) = std::env::var(MAX_STREAM_DATA_ENV_STR) {
match val.parse::<u32>() {
Ok(val) => {
quic_config.max_stream_data = val;
tracing::info!("Overriding QUIC connection receive window value to {val}");
}
Err(e) => {
tracing::warn!("QUIC connection receive window value override failed. Could not parse `{MAX_STREAM_DATA_ENV_STR}={val}` as integer: {e}")
}
}
}
libp2p::quic::tokio::Transport::new(quic_config)
}