tatami 0.1.2

A library for creating satellites and interacting with Tatami protocols.
Documentation
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())
	}
}