Skip to content

Commit

Permalink
feat: Implement Quic-v1 transport
Browse files Browse the repository at this point in the history
Notes:
- This is only compatible with v1 so likelihood of connecting to go-libp2p and go-ipfs/kubo peers via quic will unlikely to work until draft-29 is supported in rust-libp2p (see libp2p/rust-libp2p#3133)
- DCuTR will not work with quic-v1 at this time so unless port mapping/UPNP is used (coming later), we wont be able to utilize quic-v1 with hole punching, but should work fine with relay (see libp2p/rust-libp2p#2883)

Closes #10
  • Loading branch information
dariusc93 committed Nov 25, 2022
1 parent ec14bb4 commit 44f7aa1
Showing 1 changed file with 15 additions and 1 deletion.
16 changes: 15 additions & 1 deletion src/p2p/transport.rs
Expand Up @@ -7,8 +7,11 @@ use libp2p::dns::TokioDnsConfig;
use libp2p::identity;
use libp2p::mplex::MplexConfig;
use libp2p::noise::{self, NoiseConfig};
use libp2p::quic::tokio::Transport as TokioQuicTransport;
use libp2p::quic::Config as QuicConfig;
use libp2p::relay::v2::client::transport::ClientTransport;
use libp2p::tcp::{Config as GenTcpConfig, tokio::Transport as TokioTcpTransport};
use libp2p::swarm::derive_prelude::EitherOutput;
use libp2p::tcp::{tokio::Transport as TokioTcpTransport, Config as GenTcpConfig};
use libp2p::yamux::YamuxConfig;
use libp2p::{PeerId, Transport};
use std::io::{self, Error, ErrorKind};
Expand Down Expand Up @@ -65,6 +68,10 @@ pub fn build_transport(
.nodelay(no_delay)
.port_reuse(port_reuse);

let mut quic_config = QuicConfig::new(&keypair);
quic_config.handshake_timeout = Duration::from_secs(1);
let quic_transport = TokioQuicTransport::new(quic_config);

let tcp_transport = TokioTcpTransport::new(tcp_config.clone());
let ws_transport = libp2p::websocket::WsConfig::new(TokioTcpTransport::new(tcp_config));

Expand Down Expand Up @@ -100,5 +107,12 @@ pub fn build_transport(
.boxed(),
};

let transport = OrTransport::new(quic_transport, transport)
.map(|either_output, _| match either_output {
EitherOutput::First((peer_id, muxer)) => (peer_id, StreamMuxerBox::new(muxer)),
EitherOutput::Second((peer_id, muxer)) => (peer_id, StreamMuxerBox::new(muxer)),
})
.boxed();

Ok(transport)
}

0 comments on commit 44f7aa1

Please sign in to comment.