On Mon, 21 May 2007 11:56:03 +0400
"Denis Stanishevskiy" <CGatePro@mx.ru> wrote:
>
>> Может, не стоит делайть "bind" до того, как считали Ростер?
А. Если это - синхронный ответ, то это - pending запрос. То есть кто-то запросил у Вашего юзера разрешения на подглядываение за его статусом. Юзеру надо показать диалог и позволить либо подтвердить запрос, либо отвергнуть его.
> S: <response id="rosterList"/>
>
> C: <signalBind id='1'>...</signalBind>
> C: <presenceSet id='2'/>
> ...
>
> если ответить на него <rosterSet id='...' subscription='unsubscribed'
> peer='peer3' />, то при следующем соединении придет <rosterItem ...
> subscription="none" /> - нормальный, сообщающий нам "name" и <group>.
То, что при нотификации о новом запросе о подписке нету атрибута name="realName" - так это скопировано из XMPP. Это можно добавить - если в самом запросе такое имя действительно было.
А вот <group> никак "само" появится не может. Это был какой-то клиент, который принял этот запрос, вписав его тем самым в ростер - с именем и группой, а потом, когда вы выдали type="unsubscribe" - оно поэтому и осталось в Ростере.
> последовательность действий такая:
> 1. оба аккаунта не имеют друг друга в ростер-листе.
> 2. account1 логинится и для него выполняется команда
> <rosterSet id='9' peer='account2'
> name='name2'><group>General</group></rosterSet>
> в ответ приходит
> <rosterItem name="name2" peer="account2"
> subscription="none"><group>General</group></rosterItem>
> 3. account1 отключается.
> 4. account2 логинится и для него выполняется команда
> <rosterSet id='57' subscription='subscribe' peer='account1'/>
> в ответ приходит
> <rosterItem ask="subscribe" peer="account1" subscription="none" />
> 5. account2 отключается
> 6. account1 подключается и получает rosterItem'ы вместе с <presence
> id="rosterList" peer="account2" type="subscribe" />
Да, он получает запрос - что кто-то на него захотел подписаться. Вы же этого еще никак не подтверждали. В ростер этот контакт был внесён безо всяких подписок.
> вот такая петрушка :(
>
> как это можно поправить, т.е. получать Contact Real Name и группу, в
> которую его положили?..
А кто его куда-то будет класть? Presence - это просто уведомление о том, что юзер запросил подписку. Из-за того, что Вы таким хитрым способом сначала заполнили Roster, то этой статьи там - всё равно что нету.
Почему бы Вам сразу не начать с того, что занести в Ростер статью с типом type="subBoth" - для этого, в отличие от XMPP, надо просто добавить к
<rosterSet id='9' peer='account2' name='name2'>
<group>General</group>
</rosterSet>
<rosterSet id='9' peer='account2' name='name2' subscription='subBoth'>
<group>General</group>
</rosterSet>
> С уважением,
> Денис Станишевский.
Sincerely,
Vladimir
Получено Mon May 21 10:35:37 2007
Этот архив был сгенерирован hypermail 2.1.8 : Mon 21 May 2007 - 15:14:05 MSD