Есть ли вообще на форуме те, кто разбираются в работе протокола SIP?
Ситуация следующая: Asterisk выполняет переадресацию SIP вызова при уже установленной сессии. Переадресация ведёт себя достаточно интересно, вот график пакетов на астериске:
Код:
Asterisk Server ------ REFER ------> ------ BYE --------> (6 раз)
По стандарту оно понятно, но проблема в том что астериск может отправить BYE раньше получения какого-либо ответа на REFER. В стандарте я не нашёл ничего противоречащего такому поведению. Хочу разобраться и исправить.
Если идей нет, то буду писать в sip-implementors, результаты отпишу здесь.
В общем в чём проблема вполне понятно: 1. В RFC5057 описано поведение в подобных случаях. В данном случае отправка BYE после REFER не завершает диалог, а только обозначает нежелание переводящей звонок стороны (Asterisk) продолжить диалог в случае неудачной переадресации. 2. Asterisk ошибочно считает что передача пакета с REFER неудалась. Это вызвано с одной стороны ошибкой в коде заставляющей игнорировать ответы на REFER, а с другой тем, что не отслеживается состояние SIP диалога.
Первое будет исправить достаточно просто, второе - не уверен. Так же второе обстоятельство мешает добавить поддержку PRACK и UPDATE запросов в Asterisk. _________________ OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i http://igorg.ru