@@ -8,17 +8,16 @@ use aquatic_udp_protocol::{
88 Port , Response , ResponsePeer , TransactionId ,
99} ;
1010use bittorrent_primitives:: info_hash:: InfoHash ;
11- use bittorrent_tracker_core:: announce_handler:: { AnnounceHandler , PeersWanted } ;
11+ use bittorrent_tracker_core:: announce_handler:: AnnounceHandler ;
1212use bittorrent_tracker_core:: whitelist;
1313use torrust_tracker_configuration:: Core ;
1414use tracing:: { instrument, Level } ;
1515use zerocopy:: network_endian:: I32 ;
1616
17- use crate :: packages:: udp_tracker_core:: { self , services } ;
17+ use crate :: packages:: udp_tracker_core:: { self } ;
1818use crate :: servers:: udp:: connection_cookie:: check;
1919use crate :: servers:: udp:: error:: Error ;
2020use crate :: servers:: udp:: handlers:: gen_remote_fingerprint;
21- use crate :: servers:: udp:: peer_builder;
2221
2322/// It handles the `Announce` request. Refer to [`Announce`](crate::servers::udp#announce)
2423/// request for more information.
@@ -44,36 +43,29 @@ pub async fn handle_announce(
4443
4544 tracing:: trace!( "handle announce" ) ;
4645
46+ // todo: move authentication to `udp_tracker_core::services::announce::handle_announce`
47+
4748 check (
4849 & request. connection_id ,
4950 gen_remote_fingerprint ( & remote_addr) ,
5051 cookie_valid_range,
5152 )
5253 . map_err ( |e| ( e, request. transaction_id ) ) ?;
5354
54- let info_hash = request. info_hash . into ( ) ;
55- let remote_client_ip = remote_addr. ip ( ) ;
56-
57- // Authorization
58- whitelist_authorization
59- . authorize ( & info_hash)
60- . await
61- . map_err ( |e| Error :: TrackerError {
62- source : ( Arc :: new ( e) as Arc < dyn std:: error:: Error + Send + Sync > ) . into ( ) ,
63- } )
64- . map_err ( |e| ( e, request. transaction_id ) ) ?;
65-
66- let mut peer = peer_builder:: from_request ( request, & remote_client_ip) ;
67- let peers_wanted: PeersWanted = i32:: from ( request. peers_wanted . 0 ) . into ( ) ;
68-
69- let response = services:: announce:: invoke (
70- announce_handler. clone ( ) ,
71- opt_udp_stats_event_sender. clone ( ) ,
72- info_hash,
73- & mut peer,
74- & peers_wanted,
55+ let response = udp_tracker_core:: services:: announce:: handle_announce (
56+ remote_addr,
57+ request,
58+ announce_handler,
59+ whitelist_authorization,
60+ opt_udp_stats_event_sender,
7561 )
76- . await ;
62+ . await
63+ . map_err ( |e| Error :: TrackerError {
64+ source : ( Arc :: new ( e) as Arc < dyn std:: error:: Error + Send + Sync > ) . into ( ) ,
65+ } )
66+ . map_err ( |e| ( e, request. transaction_id ) ) ?;
67+
68+ // todo: extract `build_response` function.
7769
7870 #[ allow( clippy:: cast_possible_truncation) ]
7971 if remote_addr. is_ipv4 ( ) {
0 commit comments