У меня есть вариант использования, в котором как пользователь-администратор ejabberd я должен иметь возможность редактировать списки для всех других пользователей. Я использую библиотеку smack для подключения к серверу ejabberd с использованием TCP-соединения.
Читая документацию ejabberd 14.07, вот что написано в разделе mod_roster:
менеджеры Список удаленных объектов, которые могут управлять списками пользователей с помощью удаленного управления списками (XEP-0321). Реализованы следующие разделы протокола: 4.2. Удаленный объект запрашивает список текущего пользователя. 4.3. Пользователь обновляет список. 4.4. Удаленный объект обновляет список пользователей. Кабина удаленного объекта получает или изменяет только те элементы реестра, которые имеют тот же домен, что и объект. Значение по умолчанию: []. Этот пример конфигурации включает управление версиями реестра с сохранением текущего идентификатора. Транспорты ICQ и MSN могут получать контакты ICQ и MSN, добавлять или удалять их для любой локальной учетной записи:
Я внес изменения в конфигурацию ejabberd и отправил следующие пакеты:
<iq id='PCe38-23' to='%[email protected]/Smack' type='set'>
<query xmlns='jabber:iq:roster'>
<item jid='%[email protected]/Smack'
name='Siddharth Banerjee'
subscription='both'>
</item>
</query>
</iq>
<iq id='PCe38-24' to='%[email protected]/Smack' type='set'>
<query xmlns='jabber:iq:roster'>
<item jid='%[email protected]/Smack'
name='deco'
subscription='both'>
</item>
</query>
</iq>
Но я получаю следующее:
<iq from='%[email protected]/Smack' to='[email protected]/75250b26-a52a-4e1d-a5fb-4b263cd2f451' type='error' id='PCe38-23'>
<query xmlns='jabber:iq:roster'>
<item jid='%[email protected]/Smack' name='Siddharth Banerjee' subscription='both'>
</item>
</query>
<error code='503' type='cancel'><service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error></iq>
Как изменить список другого пользователя с помощью smack?
Пожалуйста, порекомендуйте.