SER Модуль sl


Обзор


Модуль SL дает возможность SER работать в качестве статусонезависимого UA сервера и генерировать ответы на SIP запросы без организации сессий и сохранения состояния SIP транзакций. Это может быть выгодно для многих сценариев, когда нам не нужно обременять память сервера лишними данными, которые, по сути, являются бесполезными.

Модуль SL должен фильтровать присланные SIP сообщения ACK после того, как был сгенерирован локальный статусонезависимый ответ на SIP сообщение INVITE. Чтобы опознавать такие ACK сообщения, SER добавляет специальную "сигнатуру" к "to"-тэгам. Эта сигнатура ищется в поступающих ACK сообщениях и, если они найдены, то полученное ACK сообщение отбрасывается.

Чтобы ускорять процесс фильтрации, модуль использует механизм таймаутов. Когда отправляется ответ, устанавливается таймер. С временным промежутком для таймаута, в течение которого поступающие запросы ACK, будут проверяться с использованием значения "To" тега. Как только время работы таймера истекает, все сообщения ACK будут пропускаться, т.к. прошло довольно длительное время, в течении которого мы ожидали ответ, таким образом, мы уже не ожидаем никаких ACL сообщений, которые нам нужно заблокировать.

Фильтрация ACK сообщений может срабатывать неправильно только в некоторых редких случаях. Если Вы считаете, что они имеют для Вас значение, лучше используйте stateful режим (модуль tm ) для обработки сообщений INVITE. Особенно, проблема проявляется, когда UA присылает сообщение INVITE, в котором уже имеется "to"-тэг (например, re-INVITE), и сервер хочет ответить на него. Тогда, он сохранит текущий "to"-тэг, который будет отражен в сообщении ACK. Сервер не увидит эту сигнатуру и переправит это сообщение далее по адресу. Это причинит не столь уж значительный вред, не считая бесполезно отправленного ACK сообщения.



Зависимости от других модулей.


Этот модуль имеет зависимости от следующих модулей (другими словами, ниже перечисленные модули должны быть загружены до загрузки этого модуля):

Нет зависимостей от других модулей.


Зависимости от внешних библиотек и приложений.


Следующие библиотеки или приложения должны быть установлены перед использованием OpenSER с этим модулем:

Нет.


Экспортируемые параметры.


enable_stats (integer)

Включение/выключение генерации и экспорта статистики основному менеджеру сервера для этого модуля.
Нулевое значение параметра - выключает статистику.

Модуль SL предоставляет статистику о количестве отправленных ответов на SIP сообщения (разделенных по классам в зависимости от кода возврата) и сколько локальных ACK сообщений было отфильтровано.

Значение по умолчанию: 1 (включено).

Пример использования параметра enable_stats:
modparam("sl", "enable_stats", 0)


Экспортируемые функции


sl_send_reply(code, reason)

Отправка ответа на текущее обрабатываемое SIP сообщение с кодом возврата и текстом, который описывает причину. Ответное сообщение отправляется в статусонезависимом режиме, полностью независимо от модуля обработки транзакций и без повторной передачи ответов на SIP сообщение INVITE. Поля 'code' и 'reason' могут содержать псевдопеременные, которые меняются на их значения во времени выполнения функции.

Значение для параметров следующие:

  • code - код возврата.
  • reason - Текстовая часть возвращаемого значения.

Эта функция может использоваться из блоков REQUEST_ROUTE, ERROR_ROUTE.

Пример использования функции sl_send_reply():
...
sl_send_reply("404", "Not found");
...
sl_reply("$err.rcode", "$err.rreason");
...


sl_reply_error()

Функция отправляет ответное сообщение об ошибке, с описанием причины произошедшей последней внутренней ошибки. Обычно, она должна использоваться после функции скрипта, в которой произошла ошибка и которая вернула ее код.

Эта функция может использоваться из блоков REQUEST_ROUTE.

Пример использования функции sl_reply_error():
...
sl_reply_error();
...



Экспортируемая статистика.


  • 1xx_replies - Количество ответов с кодом 1xx.
  • 2xx_replies - Количество ответов с кодом 2xx.
  • 3xx_replies - Количество ответов с кодом 3xx.
  • 4xx_replies - Количество ответов с кодом 4xx.
  • 5xx_replies - Количество ответов с кодом 5xx.
  • 6xx_replies - Количество ответов с кодом 6xx.
  • send_replies - Общее количество отправленных ответов на SIP сообщения.
  • sent_err_replies - Общее количество отправленных функцией sl_reply_error() ответов на SIP сообщения.
  • received_ACKs - количество принятых SIP сообщений ACK.


Ссылки по теме