Правило модификации SIP-сообщений на границе (sipmodrule)
Описание
Правило модификации входящих и исходящих SIP-сообщений на границах системы с внешним миром. Применяется для глубокой тонкой адаптации SIP-сообщений на границах. В том числе в результате применения правила с полнотекстовой обработкой принятый пакет может быть отброшен.
Сообщения отдаются на модификацию в текстовом неразобранном виде. Поскольку применение правил модификации довольно затратно с точки зрения производительности, применение правил привязывается к конкретным экземплярам фасадных микросервисов обработки SIP сообщений (sg и esg). Для любого из них в конфигурационных параметрах задается список кодов для фильтрации правил.
С одним кодом может существовать несколько правил. Обнаруженные по кодам правила применяеются в порядке убывания приоритета (увеличения значения поля priority). Правила обрабатываются вплоть до последнего подходящего, либо процесс прерывается, если очередное подошедшее правило задает действие apply_last.
Обычный режим - использование регулярных выражений и фильтров. Для ускорения обработки можно применить функцию из кастомного erlang-модуля, загруженного с помощью патча. Для еще более глубокой кастомизации и выхода за пределы сообщения можно использовать режим модификации с помощью служебного сценария (значительно менее производительно).
Поля
{
"id": uuid,
"priority": str,
"enabled": intbool,
"code": str,
"dir": str,
"mode": str,
"mode_extension": str,
"extractors": array of str,
"filter": array,
"modifiers": array of str,
"action": str,
"repair_contentlen": intbool,
"opts": {
"title": str,
"comment": str
},
"ext": {
"ct": date,
"lwt": date
}
}
Спецификация | Описание |
---|---|
Поле: |
Идентификатор. Может быть задан при создании, иначе генерируется системой. |
Поле: |
Выключатель правила |
Поле: |
Приоритет. Меньшее значение означает более высокий приоритет в процессе обхода. |
Код группы правил, задаваемый в конфигурационных параметрах фасадных микросервисов sg и esg. |
|
Направление SIP-сообщения
|
|
Поле: |
Имя модуля или служебного сценария для режимов module и svcscript соответственно. |
Список строк-экстракторов. Каждая строка представляет собой команду в регулярных выражениях. Формат: Варианты опций (перечисляются в произвольной последовательности в конкатенации):
Если в теле PATTERN содержится именованное выделение (?<some_key>...) то обнаруженное значение выделяется и с указанным именем попадает в объект для дальнейшего применения фильтра. Экстракторы могут и не содержать именованных групп, тогда они просто являются проверочными. В любом случае, чтобы правило применилось, необходимо чтобы все строки-экстракторы в применении к тексту SIP-сообщения обнаружили совпадения. |
|
Фильтр в формате REST-API, применяемый к объекту с выделенными значениями. Если на этапе применения экстраторов правило не было проигнорировано, то к объекту-результату извлечения применяется фильтр. Правило применяется только если фильтр возвращает true. |
|
Список строк-модификаторов. Каждая строка представляет собой команду в регулярных выражениях. Формат: К сообщению применяются последовательно все модификаторы. Модификаторы могут использовать в разделе REPLACEMENT специальные команды для подстановки значений из объекта-результата извлечения (например с целью перемещения значений из одного заголовка в другой). Для этого необходимо указать '{{some_key}}'. Варианты опций (перечисляются в произвольной последовательности в конкатенации):
Список модификаторов может быть пуст, тогда сообщение остается неизмененным, но действие правила применяется и может завершить дальнейший обход менее приоритетных правил. |
|
Поле: |
|
Поле: |
Если хотя бы у одного примененного правила выставлен режим, то по завершению будет автоматически пересчитано значение заголовка Content-Length. |
Поле: |
|
Поле: |
Произвольный заголовок |
Поле: |
Произвольный комментарий |
Поле: |
Позволяет расширять состав произвольными ключами и значениями |
Поле: |
Время создания объекта |
Поле: |
Время последней модификации объекта |
Режимы применения правил
Значение | Описание |
---|---|
|
Стандартный режим с использованием регулярных выражений. Алгоритм концептуально следующий:
|
|
Производительный режим применения специального внешнего erlang-модуля, загруженного с помощью патча или вручную. Если обнаруживается и сам модуль, и в нем функция Функция возвращает новое сообщение, если должно быть применено действие правила и изменение сообщения, либо false, если если правило игнорируется, либо drop, если принятый пакет должен быть отброшен без обработки. Спецификация вариантов callback-функций
-spec modify_message(Msg::binary()) -> {ok, NewMsg::binary()} | false | drop. -spec modify_message(Msg::binary(), Dir) -> {ok, NewMsg::binary()} | false | drop when Dir :: incoming|outgoing. -spec modify_message(Msg::binary(), Dir, Rule::map()) -> {ok, NewMsg::binary()} | false | drop. when Dir :: incoming|outgoing. Если callback-функция возвращает новое сообщение ( |
|
Тонкий режим применения специального служебного сценария, созданного в мастер-домене. Первым параметром передается сообщение, вторым параметром направление передачи сообщения: incoming | outgoing. (В РЕАЛИЗАЦИИ) |
Действия при применении правила модификации входящего или исходящего запроса
Значение | Описание |
---|---|
|
Применяет правило и продолжает обработку следующих менее приоритетных правил. |
|
Применяет правило и прекращает обработку следующих правил. |
|
Отбрасывает сообщение, прекращая его обработку, и завершает цикл обработки правил. Имеет смысл только для входящего направления и правил, не производящих модификацию. |