XMPP: reconnect-machinery is niet aangesloten in productie + XmppMuc is niet herbruikbaar na reconnect #1421
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#1421
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Bevinding
Twee aanverwante stabiliteitsproblemen in de reconnect-keten.
1. Reconnect-machinery is nergens aangesloten in productie
lib/xmpp/xmpp_session.dartbiedt supervised reconnect viareconnectTransportFactoryenonRejoin(regels 137–138, 161–165). Maar in productiecode wordtXmppSessionslechts één keer geconstrueerd — inlib/widgets/dialogs/xmpp_test_connection_dialog.dartregel 74 — zonder deze parameters. De collab-launch-functieshostXmppSessionenjoinXmppSessionworden inlib/nergens aangeroepen (alleen intest/).Gevolg: zodra de XMPP-samenwerking in de app wordt geïntegreerd, zal een stream-drop de hele sessie killen (pre-reconnect gedrag) tenzij de integrator expliciet
reconnectTransportFactoryenonRejoindraad. Er is geen codepad dat dit doet, en er is geen documentatie die de integrator waarschuwt dat dit verplicht is.2. XmppMuc.join() gooit StateError bij tweede aanroep
lib/xmpp/xmpp_muc.dartregel 142–144:Na een geslaagde join is
_joined = true. DeonRejoin-callback die_reconnectaanroept (xmpp_session.dart regel 556) moet de MUC-kamer opnieuw betreden — maar kan niet dezelfdeXmppMuc-instantie hergebruiken, wantjoin()gooit. De integrator moet een nieuweXmppMucaanmaken, de oude teardown, en de demux-handlers opnieuw registreren. Maar de collab-launch houdt geen referentie naar deXmppMuc— de MUC wordt door de caller beheerd, en de launch gebruikt de demux direct op de stanza-channel.Gevolg: zelfs als
onRejoinwordt gedraad, is er geen schone manier om de kamer opnieuw te betreden zonder de hele collab-stack opnieuw op te bouwen. De reconnect is hiermee in de praktijk onbruikbaar.Trust boundary
Interne architectuur — geen externe aanvaller. Een gewone netwerkdrop volstaat om het probleem zichtbaar te maken zodra de feature is geïntegreerd.
Impact
XmppMuc-hergebruiksprobleem.Oplossingsrichting
XmppSessionconstrueert metreconnectTransportFactory = () => openXmppFrameTransport(settings)enonRejoindie de MUC opnieuw betreedt. Documenteer dat dit verplicht is voor een productie-samenwerking.XmppMucherbruikbaar na een join — voeg eenrejoin()-methode toe die_joineden_joiningreset enjoin()opnieuw kan aanroepen, of stajoin()toe als de kamer is verlaten (_left = true). De demux-handlers hoeven dan niet opnieuw te worden geregistreerd.XmppMucbeheren (in plaats van de caller), zodatonRejoinintern de kamer opnieuw kan betreden zonder dat de caller hiervan hoeft te weten.Locatie
lib/xmpp/xmpp_session.dartregels 137–138, 161–165, 535–586 (reconnect-machinery)lib/xmpp/xmpp_muc.dartregels 142–144 (joingooit StateError)lib/xmpp/xmpp_collab_launch.dartregels 239–322 (hostXmppSession/joinXmppSession— geen MUC-beheer)lib/widgets/dialogs/xmpp_test_connection_dialog.dartregel 74 (enige productie-XmppSession, zonder reconnect)Severity
HIGH — de reconnect-keten is onbruikbaar zodra de feature wordt geïntegreerd.