@@ -16,7 +16,7 @@ use zerocopy::network_endian::I32;
16
16
17
17
use crate :: error:: Error ;
18
18
use crate :: statistics as server_statistics;
19
- use crate :: statistics:: event:: UdpResponseKind ;
19
+ use crate :: statistics:: event:: { ConnectionContext , UdpRequestKind } ;
20
20
21
21
/// It handles the `Announce` request.
22
22
///
@@ -32,7 +32,7 @@ pub async fn handle_announce(
32
32
core_config : & Arc < Core > ,
33
33
opt_udp_server_stats_event_sender : & Arc < Option < Box < dyn server_statistics:: event:: sender:: Sender > > > ,
34
34
cookie_valid_range : Range < f64 > ,
35
- ) -> Result < Response , ( Error , TransactionId ) > {
35
+ ) -> Result < Response , ( Error , TransactionId , UdpRequestKind ) > {
36
36
tracing:: Span :: current ( )
37
37
. record ( "transaction_id" , request. transaction_id . 0 . to_string ( ) )
38
38
. record ( "connection_id" , request. connection_id . 0 . to_string ( ) )
@@ -41,28 +41,18 @@ pub async fn handle_announce(
41
41
tracing:: trace!( "handle announce" ) ;
42
42
43
43
if let Some ( udp_server_stats_event_sender) = opt_udp_server_stats_event_sender. as_deref ( ) {
44
- match client_socket_addr. ip ( ) {
45
- IpAddr :: V4 ( _) => {
46
- udp_server_stats_event_sender
47
- . send_event ( server_statistics:: event:: Event :: Udp4Request {
48
- kind : UdpResponseKind :: Announce ,
49
- } )
50
- . await ;
51
- }
52
- IpAddr :: V6 ( _) => {
53
- udp_server_stats_event_sender
54
- . send_event ( server_statistics:: event:: Event :: Udp6Request {
55
- kind : UdpResponseKind :: Announce ,
56
- } )
57
- . await ;
58
- }
59
- }
44
+ udp_server_stats_event_sender
45
+ . send_event ( server_statistics:: event:: Event :: UdpRequestAccepted {
46
+ context : ConnectionContext :: new ( client_socket_addr, server_socket_addr) ,
47
+ kind : UdpRequestKind :: Announce ,
48
+ } )
49
+ . await ;
60
50
}
61
51
62
52
let announce_data = announce_service
63
53
. handle_announce ( client_socket_addr, server_socket_addr, request, cookie_valid_range)
64
54
. await
65
- . map_err ( |e| ( e. into ( ) , request. transaction_id ) ) ?;
55
+ . map_err ( |e| ( e. into ( ) , request. transaction_id , UdpRequestKind :: Announce ) ) ?;
66
56
67
57
Ok ( build_response ( client_socket_addr, request, core_config, & announce_data) )
68
58
}
@@ -226,7 +216,7 @@ mod tests {
226
216
TorrentPeerBuilder ,
227
217
} ;
228
218
use crate :: statistics as server_statistics;
229
- use crate :: statistics:: event:: UdpResponseKind ;
219
+ use crate :: statistics:: event:: UdpRequestKind ;
230
220
231
221
#[ tokio:: test]
232
222
async fn an_announced_peer_should_be_added_to_the_tracker ( ) {
@@ -429,11 +419,15 @@ mod tests {
429
419
430
420
#[ tokio:: test]
431
421
async fn should_send_the_upd4_announce_event ( ) {
422
+ let client_socket_addr = sample_ipv4_socket_address ( ) ;
423
+ let server_socket_addr = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: new ( 203 , 0 , 113 , 196 ) ) , 6969 ) ;
424
+
432
425
let mut udp_server_stats_event_sender_mock = MockUdpServerStatsEventSender :: new ( ) ;
433
426
udp_server_stats_event_sender_mock
434
427
. expect_send_event ( )
435
- . with ( eq ( server_statistics:: event:: Event :: Udp4Request {
436
- kind : UdpResponseKind :: Announce ,
428
+ . with ( eq ( server_statistics:: event:: Event :: UdpRequestAccepted {
429
+ context : server_statistics:: event:: ConnectionContext :: new ( client_socket_addr, server_socket_addr) ,
430
+ kind : UdpRequestKind :: Announce ,
437
431
} ) )
438
432
. times ( 1 )
439
433
. returning ( |_| Box :: pin ( future:: ready ( Some ( Ok ( ( ) ) ) ) ) ) ;
@@ -443,9 +437,6 @@ mod tests {
443
437
let ( core_tracker_services, core_udp_tracker_services, _server_udp_tracker_services) =
444
438
initialize_core_tracker_services_for_default_tracker_configuration ( ) ;
445
439
446
- let client_socket_addr = sample_ipv4_socket_address ( ) ;
447
- let server_socket_addr = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: new ( 203 , 0 , 113 , 196 ) ) , 6969 ) ;
448
-
449
440
handle_announce (
450
441
& core_udp_tracker_services. announce_service ,
451
442
client_socket_addr,
@@ -549,7 +540,7 @@ mod tests {
549
540
sample_issue_time, MockUdpServerStatsEventSender , TorrentPeerBuilder ,
550
541
} ;
551
542
use crate :: statistics as server_statistics;
552
- use crate :: statistics:: event:: UdpResponseKind ;
543
+ use crate :: statistics:: event:: UdpRequestKind ;
553
544
554
545
#[ tokio:: test]
555
546
async fn an_announced_peer_should_be_added_to_the_tracker ( ) {
@@ -771,11 +762,15 @@ mod tests {
771
762
772
763
#[ tokio:: test]
773
764
async fn should_send_the_upd6_announce_event ( ) {
765
+ let client_socket_addr = sample_ipv6_remote_addr ( ) ;
766
+ let server_socket_addr = SocketAddr :: new ( IpAddr :: V6 ( Ipv6Addr :: new ( 0 , 0 , 0 , 0 , 203 , 0 , 113 , 196 ) ) , 6969 ) ;
767
+
774
768
let mut udp_server_stats_event_sender_mock = MockUdpServerStatsEventSender :: new ( ) ;
775
769
udp_server_stats_event_sender_mock
776
770
. expect_send_event ( )
777
- . with ( eq ( server_statistics:: event:: Event :: Udp6Request {
778
- kind : UdpResponseKind :: Announce ,
771
+ . with ( eq ( server_statistics:: event:: Event :: UdpRequestAccepted {
772
+ context : server_statistics:: event:: ConnectionContext :: new ( client_socket_addr, server_socket_addr) ,
773
+ kind : UdpRequestKind :: Announce ,
779
774
} ) )
780
775
. times ( 1 )
781
776
. returning ( |_| Box :: pin ( future:: ready ( Some ( Ok ( ( ) ) ) ) ) ) ;
@@ -785,9 +780,6 @@ mod tests {
785
780
let ( core_tracker_services, core_udp_tracker_services, _server_udp_tracker_services) =
786
781
initialize_core_tracker_services_for_default_tracker_configuration ( ) ;
787
782
788
- let client_socket_addr = sample_ipv6_remote_addr ( ) ;
789
- let server_socket_addr = SocketAddr :: new ( IpAddr :: V6 ( Ipv6Addr :: new ( 0 , 0 , 0 , 0 , 203 , 0 , 113 , 196 ) ) , 6969 ) ;
790
-
791
783
let announce_request = AnnounceRequestBuilder :: default ( )
792
784
. with_connection_id ( make ( gen_remote_fingerprint ( & client_socket_addr) , sample_issue_time ( ) ) . unwrap ( ) )
793
785
. into ( ) ;
@@ -819,7 +811,6 @@ mod tests {
819
811
use bittorrent_tracker_core:: whitelist:: repository:: in_memory:: InMemoryWhitelist ;
820
812
use bittorrent_udp_tracker_core:: connection_cookie:: { gen_remote_fingerprint, make} ;
821
813
use bittorrent_udp_tracker_core:: services:: announce:: AnnounceService ;
822
- use bittorrent_udp_tracker_core:: statistics:: event:: ConnectionContext ;
823
814
use bittorrent_udp_tracker_core:: { self , statistics as core_statistics} ;
824
815
use mockall:: predicate:: eq;
825
816
@@ -830,7 +821,7 @@ mod tests {
830
821
TrackerConfigurationBuilder ,
831
822
} ;
832
823
use crate :: statistics as server_statistics;
833
- use crate :: statistics:: event:: UdpResponseKind ;
824
+ use crate :: statistics:: event:: UdpRequestKind ;
834
825
835
826
#[ tokio:: test]
836
827
async fn the_peer_ip_should_be_changed_to_the_external_ip_in_the_tracker_configuration ( ) {
@@ -860,7 +851,7 @@ mod tests {
860
851
udp_core_stats_event_sender_mock
861
852
. expect_send_event ( )
862
853
. with ( eq ( core_statistics:: event:: Event :: UdpAnnounce {
863
- context : ConnectionContext :: new ( client_socket_addr, server_socket_addr) ,
854
+ context : core_statistics :: event :: ConnectionContext :: new ( client_socket_addr, server_socket_addr) ,
864
855
} ) )
865
856
. times ( 1 )
866
857
. returning ( |_| Box :: pin ( future:: ready ( Some ( Ok ( ( ) ) ) ) ) ) ;
@@ -870,8 +861,9 @@ mod tests {
870
861
let mut udp_server_stats_event_sender_mock = MockUdpServerStatsEventSender :: new ( ) ;
871
862
udp_server_stats_event_sender_mock
872
863
. expect_send_event ( )
873
- . with ( eq ( server_statistics:: event:: Event :: Udp6Request {
874
- kind : UdpResponseKind :: Announce ,
864
+ . with ( eq ( server_statistics:: event:: Event :: UdpRequestAccepted {
865
+ context : server_statistics:: event:: ConnectionContext :: new ( client_socket_addr, server_socket_addr) ,
866
+ kind : UdpRequestKind :: Announce ,
875
867
} ) )
876
868
. times ( 1 )
877
869
. returning ( |_| Box :: pin ( future:: ready ( Some ( Ok ( ( ) ) ) ) ) ) ;
0 commit comments