Запрос присутствия в XMPP

По умолчанию присутствие XMPP публикуется для всех, кто подписан на этого человека. Можно ли отправить что-то вроде вызова iq, чтобы получить тег присутствия идентификатора, которого нет в моем списке?


person sandeepzgk    schedule 09.08.2011    source источник


Ответы (4)


Если все, что вам нужно знать, подключен объект XMPP или нет, вы можете использовать XMPP Ping (XEP- 0199). Ниже приведен пример двух пользователей xmpp «user1» и «user2». Их нет в списках обжарщиков друг друга. Я использую ejabberd и PSI для приведенного ниже примера.

  • «user2» пингует «user1» (user1 в сети)

IQ:

<iq from='[email protected]' 
to='[email protected]/BANL07R9AME9X' type='get' id='e2e1'>
<ping xmlns='urn:xmpp:ping'/>
</iq>

Ответ:

<iq from="[email protected]/BANL07R9AME9X" type="result" xml:lang="en" to="[email protected]/BANL07R9AME9X" id="e2e1" />

  • «user2» пингует «user1» (user1 находится в автономном режиме. Ответ на ping приводит к типу = ошибка)

IQ:

<iq from='[email protected]' 
to='[email protected]/BANL07R9AME9X' type='get' id='e2e1'>
<ping xmlns='urn:xmpp:ping'/>
</iq>

Ответ:

<iq from="[email protected]/BANL07R9AME9X" type="error" xml:lang="en"     to="[email protected]/BANL07R9AME9X" id="e2e1" >
<ping xmlns="urn:xmpp:ping"/>
<error type="cancel" code="503" >
<service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>
person CPJoshi    schedule 31.05.2013
comment
Стоит отметить, что это работает, только если у вас есть ресурс user2, который в некоторых случаях неизвестен. - person Sumit Jain; 29.02.2016

Я так не думаю. Взгляните на rfc, раздел 5.1.3. В частности, говорится:

После получения запроса присутствия от пользователя сервер контакта
ДОЛЖЕН ответить следующим образом:

Если пользователь не находится в списке контакта с состоянием подписки «От», «От + Ожидание исходящего» или «Оба» (как определено в разделе «Состояния подписки» (раздел 9)), сервер контакта ДОЛЖЕН вернуть строфу присутствия введите «ошибка» в ответ на запрос присутствия.

Вероятно, вы получите ошибку или запрет в ответе.

person Maggie    schedule 09.08.2011

В rfc сказано, что вам не разрешено получать информацию о присутствии от идентификатора, которого нет в вашем списке.

Но я считаю, что можно запросить присутствие, изменив сервер (если есть сервер xmpp, который это позволяет)

person Chris    schedule 22.08.2011

No.

  • Присутствие подписывается, а не запрашивается. К тому времени, когда вы получите ответ на свой запрос, информация уже устарела.
  • Присутствие — это личная информация. Вы должны быть явно авторизованы, чтобы увидеть это контактом.
person Joe Hildebrand    schedule 09.08.2011