@@ -33,6 +33,7 @@ use derive_more::Constructor;
3333use futures:: future:: BoxFuture ;
3434use thiserror:: Error ;
3535use tokio:: sync:: oneshot:: { Receiver , Sender } ;
36+ use tokio:: sync:: RwLock ;
3637use torrust_tracker_configuration:: AccessTokens ;
3738use tracing:: { instrument, Level } ;
3839
@@ -44,6 +45,7 @@ use crate::servers::custom_axum_server::{self, TimeoutAcceptor};
4445use crate :: servers:: logging:: STARTED_ON ;
4546use crate :: servers:: registar:: { ServiceHealthCheckJob , ServiceRegistration , ServiceRegistrationForm } ;
4647use crate :: servers:: signals:: { graceful_shutdown, Halted } ;
48+ use crate :: servers:: udp:: server:: banning:: BanService ;
4749
4850/// Errors that can occur when starting or stopping the API server.
4951#[ derive( Debug , Error ) ]
@@ -122,10 +124,11 @@ impl ApiServer<Stopped> {
122124 /// # Panics
123125 ///
124126 /// 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 ) ) ]
126128 pub async fn start (
127129 self ,
128130 tracker : Arc < Tracker > ,
131+ ban_service : Arc < RwLock < BanService > > ,
129132 form : ServiceRegistrationForm ,
130133 access_tokens : Arc < AccessTokens > ,
131134 ) -> Result < ApiServer < Running > , Error > {
@@ -137,7 +140,7 @@ impl ApiServer<Stopped> {
137140 let task = tokio:: spawn ( async move {
138141 tracing:: debug!( target: API_LOG_TARGET , "Starting with launcher in spawned task ..." ) ;
139142
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 ;
141144
142145 tracing:: debug!( target: API_LOG_TARGET , "Started with launcher in spawned task" ) ;
143146
@@ -235,18 +238,19 @@ impl Launcher {
235238 ///
236239 /// Will panic if unable to bind to the socket, or unable to get the address of the bound socket.
237240 /// 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) ) ]
239242 pub fn start (
240243 & self ,
241244 tracker : Arc < Tracker > ,
245+ ban_service : Arc < RwLock < BanService > > ,
242246 access_tokens : Arc < AccessTokens > ,
243247 tx_start : Sender < Started > ,
244248 rx_halt : Receiver < Halted > ,
245249 ) -> BoxFuture < ' static , ( ) > {
246250 let socket = std:: net:: TcpListener :: bind ( self . bind_to ) . expect ( "Could not bind tcp_listener to address." ) ;
247251 let address = socket. local_addr ( ) . expect ( "Could not get local_addr from tcp_listener." ) ;
248252
249- let router = router ( tracker, access_tokens, address) ;
253+ let router = router ( tracker, ban_service , access_tokens, address) ;
250254
251255 let handle = Handle :: new ( ) ;
252256
@@ -294,19 +298,23 @@ impl Launcher {
294298mod tests {
295299 use std:: sync:: Arc ;
296300
301+ use tokio:: sync:: RwLock ;
297302 use torrust_tracker_test_helpers:: configuration:: ephemeral_public;
298303
299304 use crate :: bootstrap:: app:: initialize_with_configuration;
300305 use crate :: bootstrap:: jobs:: make_rust_tls;
301306 use crate :: servers:: apis:: server:: { ApiServer , Launcher } ;
302307 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 ;
303310
304311 #[ tokio:: test]
305312 async fn it_should_be_able_to_start_and_stop ( ) {
306313 let cfg = Arc :: new ( ephemeral_public ( ) ) ;
307314 let config = & cfg. http_api . clone ( ) . unwrap ( ) ;
308315
309316 let tracker = initialize_with_configuration ( & cfg) ;
317+ let ban_service = Arc :: new ( RwLock :: new ( BanService :: new ( MAX_CONNECTION_ID_ERRORS_PER_IP ) ) ) ;
310318
311319 let bind_to = config. bind_address ;
312320
@@ -321,7 +329,7 @@ mod tests {
321329 let register = & Registar :: default ( ) ;
322330
323331 let started = stopped
324- . start ( tracker, register. give_form ( ) , access_tokens)
332+ . start ( tracker, ban_service , register. give_form ( ) , access_tokens)
325333 . await
326334 . expect ( "it should start the server" ) ;
327335 let stopped = started. stop ( ) . await . expect ( "it should stop the server" ) ;
0 commit comments