Add proxy mode for virtual printer (cross-LAN slicer support)

Enable Bambu Studio on a remote network to print through BamBuddy
acting as a TLS-terminating proxy for both MQTT and FTP connections.

- Add TLSProxy base class and FTPTLSProxy with PASV response rewriting,
  EPSV→PASV translation, PROT P/C tracking, and one-shot data proxies
- Add SlicerProxyManager to coordinate per-slicer MQTT + FTP proxy pairs
- Support additional SAN IPs in certificate generation for proxy mode
- Broadcast SSDP on LAN B so slicers discover the proxy as a printer
- Narrow FTP passive port range to 50000-50100 with retry logic
- Expose proxy ports (8883, 9990, 50000-50100) in Dockerfile
- Document passive port range in docker-compose.yml
This commit is contained in:
maziggy
2026-02-07 15:34:12 +01:00
parent 70622e6e53
commit 42fc819efc
@@ -515,12 +515,6 @@ class FTPTLSProxy(TLSProxy):
cmd_upper = line.strip().upper()
# Log all FTP commands from slicer
try:
logger.info("FTP cmd >>> %s", line.decode("utf-8", errors="replace"))
except Exception:
pass
# Replace EPSV with PASV so response includes an IP
if cmd_upper == b"EPSV":
line = b"PASV"
@@ -593,12 +587,6 @@ class FTPTLSProxy(TLSProxy):
line = buffer[:idx]
buffer = buffer[idx + 2 :]
# Log all FTP responses from printer
try:
logger.info("FTP resp <<< %s", line.decode("utf-8", errors="replace"))
except Exception:
pass
rewritten = await self._maybe_rewrite_pasv(line, local_ip, session_state)
output += rewritten + b"\r\n"