...
при внутренних сбоях, до согласования сессии;
при отбое с встречной стороны, кроме 3хх кодов SIP.
Пример перебора правил:
В таблице маршрутизации два правила, первое направляет вызов в TRUNK_GROUP, второе направляет вызов в TRUNK_3, условия нигде не настроены. Приходит вызов и начинает маршрутизироваться по данной таблице маршрутизации. В результате вызов уходит на TRUNK_GROUP и оттуда в TRUNK_1, в случае если вызов через TRUNK_1 не установился (например, транк недоступен), то маршрутизация продолжает выполняться, вызов отправляется в TRUNK_2. Если попытка вызова в TRUNK_2 также завершилась неудачно, ESBC переходит к RULE_2 и отправляет вызов в TRUNK_3. Если и здесь попытка установить вызов также оказалась неуспешной, то первое плечо отбивается, и вызов завершается, т. к. больше правил в таблице маршрутизации нет. Если попытка установить вызов успешна, то вызов устанавливается.
...
Scroll Pagebreak
Пример работы условий:
ПЕРЕДЕЛАТЬ СХЕМУ
В таблице маршрутизации два правила, у обоих есть условия по CGPN, CDPN и SIP-MESSAGE. Например, приходит вызов, у которого номер А=23000, номер Б=24000, и кастомный заголовок "Trunk: For trunk_1". ESBC заходит в RULE_1 и анализирует условие CONDITION_1, условие истинно, далее происходит анализ условия из CONDITION_2, условие истинно, далее происходит анализ условия из CONDITION_3, условие также истинно. Значит правило RULE_1 подходит для маршрутизации, и вызов отправляется в TRUNK_1.
...
Приходит вызов, у которого номер А=23000, номер Б=24000 и кастомный заголовок "Trunk: For trunk_2". ESBC заходит в RULE_1 и анализирует условие CONDITION_1, условие истинно, далее происходит анализ условия из CONDITION_2, условие истинно, далее происходит анализ условия из CONDITION_3, условие ложно. Значит правило не подходит (правило подходит, только если все условия внутри правила истинны). Далее ESBC переходит к RULE_2, анализирует условие CONDITION_4, условие истинно, далее происходит анализ условия из CONDITION_5, условие истинно, далее происходит анализ условия из CONDITION_6, условие также истинно. Значит правило RULE_2 подходит для маршрутизации, и вызов отправляется в TRUNK_2.
...
| Блок кода | ||
|---|---|---|
| ||
vesbc# vesbc# configure vesbc(config)# esbc vesbc(config-esbc)# route-table ROUTE_TABLE #Добавление первого правила с условиями CONDITION_1, CONDITION_2, CONDITION_3 и действием отправить вызов в транк TRUNK_1: vesbc(config-esbc-route-table)# rule 0 vesbc(config-esbc-route-table-rule)# condition 0 cgpn ^23000$ vesbc(config-esbc-route-table-rule)# condition 1 cdpn ^24000$ vesbc(config-esbc-route-table-rule)# condition 2 sip-message '.*For trunk_1.*' vesbc(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_1 vesbc(config-esbc-route-table-rule)# exit #Добавление второго правила с условиями CONDITION_4, CONDITION_5, CONDITION_6 и действием отправить вызов в транк TRUNK_2: vesbc(config-esbc-route-table)# rule 1 vesbc(config-esbc-route-table-rule)# condition 0 cgpn ^23000$ vesbc(config-esbc-route-table-rule)# condition 1 cdpn ^24000$ vesbc(config-esbc-route-table-rule)# condition 2 sip-message '.*For trunk_2.*' vesbc(config-esbc-route-table-rule)# action direct-to-trunk TRUNK_2 |
...
| Блок кода | ||
|---|---|---|
| ||
value-pattern '(some)-(value)' # значенияЗначения some и value заносятся в локальные переменные pcre 1 и 2 соответственно replacement '\2-\1' # значенияЗначения переменных меняются местами |
...
| Примечание |
|---|
При применении на транке/абонентском интерфейсе модификаторов обоих типов одновременно, используется следующий порядок их обработки в зависимости от направления модификации:
|
Scroll Pagebreak
Общие модификаторы
Пример использования модификатора common.
...
| Блок кода | ||
|---|---|---|
| ||
route-table TO_UAS
rule 0
action direct-to-trunk UAS
exit
exit
mod-table common COMMON_MOD
mod 5 cgpn
value-pattern '2(.+)'
# осуществляетсяОсуществляется выбор номеров, начинающихся с 2. Остальная часть номера сохраняется в локальную переменную 1
replacement '8\1'
# выполняетсяВыполняется замена 2 на 8 и добавляется значение из переменной 1
exit
mod 10 cdpn
value-pattern '23002'
# осуществляетсяОсуществляется выбор номера 23002
replacement '22222'
# выполняетсяВыполняется замена номера 23002 на 22222
exit
exit
trunk sip UAC
remote addr 192.168.80.26
remote port 5070
sip transport UAC
route-table TO_UAS
mod-table common in COMMON_MOD
media resource 0 MEDIA
exit
trunk sip UAS
remote addr 192.168.80.26
remote port 5080
sip transport UAS
media resource 0 MEDIA
exit
exit |
Схема вызова:
Scroll Pagebreak
На транк UAC приходит INVITE:
...
| Примечание |
|---|
Модификаторы common, настроенные в качестве IN, могут влиять на результат маршрутизации при использовании в route-table условий (condition), т. к. правила route-table обрабатываются после применения модификации. Модификаторы. , настроенные в качестве OUT, не влияют на результат маршрутизации. |
...
| Предупреждение |
|---|
Для сообщений REGISTER модификаторы common не применяются. |
Scroll Pagebreak
Модификаторы SIP
Данный тип модификации позволяет изменять любые заголовки сообщений SIP.
...
В ESBC поддержано использование сисетмных системных переменных в модификаторах replace (поле replacement) и add (поле header value).
Список системных переменных, которые можно использовать при модификации:
LOCAL_DOMAIN - — локальный домен;
LOCAL_ADDR - — локальный IP адрес, сейчас то же самое, что LOCAL_HOST;
LOCAL_HOST - — локальный домен или IP адрес;
LOCAL_PORT - — локальный порт;
REMOTE_DOMAIN - — домен удалённой стороны;
REMOTE_ADDR - — IP адрес удалённой стороны;
REMOTE_HOST - — домен или IP адрес удалённой стороны;
REMOTE_PORT - — порт удалённой стороны;
IFACE_TYPE - — тип интерфейса (TRUNK или USER);
IFACE_ID - — числовой идентификатор интерфейса;
IFACE_NAME - — имя интерфейса;
VERSION - — версия ESBC (x.y.z.patch);
TIMESTAMP - — текущее время в секундах (заполняется на момент применения модификации).
...
| Блок кода | ||
|---|---|---|
| ||
${VAR_NAME} |
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, добавлялся заголовок Call-Info с информацией об имени транка, на который отправляется запрос, и версией ESBC.
...
| Блок кода | ||
|---|---|---|
| ||
vesbc# vesbc# configure vesbc(config)# esbc #Создать sipSIP-профиль NEW_SIP_PROFILE: vesbc(config-esbc)# sip profile NEW_SIP_PROFILE vesbc(config-esbc-sip-profile)# #Включить контроль доступности: vesbc(config-esbc-sip-profile)# keepalive enable vesbc(config-esbc-sip-profile)# #Настроить интервалы контроля: vesbc(config-esbc-sip-profile)# keepalive success-interval 120 vesbc(config-esbc-sip-profile)# keepalive failed-interval 30 vesbc(config-esbc-sip-profile)# vesbc(config-esbc-sip-profile)# exit vesbc(config-esbc)# #Привязать SIP-профиль к транку TRUNK_OUT: vesbc(config-esbc)# trunk sip NEW_TRUNK vesbc(config-esbc-trunk-sip)# sip profile NEW_SIP_PROFILE vesbc(config-esbc-trunk-sip)# #Применить и подтвердить изменения: vesbc(config-esbc-trunk-sip)# do commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. vesbc(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
...
По умолчанию ESBC работает в режиме проксирования медиатрафика без использования транскодирования. Список паттернов кодеков доступных для проксирования через ESBC задается командой:
| Блок кода |
|---|
codec allow {all | <CODEC_PATTERN> [<PT>]} |
<CODEC_PATTERN> – — название кодека/часть названия кодека,
<PT> – — payload type . (Не обязательный необязательный параметр). При указании будет проводиться дополнительная проверка патерна паттерна на полное совпадение кодека с указанным payload type.
Описание всех команд приведено в разделе Настройки медиапрофиля справочника команд CLI.
При созданиии медиа профиля создании медиапрофиля список паттернов для наиболее известных кодеков IANA, доступных для проксирования, добавляется автоматически и выглядит следующим образом:
...
Т. к. использование паттернов позволяет указывать не полное название кодека, а его чатьчасть, то запись вида "codec allow G72" означает, что кодеки G726-16, G726-24, G726-32, G726-40 будут доступны для проксирования.
...
Для абонентских интерфейсов, транков и транковых групп, к которым не привязан ни один медиа профильмедиапрофиль, используется медиа профиль медиапрофиль по умолчанию, который не отображается в конфигурации. В данном медиа профиле медиапрофиле применяются паттерны кодеков доступных для проксирования, указанные выше.
...
Управление списком кодеков и типом медиаданных (audio, video, image) SDP осуществляется путем добавления/удаления/изменения паттернов codec allow. Максимальное количесво количество паттернов в одном медиа профиле - медиапрофиле — 64.
| Примечание |
|---|
Для успешного согласования кодеков в режиме проксирования, необходимо что бы чтобы на входящем и исходящем напрвлениинаправлении, в медиапрофилях, привязанным к этим напрвлениямнаправлениям, содержались паттерны, позволяющие пропускать одни и теже те же кодеки. В случае когда согласование невозможно, на запросы INVITE ESBC будет отвечать сообщением 488. |
Примеры использования
...
медиапрофиля для управления кодеками и типами медиаданных в режиме проксирования
...
1. Запретить использование видео для транка Trunk2.
...
Настройка для SIP-абонентов, использующих WebRTCЯкорь sip_abonents_webrtc sip_abonents_webrtc
| sip_abonents_webrtc | |
| sip_abonents_webrtc |
Схема применения:
ПЕРЕДЕЛАТЬ ОБОЗНАЧЕНИЕ SIP-АБОНЕНТОВ
Описание:
SIP-абоненты (WEB, Desktop-клиенты) отправляют сообщения на IP-адрес 192.168.20.120 порт 5062 с помощью WebSocket Secure, ESBC отправляет по TCP данный трафик с IP-адреса 192.168.16.113 порт 5061 на адрес Softswitch (IP АТС/SIP-proxy и т. д) 192.168.16.65 порт 5060.
...






