проблема с протоколом Jabber - PullRequest
0 голосов
/ 03 июня 2009

Один из контактов моего джаббер-робота,

значение атрибута «подписка» которого равно «до»,

что в соответствии с протоколом Jabber означает:

**** робот подписался на онлайн-статус другой стороны, но другая сторона не подписалась на мой робот. ****

Но когда я вхожу в чужую учетную запись,

Я вижу, что робот онлайн,

почему это так?

Протокол jabber сейчас в хаосе?

Ответы [ 2 ]

3 голосов
/ 04 июня 2009

Если вы скажете, что «у моего бота есть подписка на берег» или «у берега есть подписка от моего бота», «из» и «в» будет иметь больше смысла.

Итак, если в списке ботов есть:

<item jid='shore@example.com' subscription='to'/>

Тогда бот увидит присутствие берега, но берег не увидит присутствие бота, при условии, что у берега есть:

<item jid='bot@example.com' subscription='from'/>

Эти состояния могут быть не синхронизированы из-за проблем с сетью и тому подобного. В этих случаях самый простой способ решить проблему - это удалить элемент (что должно привести к эффективному удалению элемента с другой стороны), а затем снова добавить (см. RFC 3921bis, раздел 2.5.1 для деталей):

<iq from='bot@example.com/background'
   id='delete_1'
   type='set'>
 <query xmlns='jabber:iq:roster'>
   <item jid='shore@example.com' subscription='remove'/>
 </query>
</iq>
<presence type='subscribe' 
          from='bot@example.com/background' 
          to='shore@example.com'/>

Следует иметь в виду, что даже если подписка идет в указанном направлении, бот МОЖЕТ посылать направленное присутствие на берег, и в этом случае берег будет видеть присутствие обоих, даже если он не подписан на бот , Проверьте протокол протокола бота, и вы можете увидеть что-то вроде:

<presence to='shore@example.com'/>
1 голос
/ 03 июня 2009

Прошло много времени с тех пор, как я испортил XMPP, но быстрое перечитывание спецификации заставило меня подумать, что у вас есть смысл "to" перепутать. Если пользователь указан в списке роботов как «to», то это означает, что пользователь следит за присутствием роботов, а не наоборот. «от» означает, что робот отслеживает или получает разделы присутствия от - учетной записи пользователя.

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

...