Commit Graph

66 Commits

Author SHA1 Message Date
user
0ed9142b1a docs: update project docs for weighted proxy selection
Add selection weight section to USAGE.md with decay formula and
reference table. Mark feature complete in ROADMAP and TASKS.
Update README and PROJECT descriptions.
2026-02-15 15:49:54 +01:00
user
b60264b865 feat: add weighted proxy selection based on recency
Replace uniform random.choice with random.choices weighted by last_ok
recency. Proxies tested successfully more recently get higher selection
probability (weight = 1/(1 + age/300)), decaying over ~5 minutes.
2026-02-15 15:48:40 +01:00
user
b11071e7f7 docs: add proxy pool documentation
Update all docs for managed proxy pool: README, USAGE, CHEATSHEET,
PROJECT, TASKS, and example config. Document multi-source config,
proxy file format, health testing, persistence, and legacy compat.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 06:18:20 +01:00
user
72adf2f658 feat: add managed proxy pool with health testing
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>
2026-02-15 06:11:19 +01:00
user
1780c3a8cd feat: add proxy pool config dataclasses
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>
2026-02-15 06:08:39 +01:00
user
4463adf08b refactor: extract build_chain into proto module
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>
2026-02-15 06:07:31 +01:00
user
b07ea49965 feat: add connection retry and metrics
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>
2026-02-15 04:54:13 +01:00
user
9b18a59df9 docs: add proxy source API documentation 2026-02-15 04:20:17 +01:00
user
ddad839fca feat: add dynamic proxy source API integration
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
2026-02-15 04:19:29 +01:00
user
20c7597ef9 docs: update all docs for container, cprofile, and config split 2026-02-15 03:51:16 +01:00
user
a40c35cc0b fix: add STOPSIGNAL SIGTERM to Containerfile 2026-02-15 03:46:51 +01:00
user
c016844a33 fix: handle SIGTERM gracefully for clean container shutdown
Register signal handler on the event loop to stop the server
on SIGTERM/SIGINT instead of relying on serve_forever().
2026-02-15 03:46:18 +01:00
user
61c580a555 feat: add Containerfile and compose.yaml for podman
Alpine-based image (59MB), source and config bind-mounted via
compose.yaml. Host networking for access to local Tor nodes.
2026-02-15 03:42:59 +01:00
user
57d2d87424 feat: add --cprofile flag for performance profiling
Dumps cProfile stats to a file (default: s5p.prof) on exit.
View with: python -m pstats s5p.prof
2026-02-15 03:39:36 +01:00
user
57c78f5563 feat: split config into tracked example and gitignored live config
config/example.yaml is the repo-safe sample.
config/s5p.yaml holds real proxy addresses and is gitignored.
2026-02-15 03:38:04 +01:00
user
0710dda8da feat: initial SOCKS5 proxy with chain support
Asyncio-based SOCKS5 server that tunnels connections through
configurable chains of SOCKS5, SOCKS4/4a, and HTTP CONNECT proxies.
Tor integration via standard SOCKS5 hop.
2026-02-15 03:10:25 +01:00