Opened 4 months ago

Last modified 4 months ago

#439 new улучшение

Сериализовать транзакции REGISTER

Reported by: alx Owned by: alx
Priority: средний Milestone: 2 очередь
Component: any Keywords:
Cc:

Description

Сейчас канальные окончания SIP могут захотеть перерегистрироваться в любой произвольным момент времени (например при изменении настроек или IP адреса платы). Перерегистрация заключается в вызове ua_unregister(), отправляющей запрос разрегистрации, и последующем вызове ua_register(). Может так получиться, что на момент вызова ua_unregister() еще не завершена предыдущая транзакция, и тогда ibeXosip возвращает OSIP_WRONG_STATE.

Предлагается реализовать механизм подобный тому, который был реализован для транзакций SUBSCRIBE - для каждой регистрации помнить ее состояние, и если ua_unregister() вызывается в момент незавершенной транзакции, устанавливать какой-то флаг необходимости разрегистрироваться, и посылать новый запрос после завершения текущей транзакции.

Заодно запоминать там же ts канального окончания, инициировавшего регистрацию, заменив массив ts2rid (чтобы регистрироваться могли и виртуальные канальные окончания).

Change History (1)

comment:1 by alx, 4 months ago

In 2438/sip_ua:

Если на момент вызова ua_unregister() ранее инициированная
транзакция REGISTER еще не завершена, возникала ошибка
(lineXosip возвращала OSIP_WRONG_STATE), и функция фактически
ничего не делала. Теперь при невозможности отправить запрос
по любой причине регистрация просто удаляется. Это временное
решение - см. #439.

Note: See TracTickets for help on using tickets.