Production hardening: REAPER all-in-one launcher, rdpthread UX, logic fixes
- Add REAPER.bat single entry (pip, dirs, smoke test, launch); MASTER/MASTERSTER shim to it - bruteforce: rdpthread helpers, safe writer close, spray_all_hosts incremental writes, progress - gui: credential banner, spray messaging without spam; cmdkey TERMSRV host - scanner: adaptive progress; proxy: retry cap on open_connection - ip_utils: /32 CIDR, count_ips aligned with large dash ranges - README/install/run: deployment docs and REAPER.bat references Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
8
proxy.py
8
proxy.py
@@ -380,9 +380,16 @@ class ProxyManager:
|
||||
|
||||
Returns (reader, writer) - same as asyncio.open_connection.
|
||||
"""
|
||||
retry_depth = int(kwargs.pop("_proxy_retry_depth", 0))
|
||||
max_proxy_retries = 32
|
||||
|
||||
if not self.enabled:
|
||||
return await asyncio.open_connection(host, port, **kwargs)
|
||||
|
||||
if retry_depth >= max_proxy_retries:
|
||||
logger.debug("Proxy retry limit reached, using direct connection")
|
||||
return await asyncio.open_connection(host, port, **kwargs)
|
||||
|
||||
proxy = await self.get_proxy()
|
||||
if proxy is None:
|
||||
# No working proxy — fallback to direct
|
||||
@@ -403,6 +410,7 @@ class ProxyManager:
|
||||
self.mark_bad(proxy)
|
||||
# Retry with next proxy
|
||||
logger.debug(f"Proxy {proxy} failed: {e}, trying next...")
|
||||
kwargs["_proxy_retry_depth"] = retry_depth + 1
|
||||
return await self.open_connection(host, port, **kwargs)
|
||||
|
||||
# ── STATS ─────────────────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user