From 9aa8912f8dc30529bf141221b7c88fbb44832e40 Mon Sep 17 00:00:00 2001 From: rustaceanrob Date: Sun, 1 Mar 2026 13:15:44 +0000 Subject: [PATCH] net: Use V1 transport when connecting by proxy --- src/network/mod.rs | 4 ++++ src/network/peer.rs | 8 ++++++-- src/network/peer_map.rs | 3 ++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/network/mod.rs b/src/network/mod.rs index d8f35e7c..88ad69d9 100644 --- a/src/network/mod.rs +++ b/src/network/mod.rs @@ -187,6 +187,10 @@ impl ConnectionType { } } } + + fn is_proxy(&self) -> bool { + matches!(self, ConnectionType::Socks5Proxy(_)) + } } #[derive(Debug, Clone)] diff --git a/src/network/peer.rs b/src/network/peer.rs index b25f017a..34a18877 100644 --- a/src/network/peer.rs +++ b/src/network/peer.rs @@ -72,14 +72,18 @@ impl Peer { } } - pub async fn run(&mut self, connection: TcpStream) -> Result<(), PeerError> { + pub async fn run( + &mut self, + connection: TcpStream, + is_proxy_connection: bool, + ) -> Result<(), PeerError> { let start_time = Instant::now(); let (tx, mut rx) = mpsc::channel(32); let (reader, mut writer) = connection.into_split(); let mut reader = BufReader::new(reader); // If a peer signals for V2 we will use it, otherwise just use plaintext. let (mut outbound_messages, mut peer_reader) = - if self.source.service_flags().has(ServiceFlags::P2P_V2) { + if self.source.service_flags().has(ServiceFlags::P2P_V2) && !is_proxy_connection { let handshake_result = tokio::time::timeout( V2_HANDSHAKE_TIMEOUT, self.try_handshake(&mut writer, &mut reader), diff --git a/src/network/peer_map.rs b/src/network/peer_map.rs index 3ec3d5cd..7a5316cf 100644 --- a/src/network/peer_map.rs +++ b/src/network/peer_map.rs @@ -141,7 +141,8 @@ impl PeerMap { return Err(e); } }; - let handle = tokio::spawn(async move { peer.run(connection).await }); + let is_proxy = self.connector.is_proxy(); + let handle = tokio::spawn(async move { peer.run(connection, is_proxy).await }); self.map.insert( self.current_id, ManagedPeer {