По умолчанию присутствие XMPP публикуется для всех, кто подписан на этого человека. Можно ли отправить что-то вроде вызова iq, чтобы получить тег присутствия идентификатора, которого нет в моем списке?
Запрос присутствия в XMPP
Ответы (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>
Я так не думаю. Взгляните на rfc, раздел 5.1.3. В частности, говорится:
После получения запроса присутствия от пользователя сервер контакта
ДОЛЖЕН ответить следующим образом:Если пользователь не находится в списке контакта с состоянием подписки «От», «От + Ожидание исходящего» или «Оба» (как определено в разделе «Состояния подписки» (раздел 9)), сервер контакта ДОЛЖЕН вернуть строфу присутствия введите «ошибка» в ответ на запрос присутствия.
Вероятно, вы получите ошибку или запрет в ответе.
В rfc сказано, что вам не разрешено получать информацию о присутствии от идентификатора, которого нет в вашем списке.
Но я считаю, что можно запросить присутствие, изменив сервер (если есть сервер xmpp, который это позволяет)
No.
- Присутствие подписывается, а не запрашивается. К тому времени, когда вы получите ответ на свой запрос, информация уже устарела.
- Присутствие — это личная информация. Вы должны быть явно авторизованы, чтобы увидеть это контактом.