1

pubsub ノードから登録解除しようとすると問題が発生します。

私はjsでBOSHクライアントを書いています。

これは私が購読する方法です(完全な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#example-24 : エンティティは、「ノード」を含めることにより、特定のノードですべてのサブスクリプションを要求することもできます (たとえば、複数のサブ ID を持つサブスクリプションがある場合)。要素の属性。

<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 を除いて、他の SubID は言及されていません。

私は何を間違っていますか?

ejabberd 2.1.10 を実行しています。

4

2 に答える 2

1

現在使用しているベース 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>
于 2012-09-14T14:13:33.663 に答える
1

サブスクライブ時にリソースを jid と共に渡す必要はないと思います。それが例に残っているだけかどうかはわかりませんが、それは物事を台無しにしている可能性があります.

于 2012-09-14T23:18:43.370 に答える