@@ -8,17 +8,16 @@ use aquatic_udp_protocol::{
8
8
Port , Response , ResponsePeer , TransactionId ,
9
9
} ;
10
10
use bittorrent_primitives:: info_hash:: InfoHash ;
11
- use bittorrent_tracker_core:: announce_handler:: { AnnounceHandler , PeersWanted } ;
11
+ use bittorrent_tracker_core:: announce_handler:: AnnounceHandler ;
12
12
use bittorrent_tracker_core:: whitelist;
13
13
use torrust_tracker_configuration:: Core ;
14
14
use tracing:: { instrument, Level } ;
15
15
use zerocopy:: network_endian:: I32 ;
16
16
17
- use crate :: packages:: udp_tracker_core:: { self , services } ;
17
+ use crate :: packages:: udp_tracker_core:: { self } ;
18
18
use crate :: servers:: udp:: connection_cookie:: check;
19
19
use crate :: servers:: udp:: error:: Error ;
20
20
use crate :: servers:: udp:: handlers:: gen_remote_fingerprint;
21
- use crate :: servers:: udp:: peer_builder;
22
21
23
22
/// It handles the `Announce` request. Refer to [`Announce`](crate::servers::udp#announce)
24
23
/// request for more information.
@@ -44,36 +43,29 @@ pub async fn handle_announce(
44
43
45
44
tracing:: trace!( "handle announce" ) ;
46
45
46
+ // todo: move authentication to `udp_tracker_core::services::announce::handle_announce`
47
+
47
48
check (
48
49
& request. connection_id ,
49
50
gen_remote_fingerprint ( & remote_addr) ,
50
51
cookie_valid_range,
51
52
)
52
53
. map_err ( |e| ( e, request. transaction_id ) ) ?;
53
54
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,
75
61
)
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.
77
69
78
70
#[ allow( clippy:: cast_possible_truncation) ]
79
71
if remote_addr. is_ipv4 ( ) {
0 commit comments