From 8e929b3710438a5ab8a5ee9817d7d04f0429cd35 Mon Sep 17 00:00:00 2001 From: Alex Galvin Date: Thu, 17 Apr 2025 02:34:56 -0400 Subject: [PATCH] Do not exchange peers or torrent metadata in private swarms --- crates/librqbit/src/torrent_state/live/mod.rs | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/crates/librqbit/src/torrent_state/live/mod.rs b/crates/librqbit/src/torrent_state/live/mod.rs index 950e29b..2bfaf66 100644 --- a/crates/librqbit/src/torrent_state/live/mod.rs +++ b/crates/librqbit/src/torrent_state/live/mod.rs @@ -990,11 +990,27 @@ impl PeerConnectionHandler for &PeerHandler { Message::Extended(ExtendedMessage::UtMetadata(UtMetadata::Request( metadata_piece_id, ))) => { - self.send_metadata_piece(metadata_piece_id) - .with_context(|| format!("error sending metadata piece {metadata_piece_id}"))?; + if self.state.metadata.info.private { + warn!( + "recieved noncompliant ut_metadata message from {}, ignoring", + self.addr + ); + } else { + self.send_metadata_piece(metadata_piece_id) + .with_context(|| { + format!("error sending metadata piece {metadata_piece_id}") + })?; + } } Message::Extended(ExtendedMessage::UtPex(pex)) => { - self.on_pex_message(pex); + if self.state.metadata.info.private { + warn!( + "recieved noncompliant PEX message from {}, ignoring", + self.addr + ); + } else { + self.on_pex_message(pex); + } } message => { warn!("received unsupported message {:?}, ignoring", message); @@ -1032,7 +1048,7 @@ impl PeerConnectionHandler for &PeerHandler { } fn on_extended_handshake(&self, hs: &ExtendedHandshake) -> anyhow::Result<()> { - if let Some(_peer_pex_msg_id) = hs.ut_pex() { + if !self.state.metadata.info.private && hs.ut_pex().is_some() { self.state.clone().spawn( error_span!( parent: self.state.shared.span.clone(),