【问题标题】:ejabberd MUC client unable to get configuration form after creating roomejabberd MUC 客户端在创建房间后无法获取配置表单
【发布时间】:2016-08-13 09:41:49
【问题描述】:

我试图从我的 XMPP 客户端与 Ejabberd 通信创建一个 MUC 房间。

这是我的 Ejabberd muc 配置:

mod_muc: 
## host: "conference.@HOST@"
access: muc
access_create: muc_create
access_persistent: mud_create
access_admin: muc_admin
db_type: odbc
max_user_conferences: 100
default_room_options:
    mam: true
    public: false
    public_list: false
    allow_change_subj: false
    allow_user_invites: false
    members_only: false
    members_by_default: false
    anonymous: false
    allow_private_messages: true
    persistent: true

这是我从 muc 客户端获得的功能:

<iq xmlns='jabber:client' from='conference.my.domain.com' to='my_id@my.domain.com/null' id='iqid1:sendIQ' type='result'>
    <query xmlns='http://jabber.org/protocol/disco#info'>
        <identity category='conference' type='text' name='Chatrooms'/>
        <feature var='http://jabber.org/protocol/disco#info'/>
        <feature var='http://jabber.org/protocol/disco#items'/>
        <feature var='http://jabber.org/protocol/muc'/>
        <feature var='http://jabber.org/protocol/muc#unique'/>
        <feature var='jabber:iq:register'/>
        <feature var='http://jabber.org/protocol/rsm'/>
        <feature var='vcard-temp'/>
        <feature var='urn:xmpp:mam:tmp'/>
        <feature var='urn:xmpp:mam:0'/>
        <feature var='urn:xmpp:mam:1'/>
        <x xmlns='jabber:x:data' type='result'>
             <field var='FORM_TYPE' type='hidden'>
                 <value>http://jabber.org/network/serverinfo</value>
             </field>
        </x>
   </query>
</iq>

当我尝试从客户端创建一个 MUC 房间时:

<presence from='my_id@my.domain.com/null' to='new_room_id@conference.my.domain.com/my_nickname' xmlns='jabber:client'>
      <x xmlns='http://jabber.org/protocol/muc'/>
</presence>

我收到了一个新房间创建响应:

<presence xmlns='jabber:client' from='new_room_id@conference.my.domain.com/my_nickname' to='my_id@my.domain.com/null'>
    <x xmlns='http://jabber.org/protocol/muc#user'>
        <item jid='my_id@my.domain.com/null' affiliation='owner' role='moderator'/>
        <status code='110'/>
        <status code='100'/>
        <status code='201'/>
    </x>
</presence>

当我尝试获取配置表单以设置房间字段时:

<iq from='my_id@my.domain.com/null' to='new_room_id@conference.my.domain.com/my_nickname' type='get' xmlns='jabber:client' id='iqid2:sendIQ'>
    <query xmlns='http://jabber.org/protocol/muc#owner'/>
</iq>

我从 Ejabberd 服务器得到了答案:

<iq xmlns='jabber:client' from='new_room_id@conference.my.domain.com/my_nickname' to='my_id@my.domain.com/null' id='iqid2:sendIQ' type='get'>
    <query xmlns='http://jabber.org/protocol/muc#owner'/>
</iq>

所以这是我的问题:

  • 为什么 Ejabberd 服务器以相同类型响应我的查询,但不以 type='result' 或 type='error' 之类的方式响应?我用 type='set' 尝试了其他查询,同样的事情发生了。

  • 为什么 muc 服务的功能中没有类似:&lt;feature var='http://jabber.org/protocol/muc#owner'/&gt;&lt;feature var='http://jabber.org/protocol/muc#admin'/&gt; 的内容?

  • 似乎可以为房间创建 v-card,它是如何工作的?是否需要在服务器端进行一些额外的配置?

【问题讨论】:

    标签: xmpp ejabberd multiuserchat


    【解决方案1】:
    1. 正如 Mickaël 指出的那样,您只是将 &lt;iq/&gt; 发送到您自己的住户地址,因此 ejabberd 会将其传回给您。

    关于您的其他问题:

    1. 有趣 - 我试用并阅读了 Service Discovery XEP,我认为它基本上被认为是多余的。 #owner#admin#user 命名空间是 MUC 的组件,因此您应该假设它们仅来自 http://jabber.org/protocol/muc 的支持。正如您在 XEP-0030 中看到的,参考示例也不包括它们:http://xmpp.org/extensions/xep-0030.html#example-2

    2. 我不认为 vcard-temp 意味着你可以设置任何东西 - 你只能请求 MUC 服务器的 vCard,它返回了

    <vCard xmlns='vcard-temp'> <FN>ejabberd/mod_muc</FN> <URL>http://www.process-one.net/en/ejabberd/</URL> <DESC> ejabberd MUC module Copyright (c) 2003-2011 ProcessOne </DESC> </vCard>

    当我尝试过时。

    【讨论】:

      【解决方案2】:

      实际上,您不是将数据包发送到会议室,而是发送到用户昵称:'new_room_id@conference.my.domain.com/my_nickname'。因此,您发送的数据包被路由回给您。删除“/my_nickname”,您将能够与房间本身对话并获取您的配置表单。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-07
        • 2017-03-27
        • 2012-09-13
        • 2018-10-05
        • 1970-01-01
        • 2017-03-30
        • 2021-11-04
        • 2019-02-25
        相关资源
        最近更新 更多