...
Управление кодеками (codec)
Обработка медиа потоков медиапотоков осуществляется в двух режимах: проксирование и транскодирование. По умолчанию E-SBC ESBC работает в режиме проксирования.
При создании медиа-профиля, медиапрофиля список кодеков, доступных для проксирования, добавляется автоматически.
...
Для очистки списка используется команда - no codec allow all. При использовании данной команды будут удалены кодеки, добавленные автоматически при создании профиля, и кодеки, добавленные пользователем.
Список кодеков, разрешенных для проксирования, можно изменять и , а также добавлять в него любые кодеки, командой. Для этого используется команда:
| Блок кода | ||
|---|---|---|
| ||
codec allow <full or partial codec name> [payload type] |
...
<full or partial codec name> - — часть или полное название кодека (в соответствии с SDP rtpmap);
[payload type] - — номер payload type. Параметр опциональный.
Допускается указания указание части названия кодека, например: codec allow G72, в таком случае будет разрешено проксирование кодеков G726-16, G726-24, G726-32, G726-40.
...
Поддержка кодеков для транскодирования осуществляется командами:-
- codec audio
...
- codec video
...
- codec image (в текущей версии ПО не поддержено, данная команда аналогична команде codec allow T38 t38)
Порядок обработки SDP для выбора режима работы:
1. Offer SDP фильтруется согласно разрешённым кодекам на плече A.
2. Offer SDP фильтруется согласно разрешённым кодекам на плече B.
3. В конец Offer SDP добавляются недостающие кодеки, транскодинг которых включен в media-profile на плече B.
4. Answer SDP фильтруется согласно разрешённым кодекам на плече B.
5. В конец Answer SDP добавляются недостающие кодеки, транскодинг которых включен в media-profile на плече A.
В результате , транскодирование включается, если , самые приоритетные кодеки из Offer и Answer SDP не совпадают.
Иначе , при совпадении приоритетных кодеков , будет использоваться проксирование.
Пример.:
На плече A разрешён только кодек PCMA:
| Блок кода | ||
|---|---|---|
| ||
media-profile MP_A codec audio PCMA exit |
на плече B - — PCMU:
| Блок кода | ||
|---|---|---|
| ||
media-profile MP_B codec audio PCMU exit |
В данном случае , на плечах А и B будут согласованы кодеки PCMA и PCMU соответственно, и будет включено транскодирование.
...
то выбор режима работы (проксирование/транскодирование) будет осуществляться в зависимости от кодека, указаного в Answer SDP плеча B.
Если в ответе первым кодеком будет представлен PCMA, то будет выбран режим проксирования, если PCMU - — режем транскодирования.
| Scroll Pagebreak |
|---|
...
SRTP (Secure Real-time Transport Protocol) — это расширенная версия протокола RTP с набором защитных механизмов. Протокол был опубликован организацией IETF в стандарте RFC 3711. SRTP обеспечивает конфиденциальность за счет шифрования RTP-нагрузки. Для шифрования медиа потока, медиапотока SRTP стандартизирует использование только единственного шифра , — AES, который может использоваться в двух режимах:
...
И 3 режима использования SRTP:
- disable – — SRTP запрещён;
- optional – — SRTP не обязателен, но ключи будут подставлены в offer SDP второго плеча , без изменения профиля транспорта в медиа секции медиасекции SDP;
- mandatory – — SRTP обязателен, профиль транспорта в медиа секции медиасекции SDP будет изменён на соответствующий профиль SRTP.
...
Включение режима nat comedia-mode осуществляется в настройках user-interface.
| Блок кода | ||
|---|---|---|
| ||
vesbc#
vesbc# configure
vesbc(config)# esbc
vesbc(config-esbc)# user-interface sip USERS
vesbc(config-esbc-user-interface-sip)# nat comedia-mode
Select NAT comedia mode for user-interface:
off
on
flexible
vesbc(config-esbc-user-interface-sip)# nat comedia-mode on |
Возможна работа в двух режимах:
- flexible
...
- — проверяет источник во входящем RTP-потоке и транслирует исходящий поток на IP-адрес и UDP-порт, с которого принимается медиапоток, в случае прерывания входящего RTP-потока более чем на 1 секунду, исходящий поток продолжает транслироваться;
- on
...
- — проверяет источник во входящем RTP-потоке и транслирует исходящий поток на IP-адрес и UDP-порт, с которого принимается медиапоток, в случае прерывания входящего RTP-потока более чем на 1 секунду, исходящий поток перестает транслироваться;
Также данная настройка позволяет передавать сообщения протокола SIP симметрично (на порт, с которого был принят запрос) в случае, если клиент в инициирующем запросе не использовал параметр RPORT;.
Команда nat keep-alive-interval ипользуется используется для поддержки соединения за NAT для сигнального трафика . (Не не поддержана в текущей версии ПО).
Подмена атрибутов direction в SDP
При включении опции nat comedia-mode, все атрибуты direction в SDP, при отпавке отправке offer sdp заменяются на sendrecv.
При отправке sdp answer в сторону транка/user-interface с включенной опцией, все атрибуты direction заменяются на максимально возможные, вне зависимости от того, какие атрибуты были в полученном answer на другом плече (в ответ на sendrecv - — sendrecv, в ответ на sendonly - — recvonly, в ответ на recvonly - — sendonly).
Примеры:
1. Замена атрибутов direction в offer sdp
ЭТУ ТАБЛИЦУ НАДО СДЕЛАТЬ КРАСИВОЙ СХЕМОЙ
| Блок кода |
|---|
UAC ---------------trunk-------------------EESBC-SBC-------trunk/user interface with nat comedia-mode---------UAS --> INVITE (sendonly) --> INVITE (sendrecv) <-- 200OK (recvonly) <-- 200OK(sendrecv) --> INVITE (sendonly) --> INVITE (sendrecv) <-- 200OK (recvonly) <-- 200OK(recvonly) --> INVITE (recvonly) --> INVITE (sendrecv) <-- 200OK (sendonly) <-- 200OK(sendrecv) |
...
2. Замена атрибутов direction в answer sdp
ЭТУ ТАБЛИЦУ НАДО СДЕЛАТЬ КРАСИВОЙ СХЕМОЙ
| Блок кода |
|---|
UAC ------------trunk/user interface with nat comedia-mode-------------EESBC-SBC---------------------trunk--------------------UAS --> INVITE (sendrecv) --> INVITE (sendrecv) <-- 200OK (sendrecv) <-- 200OK(sendonly) --> INVITE (sendrecv) --> INVITE (sendrecv) <-- 200OK (sendrecv) <-- 200OK(recvonly) --> INVITE (sendrecv) --> INVITE (sendrecv) <-- 200OK (sendrecv) <-- 200OK(sendrecv) |
...
ESBC поддерживает два типа модификаторов - — common и sip.
Модификаторы common позволяют модифицировать CdPN и CgPN без привязки к протоколу сигнализации. В текущей версии ПО поддерживается только протокол SIP. Учитывая это, при использовании модификаторов в транках и user-interface sip, модификаторами common можно изменять user part SIP URI заголовков To и From.
...
Таблицы модификаций применяются в транках, транковых группах и user-interface. Их можно подключить, как out — тогда правила будут применяться при отправке сообщения . Илиили, как in — тогда правила применяются при получении сообщения. Таблица модификаций, используемая для транковой-группы, будет использоваться только в том случае, если в транке, входящем в эту транковую-группу группу, не настроена своя таблица.
...
Допускается использование следующей конструкции при составлении регулярных выражений PCRE для помещения значений в локальные переменные (от 0 до 9) с помощью цифр, экранированных обратной чертой ('\1-9'). '\0' - — весь текст:
| Блок кода | ||
|---|---|---|
| ||
value-pattern '(some)-(value)' # значения some и value заносятся в локальные переменные pcre 1 и 2 соответственно replacement '\2-\1' # значения переменных меняются местами |
...
| Примечание |
|---|
При применении на транке/user-interface модификаторов обоих типов одновременно, используется следующий порядок их обработки , в зависимости от направления модификации:
|
...
| Блок кода | ||
|---|---|---|
| ||
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 |
Схема вызова:
ЭТО НАДО СДЕЛАТЬ В ВИДЕ КРАСИВОЙ СХЕМЫ
UAC-------->E>ESBC-SBC--------->UAS→UAS
На транк UAC приходит INVITE:
...
В результате модификации mod 5 cgpn, выполнена модификация CgPN 24001 на 84001, в результате mod 10 cdpn - — модификация CdPN 23002 на 22222.
| Примечание |
|---|
При использовании модификатора CgPN помимо заголовка From изменяется user part SIP URI заголовка Contact. При использовании модификатора CdPN помимо заголовка To To изменяется user part SIP в Request-URI. |
| Примечание |
|---|
Модификаторы common, настроенные в качестве IN, могут влиять на результат маршрутизации , при использовании в route-table условий (condition), т. к. правила правила route-table обрабатываются после применения модификации. Модификаторы. настроенные в качестве OUT, не влияют на результат маршрутизации. |
| Предупреждение |
|---|
Для сообщений REGISTER common модификаторы не применяются. |
mod-table sip
Данный тип модификации позволяет изменять любые заголовки сообщений SIP.
| Примечание |
|---|
Процесс модификации заголовков отличается в зависимости от режима использования модификатора IN или OUT. |
Существуют ограничения на модификацию основных заголовков sip, к которым относятся: Call-ID, From, To, Via, CSeq, Contact, Max-Forwards, Route, Record-Route, Content-Type, Content-Lenght, Require, Supported.
После применения к сообщению модификатора IN и использования модификаций основных заголовков, дальнейшая обработка диалога sip будет осуществляться в соответствии с модифицированным сообщением, т. к. в ядро системы попадает модифицированное сообщение. В результате , в ответных сообщениях будут использоваться данные, которые могут отличаться от исходного сообщения. Модификация IN также влияет на дальнейшую маршрутизацию сообщения.
Применение к сообщению модификатора OUT и и использования модификаций основных заголовков, изменяет только значения заголовков непосредственно перед отправкой, но не влияет на полследующие последующие сообщения в диалоге, т. к. исходное сообщение формируется ядром системы до применения модификаторов OUT.
...
Логика обработки сообщения SIP при использовании IN-модификации.
Логика обработки сообщения SIP при использовании OUT-модификации.
Поддерживаемые модификации
...
- add — добавление заголовка.
- no-transit — удаление заголовка. Данная модификация применяется только при использовании в качестве out (таблицы in всегда вырезают все заголовки, полученные в сообщении из сети).
replace — замена заголовка.
transit — передача заголовка. Данная модификацияприменяется модификация применяется только при использовании в качестве in (таблицы out всегда передают все заголовки, полученные с другого плеча).
- copy - — позволяет скопировать значение или часть значения заголовка в переменную для использования этого значения в модификаторах add или transit в рамках одной таблицы модификаций (на одном плече вызова).
Работа с переменными модификатора copy
Значения переменных, полученных в модификаторе copy, можно использовать в модификаторах replace (поле replacement) и add (поле header value) в рамках одной таблицы модификации и только для текущего сообщения.
Например, при использовании модификатора copy в таблице на IN, для каждого входящего сообщения будет использоваться отдельный экземпляр таблицы, оответственносоответственно, в каждом случае значение переменных будет разным.
Подстроки \u01 - – \u99 будут заменены на значение соответствующей переменной. Если переменная не задана - — подстрока будет удалена. Длина переменной - — до 128 символов.
Порядок применения модификаций в таблице
...
В результате если какой-либо заголовок был добавлен модификацией add, а затем этот же заголовок был указан в правиле no-transit, то в исходящем сообщении этот заголовок не будет передан.
Пример:
Таблица модификации SIP_MOD ипользуется используется в качестве OUT
| Блок кода | ||
|---|---|---|
| ||
mod-table sip SIP_MOD
mod 1 add
sip method pattern '.+'
sip response-pattern '.+'
header name Test_header
header value Test_value
exit
mod 2 no-transit
sip header-pattern 'Test_header'
sip method pattern '.+'
sip response-pattern '.+'
value-pattern 'Test_value'
exit |
...
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, был добавлен заголовок Test_header со значением example string.
| Блок кода | ||
|---|---|---|
| ||
vesr#
vesr# configure
vesr(config)# esbc
#Создание таблицы модификаторов MODTABLE_IN:
vesr(config-esbc)# mod-table sip MODTABLE_IN
vesr(esbc-mod-table)#
#Добавление в таблицу модификаторов правила на добавление заголовка:
vesr(esbc-mod-table)# mod 0 add
vesr(esbc-mod-table-modification)#
#Выбор запроса, в котором будет добавлен заголовок (в данном случае INVITE):
vesr(esbc-mod-table-modification)# sip method type Invite
#Указать название заголовка, который необходимо вставить (в данном случае Test_header):
vesr(esbc-mod-table-modification)# header name Test_header
#Указать содержимое заголовка, которое необходимо вставить (в данном случае example string):
vesr(esbc-mod-table-modification)# header value "example string"
vesr(esbc-mod-table-modification)# exit
vesr(esbc-mod-table)# exit
#Привязать таблицу модификаторов к входящему транку TRUNK_IN:
vesr(config-esbc)# trunk sip TRUNK_IN
vesr(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN
#Применить и подтвердить изменения:
vesr(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.
vesr(config-esbc-trunk-sip)# do confirm
Configuration has been confirmed. Commit timer canceled.
|
...
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Test_header. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Test_header, если в его содержимом есть "example string".
...
В случае, если в заголовке Test_header будет содержимое, отличное от "example string", заголовок будет отправлен в TRUNK_OUT.
...
| Scroll Pagebreak |
|---|
Пример использования локальных переменных pcre в в модификации replace (схема та же):
| Блок кода | ||
|---|---|---|
| ||
vesr# vesr# configure vesr(config)# esbc #Создание таблицы модификаторов MODTABLE_IN: vesr(config-esbc)# mod-table sip MODTABLE_IN vesr(esbc-mod-table)# #Добавление в таблицу модификаторов правила на замену заголовка: vesr(esbc-mod-table)# mod 1 replace #Выбор запроса, в котором будут заменяться заголовки: vesr(esbc-mod-table-modification)# sip method-type Invite #Указать название заголовка, содержимое которого необходимо заменить: vesr(esbc-mod-table-modification)# sip header-pattern Date #Указать место в содержимом заголовка, которое необходимо заменить (шаблон -— дата в формате "год-месяц-число"): vesr(esbc-mod-table-modification)# value-pattern "(\\d{4})-(\\d{2})-(\\d{2})" #Добавить правило для подмены содержимого заголовка (меняем формат даты на "месяц/число/год"): vesr(esbc-mod-table-modification)# replacement "\\2/\\3/\\1" vesr(esbc-mod-table-modification)# exit vesr(esbc-mod-table)# exit #Привязать таблицу модификаторов к входящему транку TRUNK_IN: vesr(config-esbc)# trunk sip TRUNK_IN vesr(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN #Применить и подтвердить изменения: vesr(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. vesr(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
...
| Блок кода |
|---|
INVITE sip:135@10.25.72.151:5060 SIP/2.0
Via: SIP/2.0/UDP 10.25.72.35:5063;rport;branch=z9hG4bK-1104631-1-0
From: <sip:134@10.25.72.151:5060;user=phone>;tag=1
To: <sip:135@10.25.72.151:5060;user=phone>
Call-ID: 1-1104631@10.25.72.35
CSeq: 1 INVITE
Max-Forwards: 70
Supported: replaces, timer
Contact: <sip:134@10.25.72.35:5063>
#Заголовок, который необходимо протранзитить и изменить:
Date: 2024-09-10
Content-Type: application/sdp
Content-Length: 153 |
...
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Diversion (предварительно следует настроить таблицу модификации на IN транка TRUNK_IN для транзита заголовка Dicersion на второе плечо). Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Diversion, а его значение из user part было добавлено в display name заголовка From.
| Блок кода | ||
|---|---|---|
| ||
vesr# vesr# configure vesr(config)# esbc #Создание таблицы модификаторов MODTABLE_OUT: vesr(config-esbc)# mod-table sip MODTABLE_OUT vesr(esbc-mod-table)# #Добавление в таблицу модификаторов правила copy для копирования значения user part в переменную u01: vesr(esbc-mod-table)# mod 0 copy vesr(esbc-mod-table-modification)# #Выбор запроса, в котором будет использоваться модификатор cpoy (в данном случае INVITE): vesr(esbc-mod-table-modification)# sip method type Invite #Указать название заголовка, из которого необходимо копировать значение (в данном случае Diversion): vesr(esbc-mod-table-modification)# sip header-pattern Diversion #Указать содержимое заголовка, при совпадении с которым будет выполнено копирование в пременнуюпеременную. В переменную будет скопирована та часть отбора, которая указана в скобках: vesr(esbc-mod-table-modification)# value-pattern '<sip:(.+)@' #Указать переменную, в которую будет скопировано значение, указанное в скобках, в примере - (.+): vesr(esbc-mod-table-modification)# variable-str 'u01' vesr(esbc-mod-table-modification)# exit #Добавление в таблицу модификаторов правила replace для замены заголовка From: vesr(esbc-mod-table)# mod 1 replace #Указать название заголовка, в котором будет осуществляться замена: vesr(esbc-mod-table-modification)# sip header-pattern 'From' #Выбор запроса, в котором будет использоваться модификатор replace (в данном случае INVITE): vesr(esbc-mod-table-modification)# sip method type Invite #Указать часть содержимого заголовка, которую необходимо заменить: vesr(esbc-mod-table-modification)# value-pattern '.+ <sip:' # Указать переменную u01, которая содержит значение, полученное в модификации copy: vesr(esbc-mod-table-modification)# replacement '\u01 <sip:$' vesr(esbc-mod-table-modification)# exit #Добавление в таблицу модификаторов правила no-transit для удаления заголовка Diversion: vesr(esbc-mod-table)# mod 2 no-transit vesr(esbc-mod-table-modification)# sip header-pattern 'Diversion' vesr(esbc-mod-table-modification)# sip method type Invite vesr(esbc-mod-table-modification)# exit vesr(esbc-mod-table)# exit #Привязать таблицу модификаторов к исходящему транку TRUNK_OUT: vesr(config-esbc)# trunk sip TRUNK_OUT vesr(config-esbc-trunk-sip)# mod-table sip out MODTABLE_OUT #Применить и подтвердить изменения: vesr(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. vesr(config-esbc-trunk-sip)# do confirm Configuration has been confirmed. Commit timer canceled. |
...
- Активируйте web-интерфейс по протоколу HTTP или HTTPS.:
| Блок кода |
|---|
vesr# config vesr(config)# ip http server vesr(config)# ip https server vesr(config)# exit vesr# commit vesr# confirm |
...
4. Введите в адресной строке браузера IP-адрес устройства. Для перехода в web-интерфейс можно использовать URL: http://<ip-address_esbc> или https://<ip-address_esbc>. При успешном обнаружении контроллера в окне браузера отобразится страница авторизации.:
5. Введите имя пользователя и пароль в соответствующие поля.
...
6. Нажмите кнопку «Войти». В окне браузера откроется страница "Информация об устройстве".:




