Каков правильный ответ клиента XMPP на <presence type="unsubscribed…"> stanza?

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, если подписчик отправляет 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 (маловероятно, но кто знает).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top