什么是适当的XMPP客户端对< presence type = unsubscribed…>的响应?节?

StackOverflow https://stackoverflow.com/questions/605177

  •  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"/>'

如果我回复'取消订阅'存在节(根据RFC 3921,我认为这是正确的),服务器会通过更多“未订阅”的存在向我发送垃圾邮件。

无论哪种方式,下次我的客户登录时,名单中没有任何变化。我做错了吗?

有帮助吗?

解决方案

这取决于您所谈论的客户 - 无论是订阅者还是订阅者。

如果客户是订户,那么什么都不是:

根据第9.4节,如果订阅者发送<代码>取消订阅请求或其他原因导致客户端被取消订阅,服务器必须通过 unsubscribed 响应来确认请求/报告状态更改。那是互动的结束。

如果订户每次收到来自服务器的 unsubscribed 状态,并告知其之前的订阅已被删除,则会发送另一个取消订阅请求,那么它将会永远不会结束。

如果客户端是订阅节点,则可能会发送 unsubscribe 以确认是否允许删除订阅,但是当您将名单更改为正常时,是否仍然存在机制我不确定。

我在9.4中读到的表是订阅和服务器在取消订阅期间的消息:

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

我阅读第8.6节,名单删除是这样的:

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

任何一个客户都不需要确认。

其他提示

我太生疏了,无法给你一个直接答案,但是因为已经有几个小时没有答案,所以我只是提出一个建议......

加载pidgin或其他可以记录xmlstream的客户端,从该客户端发送取消订阅,然后复制您在日志中看到的代码。

这将帮助您获得正确的节或者它将识别openfire中的不兼容性(不太可能,但谁知道)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top