@@ -33,6 +33,7 @@ use derive_more::Constructor;
33
33
use futures:: future:: BoxFuture ;
34
34
use thiserror:: Error ;
35
35
use tokio:: sync:: oneshot:: { Receiver , Sender } ;
36
+ use tokio:: sync:: RwLock ;
36
37
use torrust_tracker_configuration:: AccessTokens ;
37
38
use tracing:: { instrument, Level } ;
38
39
@@ -44,6 +45,7 @@ use crate::servers::custom_axum_server::{self, TimeoutAcceptor};
44
45
use crate :: servers:: logging:: STARTED_ON ;
45
46
use crate :: servers:: registar:: { ServiceHealthCheckJob , ServiceRegistration , ServiceRegistrationForm } ;
46
47
use crate :: servers:: signals:: { graceful_shutdown, Halted } ;
48
+ use crate :: servers:: udp:: server:: banning:: BanService ;
47
49
48
50
/// Errors that can occur when starting or stopping the API server.
49
51
#[ derive( Debug , Error ) ]
@@ -122,10 +124,11 @@ impl ApiServer<Stopped> {
122
124
/// # Panics
123
125
///
124
126
/// It would panic if the bound socket address cannot be sent back to this starter.
125
- #[ instrument( skip( self , tracker, form, access_tokens) , err, ret( Display , level = Level :: INFO ) ) ]
127
+ #[ instrument( skip( self , tracker, ban_service , form, access_tokens) , err, ret( Display , level = Level :: INFO ) ) ]
126
128
pub async fn start (
127
129
self ,
128
130
tracker : Arc < Tracker > ,
131
+ ban_service : Arc < RwLock < BanService > > ,
129
132
form : ServiceRegistrationForm ,
130
133
access_tokens : Arc < AccessTokens > ,
131
134
) -> Result < ApiServer < Running > , Error > {
@@ -137,7 +140,7 @@ impl ApiServer<Stopped> {
137
140
let task = tokio:: spawn ( async move {
138
141
tracing:: debug!( target: API_LOG_TARGET , "Starting with launcher in spawned task ..." ) ;
139
142
140
- let _task = launcher. start ( tracker, access_tokens, tx_start, rx_halt) . await ;
143
+ let _task = launcher. start ( tracker, ban_service , access_tokens, tx_start, rx_halt) . await ;
141
144
142
145
tracing:: debug!( target: API_LOG_TARGET , "Started with launcher in spawned task" ) ;
143
146
@@ -235,18 +238,19 @@ impl Launcher {
235
238
///
236
239
/// Will panic if unable to bind to the socket, or unable to get the address of the bound socket.
237
240
/// Will also panic if unable to send message regarding the bound socket address.
238
- #[ instrument( skip( self , tracker, access_tokens, tx_start, rx_halt) ) ]
241
+ #[ instrument( skip( self , tracker, ban_service , access_tokens, tx_start, rx_halt) ) ]
239
242
pub fn start (
240
243
& self ,
241
244
tracker : Arc < Tracker > ,
245
+ ban_service : Arc < RwLock < BanService > > ,
242
246
access_tokens : Arc < AccessTokens > ,
243
247
tx_start : Sender < Started > ,
244
248
rx_halt : Receiver < Halted > ,
245
249
) -> BoxFuture < ' static , ( ) > {
246
250
let socket = std:: net:: TcpListener :: bind ( self . bind_to ) . expect ( "Could not bind tcp_listener to address." ) ;
247
251
let address = socket. local_addr ( ) . expect ( "Could not get local_addr from tcp_listener." ) ;
248
252
249
- let router = router ( tracker, access_tokens, address) ;
253
+ let router = router ( tracker, ban_service , access_tokens, address) ;
250
254
251
255
let handle = Handle :: new ( ) ;
252
256
@@ -294,19 +298,23 @@ impl Launcher {
294
298
mod tests {
295
299
use std:: sync:: Arc ;
296
300
301
+ use tokio:: sync:: RwLock ;
297
302
use torrust_tracker_test_helpers:: configuration:: ephemeral_public;
298
303
299
304
use crate :: bootstrap:: app:: initialize_with_configuration;
300
305
use crate :: bootstrap:: jobs:: make_rust_tls;
301
306
use crate :: servers:: apis:: server:: { ApiServer , Launcher } ;
302
307
use crate :: servers:: registar:: Registar ;
308
+ use crate :: servers:: udp:: server:: banning:: BanService ;
309
+ use crate :: servers:: udp:: server:: launcher:: MAX_CONNECTION_ID_ERRORS_PER_IP ;
303
310
304
311
#[ tokio:: test]
305
312
async fn it_should_be_able_to_start_and_stop ( ) {
306
313
let cfg = Arc :: new ( ephemeral_public ( ) ) ;
307
314
let config = & cfg. http_api . clone ( ) . unwrap ( ) ;
308
315
309
316
let tracker = initialize_with_configuration ( & cfg) ;
317
+ let ban_service = Arc :: new ( RwLock :: new ( BanService :: new ( MAX_CONNECTION_ID_ERRORS_PER_IP ) ) ) ;
310
318
311
319
let bind_to = config. bind_address ;
312
320
@@ -321,7 +329,7 @@ mod tests {
321
329
let register = & Registar :: default ( ) ;
322
330
323
331
let started = stopped
324
- . start ( tracker, register. give_form ( ) , access_tokens)
332
+ . start ( tracker, ban_service , register. give_form ( ) , access_tokens)
325
333
. await
326
334
. expect ( "it should start the server" ) ;
327
335
let stopped = started. stop ( ) . await . expect ( "it should stop the server" ) ;
0 commit comments