Trackers list from outside

This commit is contained in:
Igor Katson 2025-02-27 12:55:10 +00:00
parent d709557372
commit 52be6d7cef
No known key found for this signature in database
GPG key ID: B4EC22B66D61A3F5
3 changed files with 15 additions and 5 deletions

View file

@ -98,7 +98,9 @@ tracing-subscriber = { version = "0.3", default-features = false, features = [
], optional = true }
uuid = { version = "1.2", features = ["v4"] }
futures = "0.3"
url = { version = "=2.5.2", default-features = false } # can't upgrade yet until min version is Rust 1.81, see https://github.com/servo/rust-url/issues/992
url = { version = "=2.5.2", default-features = false, features = [
"serde",
] } # can't upgrade yet until min version is Rust 1.81, see https://github.com/servo/rust-url/issues/992
hex = "0.4"
backoff = "0.4.0"
@ -119,7 +121,7 @@ notify = { version = "7", optional = true }
walkdir = "2.5.0"
arc-swap = "1.7.1"
intervaltree = "0.2.7"
async-compression = {version="0.4.18", features= ["tokio", "gzip"] }
async-compression = { version = "0.4.18", features = ["tokio", "gzip"] }
[build-dependencies]
anyhow = "1"

View file

@ -121,6 +121,7 @@ pub struct Session {
default_storage_factory: Option<BoxStorageFactory>,
persistence: Option<Arc<dyn SessionPersistenceStore>>,
disk_write_tx: Option<DiskWorkQueueSender>,
trackers: HashSet<url::Url>,
// Limits and throttling
pub(crate) concurrent_initialize_semaphore: Arc<tokio::sync::Semaphore>,
@ -647,6 +648,7 @@ impl Session {
opts.concurrent_init_limit.unwrap_or(3),
)),
ratelimits: Limits::new(opts.ratelimits),
trackers: opts.trackers,
#[cfg(feature = "disable-upload")]
_disable_upload: opts.disable_upload,
blocklist,
@ -1337,6 +1339,8 @@ impl Session {
if is_private && trackers.len() > 1 {
warn!("private trackers are not fully implemented, so using only the first tracker");
trackers.truncate(1);
} else {
trackers.extend(self.trackers.iter().cloned());
}
let tracker_rx_stats = PeerRxTorrentInfo {

View file

@ -440,7 +440,7 @@ async fn parse_trackers_file(filename: &str) -> anyhow::Result<HashSet<url::Url>
let content = tokio::fs::read_to_string(filename)
.await
.with_context(|| format!("error opening {filename}"))?;
Ok(content
let trackers = content
.lines()
.filter_map(|s| {
let s = s.trim();
@ -449,7 +449,9 @@ async fn parse_trackers_file(filename: &str) -> anyhow::Result<HashSet<url::Url>
}
url::Url::parse(s).ok()
})
.collect())
.collect::<HashSet<url::Url>>();
info!(filename, count = trackers.len(), "parsed trackers");
Ok(trackers)
}
async fn async_main(opts: Opts, cancel: CancellationToken) -> anyhow::Result<()> {
@ -471,7 +473,9 @@ async fn async_main(opts: Opts, cancel: CancellationToken) -> anyhow::Result<()>
};
let trackers = if let Some(f) = opts.trackers_filename {
parse_trackers_file(&f).await?
parse_trackers_file(&f)
.await
.context("error reading trackers file")?
} else {
Default::default()
};