Неожиданная строфа присутствия для комнаты создания MUC

6E64864A-36AF-4B83-8EF5-6E58C4A6117AКогда я пытаюсь создать одну и ту же комнату два раза подряд, я получаю раздел присутствия из службы, содержащий код состояния "201" оба раза.

Это ожидаемое поведение? Из XEP-0045 кажется, что 201 следует отправлять ТОЛЬКО при первом создании комнаты.

Пожалуйста, помогите мне понять это. Почему код состояния 201 отправляется оба раза?

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

Пожалуйста, смотрите ниже последовательность:

--------- Здесь начинается первый запрос

SEND: <presence to="[email protected]/GJ">
<x xmlns="http://jabber.org/protocol/muc"/>
<x xmlns="vcard-temp:x:update"><photo/></x></presence>


RECV: <presence xmlns="jabber:client" from="[email protected]/GJ" to="erik@localhost/imac">
<x xmlns="vcard-temp:x:update"><photo/></x>
<x xmlns="http://jabber.org/protocol/muc#user">
<item jid="erik@localhost/imac" affiliation="owner" role="moderator"/>
<status code="110"/><status code="201"/></x></presence>
// configure the room persistent here
//<field type="boolean" var="muc#roomconfig_persistentroom" value="1"/>
SEND: <iq type="set" to="[email protected]" id="6E64864A-36AF-4B83-8EF5-6E58C4A6117A">
<query xmlns="http://jabber.org/protocol/muc#owner"><x .........

RECV: <iq xmlns="jabber:client" from="[email protected]" 
to="erik@localhost/imac" id="6E64864A-36AF-4B83-8EF5-6E58C4A6117A" type="result">
<query xmlns="http://jabber.org/protocol/muc#owner"/></iq>

---------Здесь начинается второй запрос

SEND: <presence to="[email protected]/GJ" type="unavailable">
<x xmlns="vcard-temp:x:update"><photo/></x></presence>

SEND: <presence to="[email protected]/GJ">
<x xmlns="http://jabber.org/protocol/muc"/>
<x xmlns="vcard-temp:x:update"><photo/></x></presence>

RECV: <presence xmlns="jabber:client" from="[email protected]/GJ" to="erik@localhost/imac" type="unavailable">
<x xmlns="vcard-temp:x:update"><photo/></x><x xmlns="http://jabber.org/protocol/muc#user"><item affiliation="owner" role="none"/>
<status code="110"/></x></presence>

RECV: <presence xmlns="jabber:client" from="[email protected]/GJ" to="erik@localhost/imac">
<x xmlns="vcard-temp:x:update"><photo/></x>
<x xmlns="http://jabber.org/protocol/muc#user">
<item jid="erik@localhost/imac" affiliation="owner" role="moderator"/><status code="110"/><status code="201"/></x></presence>

----------------------Раздел конфигурации отправлен после первого запроса

 SEND: <iq type="set" to="[email protected]" id="C72C4629-B318-4733-884B-B6A8BEAFB50F">
<query xmlns="http://jabber.org/protocol/muc#owner"> 
<x xmlns="jabber:x:data" type="submit"><field type="hidden" var="FORM_TYPE"><value>http://jabber.org/protocol/muc#roomconfig</value> <field type="boolean" var="muc#roomconfig_enable_logging" value="1"/> 
<field type="text-single" var="muc#roomconfig_roomname" value="IdeaFactory"/> <field type="boolean" var="muc#roomconfig_membersonly" value="1"/> 
<field type="boolean" var="muc#roomconfig_moderatedroom" value="0"/> 
<field type="boolean" var="muc#roomconfig_persistentroom" value="1"/> <field type="boolean" var="muc#roomconfig_publicroom" value="0"/> <field type="text-single" var="muc#roomconfig_maxusers" value="10"/> <field type="jid-multi" var="muc#roomconfig_roomowners" value="erik@localhost"/> <field type="boolean" var="muc#roomconfig_changesubject" value="1"/></field></x> </query></iq>

person GJain    schedule 17.11.2014    source источник
comment
Какое программное обеспечение предоставляет компонент MUC?   -  person Flow    schedule 17.11.2014
comment
ejabberd mod_muc из proceesone   -  person GJain    schedule 17.11.2014


Ответы (1)


После входа в комнату и получения кода состояния 201 вы должны либо принять конфигурацию по умолчанию, либо явно настроить комнату (см. раздел 10.1 документа XEP-0045). Если вы отправите сообщение о недоступном присутствии до выполнения любого из этих действий, сервер уничтожит комнату. Таким образом, в вашем примере комната на самом деле "создается заново" оба раза.

Кроме того, для некоторых серверов настройка по умолчанию для комнаты «временная», т.е. комната уничтожается, когда уходит последний участник. Вы, вероятно, захотите настроить его как «постоянную комнату», чтобы он оставался рядом.

person legoscia    schedule 17.11.2014
comment
похоже, что я должен использовать default_room_options : persist:true для конфигурации ejabberd... тогда я не получаю 201 для второго запроса. Я посмотрю, почему конфиг от клиента не работает... принимаю ответ для разъяснений - person GJain; 17.11.2014
comment
didReceivePresence - после настройки комнаты я получаю в ответ код состояния 303. Не могли бы вы помочь мне с этим @legoscia - person Gagan Joshi; 11.06.2015
comment
@GaganJoshi Список числовых кодов состояния можно найти здесь: xmpp.org /extensions/xep-0045.html#registrar-statuscodes-init - person legoscia; 11.06.2015
comment
@legoscia спасибо за помощь. Вы можете сказать мне. если я приглашу пользователя. чем приглашенный пользователь также должен настроить комнату или нет. какова концепция разблокировки комнаты после настройки. заранее спасибо - person Gagan Joshi; 12.06.2015
comment
Вы можете найти описание этого в разделе 10.1 XEP-0045: xmpp.org/extensions /xep-0045.html#createroom - person legoscia; 12.06.2015
comment
@legoscia, 6. После того, как служба получит заполненную форму конфигурации от первоначального владельца комнаты (или получит запрос на мгновенную комнату), служба ДОЛЖНА разблокировать комнату (т.е. разрешить другим пользователям войти в комнату) и отправить IQ типа результата владельцу комнаты. Если услуга получает отмену, она ДОЛЖНА уничтожить комнату. Сервис должен разблокировать комнату. но как разблокировать комнату. - person Gagan Joshi; 16.06.2015
comment
@legoscia У меня тоже такая же проблема, но разница в том, что я создаю muc room из модуля ejabberd. Как я могу принять настройки комнаты по умолчанию? Если у вас есть время, взгляните на stackoverflow.com/questions/51280426/ - person abhishek ranjan; 11.07.2018