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:
|
except websockets.ConnectionClosed:
|
||||||
logger.warning("[rvs] Verbindung verloren")
|
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:
|
except ConnectionRefusedError:
|
||||||
logger.warning("[rvs] Nicht erreichbar")
|
logger.warning("[rvs] Nicht erreichbar")
|
||||||
|
if using_fallback:
|
||||||
|
current_url = self.rvs_url
|
||||||
|
using_fallback = False
|
||||||
except (ssl.SSLError, OSError) as e:
|
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:
|
if not using_fallback and self.rvs_url_fallback:
|
||||||
logger.warning("[rvs] TLS-Fehler: %s", e)
|
logger.warning("[rvs] TLS-Fehler: %s", e)
|
||||||
logger.warning("[rvs] TLS gewollt aber nicht verfuegbar — Fallback auf ws://")
|
logger.warning("[rvs] TLS gewollt aber nicht verfuegbar — Fallback auf ws://")
|
||||||
@@ -1626,8 +1637,17 @@ class ARIABridge:
|
|||||||
retry_delay = 1 # Sofort versuchen
|
retry_delay = 1 # Sofort versuchen
|
||||||
else:
|
else:
|
||||||
logger.error("[rvs] SSL-Fehler (kein Fallback): %s", e)
|
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")
|
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:
|
finally:
|
||||||
self.ws_rvs = None
|
self.ws_rvs = None
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user