XMPP: nick-conflict bij rejoin na reconnect niet afgehandeld — deelnemer valt stil uit de samenwerking #1416
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#1416
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
lib/xmpp/xmpp_session.dart— de supervised reconnect (_reconnect, regels 535–586) roept na een geslaagde re-authenticatieonRejoin!(this)aan (regel 556) om de MUC-kamer(s) opnieuw te betreden. De reconnect-logica controleert het resultaat vanonRejoinniet — naonRejoinwordt_reconnected.add(null)gevuurd (regel 557) enreturn-t de functie met succes.Wat er gebeurt
Na een netwerkdrop kan de MUC-server de oude occupant nog steeds als aanwezig beschouwen (de presence-timeout is nog niet gevuurd, typisch 60–300 seconden). Als
onRejoinde kamer opnieuw probeert te betreden met dezelfde nick, stuurt de server een 409 conflict error-presence.XmppMuc.joinretourneertMucJoinResult.failed(MucJoinFailure.nickConflict).Maar
_reconnectnegeert dit resultaat — het beschouwt de reconnect als geslaagd, vuurt_reconnected, en de transport-laag denkt dat alles weer synchroon is. In werkelijkheid is de deelnemer niet in de MUC — hij ontvangt geen presence, geen ops, geen chat, geen keyshares. De samenwerking is stil bevroren.Trust boundary
Netwerk → Applicatie (reconnect-herstel). Geen externe aanvaller — een gewone netwerkdrop met een trage MUC-server volstaat.
Impact
De deelnemer valt onzichtbaar uit de samenwerking na een reconnect. Geen foutmelding, geen indicator — de UI toont nog steeds een "verbonden" status (de XMPP-sessie is hersteld), maar de MUC-kamer is weg. De deelnemer mist alle ops/chat/presence tot hij handmatig opnieuw verbindt.
Oplossingsrichting
onRejoineen resultaat retourneren dat_reconnectkan controleren. Als de rejoin faalt (nick-conflict of een andereMucJoinFailure), moet de reconnect dat als een mislukking behandelen —continuenaar de volgende backoff-poging, nietreturnmet succes.nick-2). Of stuur eerst een<presence type=unavailable>om de oude occupant expliciet uit te loggen vóór de herjoin.Locatie
lib/xmpp/xmpp_session.dartregels 535–586 (_reconnect), specifiek regel 556 (onRejoin) en regel 557 (_reconnected.add)lib/xmpp/xmpp_muc.dartregels 141–163 (join), 230–245 (_joinErrorOf— nickConflict)Severity
HIGH — onzichtbaar verlies van samenwerking na een gewone netwerkdrop.