Skip to content

Commit

Permalink
refactor: function does not need to be pub anymore
Browse files Browse the repository at this point in the history
  • Loading branch information
josecelano committed Feb 10, 2023
1 parent cecbc17 commit 3b20795
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 10 deletions.
12 changes: 8 additions & 4 deletions src/tracker/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,8 @@ impl Tracker {

let swam_stats = self.update_torrent_with_peer_and_get_stats(info_hash, peer).await;

let peers = self.get_other_peers(info_hash, &peer.peer_addr).await;
// todo: remove peer by using its `Id` instead of its socket address: `get_peers_excluding_peer(peer_id: peer::Id)`
let peers = self.get_peers_excluding_peers_with_address(info_hash, &peer.peer_addr).await;

AnnounceResponse { peers, swam_stats }
}
Expand Down Expand Up @@ -296,13 +297,16 @@ impl Tracker {
Ok(())
}

/// Get all torrent peers for a given torrent filtering out the peer with the client address
pub async fn get_other_peers(&self, info_hash: &InfoHash, client_addr: &SocketAddr) -> Vec<peer::Peer> {
async fn get_peers_excluding_peers_with_address(
&self,
info_hash: &InfoHash,
excluded_address: &SocketAddr,
) -> Vec<peer::Peer> {
let read_lock = self.torrents.read().await;

match read_lock.get(info_hash) {
None => vec![],
Some(entry) => entry.get_peers(Some(client_addr)).into_iter().copied().collect(),
Some(entry) => entry.get_peers(Some(excluded_address)).into_iter().copied().collect(),
}
}

Expand Down
12 changes: 6 additions & 6 deletions src/tracker/torrent.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,22 +49,22 @@ impl Entry {
}

#[must_use]
pub fn get_peers(&self, client_addr: Option<&SocketAddr>) -> Vec<&peer::Peer> {
pub fn get_peers(&self, optional_excluded_address: Option<&SocketAddr>) -> Vec<&peer::Peer> {
self.peers
.values()
.filter(|peer| match client_addr {
.filter(|peer| match optional_excluded_address {
// Don't filter on ip_version
None => true,
// Filter out different ip_version from remote_addr
Some(remote_addr) => {
Some(excluded_address) => {
// Skip ip address of client
if peer.peer_addr.ip() == remote_addr.ip() {
if peer.peer_addr.ip() == excluded_address.ip() {
return false;
}

match peer.peer_addr.ip() {
IpAddr::V4(_) => remote_addr.is_ipv4(),
IpAddr::V6(_) => remote_addr.is_ipv6(),
IpAddr::V4(_) => excluded_address.is_ipv4(),
IpAddr::V6(_) => excluded_address.is_ipv6(),
}
}
})
Expand Down

0 comments on commit 3b20795

Please sign in to comment.