Skip to content

Commit 7ed7500

Browse files
committed
refactor: extract fn for duplicate code
1 parent bc02e9b commit 7ed7500

File tree

3 files changed

+37
-43
lines changed

3 files changed

+37
-43
lines changed

packages/http-tracker-core/src/services/announce.rs

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use std::panic::Location;
1212
use std::sync::Arc;
1313

1414
use bittorrent_http_tracker_protocol::v1::requests::announce::{peer_from_request, Announce};
15-
use bittorrent_http_tracker_protocol::v1::services::peer_ip_resolver::{self, ClientIpSources, PeerIpResolutionError};
15+
use bittorrent_http_tracker_protocol::v1::services::peer_ip_resolver::{ClientIpSources, PeerIpResolutionError};
1616
use bittorrent_primitives::info_hash::InfoHash;
1717
use bittorrent_tracker_core::announce_handler::{AnnounceHandler, PeersWanted};
1818
use bittorrent_tracker_core::authentication::service::AuthenticationService;
@@ -24,6 +24,7 @@ use torrust_tracker_primitives::core::AnnounceData;
2424
use torrust_tracker_primitives::peer::PeerAnnouncement;
2525
use torrust_tracker_primitives::service_binding::ServiceBinding;
2626

27+
use super::resolve_remote_client_ip;
2728
use crate::event;
2829
use crate::event::Event;
2930

@@ -78,7 +79,8 @@ impl AnnounceService {
7879

7980
self.authorize(announce_request.info_hash).await?;
8081

81-
let (remote_client_ip, opt_remote_client_port) = self.resolve_remote_client_ip(client_ip_sources)?;
82+
let (remote_client_ip, opt_remote_client_port) =
83+
resolve_remote_client_ip(self.core_config.net.on_reverse_proxy, client_ip_sources)?;
8284

8385
let mut peer = peer_from_request(announce_request, &remote_client_ip);
8486

@@ -117,27 +119,6 @@ impl AnnounceService {
117119
self.whitelist_authorization.authorize(&info_hash).await
118120
}
119121

120-
/// Resolves the client's real IP address considering proxy headers
121-
fn resolve_remote_client_ip(
122-
&self,
123-
client_ip_sources: &ClientIpSources,
124-
) -> Result<(IpAddr, Option<u16>), PeerIpResolutionError> {
125-
let ip = match peer_ip_resolver::invoke(self.core_config.net.on_reverse_proxy, client_ip_sources) {
126-
Ok(peer_ip) => Ok(peer_ip),
127-
Err(error) => Err(error),
128-
}?;
129-
130-
let port = if client_ip_sources.connection_info_socket_address.is_some() {
131-
client_ip_sources
132-
.connection_info_socket_address
133-
.map(|socket_addr| socket_addr.port())
134-
} else {
135-
None
136-
};
137-
138-
Ok((ip, port))
139-
}
140-
141122
/// Determines how many peers the client wants in the response
142123
fn peers_wanted(announce_request: &Announce) -> PeersWanted {
143124
match announce_request.numwant {

packages/http-tracker-core/src/services/mod.rs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,34 @@
55
//! servers.
66
//!
77
//! Refer to [`torrust_tracker`](crate) documentation.
8+
9+
use std::net::IpAddr;
10+
11+
use bittorrent_http_tracker_protocol::v1::services::peer_ip_resolver::{self, ClientIpSources, PeerIpResolutionError};
812
pub mod announce;
913
pub mod scrape;
14+
15+
/// Resolves the client's real IP address considering proxy headers
16+
///
17+
/// # Errors
18+
///
19+
/// This function returns an error if the IP address cannot be resolved.
20+
pub fn resolve_remote_client_ip(
21+
on_reverse_proxy: bool,
22+
client_ip_sources: &ClientIpSources,
23+
) -> Result<(IpAddr, Option<u16>), PeerIpResolutionError> {
24+
let ip = match peer_ip_resolver::invoke(on_reverse_proxy, client_ip_sources) {
25+
Ok(peer_ip) => Ok(peer_ip),
26+
Err(error) => Err(error),
27+
}?;
28+
29+
let port = if client_ip_sources.connection_info_socket_address.is_some() {
30+
client_ip_sources
31+
.connection_info_socket_address
32+
.map(|socket_addr| socket_addr.port())
33+
} else {
34+
None
35+
};
36+
37+
Ok((ip, port))
38+
}

packages/http-tracker-core/src/services/scrape.rs

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use std::net::IpAddr;
1111
use std::sync::Arc;
1212

1313
use bittorrent_http_tracker_protocol::v1::requests::scrape::Scrape;
14-
use bittorrent_http_tracker_protocol::v1::services::peer_ip_resolver::{self, ClientIpSources, PeerIpResolutionError};
14+
use bittorrent_http_tracker_protocol::v1::services::peer_ip_resolver::{ClientIpSources, PeerIpResolutionError};
1515
use bittorrent_tracker_core::authentication::service::AuthenticationService;
1616
use bittorrent_tracker_core::authentication::{self, Key};
1717
use bittorrent_tracker_core::error::{ScrapeError, TrackerCoreError, WhitelistError};
@@ -20,6 +20,7 @@ use torrust_tracker_configuration::Core;
2020
use torrust_tracker_primitives::core::ScrapeData;
2121
use torrust_tracker_primitives::service_binding::ServiceBinding;
2222

23+
use super::resolve_remote_client_ip;
2324
use crate::event;
2425
use crate::event::{ConnectionContext, Event};
2526

@@ -81,7 +82,8 @@ impl ScrapeService {
8182
self.scrape_handler.scrape(&scrape_request.info_hashes).await?
8283
};
8384

84-
let (remote_client_ip, opt_client_port) = self.resolve_remote_client_ip(client_ip_sources)?;
85+
let (remote_client_ip, opt_client_port) =
86+
resolve_remote_client_ip(self.core_config.net.on_reverse_proxy, client_ip_sources)?;
8587

8688
self.send_event(remote_client_ip, opt_client_port, server_service_binding.clone())
8789
.await;
@@ -101,24 +103,6 @@ impl ScrapeService {
101103
false
102104
}
103105

104-
/// Resolves the client's real IP address considering proxy headers.
105-
fn resolve_remote_client_ip(
106-
&self,
107-
client_ip_sources: &ClientIpSources,
108-
) -> Result<(IpAddr, Option<u16>), PeerIpResolutionError> {
109-
let ip = peer_ip_resolver::invoke(self.core_config.net.on_reverse_proxy, client_ip_sources)?;
110-
111-
let port = if client_ip_sources.connection_info_socket_address.is_some() {
112-
client_ip_sources
113-
.connection_info_socket_address
114-
.map(|socket_addr| socket_addr.port())
115-
} else {
116-
None
117-
};
118-
119-
Ok((ip, port))
120-
}
121-
122106
async fn send_event(
123107
&self,
124108
original_peer_ip: IpAddr,

0 commit comments

Comments
 (0)