Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

Управление кодеками (codec)

Обработка медиа потоков медиапотоков осуществляется в двух режимах: проксирование и транскодирование. По умолчанию E-SBC ESBC работает в режиме проксирования. 

При создании медиа-профиля, медиапрофиля список кодеков, доступных для проксирования, добавляется автоматически.

...

Для очистки списка используется команда - no codec allow all. При использовании данной команды будут удалены кодеки, добавленные автоматически при создании профиля, и кодеки, добавленные пользователем.

Список кодеков, разрешенных для проксирования, можно изменять и , а также добавлять в него любые кодеки, командой. Для этого используется команда:

Блок кода
languagec#
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:

Блок кода
languagec#
media-profile MP_A
codec audio PCMA
exit


на плече B - PCMU:

Блок кода
languagec#
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.

Блок кода
languagec#
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' - весь текст:

Блок кода
languagec#
value-pattern '(some)-(value)'
# значения some и value заносятся в локальные переменные pcre 1 и 2 соответственно
replacement '\2-\1'
# значения переменных меняются местами

...

Примечание

При применении на транке/user-interface модификаторов обоих типов одновременно, используется следующий порядок их обработки , в зависимости от направления модификации:

  • IN - сначала применяется модификатор sip затем модификатор common;
  • OUT - сначала применяется модификатор common, затем sip.

...

Блок кода
languagec#
  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

Блок кода
languagec#
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.

Блок кода
languagec#
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 (схема та же):

Блок кода
languagec#
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.

Блок кода
languagec#
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.

...

  1. Активируйте 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. Нажмите кнопку «Войти». В окне браузера откроется страница "Информация об устройстве".:

Image Modified