ProxyPool replaces ProxySource with:
- Multiple sources: HTTP APIs and text files (one proxy URL per line)
- Deduplication by proto://host:port
- Health testing: full chain test with configurable concurrency
- Mass-failure guard: skip eviction when >90% fail
- Background loops for periodic refresh and health checks
- JSON state persistence with atomic writes (warm starts)
- Backward compat: ProxySource still works for legacy configs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add PoolSourceConfig and ProxyPoolConfig for multi-source proxy pool
with health testing. Config supports both HTTP API and file sources.
Backward compat: legacy proxy_source YAML key auto-converts to
proxy_pool. CLI -S flag creates ProxyPoolConfig with single source.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Moves _negotiate_hop() and build_chain() from server.py to proto.py
to break circular import between server and the upcoming pool module.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Retry failed proxy connections with a fresh random proxy on each
attempt (configurable via retries setting, proxy_source only).
Track connection metrics and log summary every 60s and on shutdown.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fetches proxies from an HTTP API, caches them in memory, and appends
a random proxy to the chain on each connection. Supports proto/country
filters and configurable refresh interval.
Config: proxy_source.url, proto, country, limit, refresh
CLI: -S/--proxy-source URL
Asyncio-based SOCKS5 server that tunnels connections through
configurable chains of SOCKS5, SOCKS4/4a, and HTTP CONNECT proxies.
Tor integration via standard SOCKS5 hop.