我试图从我的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服务器会以相同的类型响应我的查询,但不能使用类型='result'或type ='error'?我尝试过使用type ='set'的其他查询,同样的事情发生了。
为什么在muc服务的功能中没有<feature var='http://jabber.org/protocol/muc#owner'/>
或<feature var='http://jabber.org/protocol/muc#admin'/>
?
似乎可以为房间创建v-card,它是如何工作的?是否需要在服务器端进行一些额外的配置?
答案 0 :(得分:1)
实际上,您不是将数据包发送到会议室,而是发送给用户昵称:&#39; new_room_id@conference.my.domain.com/my_nickname'。因此,您发送的数据包将路由回给您。删除&#34; / my_nickname&#34;并且您将能够与房间对话并获取您的配置表单。
答案 1 :(得分:0)
<iq/>
发送到你自己的占有者地址,所以ejabberd会把它传回给你。对于您的其他问题:
有趣 - 我试了一下并阅读了Service Discovery XEP,我认为它基本上被认为是多余的。 #owner
,#admin
和#user
命名空间是MUC的组成部分,因此您应该仅从http://jabber.org/protocol/muc
开始支持它们。正如您在XEP-0030中所看到的,参考示例不包括它们:http://xmpp.org/extensions/xep-0030.html#example-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>
当我尝试时。