From aee549f7454054b6c959dfbd0933613f198b2b12 Mon Sep 17 00:00:00 2001 From: artemws <59208085+artemws@users.noreply.github.com> Date: Sat, 14 Feb 2026 23:01:43 +0200 Subject: [PATCH] Integrate IP Tracker for user IP management Added UserIpTracker for managing user IP limits. --- src/main.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main.rs b/src/main.rs index 44e0815..ad5b771 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,6 +13,7 @@ mod cli; mod config; mod crypto; mod error; +mod ip_tracker; mod protocol; mod proxy; mod stats; @@ -22,6 +23,7 @@ mod util; use crate::config::{LogLevel, ProxyConfig}; use crate::crypto::SecureRandom; +use crate::ip_tracker::UserIpTracker; use crate::proxy::ClientHandler; use crate::stats::{ReplayChecker, Stats}; use crate::stream::BufferPool; @@ -182,6 +184,14 @@ async fn main() -> std::result::Result<(), Box> { let upstream_manager = Arc::new(UpstreamManager::new(config.upstreams.clone())); let buffer_pool = Arc::new(BufferPool::with_config(16 * 1024, 4096)); + // IP Tracker initialization + let ip_tracker = Arc::new(UserIpTracker::new()); + ip_tracker.load_limits(&config.access.user_max_unique_ips).await; + + if !config.access.user_max_unique_ips.is_empty() { + info!("IP limits configured for {} users", config.access.user_max_unique_ips.len()); + } + // Connection concurrency limit let _max_connections = Arc::new(Semaphore::new(10_000)); @@ -458,6 +468,7 @@ async fn main() -> std::result::Result<(), Box> { let buffer_pool = buffer_pool.clone(); let rng = rng.clone(); let me_pool = me_pool.clone(); + let ip_tracker = ip_tracker.clone(); tokio::spawn(async move { loop { @@ -470,6 +481,7 @@ async fn main() -> std::result::Result<(), Box> { let buffer_pool = buffer_pool.clone(); let rng = rng.clone(); let me_pool = me_pool.clone(); + let ip_tracker = ip_tracker.clone(); tokio::spawn(async move { if let Err(e) = ClientHandler::new( @@ -482,6 +494,7 @@ async fn main() -> std::result::Result<(), Box> { buffer_pool, rng, me_pool, + ip_tracker, ) .run() .await