< presence type = unsubscribed…>に対する適切なXMPPクライアントの応答は何ですか?スタンザ?
-
03-07-2019 - |
質問
サーバーの名簿から連絡先を手動で削除したときにサーバーが送信するもの(openfire)は次のとおりです。
'<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"/>'
'unsubscribe'プレゼンススタンザ(RFC 3921によると正しいと思います)で応答すると、サーバーはさらに 'unsubscribe'プレゼンスで私をスパムし続けます。
いずれにせよ、次回クライアントがログインしたとき、名簿には何も変化していません。私は何か間違っていますか?
解決
それは、あなたが話しているクライアントに依存します-それが購読者であるか購読者であるか。
。
クライアントがサブスクライバーである場合、何もありません:
セクション9.4 に従い、サブスクライバーが< code> unsubscribe リクエスト、または他の何かがクライアントのサブスクライブを解除する場合、サーバーは unsubscribed
レスポンスでリクエストを確認/状態の変更を報告する必要があります。これでインタラクションは終了です。
サブスクライバーがサーバーから unsubscribed
ステータスを受け取り、以前のサブスクリプションが削除されたことを通知するたびにサブスクライバーが別の unsubscribe
リクエストを送信する場合、終わらない。
。
クライアントがサブスクライブされたノードである場合、サブスクリプションの削除が許可されていることを確認するために unsubscribe
が送信される場合がありますが、通常の外で名簿を変更するときにそれが有効かどうかメカニズム私は知りません。
9.4でのテーブルの読み取りは、購読解除中の購読者とサーバー間のメッセージについてです:
subscriber server subscribee
| -- unsubscribe --> | |
| | -- unsubscribe --> |
| | <- unsubscribed -- | (optional)
| | -- unsubscribed -> |
| <- unsubscribed -- | |
セクション8.6 を読んだ場合、名簿の削除は次のとおりです。
subscriber server subscribee
| ----- remove ----> | |
| | -- unsubscribe --> |
| | -- unsubscribed -> |
| | -- unavailable --> |
| <- unsubscribed -- | |
| <-- unavailable -- | |
いずれのクライアントも確認を必要としません。
他のヒント
私はあなたに直接答えることができないほど錆びていますが、数時間前に答えがなかったので、提案をさせてください...
xmlstreamをログに記録できるpidginまたは他のクライアントをロードし、そのクライアントからサブスクライブ解除を送信してから、ログに表示されるコードをコピーします。
これは、正しいスタンザを取得するのに役立つか、openfireでの非互換性を識別します(ほとんどありませんが、誰が知っていますか)。