@@ -6,6 +6,7 @@ use crate::cli::api::tauri_bindings::{
66use arti_client:: { config:: TorClientConfigBuilder , status:: BootstrapStatus , Error , TorClient } ;
77use futures:: StreamExt ;
88use libp2p:: core:: transport:: { OptionalTransport , OrTransport } ;
9+ use libp2p:: { dns, tcp, Transport } ;
910use libp2p_tor:: { AddressConversion , TorTransport } ;
1011use swap_env:: env:: { is_whonix, may_init_tor} ;
1112use swap_tor:: * ;
@@ -54,8 +55,11 @@ pub trait TorBackendSwap {
5455 ) -> std:: io:: Result < IntoTransportT > ;
5556}
5657type 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> ;
6064impl 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