Discussion:
Пожалуйста, объясните про PUBLISH
Victor Sudakov
2006-11-21 10:28:29 UTC
Permalink
Коллеги,

X-Lite моего визави посылает запрос методом PUBLISH, в теле запроса
PIDF, в котором написано например Away или Idle.

Должен ли этот PUBLISH доходить до моего UA? Пока я вижу, что до моего
UA доходит не PUBLISH, а NOTIFY, в котором тело переписано
Communigate-ом по своему усмотрению. Это так и должно быть, или SIP
proxy должен просто довести PUBLISH-запрос до моего UAS, не внося в
запрос изменений?

RFC3903 читал, но ответ на данный вопрос не нашёл.
Заранее спасибо за разъяснения.
--
Victor Sudakov, VAS4-RIPE, VAS47-RIPN
sip:sudakov-***@public.gmane.org
Dmitry Akindinov
2006-11-21 13:07:42 UTC
Permalink
Здравствуйте,
Post by Victor Sudakov
Коллеги,
X-Lite моего визави посылает запрос методом PUBLISH, в теле запроса
PIDF, в котором написано например Away или Idle.
Должен ли этот PUBLISH доходить до моего UA?
Нет.
Post by Victor Sudakov
Пока я вижу, что до моего
UA доходит не PUBLISH, а NOTIFY, в котором тело переписано
Communigate-ом по своему усмотрению. Это так и должно быть,
Да. Потому, что сервер выстуавет как ESC (Event State compositor) и
результирующее состояние записи может отличаться от того, что
опубликовал конкретно этот EPA (Event Publication Agent).
Post by Victor Sudakov
или SIP
proxy должен просто довести PUBLISH-запрос до моего UAS, не внося в
запрос изменений?
А как быть с оостальными подписчиками на состояние вашего клиента?
Идея в том, что обновления отсылаются в одно известное место, из
которого рассылаются уведомления всем заинтересованным агентам.
Post by Victor Sudakov
RFC3903 читал, но ответ на данный вопрос не нашёл.
Там надо гораздо больше и гораздо другие RFC читать. Начиная с 2778.
Post by Victor Sudakov
Заранее спасибо за разъяснения.
--
Best regards,
Dmitry Akindinov -- Stalker Labs.
Victor Sudakov
2006-11-23 10:28:30 UTC
Permalink
Post by Dmitry Akindinov
Там надо гораздо больше и гораздо другие RFC читать. Начиная с 2778.
Очень поучительный RFC, спасибо.

А что по поводу PIDF информации, которую посылает X-Lite и примеры
которой я сюда кидал? Оно таки нестандартное?
--
Victor Sudakov, VAS4-RIPE, VAS47-RIPN
sip:sudakov-***@public.gmane.org
Vladimir A. Butenko
2006-11-23 10:39:50 UTC
Permalink
On Thu, 23 Nov 2006 16:28:30 +0600
Post by Victor Sudakov
Post by Dmitry Akindinov
Там надо гораздо больше и гораздо другие RFC читать. Начиная с 2778.
Очень поучительный RFC, спасибо.
А что по поводу PIDF информации, которую посылает X-Lite и примеры
которой я сюда кидал? Оно таки нестандартное?
Стандартное. Почти. В 5.1.3 - будет работать. "Почти" :-)
Post by Victor Sudakov
--
Victor Sudakov, VAS4-RIPE, VAS47-RIPN
##################################################################
Вы получили это сообщение потому, что подписаны на список рассылки
Архив списка: http://mx.demos.su/lists/cgp-russian/
Sincerely,
Vladimir

Vladimir A. Butenko
2006-11-21 19:52:50 UTC
Permalink
On Tue, 21 Nov 2006 16:28:29 +0600
Post by Victor Sudakov
Коллеги,
X-Lite моего визави посылает запрос методом PUBLISH, в теле запроса
PIDF, в котором написано например Away или Idle.
Должен ли этот PUBLISH доходить до моего UA?
Нет.
Post by Victor Sudakov
Пока я вижу, что до моего
UA доходит не PUBLISH, а NOTIFY, в котором тело переписано
Communigate-ом по своему усмотрению.
Да.
Post by Victor Sudakov
Это так и должно быть, или SIP
proxy должен просто довести PUBLISH-запрос до моего UAS, не внося в
запрос изменений?
Нет.

