| 
 | 1 | +use std::sync::Arc;  | 
 | 2 | + | 
 | 3 | +use log::warn;  | 
 | 4 | +use tokio::task::JoinHandle;  | 
 | 5 | +use torrust_tracker_configuration::Configuration;  | 
 | 6 | + | 
 | 7 | +use crate::bootstrap::jobs::{http_tracker, torrent_cleanup, tracker_apis, udp_tracker};  | 
 | 8 | +use crate::servers::http::Version;  | 
 | 9 | +use crate::tracker;  | 
 | 10 | + | 
 | 11 | +/// # Panics  | 
 | 12 | +///  | 
 | 13 | +/// Will panic if the socket address for API can't be parsed.  | 
 | 14 | +pub async fn start(config: Arc<Configuration>, tracker: Arc<tracker::Tracker>) -> Vec<JoinHandle<()>> {  | 
 | 15 | +    let mut jobs: Vec<JoinHandle<()>> = Vec::new();  | 
 | 16 | + | 
 | 17 | +    // Load peer keys  | 
 | 18 | +    if tracker.is_private() {  | 
 | 19 | +        tracker  | 
 | 20 | +            .load_keys_from_database()  | 
 | 21 | +            .await  | 
 | 22 | +            .expect("Could not retrieve keys from database.");  | 
 | 23 | +    }  | 
 | 24 | + | 
 | 25 | +    // Load whitelisted torrents  | 
 | 26 | +    if tracker.is_whitelisted() {  | 
 | 27 | +        tracker  | 
 | 28 | +            .load_whitelist_from_database()  | 
 | 29 | +            .await  | 
 | 30 | +            .expect("Could not load whitelist from database.");  | 
 | 31 | +    }  | 
 | 32 | + | 
 | 33 | +    // Start the UDP blocks  | 
 | 34 | +    for udp_tracker_config in &config.udp_trackers {  | 
 | 35 | +        if !udp_tracker_config.enabled {  | 
 | 36 | +            continue;  | 
 | 37 | +        }  | 
 | 38 | + | 
 | 39 | +        if tracker.is_private() {  | 
 | 40 | +            warn!(  | 
 | 41 | +                "Could not start UDP tracker on: {} while in {:?}. UDP is not safe for private trackers!",  | 
 | 42 | +                udp_tracker_config.bind_address, config.mode  | 
 | 43 | +            );  | 
 | 44 | +        } else {  | 
 | 45 | +            jobs.push(udp_tracker::start_job(udp_tracker_config, tracker.clone()));  | 
 | 46 | +        }  | 
 | 47 | +    }  | 
 | 48 | + | 
 | 49 | +    // Start the HTTP blocks  | 
 | 50 | +    for http_tracker_config in &config.http_trackers {  | 
 | 51 | +        if !http_tracker_config.enabled {  | 
 | 52 | +            continue;  | 
 | 53 | +        }  | 
 | 54 | +        jobs.push(http_tracker::start_job(http_tracker_config, tracker.clone(), Version::V1).await);  | 
 | 55 | +    }  | 
 | 56 | + | 
 | 57 | +    // Start HTTP API  | 
 | 58 | +    if config.http_api.enabled {  | 
 | 59 | +        jobs.push(tracker_apis::start_job(&config.http_api, tracker.clone()).await);  | 
 | 60 | +    }  | 
 | 61 | + | 
 | 62 | +    // Remove torrents without peers, every interval  | 
 | 63 | +    if config.inactive_peer_cleanup_interval > 0 {  | 
 | 64 | +        jobs.push(torrent_cleanup::start_job(&config, &tracker));  | 
 | 65 | +    }  | 
 | 66 | + | 
 | 67 | +    jobs  | 
 | 68 | +}  | 
0 commit comments