@@ -24,6 +24,7 @@ use uuid::Uuid;
24
24
use super :: RawRequest ;
25
25
use crate :: container:: UdpTrackerServerContainer ;
26
26
use crate :: error:: Error ;
27
+ use crate :: statistics:: event:: UdpRequestKind ;
27
28
use crate :: CurrentClock ;
28
29
29
30
#[ derive( Debug , Clone , PartialEq ) ]
@@ -60,15 +61,15 @@ pub(crate) async fn handle_packet(
60
61
udp_tracker_server_container : Arc < UdpTrackerServerContainer > ,
61
62
server_socket_addr : SocketAddr ,
62
63
cookie_time_values : CookieTimeValues ,
63
- ) -> Response {
64
+ ) -> ( Response , Option < UdpRequestKind > ) {
64
65
let request_id = Uuid :: new_v4 ( ) ;
65
66
66
67
tracing:: Span :: current ( ) . record ( "request_id" , request_id. to_string ( ) ) ;
67
68
tracing:: debug!( "Handling Packets: {udp_request:?}" ) ;
68
69
69
70
let start_time = Instant :: now ( ) ;
70
71
71
- let response =
72
+ let ( response, opt_req_kind ) =
72
73
match Request :: parse_bytes ( & udp_request. payload [ ..udp_request. payload . len ( ) ] , MAX_SCRAPE_TORRENTS ) . map_err ( Error :: from) {
73
74
Ok ( request) => match handle_request (
74
75
request,
@@ -80,8 +81,8 @@ pub(crate) async fn handle_packet(
80
81
)
81
82
. await
82
83
{
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 ) ) => {
85
86
if let Error :: UdpAnnounceError {
86
87
source : UdpAnnounceError :: ConnectionCookieError { .. } ,
87
88
} = error
@@ -91,7 +92,8 @@ pub(crate) async fn handle_packet(
91
92
ban_service. increase_counter ( & udp_request. from . ip ( ) ) ;
92
93
}
93
94
94
- handle_error (
95
+ let response = handle_error (
96
+ Some ( req_kind. clone ( ) ) ,
95
97
udp_request. from ,
96
98
server_socket_addr,
97
99
request_id,
@@ -100,11 +102,14 @@ pub(crate) async fn handle_packet(
100
102
& error,
101
103
Some ( transaction_id) ,
102
104
)
103
- . await
105
+ . await ;
106
+
107
+ ( response, Some ( req_kind) )
104
108
}
105
109
} ,
106
110
Err ( e) => {
107
- handle_error (
111
+ let response = handle_error (
112
+ None ,
108
113
udp_request. from ,
109
114
server_socket_addr,
110
115
request_id,
@@ -113,14 +118,16 @@ pub(crate) async fn handle_packet(
113
118
& e,
114
119
None ,
115
120
)
116
- . await
121
+ . await ;
122
+
123
+ ( response, None )
117
124
}
118
125
} ;
119
126
120
127
let latency = start_time. elapsed ( ) ;
121
128
tracing:: trace!( ?latency, "responded" ) ;
122
129
123
- response
130
+ ( response, opt_req_kind )
124
131
}
125
132
126
133
/// It dispatches the request to the correct handler.
@@ -143,21 +150,24 @@ pub async fn handle_request(
143
150
udp_tracker_core_container : Arc < UdpTrackerCoreContainer > ,
144
151
udp_tracker_server_container : Arc < UdpTrackerServerContainer > ,
145
152
cookie_time_values : CookieTimeValues ,
146
- ) -> Result < Response , ( Error , TransactionId ) > {
153
+ ) -> Result < ( Response , UdpRequestKind ) , ( Error , TransactionId , UdpRequestKind ) > {
147
154
tracing:: trace!( "handle request" ) ;
148
155
149
156
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
+ ) ) ,
159
169
Request :: Announce ( announce_request) => {
160
- handle_announce (
170
+ match handle_announce (
161
171
& udp_tracker_core_container. announce_service ,
162
172
client_socket_addr,
163
173
server_socket_addr,
@@ -167,9 +177,13 @@ pub async fn handle_request(
167
177
cookie_time_values. valid_range ,
168
178
)
169
179
. await
180
+ {
181
+ Ok ( response) => Ok ( ( response, UdpRequestKind :: Announce ) ) ,
182
+ Err ( err) => Err ( err) ,
183
+ }
170
184
}
171
185
Request :: Scrape ( scrape_request) => {
172
- handle_scrape (
186
+ match handle_scrape (
173
187
& udp_tracker_core_container. scrape_service ,
174
188
client_socket_addr,
175
189
server_socket_addr,
@@ -178,6 +192,10 @@ pub async fn handle_request(
178
192
cookie_time_values. valid_range ,
179
193
)
180
194
. await
195
+ {
196
+ Ok ( response) => Ok ( ( response, UdpRequestKind :: Scrape ) ) ,
197
+ Err ( err) => Err ( err) ,
198
+ }
181
199
}
182
200
}
183
201
}
0 commit comments