Работает это так. Если аккаунт. У него - 20 endpoints (телефоны,
прогграммки, что угодно). Теперь некоторые устройства решают воспользоваться
неким "Event Package". Например, presence. Но - могут и любым другим
поддерживаемым сервером.

Для чего начинают слать в сервер PUBLISH. Заметим, что именно сервер
является адресатом (собственный аккаунт). На что внутри данных "event
package" для этого аккаунта сервер создает "сегменты" - у каждого устройства
свой сегмент. Имена сегментов возвращаются клиентам, так что они в
дальнейшем могут обновлять свои данные, а не плодить новые сегменты (поля
SIP-ETag в запросах PUBLISH).

В результате имеем в аккаунте 10 сегментов для 10 устройств этого аккаунта.
Далее влючаются мозги сервера. При кажом изменении сегмента (и при
удалении-добавлении оного), он данные из всех сегментов "аггрегирует". Для
presence алгоритм в общих чертах такой: если все away - то away, если хоть
один online- то online, если хоть где-то Busy - то Busy.

А если бы пакет был не "presence", а "money", и каждое устройсто (кошелёк)
сообщало бы сколько в нём денег - то функция аггрегирования была бы просто
арифметической суммой значений в каждом сегменте (с конвертацией валют :-).

В случае пакета presence есть еще одна заморочка CGatePro - а аккаунта могут
быть залогиненные XIMSS и XMPP клиенты. Каждый из которых тоже рассказывает
серверу о своих presence. Это никуда не записывается, но сервер считает
"общий презенс" и для них - всех активных клиентов этого аккаунта. А
результирующий "presence" - это аггрегация (по той же формуле) SIP-презенаса
и этого XMISS-XMPP презнеса.

Ежели Вы откроете WebAdmin и войдете в этот аккаунт, в закладку Status - то
увидите все задействованные Event Packages и все сегменты с их значениями. А
в верху будет указано аггрегированное значение, для Presence - два: по
сегментам, и с учетом XIMSS/XMPP клиентов.

Теперь - с другой стороны. Кому-то хочется увидеть чей-то Presence. Или еще
что-то. Для этого он посылает SUBSCRIBE на данный аккаунт с указанием event
package (например, presence). Сервер смотрит на это дело, и в зависимости от
package - либо отвергает запрос (не аутентицирован, нет прав - например, Вы
не сможете подписаться на мой "reg" package - чтобы следить за моими
register), либо подписывает без вопросов, либо ставит в лист ожидания, либо
(в случае presence) смотрит в Roster (Buddy List) и либо отвергает, либо
принимает, либо ставит в ожидание.

Когда подписка установлена, то каждое изменение *аггрегированного* значения
package приводит к рассылке NOTIFY всем подписчикам. Именно
аггрегированного. То есть если у меня два телефона, и на одном я говорю - то
есть статус его и аггрегированый - Busy - то чтобы ни происходило со вторым
- аггрегированный статус не поменяется, и никаких NOTIFY посылаться не
будет.

В SUBSCRIBE клиент пишет, какие форматы данных он понимает. Их для одного
package может быть много. Например, для Presence CGatePro понимает 5 -
включая 2(или 3?) разных Микрософтских, сделанных, видимо, разными группами,
о существовании друг друга (как и о существовании головного офиса где-то в
Америке) не подозревавшими.

Когда создается NOTIFY, то смотрится, что за форматы этот клиент понимает.
Если сервер поддерживает более одного из указанных клиентом форматов - то
тут уж сервер сам выбирает, что ему больше нравится.

