use libp2p::{
core::{muxing::StreamMuxerBox, transport::upgrade, upgrade::SelectUpgrade},
dns::TokioDnsConfig,
identity::Keypair,
mplex::MplexConfig,
noise,
tcp::{GenTcpConfig, TokioTcpTransport},
websocket::WsConfig,
yamux::YamuxConfig,
PeerId, Transport,
};
use crate::errors::TatamiError;
use super::Swarm;
impl Swarm {
pub fn transport(
keypair: &Keypair,
) -> Result<libp2p::core::transport::Boxed<(PeerId, StreamMuxerBox)>, TatamiError> {
let transport = {
let dns_tcp = if let Ok(config) =
TokioDnsConfig::system(TokioTcpTransport::new(GenTcpConfig::new().nodelay(true)))
{
config
} else {
return Err(TatamiError::Generic);
};
let ws_dns_tcp = if let Ok(config) =
TokioDnsConfig::system(TokioTcpTransport::new(GenTcpConfig::new().nodelay(true)))
{
WsConfig::new(config)
} else {
return Err(TatamiError::Generic);
};
dns_tcp.or_transport(ws_dns_tcp)
};
let noise_keys = noise::Keypair::<noise::X25519Spec>::new()
.into_authentic(&keypair)
.expect("Signing libp2p-noise static DH keypair failed.");
Ok(transport
.upgrade(upgrade::Version::V1)
.authenticate(noise::NoiseConfig::xx(noise_keys).into_authenticated())
.multiplex(SelectUpgrade::new(
YamuxConfig::default(),
MplexConfig::default(),
))
.timeout(std::time::Duration::from_secs(20))
.boxed())
}
}