Skip to content

Commit dec742e

Browse files
committed
refactor: [#1268] extract servers::udp::services::scrape service
1 parent 3c07b26 commit dec742e

File tree

3 files changed

+46
-17
lines changed

3 files changed

+46
-17
lines changed

src/servers/udp/handlers/scrape.rs

+2-16
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use crate::packages::udp_tracker_core;
1515
use crate::servers::udp::connection_cookie::check;
1616
use crate::servers::udp::error::Error;
1717
use crate::servers::udp::handlers::gen_remote_fingerprint;
18+
use crate::servers::udp::services;
1819

1920
/// It handles the `Scrape` request. Refer to [`Scrape`](crate::servers::udp#scrape)
2021
/// request for more information.
@@ -49,7 +50,7 @@ pub async fn handle_scrape(
4950
info_hashes.push((*info_hash).into());
5051
}
5152

52-
let scrape_data = scrape_handler.scrape(&info_hashes).await;
53+
let scrape_data = services::scrape::invoke(scrape_handler, opt_udp_stats_event_sender, &info_hashes, remote_addr).await;
5354

5455
let mut torrent_stats: Vec<TorrentScrapeStatistics> = Vec::new();
5556

@@ -68,21 +69,6 @@ pub async fn handle_scrape(
6869
torrent_stats.push(scrape_entry);
6970
}
7071

71-
if let Some(udp_stats_event_sender) = opt_udp_stats_event_sender.as_deref() {
72-
match remote_addr {
73-
SocketAddr::V4(_) => {
74-
udp_stats_event_sender
75-
.send_event(udp_tracker_core::statistics::event::Event::Udp4Scrape)
76-
.await;
77-
}
78-
SocketAddr::V6(_) => {
79-
udp_stats_event_sender
80-
.send_event(udp_tracker_core::statistics::event::Event::Udp6Scrape)
81-
.await;
82-
}
83-
}
84-
}
85-
8672
let response = ScrapeResponse {
8773
transaction_id: request.transaction_id,
8874
torrent_stats,

src/servers/udp/services/announce.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
//! It delegates the `announce` logic to the [`AnnounceHandler`] and it returns
66
//! the [`AnnounceData`].
77
//!
8-
//! It also sends an [`http_tracker_core::statistics::event::Event`]
8+
//! It also sends an [`udp_tracker_core::statistics::event::Event`]
99
//! because events are specific for the HTTP tracker.
1010
use std::net::IpAddr;
1111
use std::sync::Arc;

src/servers/udp/services/scrape.rs

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
//! The `scrape` service.
2+
//!
3+
//! The service is responsible for handling the `scrape` requests.
4+
//!
5+
//! It delegates the `scrape` logic to the [`ScrapeHandler`] and it returns the
6+
//! [`ScrapeData`].
7+
//!
8+
//! It also sends an [`udp_tracker_core::statistics::event::Event`]
9+
//! because events are specific for the UDP tracker.
10+
use std::net::SocketAddr;
11+
use std::sync::Arc;
12+
13+
use bittorrent_primitives::info_hash::InfoHash;
14+
use bittorrent_tracker_core::scrape_handler::ScrapeHandler;
15+
use torrust_tracker_primitives::core::ScrapeData;
16+
17+
use crate::packages::udp_tracker_core;
18+
19+
pub async fn invoke(
20+
scrape_handler: &Arc<ScrapeHandler>,
21+
opt_udp_stats_event_sender: &Arc<Option<Box<dyn udp_tracker_core::statistics::event::sender::Sender>>>,
22+
info_hashes: &Vec<InfoHash>,
23+
remote_addr: SocketAddr,
24+
) -> ScrapeData {
25+
let scrape_data = scrape_handler.scrape(info_hashes).await;
26+
27+
if let Some(udp_stats_event_sender) = opt_udp_stats_event_sender.as_deref() {
28+
match remote_addr {
29+
SocketAddr::V4(_) => {
30+
udp_stats_event_sender
31+
.send_event(udp_tracker_core::statistics::event::Event::Udp4Scrape)
32+
.await;
33+
}
34+
SocketAddr::V6(_) => {
35+
udp_stats_event_sender
36+
.send_event(udp_tracker_core::statistics::event::Event::Udp6Scrape)
37+
.await;
38+
}
39+
}
40+
}
41+
42+
scrape_data
43+
}

0 commit comments

Comments
 (0)