Но в любом случае - даже если формат, отправляемый по NOTIFY и формат, в
котором был послан PUBLISH - одинаковые, эти "два данных" разные, так как
сервер всегда генерит NOTIFY по аггрегированному значению всех сегментов,
даже если есть только один сегмент.
Post by Victor Sudakov
RFC3903 читал, но ответ на данный вопрос не нашёл.
Заранее спасибо за разъяснения.
Пожалуйста. А что, eyeBeam опять что-то не понимает в посланном ему NOTIFY?
они там периодически что-то "правят", оно, соответственно, то потухнет, то
погаснет. Логи бы.
Post by Victor Sudakov
--
Victor Sudakov, VAS4-RIPE, VAS47-RIPN
Sincerely,
Vladimir
Victor Sudakov
2006-11-22 05:07:14 UTC
Permalink
Post by Vladimir A. Butenko
Пожалуйста. А что, eyeBeam опять что-то не понимает в посланном ему NOTIFY?
они там периодически что-то "правят", оно, соответственно, то потухнет, то
погаснет. Логи бы.
Спасибо большое Вам и Дмитрию за толковые объяснения.
Логи пока показать не готов, а вот tcpdump могу:
http://vas.tomsk.ru/presen1.pcap
это те PUBLISH запросы, которые посылает мой софтфон.

Практическая суть проблемы в том, что я на телефоне (X-Lite 3.0)
выбираю разные состояния, но мой визави (у него тоже X-Lite 3.0) видит
только две разновидности: я для него или Available, или Offline, без
всяких промежуточных нюансов. Причём утверждает, что в NOTIFY,
приходящих от CGP, в PIDF только две разновидности статустов: open и
closed.
--
Victor Sudakov, VAS4-RIPE, VAS47-RIPN
sip:sudakov-***@public.gmane.org
Vladimir A. Butenko
2006-11-22 05:12:10 UTC
Permalink
Да, правильно, так оно и должно быть. В стандартном PDF-формате никаких
нюансов нет - только open & closed.

Вы бы всё-таки сделали бы полные логи на CGatePro и показали бы нам, что это
чудо посылает в PUBLISH когда Вы ему говорите, например, "Out to завтра" или
"Занят на Митинге".

Может, это и можно поддержать.

On Wed, 22 Nov 2006 11:07:14 +0600
Post by Victor Sudakov
Post by Vladimir A. Butenko
Пожалуйста. А что, eyeBeam опять что-то не понимает в посланном ему
NOTIFY?
они там периодически что-то "правят", оно, соответственно, то потухнет, то
погаснет. Логи бы.
Спасибо большое Вам и Дмитрию за толковые объяснения.
http://vas.tomsk.ru/presen1.pcap
это те PUBLISH запросы, которые посылает мой софтфон.
Практическая суть проблемы в том, что я на телефоне (X-Lite 3.0)
выбираю разные состояния, но мой визави (у него тоже X-Lite 3.0) видит
только две разновидности: я для него или Available, или Offline, без
всяких промежуточных нюансов. Причём утверждает, что в NOTIFY,
приходящих от CGP, в PIDF только две разновидности статустов: open и
closed.
--
Victor Sudakov, VAS4-RIPE, VAS47-RIPN
##################################################################
Вы получили это сообщение потому, что подписаны на список рассылки
Архив списка: http://mx.demos.su/lists/cgp-russian/
Sincerely,
Vladimir
Victor Sudakov
2006-11-22 05:24:19 UTC
Permalink
Post by Vladimir A. Butenko
Да, правильно, так оно и должно быть. В стандартном PDF-формате никаких
нюансов нет - только open & closed.
Вы бы всё-таки сделали бы полные логи на CGatePro и показали бы нам, что
это чудо посылает в PUBLISH когда Вы ему говорите, например, "Out to
завтра" или "Занят на Митинге".
Может, это и можно поддержать.
Честно говоря, я не очень знаю, как в CGP включить полные логи в SIP.
Но в tcpdump XML прекрасно видно. Впрочем, сейчас запощу сюда прямо в
текстовом формате. Надеюсь, длинные строки не порежутся.


