ejabberd pubsub отписаться вопрос
У меня возникают проблемы при попытке отписаться от узла pubsub.
Я пишу BOSH-клиент в JS.
Вот как я подписываюсь (с полным JID):
<body rid='1023502710' xmlns='http://jabber.org/protocol/httpbind' sid='2ded0255fc6e8bf912a2871d415173faadecfea6'>
<presence xmlns='jabber:client'/>
<presence from='sav1@my.server.com/my_resource' to='amd.my.server.com/sav' xmlns='jabber:client'/>
<iq to='pubsub.my.server.com' type='set' xmlns='jabber:client' id='5007:sendIQ'>
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
<subscribe node='/home/monitoring/sav' jid='sav1@my.server.com/my_resource'/>
</pubsub>
</iq>
</body>
При следующем запросе на привязку я получаю следующую строфу (поскольку я подписываюсь на атрибут узла):
http://xmpp.org/extensions/xep-0060.html: сущность МОЖЕТ также запросить все свои подписки на определенном узле (например, если у нее есть подписки с несколькими SubID), включив "узел" атрибут на элементе.
<body xmlns='http://jabber.org/protocol/httpbind'>
<message xmlns='jabber:client' from='pubsub.my.server.com' to='sav1@my.server.com/my_resource'>
<event xmlns='http://jabber.org/protocol/pubsub#event'>
<items node='/home/monitoring/sav'>
<item id='monitor'>
<!-- some pubsub information -->
</item>
</items>
</event>
<delay xmlns='urn:xmpp:delay' from='amd.my.server.com' stamp='2012-09-14T12:36:28Z'/>
</message>
<iq xmlns='jabber:client' from='pubsub.my.server.com' to='sav1@my.server.com/my_resource' id='5007:sendIQ' type='result'>
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
<subscription jid='sav1@my.server.com/my_resource' subscription='subscribed' subid='543990DD8E6E6' node='/home/monitoring/sav'/>
</pubsub>
</iq>
<message xmlns='jabber:client' from='pubsub.my.server.com' to='sav1@my.server.com/my_resource' type='headline'>
<event xmlns='http://jabber.org/protocol/pubsub#event'>
<items node='/home/monitoring/sav'>
<item id='monitor'>
<!-- some pubsub information -->
</item>
</items>
</event>
<headers xmlns='http://jabber.org/protocol/shim'>
<header name='Collection'>/home/monitoring/sav</header>
<header name='SubID'>5435B7F0CA392</header>
<!-- a lot of other SubIDs -->
</headers>
</message>
</body>
В разделе заголовков я получаю много SubID. Я полагаю, причина этого плохая отписаться.
Когда я заканчиваю сеанс, я отписываюсь от каждого SubID:
<body rid='1023502724' xmlns='http://jabber.org/protocol/httpbind' sid='2ded0255fc6e8bf912a2871d415173faadecfea6'>
<iq to='pubsub.my.server.com' type='set' xmlns='jabber:client' id='5008:sendIQ'>
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
<unsubscribe node='/home/monitoring/sav' jid='sav1@my.server.com' subid='5435B7F0CA392'/>
</pubsub>
</iq>
<!-- a lot of other unsubscribed iqs -->
</body>
Ответ немедленно:
<body xmlns='http://jabber.org/protocol/httpbind'>
<iq xmlns='jabber:client' from='pubsub.my.server.com' to='sav1@my.server.com/my_resource' type='error' id='5008:sendIQ'>
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
<unsubscribe node='/home/monitoring/sav' jid='sav1@my.server.com' subid='5435B7F0CA392'/>
</pubsub>
<error code='401' type='cancel'>
<unexpected-request xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
<not-subscribed xmlns='http://jabber.org/protocol/pubsub#errors'/>
</error>
</iq>
</body>
Никакой другой SubID не упоминается, кроме первого, который я первоначально получил.
Что я делаю неправильно?
Я бегу ejabberd 2.1.10.
2 ответа
Я не думаю, что ресурс должен быть передан с подпиской на jid. Я не знаю, осталось ли это в примере, но это может испортить ситуацию.
Попробуйте отменить подписку с полным JID, связанным с подпиской, вместо базового JID, который вы используете в данный момент.
Вы можете получить JID из своего ответа на ваш запрос на текущие подписки. Атрибут jid содержит полный jid, с которым связана подписка.
<iq xmlns='jabber:client' from='pubsub.my.server.com' to='sav1@my.server.com/my_resource' id='5007:sendIQ' type='result'>
<pubsub xmlns='http://jabber.org/protocol/pubsub'>
<subscription jid='sav1@my.server.com/my_resource' subscription='subscribed' subid='543990DD8E6E6' node='/home/monitoring/sav'/>
</pubsub>
</iq>