Skip to content

Commit 8f06edd

Browse files
refactor(swap/tor): deduplicate upgrading TorBackend to final transport
1 parent 407fc79 commit 8f06edd

File tree

4 files changed

+25
-30
lines changed

4 files changed

+25
-30
lines changed

swap-tor/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ impl SocksServerAddress {
270270
}
271271
}
272272

273-
type TcpTransport = libp2p::dns::tokio::Transport<libp2p::tcp::tokio::Transport>;
273+
pub type TcpTransport = libp2p::dns::tokio::Transport<libp2p::tcp::tokio::Transport>;
274274
pub struct TorsocksTransport(pub TcpTransport);
275275
impl Transport for TorsocksTransport {
276276
type Output = <TcpTransport as Transport>::Output;

swap/src/asb/network.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use swap_feed::LatestRate;
1818

1919
pub mod transport {
2020
use arti_client::config::onion_service::OnionServiceConfigBuilder;
21-
use libp2p::{dns, identity, tcp, Transport};
21+
use libp2p::{identity, Transport};
2222
use libp2p_tor::AddressConversion;
2323

2424
use super::*;
@@ -45,7 +45,7 @@ pub mod transport {
4545
num_intro_points: u8,
4646
) -> Result<OnionTransportWithAddresses> {
4747
let mut onion_addresses = vec![];
48-
let maybe_tor_transport =
48+
let transport =
4949
maybe_tor_client.into_transport(AddressConversion::DnsOnly, |arti_tor_transport| {
5050
if register_hidden_service {
5151
let onion_service_config = OnionServiceConfigBuilder::default()
@@ -75,14 +75,8 @@ pub mod transport {
7575
}
7676
})?;
7777

78-
let tcp = tcp::tokio::Transport::new(tcp::Config::new().nodelay(true));
79-
let tcp_with_dns = dns::tokio::Transport::system(tcp)?;
80-
8178
Ok((
82-
authenticate_and_multiplex(
83-
maybe_tor_transport.or_transport(tcp_with_dns).boxed(),
84-
identity,
85-
)?,
79+
authenticate_and_multiplex(transport.boxed(), identity)?,
8680
onion_addresses,
8781
))
8882
}

swap/src/cli/transport.rs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ use crate::network::transport::authenticate_and_multiplex;
33
use anyhow::Result;
44
use libp2p::core::muxing::StreamMuxerBox;
55
use libp2p::core::transport::Boxed;
6-
use libp2p::dns;
7-
use libp2p::tcp;
8-
use libp2p::{identity, PeerId, Transport};
6+
use libp2p::Transport;
7+
use libp2p::{identity, PeerId};
98
use libp2p_tor::AddressConversion;
109

1110
/// Creates the libp2p transport for the swap CLI.
@@ -20,13 +19,7 @@ pub fn new(
2019
identity: &identity::Keypair,
2120
maybe_tor_client: TorBackend,
2221
) -> Result<Boxed<(PeerId, StreamMuxerBox)>> {
23-
let tcp = tcp::tokio::Transport::new(tcp::Config::new().nodelay(true));
24-
let tcp_with_dns = dns::tokio::Transport::system(tcp)?;
22+
let transport = maybe_tor_client.into_transport(AddressConversion::IpAndDns, |_| {})?;
2523

26-
let maybe_tor_transport =
27-
maybe_tor_client.into_transport(AddressConversion::IpAndDns, |_| {})?;
28-
29-
let transport = maybe_tor_transport.or_transport(tcp_with_dns).boxed();
30-
31-
authenticate_and_multiplex(transport, identity)
24+
authenticate_and_multiplex(transport.boxed(), identity)
3225
}

swap/src/common/tor.rs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use crate::cli::api::tauri_bindings::{
66
use arti_client::{config::TorClientConfigBuilder, status::BootstrapStatus, Error, TorClient};
77
use futures::StreamExt;
88
use libp2p::core::transport::{OptionalTransport, OrTransport};
9+
use libp2p::{dns, tcp, Transport};
910
use libp2p_tor::{AddressConversion, TorTransport};
1011
use swap_env::env::{is_whonix, may_init_tor};
1112
use swap_tor::*;
@@ -54,8 +55,11 @@ pub trait TorBackendSwap {
5455
) -> std::io::Result<IntoTransportT>;
5556
}
5657
type IntoTransportT = OrTransport<
57-
OptionalTransport<TorTransport>,
58-
OrTransport<OptionalTransport<Socks5Transport>, OptionalTransport<TorsocksTransport>>,
58+
OrTransport<
59+
OptionalTransport<TorTransport>,
60+
OrTransport<OptionalTransport<Socks5Transport>, OptionalTransport<TorsocksTransport>>,
61+
>,
62+
swap_tor::TcpTransport,
5963
>;
6064
impl TorBackendSwap for TorBackend {
6165
async fn bootstrap(&self, tauri_handle: Option<TauriHandle>) -> anyhow::Result<()> {
@@ -83,7 +87,13 @@ impl TorBackendSwap for TorBackend {
8387
arti_address_conversion: AddressConversion,
8488
arti_transport_hook: impl FnOnce(&mut TorTransport),
8589
) -> std::io::Result<IntoTransportT> {
86-
Ok(match self {
90+
fn plain_transport() -> std::io::Result<swap_tor::TcpTransport> {
91+
let tcp = tcp::tokio::Transport::new(tcp::Config::new().nodelay(true));
92+
dns::tokio::Transport::system(tcp)
93+
}
94+
let tcp_with_dns = plain_transport()?;
95+
96+
let tor = match self {
8797
TorBackend::Arti(tor_client) => {
8898
let mut tor_transport =
8999
libp2p_tor::TorTransport::from_client(tor_client, arti_address_conversion);
@@ -104,18 +114,16 @@ impl TorBackendSwap for TorBackend {
104114
OptionalTransport::none(),
105115
OrTransport::new(
106116
OptionalTransport::none(),
107-
OptionalTransport::some(TorsocksTransport(
108-
libp2p::dns::tokio::Transport::system(libp2p::tcp::tokio::Transport::new(
109-
libp2p::tcp::Config::new().nodelay(true),
110-
))?,
111-
)),
117+
OptionalTransport::some(TorsocksTransport(plain_transport()?)),
112118
),
113119
),
114120
TorBackend::None => OrTransport::new(
115121
OptionalTransport::none(),
116122
OrTransport::new(OptionalTransport::none(), OptionalTransport::none()),
117123
),
118-
})
124+
};
125+
126+
Ok(tor.or_transport(tcp_with_dns))
119127
}
120128
}
121129

0 commit comments

Comments
 (0)