Was ist die richtige XMPP-Client Reaktion auf eine Strophe?
-
03-07-2019 - |
Frage
Hier ist, was der Server mir sendet (Openfire), wenn ich manuell einen Kontakt aus dem Roster auf dem Server löschen:
'<iq type="set" id="183-87" to="foo@edmund.local/hydra"><query xmlns="jabber:iq:roster"><item jid="bar@yahoo.edmund.local" name="baz" ask="unsubscribe" subscription="none"><group>Buddies</group></item></query></iq>'
'<iq type="set" id="187-88" to="foo@edmund.local/hydra"><query xmlns="jabber:iq:roster"><item jid="bar@yahoo.edmund.local" name="baz" subscription="none"><group>Buddies</group></item></query></iq>'
'<presence type="unsubscribed" to="foo@edmund.local" from="bar@yahoo.edmund.local"/>'
Wenn ich mit einer ‚unsubscribe‘ Präsenz Strophe reagieren (was meiner Meinung nach richtig ist nach RFC 3921), der Server hält mich Spamming mit mehr ‚unsubscribed‘ Präsenzen.
So oder so, das nächste Mal, wenn mein Kunde anmeldet, hat nichts in dem Kader verändert. Mache ich etwas falsch?
Lösung
Es hängt davon ab, welche Client Sie sprechen - ob die Teilnehmer oder die subscribee sind
..
Wenn der Client ist der Teilnehmer, dann nichts:
Nach Abschnitt 9.4 , wenn die Teilnehmer einen unsubscribe
sendet Anfrage, oder etwas anderes bewirkt, dass der Kunde unsubscribed zu sein, muss der Server die Anforderung / berichtet die Zustandsänderung mit einer unsubscribed
Antwort bestätigen. Das ist das Ende der Interaktion.
Wenn die Teilnehmer eines andere unsubscribe
Anforderung senden jedes Mal, es wird darüber informiert, dass es einen unsubscribed
Status vom Server empfängt es zu sagen, dass ein vorheriges Abonnement entfernt worden ist, dann wird es nie enden.
.
Wenn der Client die abonnierten Knoten ist, dann kann es eine unsubscribe
zu bestätigen gesendet werden, dass das Abonnement zu entfernen ist erlaubt, aber ob das noch steht, wenn Sie die Roster sind Wechsel außerhalb des normalen Mechanismus Ich bin nicht sicher.
Meine Lesart der Tabelle in 9.4 ist für die Nachrichten zwischen subscribee und Server während der Abmeldung ist:
subscriber server subscribee
| -- unsubscribe --> | |
| | -- unsubscribe --> |
| | <- unsubscribed -- | (optional)
| | -- unsubscribed -> |
| <- unsubscribed -- | |
Meine Lektüre von Abschnitt 8.6 , roster Entfernung ist dies:
subscriber server subscribee
| ----- remove ----> | |
| | -- unsubscribe --> |
| | -- unsubscribed -> |
| | -- unavailable --> |
| <- unsubscribed -- | |
| <-- unavailable -- | |
Ohne Bestätigung von beiden Client erforderlich.
Andere Tipps
Ich bin zu rostig der Lage sein, Ihnen eine direkte Antwort zu geben, aber da es ein paar Stunden ohne Antworten gewesen lassen Sie mir nur einen Vorschlag machen ...
Laden Sie Pidgin oder einen anderen Client, der die xmlstream anmelden können, die Abmelde von diesem Client senden, und kopieren Sie den Code in das Protokoll.
Das wird entweder Ihnen helfen, die richtigen Strophen bekommen oder es wird eine Inkompatibilität in Openfire zu identifizieren (unwahrscheinlich, aber wer weiß).