Skip to content

Commit 673e9dc

Browse files
refactor(swap): deduplicate upgrading TorBackend to Transport
1 parent d44ca9e commit 673e9dc

File tree

3 files changed

+42
-41
lines changed

3 files changed

+42
-41
lines changed

swap/src/asb/network.rs

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::common::tor::TorBackend;
1+
use crate::common::tor::{TorBackend, TorBackendSwap};
22
use crate::network::rendezvous::XmrBtcNamespace;
33
use crate::network::swap_setup::alice;
44
use crate::network::transport::authenticate_and_multiplex;
@@ -18,10 +18,7 @@ use swap_feed::LatestRate;
1818

1919
pub mod transport {
2020
use arti_client::config::onion_service::OnionServiceConfigBuilder;
21-
use libp2p::{
22-
core::transport::{OptionalTransport, OrTransport},
23-
dns, identity, tcp, Transport,
24-
};
21+
use libp2p::{dns, identity, tcp, Transport};
2522
use libp2p_tor::AddressConversion;
2623

2724
use super::*;
@@ -48,15 +45,8 @@ pub mod transport {
4845
num_intro_points: u8,
4946
) -> Result<OnionTransportWithAddresses> {
5047
let mut onion_addresses = vec![];
51-
let maybe_tor_transport = match maybe_tor_client {
52-
TorBackend::Socks(universal_config) => OrTransport::new(
53-
OptionalTransport::none(),
54-
OptionalTransport::some(universal_config.transport()),
55-
),
56-
TorBackend::Arti(tor_client) => {
57-
let mut tor_transport =
58-
libp2p_tor::TorTransport::from_client(tor_client, AddressConversion::DnsOnly);
59-
48+
let maybe_tor_transport =
49+
maybe_tor_client.into_transport(AddressConversion::DnsOnly, |arti_tor_transport| {
6050
if register_hidden_service {
6151
let onion_service_config = OnionServiceConfigBuilder::default()
6252
.nickname(
@@ -68,7 +58,7 @@ pub mod transport {
6858
.build()
6959
.expect("We specified a valid nickname");
7060

71-
match tor_transport
61+
match arti_tor_transport
7262
.add_onion_service(onion_service_config, ASB_ONION_SERVICE_PORT)
7363
{
7464
Ok(addr) => {
@@ -83,16 +73,7 @@ pub mod transport {
8373
}
8474
}
8575
}
86-
87-
OrTransport::new(
88-
OptionalTransport::some(tor_transport),
89-
OptionalTransport::none(),
90-
)
91-
}
92-
TorBackend::None => {
93-
OrTransport::new(OptionalTransport::none(), OptionalTransport::none())
94-
}
95-
};
76+
});
9677

9778
let tcp = maybe_tor_transport
9879
.or_transport(tcp::tokio::Transport::new(tcp::Config::new().nodelay(true)));

swap/src/cli/transport.rs

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
use crate::common::tor::TorBackend;
1+
use crate::common::tor::{TorBackend, TorBackendSwap};
22
use crate::network::transport::authenticate_and_multiplex;
33
use anyhow::Result;
44
use libp2p::core::muxing::StreamMuxerBox;
5-
use libp2p::core::transport::{Boxed, OptionalTransport, OrTransport};
5+
use libp2p::core::transport::Boxed;
66
use libp2p::dns;
77
use libp2p::tcp;
88
use libp2p::{identity, PeerId, Transport};
@@ -23,20 +23,7 @@ pub fn new(
2323
let tcp = tcp::tokio::Transport::new(tcp::Config::new().nodelay(true));
2424
let tcp_with_dns = dns::tokio::Transport::system(tcp)?;
2525

26-
let maybe_tor_transport = match maybe_tor_client {
27-
TorBackend::Socks(universal_config) => OrTransport::new(
28-
OptionalTransport::none(),
29-
OptionalTransport::some(universal_config.transport()),
30-
),
31-
TorBackend::Arti(client) => OrTransport::new(
32-
OptionalTransport::some(libp2p_tor::TorTransport::from_client(
33-
client,
34-
AddressConversion::IpAndDns,
35-
)),
36-
OptionalTransport::none(),
37-
),
38-
TorBackend::None => OrTransport::new(OptionalTransport::none(), OptionalTransport::none()),
39-
};
26+
let maybe_tor_transport = maybe_tor_client.into_transport(AddressConversion::IpAndDns, |_| {});
4027

4128
let transport = maybe_tor_transport.or_transport(tcp_with_dns).boxed();
4229

swap/src/common/tor.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ use crate::cli::api::tauri_bindings::{
55
};
66
use arti_client::{config::TorClientConfigBuilder, status::BootstrapStatus, Error, TorClient};
77
use futures::StreamExt;
8+
use libp2p::core::transport::{OptionalTransport, OrTransport};
89
use swap_env::env::{is_whonix, may_init_tor};
10+
use libp2p_tor::{AddressConversion, TorTransport};
911
use swap_tor::*;
1012
use tor_rtcompat::tokio::TokioRustlsRuntime;
1113

@@ -45,7 +47,13 @@ pub async fn create_tor_client(data_dir: &Path, tor: bool) -> Result<TorBackend,
4547
pub trait TorBackendSwap {
4648
async fn bootstrap(&self, tauri_handle: Option<TauriHandle>) -> anyhow::Result<()>;
4749
fn clone_for_monero_rpc(&self, enable_monero_tor: bool) -> TorBackend;
50+
fn into_transport(
51+
self,
52+
arti_address_conversion: AddressConversion,
53+
arti_transport_hook: impl FnOnce(&mut TorTransport),
54+
) -> IntoTransportT;
4855
}
56+
type IntoTransportT = OrTransport<OptionalTransport<TorTransport>, OptionalTransport<Socks5Transport>>;
4957
impl TorBackendSwap for TorBackend {
5058
async fn bootstrap(&self, tauri_handle: Option<TauriHandle>) -> anyhow::Result<()> {
5159
match self {
@@ -66,6 +74,31 @@ impl TorBackendSwap for TorBackend {
6674
TorBackend::Socks(..) | TorBackend::None => self.clone(),
6775
}
6876
}
77+
78+
fn into_transport(
79+
self,
80+
arti_address_conversion: AddressConversion,
81+
arti_transport_hook: impl FnOnce(&mut TorTransport),
82+
) -> IntoTransportT {
83+
match self {
84+
TorBackend::Socks(universal_config) => OrTransport::new(
85+
OptionalTransport::none(),
86+
OptionalTransport::some(universal_config.transport()),
87+
),
88+
TorBackend::Arti(tor_client) => {
89+
let mut tor_transport =
90+
libp2p_tor::TorTransport::from_client(tor_client, arti_address_conversion);
91+
arti_transport_hook(&mut tor_transport);
92+
OrTransport::new(
93+
OptionalTransport::some(tor_transport),
94+
OptionalTransport::none(),
95+
)
96+
}
97+
TorBackend::None => {
98+
OrTransport::new(OptionalTransport::none(), OptionalTransport::none())
99+
}
100+
}
101+
}
69102
}
70103

71104
const TOR_CONNECT_TIMEOUT: Duration = Duration::from_secs(30);

0 commit comments

Comments
 (0)