Каков правильный ответ клиента XMPP на <presence type="unsubscribed…"> stanza?
-
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, если подписчик отправляет 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 -- | |
При этом подтверждение не требуется ни от одного из клиентов.
Другие советы
Я слишком устал, чтобы дать вам прямой ответ, но поскольку прошло уже несколько часов без ответов, позвольте мне просто внести предложение...
Загрузите pidgin или какой-либо другой клиент, который может регистрировать xmlstream, отправьте отписку от этого клиента, а затем скопируйте код, который вы видите в журнале.
Это либо поможет вам получить правильные строфы, либо выявит несовместимость в openfire (маловероятно, но кто знает).