@@ -24,6 +24,7 @@ use uuid::Uuid;
2424use super :: RawRequest ;
2525use crate :: container:: UdpTrackerServerContainer ;
2626use crate :: error:: Error ;
27+ use crate :: statistics:: event:: UdpRequestKind ;
2728use crate :: CurrentClock ;
2829
2930#[ derive( Debug , Clone , PartialEq ) ]
@@ -60,15 +61,15 @@ pub(crate) async fn handle_packet(
6061 udp_tracker_server_container : Arc < UdpTrackerServerContainer > ,
6162 server_socket_addr : SocketAddr ,
6263 cookie_time_values : CookieTimeValues ,
63- ) -> Response {
64+ ) -> ( Response , Option < UdpRequestKind > ) {
6465 let request_id = Uuid :: new_v4 ( ) ;
6566
6667 tracing:: Span :: current ( ) . record ( "request_id" , request_id. to_string ( ) ) ;
6768 tracing:: debug!( "Handling Packets: {udp_request:?}" ) ;
6869
6970 let start_time = Instant :: now ( ) ;
7071
71- let response =
72+ let ( response, opt_req_kind ) =
7273 match Request :: parse_bytes ( & udp_request. payload [ ..udp_request. payload . len ( ) ] , MAX_SCRAPE_TORRENTS ) . map_err ( Error :: from) {
7374 Ok ( request) => match handle_request (
7475 request,
@@ -80,8 +81,8 @@ pub(crate) async fn handle_packet(
8081 )
8182 . await
8283 {
83- Ok ( response) => return response,
84- Err ( ( error, transaction_id) ) => {
84+ Ok ( ( response, req_kid ) ) => return ( response, Some ( req_kid ) ) ,
85+ Err ( ( error, transaction_id, req_kind ) ) => {
8586 if let Error :: UdpAnnounceError {
8687 source : UdpAnnounceError :: ConnectionCookieError { .. } ,
8788 } = error
@@ -91,7 +92,8 @@ pub(crate) async fn handle_packet(
9192 ban_service. increase_counter ( & udp_request. from . ip ( ) ) ;
9293 }
9394
94- handle_error (
95+ let response = handle_error (
96+ Some ( req_kind. clone ( ) ) ,
9597 udp_request. from ,
9698 server_socket_addr,
9799 request_id,
@@ -100,11 +102,14 @@ pub(crate) async fn handle_packet(
100102 & error,
101103 Some ( transaction_id) ,
102104 )
103- . await
105+ . await ;
106+
107+ ( response, Some ( req_kind) )
104108 }
105109 } ,
106110 Err ( e) => {
107- handle_error (
111+ let response = handle_error (
112+ None ,
108113 udp_request. from ,
109114 server_socket_addr,
110115 request_id,
@@ -113,14 +118,16 @@ pub(crate) async fn handle_packet(
113118 & e,
114119 None ,
115120 )
116- . await
121+ . await ;
122+
123+ ( response, None )
117124 }
118125 } ;
119126
120127 let latency = start_time. elapsed ( ) ;
121128 tracing:: trace!( ?latency, "responded" ) ;
122129
123- response
130+ ( response, opt_req_kind )
124131}
125132
126133/// It dispatches the request to the correct handler.
@@ -143,21 +150,24 @@ pub async fn handle_request(
143150 udp_tracker_core_container : Arc < UdpTrackerCoreContainer > ,
144151 udp_tracker_server_container : Arc < UdpTrackerServerContainer > ,
145152 cookie_time_values : CookieTimeValues ,
146- ) -> Result < Response , ( Error , TransactionId ) > {
153+ ) -> Result < ( Response , UdpRequestKind ) , ( Error , TransactionId , UdpRequestKind ) > {
147154 tracing:: trace!( "handle request" ) ;
148155
149156 match request {
150- Request :: Connect ( connect_request) => Ok ( handle_connect (
151- client_socket_addr,
152- server_socket_addr,
153- & connect_request,
154- & udp_tracker_core_container. connect_service ,
155- & udp_tracker_server_container. udp_server_stats_event_sender ,
156- cookie_time_values. issue_time ,
157- )
158- . await ) ,
157+ Request :: Connect ( connect_request) => Ok ( (
158+ handle_connect (
159+ client_socket_addr,
160+ server_socket_addr,
161+ & connect_request,
162+ & udp_tracker_core_container. connect_service ,
163+ & udp_tracker_server_container. udp_server_stats_event_sender ,
164+ cookie_time_values. issue_time ,
165+ )
166+ . await ,
167+ UdpRequestKind :: Connect ,
168+ ) ) ,
159169 Request :: Announce ( announce_request) => {
160- handle_announce (
170+ match handle_announce (
161171 & udp_tracker_core_container. announce_service ,
162172 client_socket_addr,
163173 server_socket_addr,
@@ -167,9 +177,13 @@ pub async fn handle_request(
167177 cookie_time_values. valid_range ,
168178 )
169179 . await
180+ {
181+ Ok ( response) => Ok ( ( response, UdpRequestKind :: Announce ) ) ,
182+ Err ( err) => Err ( err) ,
183+ }
170184 }
171185 Request :: Scrape ( scrape_request) => {
172- handle_scrape (
186+ match handle_scrape (
173187 & udp_tracker_core_container. scrape_service ,
174188 client_socket_addr,
175189 server_socket_addr,
@@ -178,6 +192,10 @@ pub async fn handle_request(
178192 cookie_time_values. valid_range ,
179193 )
180194 . await
195+ {
196+ Ok ( response) => Ok ( ( response, UdpRequestKind :: Scrape ) ) ,
197+ Err ( err) => Err ( err) ,
198+ }
181199 }
182200 }
183201}
0 commit comments