2

サーバー上の名簿から連絡先を手動で削除すると、サーバーが私に送信するもの(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"/>'

「登録解除」プレゼンス スタンザ (RFC 3921 によれば正しいと思います) で応答すると、サーバーはさらに「登録解除」されたプレゼンスでスパムを送信し続けます。

いずれにせよ、私のクライアントが次にログインしたとき、名簿は何も変わっていません。私は何か間違ったことをしていますか?

4

2 に答える 2

5

それは、話しているクライアントがサブスクライバーかサブスクライバーかによって異なります。

.

クライアントがサブスクライバーの場合、何もありません:

セクション 9.4によれば、サブスクライバーがunsubscribeリクエストを送信した場合、または何らかの原因でクライアントがサブスクライブ解除された場合、サーバーはリクエストを確認し、unsubscribed応答で状態の変化を報告する必要があります。これでやり取りは終了です。

サブスクライバーが、以前のサブスクリプションが削除されたことを示すステータスをサーバーからunsubscribe受信したことを通知されるたびに別の要求を送信した場合、それは決して終了しません。unsubscribed

.

クライアントがサブスクライブされたノードである場合unsubscribe、サブスクリプションの削除が許可されていることを確認するために送信される可能性がありますが、通常のメカニズムの外で名簿を変更しているときにそれがまだ有効かどうかはわかりません.

9.4 のテーブルの私の読みは、購読解除中のサブスクライバとサーバー間のメッセージです。

subscriber            server             subscribee
    | -- unsubscribe --> |                    |
    |                    | -- unsubscribe --> |
    |                    | <- unsubscribed -- | (optional)
    |                    | -- unsubscribed -> |
    | <- unsubscribed -- |                    |

私のセクション 8.6の読み、名簿の削除は次のとおりです。

subscriber            server             subscribee
    | ----- remove ----> |                    |
    |                    | -- unsubscribe --> |
    |                    | -- unsubscribed -> |
    |                    | -- unavailable --> |
    | <- unsubscribed -- |                    |
    | <-- unavailable -- |                    |

どちらのクライアントからも確認応答は必要ありません。

于 2009-03-03T10:58:30.757 に答える
1

さびすぎて直接答えることはできませんが、数時間答えがないので、提案させてください...

xmlstream をログに記録できる pidgin またはその他のクライアントをロードし、そのクライアントから購読解除を送信してから、ログに表示されるコードをコピーします。

これは、正しいスタンザを取得するのに役立つか、openfire の非互換性を特定するのに役立ちます (可能性は低いですが、誰にもわかりません)。

于 2009-03-03T08:58:46.677 に答える