<?xml version='1.0' encoding='UTF-8'?><presence xmlns='urn:ietf:params:xml:ns:pidf' xmlns:dm='urn:ietf:params:xml:ns:pidf:data-model' xmlns:rpid='urn:ietf:params:xml:ns:pidf:rpid' xmlns:c='urn:ietf:params:xml:ns:pidf:cipid' entity='pres:sudakov-***@public.gmane.org'><tuple id='t017e0a3b'><status><basic>open</basic></status></tuple><dm:person id='p660bf91e'><rpid:activities><rpid:busy/></rpid:activities><dm:note>Busy</dm:note></dm:person></presence>

<?xml version='1.0' encoding='UTF-8'?><presence xmlns='urn:ietf:params:xml:ns:pidf' xmlns:dm='urn:ietf:params:xml:ns:pidf:data-model' xmlns:rpid='urn:ietf:params:xml:ns:pidf:rpid' xmlns:c='urn:ietf:params:xml:ns:pidf:cipid' entity='pres:sudakov-***@public.gmane.org'><tuple id='t017e0a3b'><status><basic>open</basic></status></tuple><dm:person id='p660bf91e'><rpid:activities><rpid:on-the-phone/></rpid:activities><dm:note>On the Phone</dm:note></dm:person></presence>

<?xml version='1.0' encoding='UTF-8'?><presence xmlns='urn:ietf:params:xml:ns:pidf' xmlns:dm='urn:ietf:params:xml:ns:pidf:data-model' xmlns:rpid='urn:ietf:params:xml:ns:pidf:rpid' xmlns:c='urn:ietf:params:xml:ns:pidf:cipid' entity='pres:sudakov-***@public.gmane.org'><tuple id='t017e0a3b'><status><basic>open</basic></status><rpid:user-input>idle</rpid:user-input></tuple><dm:person id='p660bf91e'><rpid:activities><rpid:unknown/></rpid:activities><dm:note>Idle</dm:note></dm:person></presence>

<?xml version='1.0' encoding='UTF-8'?><presence xmlns='urn:ietf:params:xml:ns:pidf' xmlns:dm='urn:ietf:params:xml:ns:pidf:data-model' xmlns:rpid='urn:ietf:params:xml:ns:pidf:rpid' xmlns:c='urn:ietf:params:xml:ns:pidf:cipid' entity='pres:sudakov-***@public.gmane.org'><tuple id='t017e0a3b'><status><basic>open</basic></status></tuple><dm:person id='p660bf91e'><rpid:activities><rpid:away/></rpid:activities><dm:note>Away</dm:note></dm:person></presence>

<?xml version='1.0' encoding='UTF-8'?><presence xmlns='urn:ietf:params:xml:ns:pidf' xmlns:dm='urn:ietf:params:xml:ns:pidf:data-model' xmlns:rpid='urn:ietf:params:xml:ns:pidf:rpid' xmlns:c='urn:ietf:params:xml:ns:pidf:cipid' entity='pres:sudakov-***@public.gmane.org'><tuple id='t017e0a3b'><status><basic>closed</basic></status></tuple><dm:person id='p660bf91e'><rpid:activities><rpid:unknown/></rpid:activities></dm:person></presence>

<?xml version='1.0' encoding='UTF-8'?><presence xmlns='urn:ietf:params:xml:ns:pidf' xmlns:dm='urn:ietf:params:xml:ns:pidf:data-model' xmlns:rpid='urn:ietf:params:xml:ns:pidf:rpid' xmlns:c='urn:ietf:params:xml:ns:pidf:cipid' entity='pres:sudakov-***@public.gmane.org'><tuple id='t017e0a3b'><status><basic>open</basic></status></tuple><dm:person id='p660bf91e'><rpid:activities><rpid:unknown/></rpid:activities></dm:person></presence>
--
Victor Sudakov, VAS4-RIPE, VAS47-RIPN
sip:sudakov-***@public.gmane.org
Loading...