Каков правильный ответ клиента XMPP на раздел ‹presence type=unsubscribed›?

Вот что присылает мне сервер (openfire), когда я вручную удаляю контакт из реестра на сервере:

'<iq type="set" id="183-87" to="[email protected]/hydra"><query xmlns="jabber:iq:roster"><item jid="[email protected]" name="baz" ask="unsubscribe" subscription="none"><group>Buddies</group></item></query></iq>'
'<iq type="set" id="187-88" to="[email protected]/hydra"><query xmlns="jabber:iq:roster"><item jid="[email protected]" name="baz" subscription="none"><group>Buddies</group></item></query></iq>'
'<presence type="unsubscribed" to="[email protected]" from="[email protected]"/>'

Если я отвечаю строфой присутствия «отписаться» (что я считаю правильным в соответствии с RFC 3921), сервер продолжает спамить меня еще большим количеством «отписавшихся» сведений о присутствии.

В любом случае, когда мой клиент войдет в следующий раз, в списке ничего не изменится. Я делаю что-то неправильно?


person andrew    schedule 03.03.2009    source источник


Ответы (2)


Это зависит от того, о каком клиенте вы говорите - о подписчике или подписчике.

.

Если клиент является подписчиком, то ничего:

Согласно разделу 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 -- |                    |

Без подтверждения, требуемого ни одним из клиентов.

person Pete Kirkham    schedule 03.03.2009
comment
Может ли тот, кто проголосовал за это, исправить или расширить ответ, если rfc изменился. - person Pete Kirkham; 23.11.2012

Я слишком ржавый, чтобы дать вам прямой ответ, но так как уже несколько часов нет ответов, позвольте мне просто сделать предложение...

Загрузите pidgin или какой-либо другой клиент, который может регистрировать xmlstream, отправьте отписку от этого клиента, а затем скопируйте код, который вы видите в журнале.

Это либо поможет вам получить правильные строфы, либо определит несовместимость в openfire (маловероятно, но кто знает).

person Van Gale    schedule 03.03.2009