URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 84570
[ Назад ]

Исходное сообщение
"OpenSIPS - presence & IM"

Отправлено geekkoo , 19-Мрт-09 17:35 
Пытаюсь запустить определение присутствия пользователя на сервере OpenSIPS. По идее настройки должны быть аналогичны Kamaillo. В качестве клиента тестирую с помощью linphone. Вроде бы presence и IM и там и там работают через SIMPLE протокол, но тем не менее что-то не срастается, т.е. себя я в linphone вижу как offline.

В opensips.cfg всё что касается publish/subscribe я раскомментировал:
.....
      /* uncomment this if you want to enable presence server
           and comment the next 'if' block
           NOTE: uncomment also the definition of route[2] from  below */
        if( is_method("PUBLISH|SUBSCRIBE"))
                        route(2);

.....
# Presence route
/* uncomment the whole following route for enabling presence
   NOTE: do not forget to enable the call of this route from the main
     route */
route[2]
{
        xlog("RRRRR!");
        if (!t_newtran())
        {
                sl_reply_error();
                exit;
        };

        if(is_method("PUBLISH"))
        {
                xlog("Process PUBLISHING");
                if($hdr(Sender)!= NULL)
                {
                        xlog("PUBLISH $hdr(Sender)\n");
                        handle_publish("$hdr(Sender)");
                }
                else
                        handle_publish();

                t_release();
        }
        else
        if( is_method("SUBSCRIBE"))
        {
                xlog("Subscribing!\n");
                handle_subscribe();
                t_release();
        }

        exit;
}
....

И как вообще дебажить route-скрипт? Я понавтыкал повсюду эти xlog, но в log-ах я соответсвующих записей не вижу. Что я делаю не так?

Заранее спасибо.


Содержание

Сообщения в этом обсуждении
"OpenSIPS - presence & IM"
Отправлено geekkoo , 20-Мрт-09 13:11 
>[оверквотинг удален]
>
>        exit;
>}
>....
>
>И как вообще дебажить route-скрипт? Я понавтыкал повсюду эти xlog, но в
>log-ах я соответсвующих записей не вижу. Что я делаю не так?
>
>
>Заранее спасибо.

Гм. С дебагом разобрался - действительно xlog (и xdbg) выдают дебажную информацию в лог. Т.е. получается у меня реально до обработки PUBLISH и SUBSCRIBE дело не доходит, где-то пакеты теряются.


"OpenSIPS - presence & IM"
Отправлено geekkoo , 23-Мрт-09 14:47 
>[оверквотинг удален]
>>
>>И как вообще дебажить route-скрипт? Я понавтыкал повсюду эти xlog, но в
>>log-ах я соответсвующих записей не вижу. Что я делаю не так?
>>
>>
>>Заранее спасибо.
>
>Гм. С дебагом разобрался - действительно xlog (и xdbg) выдают дебажную информацию
>в лог. Т.е. получается у меня реально до обработки PUBLISH и
>SUBSCRIBE дело не доходит, где-то пакеты теряются.

Вроде запрос SUBSCRIBE доходит до сервера, но ответа от него нет. В логах вот такая хрень (Too Many Hops):

Mar 23 14:41:02 [29435] DBG:core:build_res_buf_from_sip_res: copied size: orig:1
22, new: 27, rest: 344 msg=
SIP/2.0 483 Too Many Hops
Via: SIP/2.0/UDP 192.168.1.237:5060;received=192.168.1.237;rport=5060;branch=z9h
G4bK951895524
From:  <sip:mike@192.168.1.237>;tag=1124133299
To: mike@xxxxx.ru <sip:mike@xxxxx.ru>;tag=c97b4d1cb1f3d0da549e06a8
d482ef63.c998
Call-ID: 651168074
CSeq: 20 SUBSCRIBE
Server: OpenSIPS (1.4.4-notls (i386/linux))
Content-Length: 0

По идее я настраивал без XCAP сервера, чтобы presence был виден всем:

modparam("presence_xml", "force_active", 1)
modparam("presence", "server_address", "sip:192.168.1.252:5060")



"OpenSIPS - presence & IM"
Отправлено geekkoo , 25-Мрт-09 11:40 
>[оверквотинг удален]
>
>        exit;
>}
>....
>
>И как вообще дебажить route-скрипт? Я понавтыкал повсюду эти xlog, но в
>log-ах я соответсвующих записей не вижу. Что я делаю не так?
>
>
>Заранее спасибо.

Куда не кинь - повсюду баг на баге сидит и багом погоняет ... Оказался баг в движке (я использовал db_berkeley) при обработке BLOB-а, поэтому PUBLISH не заносился в таблицу presentity  (там body - это DB_BLOB), соответсвенно присутствие не показывалось. Патч отослал.

Теперь, видимо, всплыл баг в linphone, поскольку он игнорит входящие NOTIFY с информацией о состоянии контакта ...

Как же это достало :(


"OpenSIPS - presence & IM"
Отправлено geekkoo , 25-Мрт-09 11:43 
>[оверквотинг удален]
>
>Куда не кинь - повсюду баг на баге сидит и багом погоняет
>... Оказался баг в движке (я использовал db_berkeley) при обработке BLOB-а,
>поэтому PUBLISH не заносился в таблицу presentity  (там body -
>это DB_BLOB), соответсвенно присутствие не показывалось. Патч отослал.
>
>Теперь, видимо, всплыл баг в linphone, поскольку он игнорит входящие NOTIFY с
>информацией о состоянии контакта ...
>
>Как же это достало :(

Вот оно - linphone нагло пишет в дебаг окне :

message: Message sent: (to dest=192.168.1.252:5060)
SIP/2.0 481 Subscription Does Not Exist

Via: SIP/2.0/UDP 192.168.1.252;branch=z9hG4bK57d9.74410c6.0

From: <sip:mike@xxxxxxx.ru>;tag=10.23257.1237968995.2

To: <sip:mike@192.168.1.237>;tag=1553095454

Call-ID: 2109597968

CSeq: 3 NOTIFY

User-Agent: Linphone/3.0.0 (eXosip2/3.1.0)

Content-Length: 0


Какое тебе, зараза, "Does Not Exist"!


"OpenSIPS - presence & IM"
Отправлено dmitriy , 21-Июн-10 18:41 
route[2]
{
        xlog("RRRRR!");
        if (!t_newtran())
        {
                sl_reply_error();
                exit;
        };

        if(is_method("PUBLISH"))
        {
                xlog("Process PUBLISHING");
                if($hdr(Sender)!= NULL)
                {
                        xlog("PUBLISH $hdr(Sender)\n");
                        handle_publish("$hdr(Sender)");
                }
                else
                        handle_publish();

                t_release();
        }
        else
        if( is_method("SUBSCRIBE"))
        {
                xlog("Subscribing!\n");
                handle_subscribe();
                t_release();
        }

        exit; !!!
}
....

Помеченное знаками !!! удалить. Данный оператор завершает транзакцию ...