fix(bridge): TLS-Fallback klebt nicht mehr — bei Reconnect zurueck zu wss://
Bei kurzem TLS-Fehler beim ersten Connect (z.B. Caddy noch im ACME- Setup) wechselte die Bridge auf den ws://-Fallback und blieb dort permanent kleben. Jeder spaetere Reconnect-Versuch landete dann auf plain ws:// gegen den TLS-only Caddy-Endpoint → HTTP 400 → erneut Connection lost → endlos. Fix: Bei jeder ConnectionClosed/Refused/InvalidMessage-Exception wird using_fallback=False und current_url=self.rvs_url (= primary wss://) zurueckgesetzt. Bridge probiert bei jedem Reconnect zuerst primary, faellt nur einmal pro Connect-Cycle auf ws:// zurueck. Sobald TLS verfuegbar ist, ist sie auf wss:// stabil. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+22
-2
@@ -1614,10 +1614,21 @@ class ARIABridge:
|
||||
|
||||
except websockets.ConnectionClosed:
|
||||
logger.warning("[rvs] Verbindung verloren")
|
||||
# Bei Reconnect wieder primary (wss://) versuchen — die
|
||||
# Bedingungen die zum Fallback gefuehrt haben sind transient
|
||||
# (z.B. Caddy noch nicht fertig mit ACME).
|
||||
if using_fallback:
|
||||
logger.info("[rvs] Reset auf primary URL fuer Reconnect-Versuch")
|
||||
current_url = self.rvs_url
|
||||
using_fallback = False
|
||||
except ConnectionRefusedError:
|
||||
logger.warning("[rvs] Nicht erreichbar")
|
||||
if using_fallback:
|
||||
current_url = self.rvs_url
|
||||
using_fallback = False
|
||||
except (ssl.SSLError, OSError) as e:
|
||||
# TLS-Fehler — Fallback auf ws:// versuchen
|
||||
# TLS-Fehler — Fallback auf ws:// nur einmal pro Connect-Versuch,
|
||||
# bei naechstem Reconnect wieder primary probieren.
|
||||
if not using_fallback and self.rvs_url_fallback:
|
||||
logger.warning("[rvs] TLS-Fehler: %s", e)
|
||||
logger.warning("[rvs] TLS gewollt aber nicht verfuegbar — Fallback auf ws://")
|
||||
@@ -1626,8 +1637,17 @@ class ARIABridge:
|
||||
retry_delay = 1 # Sofort versuchen
|
||||
else:
|
||||
logger.error("[rvs] SSL-Fehler (kein Fallback): %s", e)
|
||||
except Exception:
|
||||
# Auch hier: nach gescheitertem Fallback wieder primary probieren
|
||||
current_url = self.rvs_url
|
||||
using_fallback = False
|
||||
except Exception as e:
|
||||
logger.exception("[rvs] WebSocket-Fehler")
|
||||
# InvalidMessage (HTTP 400 von TLS-Endpoint bei ws-Connect)
|
||||
# → wir kleben auf dem falschen Fallback, zurueck zu primary.
|
||||
if using_fallback:
|
||||
logger.warning("[rvs] Fallback liefert auch nichts — schalte zurueck auf primary")
|
||||
current_url = self.rvs_url
|
||||
using_fallback = False
|
||||
finally:
|
||||
self.ws_rvs = None
|
||||
|
||||
|
||||
Reference in New Issue
Block a user