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

Ключ

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

...

Настройка ESBC для SIP-абонентов

Схема применения:

Image Modified

Описание:

Абонентский шлюз/SIP-абоненты отправляют сообщение на IP-адрес 192.168.20.120 порт 5062, ESBC пересылает данный трафик с IP-адреса 192.168.16.113 порт 5061 на адрес Softswitch 192.168.16.65 порт 5060.

...

В приведенной схеме описаны базовые настройки, описание всех команд приведено в разделе Настройка ESBC.

Настройка ESBC для SIP-транков

Схема применения:

Image Modified

Описание:

Транковый шлюз отправляет сообщения с IP-адреса 192.168.20.99 порта 5060 на IP-адрес 192.168.20.120 порт 5067, ESBC пересылает данный трафик с IP-адреса 192.168.16.113 порта 5065 на адрес Softswitch 192.168.16.65 порт 5060. И в обратную сторону SSW отправляет сообщения с IP-адреса 192.168.16.65 порта 5060 на IP-адрес 192.168.16.113 порт 5065, ESBC пересылает данный трафик с IP-адреса 192.168.20.120 порта 5067 на адрес транкового шлюза 192.168.20.99 порт 5060.

...

Блок кода
vesr# configure
vesr(config)# interface gigabitethernet 1/0/1
vesr(config-if-gi)# description "SSW"
vesr(config-if-gi)# ip address 192.168.16.113/24

Scroll Pagebreak
3. Настроить IP-адрес на интерфейсе в сторону транкового шлюза:

...

Блок кода
vesr#
vesr# configure
vesr(config)# esbc
vesr(config-esbc)# media-resource MEDIA_TRUNK_GATEWAY
vesr(config-esbc-media-resource)# ip-address 192.168.20.120

Scroll Pagebreak
8. Создать SIP-trunk в сторону SSW:

Блок кода
vesr#
vesr# configure
vesr(config)# esbc
vesr(config-esbc)# trunk sip TRUNK_SSW
vesr(config-esbc-trunk-sip)# sip-transport TRANSPORT_SSW
vesr(config-esbc-trunk-sip)# remote addr 192.168.16.65
vesr(config-esbc-trunk-sip)# remote port 5060
vesr(config-esbc-trunk-sip)# media resource 0 MEDIA_SSW

Scroll Pagebreak
9. Создать SIP-trunk в сторону транкового шлюза:

...

Блок кода
vesr# 
vesr# configure 
vesr(config)# esbc 
vesr(config-esbc)# trunk sip TRUNK_SSW
vesr(config-esbc-trunk-sip)# route-table TO_TRUNK_GATEWAY
vesr(config-esbc-trunk-sip)# exit
vesr(config-esbc)# trunk sip TRUNK_GATEWAY
vesr(config-esbc-trunk-sip)# route-table TO_SSW

Scroll Pagebreak
13. Применить конфигурацию и подтвердить изменения: 

Блок кода
vesr# commit
vesr# confirm

...

В приведенной схеме описаны базовые настройки, описание всех команд приведено в разделе Настройка ESBC.

Scroll Pagebreak
Создание/конфигурирование медиаресурсов (media resources)

...

Предупреждение

При использовании одинакового IP-адреса для разных медиаресурсов не допускается пересечение диапазонов портов между этими ресурсами. 

Scroll Pagebreak
Создание/конфигурирование SIP-транспорта (sip-transport) 

SIP-транспорт представляет точку входа/выхода сигнализации, т. е. это IP-адрес и порт, с которого ESBC будет отправлять и на который будет принимать сигнальные сообщения.

...

Блок кода
vesr# 
vesr# configure 
vesr(config)# esbc 

Scroll Pagebreak
Создать и настроить соответствующим образом SIP-транспорт:

...

  • tcp-only — использовать только TCP-протокол;
  • tcp-prefer — прием по UDP и TCP. Отправка по TCP. В случае, если не удалось установить соединение по TCP, отправка производится по UDP;
  • tls — использовать tls;
  • udp-only — использовать только UDP-протокол;
  • udp-prefer — прием по UDP и TCP. Отправка пакетов более 1300 байт по TCP, менее 1300 байт — по UDP.

Scroll Pagebreak
Создание/конфигурирование транковых групп (trunk-group) 

Транк-группа представляет собой набор транков различного типа (в текущей версии поддерживается только SIP-транк) и алгоритм балансировки нагрузки между ними.

...

Все перечисленные в предыдущем пункте настройки являются общими для всех транков, включенных в состав транковой группы. Это значит, что при отсутствии у транка, входящего в состав транковой группы, какой-либо из перечисленных настроек, будет использоваться настройка из транковой группы. Такой подход позволяет создавать множество транков с минимальным набором настроек, и, объединяя их в транковую группу, производить донастройку через нее. При необходимости изменить какие-либо параметры отдельно взятых транков из группы можно провести индивидуальную настройку, используя настройки на транках.

Scroll Pagebreak
Пример работы общих настроек:

...

Блок кода
vesr#
vesr# configure
vesr(config)# esbc
vesr(config-esbc)# sip-transport TRANSPORT_SSW
vesr(config-esbc-sip-transport)# ip-address 192.168.16.113
vesr(config-esbc-sip-transport)# port 5065

Scroll Pagebreak
2. Создать SIP-транспорт в сторону TRUNK_IN: 

Блок кода
vesr#
vesr# configure
vesr(config)# esbc
vesr(config-esbc)# sip-transport TRANSPORT_TRUNK_IN
vesr(config-esbc-sip-transport)# ip-address 192.168.20.120
vesr(config-esbc-sip-transport)# port 5067

...

Блок кода
vesr#
vesr# configure
vesr(config)# esbc
vesr(config-esbc)# media-resource MEDIA_TG_SSW
vesr(config-esbc-media-resource)# ip-address 192.168.16.113

Scroll Pagebreak
5. Создать SIP-trunk в сторону TRUNK_IN:

...

Блок кода
vesr#
vesr# configure
vesr(config)# esbc
vesr(config-esbc)# trunk sip TRUNK_SSW1
vesr(config-esbc-trunk-sip)# sip-transport TRANSPORT_SSW
vesr(config-esbc-trunk-sip)# remote addr 192.168.16.115
vesr(config-esbc-trunk-sip)# remote port 5060
vesr(config-esbc-trunk-sip)# exit
vesr(config-esbc)# trunk sip TRUNK_SSW2
vesr(config-esbc-trunk-sip)# sip-transport TRANSPORT_SSW
vesr(config-esbc-trunk-sip)# remote addr 192.168.16.116
vesr(config-esbc-trunk-sip)# remote port 5060

Scroll Pagebreak
7. Создать транковую группу TG_SSW и добавить туда транки TRUNK_SSW1 и TRUNK_SSW2:

...

Блок кода
vesr# 
vesr# configure 
vesr(config)# esbc 
vesr(config-esbc)# route-table TO_TG_SSW
vesr(config-esbc-route-table)# rule 0
vesr(config-esbc-route-table-rule)# action direct-to-trunk-group TG_SSW

Scroll Pagebreak
9. Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с TG_SSW, будут маршрутизироваться в транк TRUNK_IN:

...

Блок кода
vesr# commit
vesr# confirm

Scroll Pagebreak
На шаге 7 при создании транков, в конфигурацию транков не были добавлены медиаресурсы и таблица маршрутизации. Но эти настройки есть в транковой группе TG_SSW, куда включены оба транка. Поэтому при поступлении вызовов с этих транков они будут маршрутизироваться по таблице маршрутизации, которая привязана к TG_SSW, медиаресурсы для согласования и передачи RTP также будут браться из транковой группы TG_SSW.

В случае если необходимо, чтобы один из транков, входящих в состав транковой группы, при поступлении на него входящих вызовов маршрутизировался по другой таблице маршрутизации или использовал другие медиаресурсы, нужно добавить соответствующие настройки в данный транк. Настройки транковой группы при этом не меняются, т. к. настройки транка в приоритете.   

Логика работы транковой группы для распределения вызовов на транки, входящие в ее состав

...

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

Пример:

Image Modified

На ESBC настроена транковая группа TRUNK_GROUP, в состав которой входят 3 транка (TRUNK_1, TRUNK_2 и TRUNK_3). Приходит вызов и по правилу маршрутизации уходит на эту транковую группу. В результате ESBC совершает попытку вызова в первый транк в составе транковой группы (TRUNK_1), если вызов неуспешный (транк недоступен или ответ совпал с маской из списка причин отбоя), то происходит попытка позвонить во второй транк (TRUNK_2). Если попытка вызова также неуспешна, то будет попытка позвонить в последний транк (TRUNK_3). Если попытка также неуспешна, то вызов на первом плече отбивается. Если на каком-то из транков пришел ответ 200ОК, то вызов устанавливается. 

...

Управление кодеками (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.

Предупреждение

Для кодеков со статическим payload type рекомендуется указывать номер payload type, иначе, если в SDP не будет указан атрибут rtpmap, вызов будет отбиваться кодом 488.

Scroll Pagebreak
Транскодирование

Поддержка кодеков для транскодирования осуществляется командами: -

  • 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.

...

Блок кода
languagec#
vesr# 
vesr# configure 
vesr(config)# esbc 

#Создание медиапрофиля NEW_MEDIA_PROFILE:
vesr(config-esbc)# media-profile NEW_MEDIA_PROFILE 
vesr(config-esbc-media-profile)# 

#Настройка SRTP (включили обязательный режим использования, метод обмена ключами  SDES):
vesr(config-esbc-media-profile)# srtp keying 
  dtls-srtp  Enable DTLS-SRTP keying method
  sdes       Enable SDES keying method

vesr(config-esbc-media-profile)# srtp keying sdes 
vesr(config-esbc-media-profile)# srtp mode 
  disable    SRTP is disabled
  mandatory  SRTP is mandatory
  optional   SRTP is optional

vesr(config-esbc-media-profile)# srtp mode mandatory 
vesr(config-esbc-media-profile)# 

 
vesr(config-esbc-media-profile)# exit
vesr(config-esbc)#

#Привязать медиапрофиль к транку TRUNK_OUT:
vesr(config-esbc)# trunk sip TRUNK_OUT
vesr(config-esbc-trunk-sip)# media profile NEW_MEDIA_PROFILE 
vesr(config-esbc-trunk-sip)# 

#Применить и подтвердить изменения:
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_GROUP, второе направляет вызов в TRUNK_3.

...

Включение режима nat comedia-mode осуществляется в настройках транка:

Блок кода
languagec#
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# trunk sip 
vesbc(config-esbc-trunk-sip)# nat comedia-mode 
    Select NAT comedia mode for trunk:
        off
        on
        flexible

vesbc(config-esbc-trunk-sip)# nat comedia-mode on

Возможна работа в двух режимах:

  • flexible

...

  • проверяет источник во входящем RTP-потоке и транслирует исходящий поток на IP-адрес и UDP-порт, с которого принимается медиапоток, в случае прерывания входящего RTP-потока более чем на 1 секунду, исходящий поток продолжает транслироваться;
  • on

...

  • проверяет источник во входящем RTP-потоке и транслирует исходящий поток на IP-адрес и UDP-порт, с которого принимается медиапоток, в случае прерывания входящего RTP-потока более чем на 1 секунду, исходящий поток перестает транслироваться

...

  • .

Настройка и принцип работы nat comedia-mode для абонентов (user-interface)

Включение режима 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, mode все атрибуты direction в SDP , при отпавке отправке offer sdp заменяются на sendrecv.
При отправке sdp answer в сторону транка/user-interface с включенной опцией , все атрибуты direction заменяются на максимально возможные, вне зависимости от того, какие атрибуты были в полученном answer на другом плече (в ответ на sendrecv - sendrecv, в ответ на sendonly - recvonly, в ответ на recvonly - sendonly).

Примеры:

1. Замена атрибутов direction в offer sdp

ЭТУ ТАБЛИЦУ НАДО СДЕЛАТЬ КРАСИВОЙ СХЕМОЙ

Блок кода
UAC ---------------trunk-------------------E-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-------------E-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)

Создание/конфигурирование модификаторов (modification table)

Таблица модификаций содержит список модификаций, которые применяются к входящим или исходящим SIP-сообщениям. Таблицы модификаций используются в транках и транк-группах. Их можно подключить, как out — тогда правила будут применяться при отправке сообщения. Или, как in — тогда правила применяются при получении сообщения.
Таблица из транк-групп применяется только в том случае, если в транке нет своей таблицы. В модификациях можно использовать регулярные выражения PCRE

При сравнении имён заголовков требуется точное совпадение строк, в то время как при поиске в теле заголовка — достаточно совпадения подстроки. По умолчанию из входящего сообщения
вырезаются все заголовки. Модификации не применяются к тем сообщениям, которые создаются самим SBC (100 trying, ack в ответ на 200 OK, 200 OK в ответ на BYE).

Неподдерживаемые заголовки

Нельзя модифицировать следующие заголовки:

  • Call-ID

  • Contact

  • Content-Length

  • Content-Type

  • Cseq

  • From

  • To

  • Via

  • Accept

  • Allow

  • Expires

  • Min-Expires

  • Proxy-Authenticate

  • Proxy-Authorization

  • Require

  • Supported

  • WWW-Authenticate

  • Max-forwards

  • Min-SE

  • Session-Expires

Поддерживаемые модификации

В текущей версии поддерживаются следующие модификации:

...

replace — замена заголовка.

Предупреждение

Данное правило не подразумевает передачу заголовка — если правило используется в in таблице, необходимо добавить передачу соответствующего заголовка с помощью правила transit. 

...

transit — передача заголовка. Данная команда используется только в in таблицах (таблицы out всегда передают все заголовки, полученные с другого плеча).

:

Image Added

2. Замена атрибутов direction в answer sdp:

Image Added

Создание/конфигурирование модификаторов (mod-table)

ESBC поддерживает два типа модификаторов — common и sip.

Модификаторы common позволяют модифицировать CdPN и CgPN без привязки к протоколу сигнализации. В текущей версии ПО поддерживается только протокол SIP. Учитывая это, при использовании модификаторов в транках и user-interface sip, модификаторами common можно изменять user part SIP URI заголовков To и From. 

Модификаторы sip позволяют модифицировать любые заголовки сообщений SIP.

Таблицы модификаций применяются в транках, транковых группах и user-interface. Их можно подключить, как out — тогда правила будут применяться при отправке сообщения или, и как in — тогда правила применяются при получении сообщения. Таблица модификаций, используемая для транковой группы, будет использоваться только в том случае, если в транке, входящем в эту транковую группу, не настроена своя таблица.

В таблицах модификации для отбора значений (header pattern, header value, response-pattern, value-pattern, value, replacement и др.) используются регулярные выражения PCRE

Допускается использование следующей конструкции при составлении регулярных выражений PCRE для помещения значений в локальные переменные (от 0 до 9) с помощью цифр, экранированных обратной чертой ('\1-9'). '\0' — весь текст:

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

Результат замены: value-some

Данные переменные используются в рамках одной модификации. Для использования переменных в разных модификациях одной таблицы модификаций используется модификатор типа copy.

Примечание

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

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

Scroll Pagebreak
mod-table common

Пример использования модификатора common.

На ESBC настроена следующая конфигурация:

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

Схема вызова:

Image Added

Scroll Pagebreak

На транк UAC приходит INVITE:

Блок кода
languagec#
INVITE sip:24001@192.168.80.129:5080;line=76196f92c8f42f97c3b78125dd1b842c SIP/2.0
Via: SIP/2.0/UDP 192.168.80.26:5070;rport;branch=z9hG4bK-294378-1-1
From: <sip:24001@192.168.80.26:5070>;tag=1
To: <sip:23002@192.168.80.129:5070>
Call-ID: 1-294378@192.168.80.26
Cseq: 1 INVITE
Contact: <sip:24001@192.168.80.26:5070>
Max-Forwards: 70
Allow: INVITE, ACK, BYE, CANCEL, UPDATE, SUBSCRIBE
Content-Type: application/sdp
Content-Length:   174

[SDP]...

В результате применения модификатора COMMON_MOD в транке UAC, из транка UAS будет отправлен INVITE:

Блок кода
languagec#
INVITE sip:22222@192.168.80.26:5080 SIP/2.0
Via: SIP/2.0/UDP 192.168.80.129:5080;rport;branch=z9hG4bKPjWDx0A5VQhCqmg7Sf-wS7Huya0dESxrro
Max-Forwards: 70
From: <sip:84001@192.168.80.129>;tag=epoMSc5qF1.Pfc5pcypn80ONBKHCaO-x
To: <sip:22222@192.168.80.26>
Contact: <sip:84001@192.168.80.129:5080>
Call-ID: 326c0035a257a9f76185383b49df705f
CSeq: 9446 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: 100rel, replaces
Content-Type: application/sdp
Content-Length:   177

[SDP]...

В результате модификации mod 5 cgpn выполнена модификация CgPN 24001 на 84001, в результате mod 10 cdpn — модификация CdPN 23002 на 22222.

Примечание

При использовании модификатора CgPN помимо заголовка From изменяется user part SIP URI заголовка Contact. При использовании модификатора CdPN помимо заголовка To изменяется user part SIP в Request-URI.


Примечание

Модификаторы common, настроенные в качестве IN, могут влиять на результат маршрутизации при использовании в route-table условий (condition), т. к. правила route-table обрабатываются после применения модификации. Модификаторы. настроенные в качестве OUT, не влияют на результат маршрутизации.


Предупреждение

Для сообщений REGISTER модификаторы common не применяются.

Scroll Pagebreak
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 может привести к нарушению обработки сообщений.

Scroll Pagebreak
Логика обработки сообщения SIP при использовании IN-модификации:

Image Added

Image Added

Scroll Pagebreak

Логика обработки сообщения SIP при использовании OUT-модификации:

Image Added

Image Added

Поддерживаемые модификации

Поддерживаются следующие типы модификации:

  • 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

Заголовок Test_header не будет передан.

Пример использования модификатора добавления заголовка (add)

Схема:

Image Added

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из 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 приходит следующий INVIITE:

Блок кода
INVITE sip:24000@192.168.114.130:5461 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.129:5461;branch=z9hG4bK-372660-1-5
From: "Simple UAC send bye" <sip:24001@192.168.114.130;cpc=priority>;tag=1372660
To: "24000" <sip:24000@192.168.114.130>
Call-ID: 1-372660@192.168.114.129
CSeq: 1 INVITE
Contact: <sip:24001@192.168.114.129:5461>
Max-Forwards: 70
Content-Type: application/sdp
Content-Length: 149

v=0
o=tester 123456 654321 IN IP4 192.168.114.129
s=A conversation
c=IN IP4 192.168.114.129
t=0 0
m=audio 8338 RTP/AVP 8
a=rtpmap:8 PCMA/8000

Scroll Pagebreak
На TRUNK_OUT отправляется уже модифицированный INVITE с добавленным заголовком: 

Блок кода
languagec#
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPj-fvzSQlwN2zoMaGUR5JCLMkjmkBV3Vz1
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=l2jkRSMeumV03IdhjPntOt7l0XBKy-Ln
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: P-W.2oee.2vJw0JoaFbNkRDvnxY40FoP
CSeq: 30738 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90
#Добавленный через таблицу модификаторов заголовок:
Test_header: example string 
Content-Type: application/sdp
Content-Length: 157

v=0
o=tester 3927594021 3927594021 IN IP4 192.168.114.130
s=A conversation
c=IN IP4 192.168.114.130
t=0 0
m=audio 8062 RTP/AVP 8
a=rtpmap:8 PCMA/8000


Scroll Pagebreak

Пример использования модификатора удаления заголовка (no-transit)

Схема: 

Image Added

Порядок применения модификаций

В первую очередь применяются модификации транзита — incoming и outcoming. Затем применяются модификации замены в том порядке, в котором они заданы в таблице. В конце добавляются новые заголовки.

Пример использования модификатора добавления заголовка (add)

Схема:

Image Removed

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN уходит в , уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Test_header. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, был добавлен вырезался заголовок Test_header со значением , если в его содержимом есть "example string".

Блок кода
languagec#
vesr# 
vesr# configure 
vesr(config)# esbc 

#Создание таблицы модификаторов MODTABLE_INOUT:
vesr(config-esbc)# mod-table sip MODTABLE_INOUT
vesr(esbc-mod-table)# 

#Добавление в таблицу модификаторов правила на добавлениеудаление заголовка:
vesr(esbc-mod-table)# mod 0 addno-transit
vesr(esbc-mod-table-modification)# 

#Выбор запроса, в котором будет добавленудален заголовок (в данном случае INVITE):
vesr(esbc-mod-table-modification)# sip- method type Invite 

#Указать название заголовка, который необходимо вставитьудалить (в данном случае Test_header):
vesr(esbc-mod-table-modification)# sip header-pattern name Test_header

#Указать содержимое заголовка, которое необходимо вставитьпри совпадении с которым заголовок будет удален (в данном случае example string):
vesr(esbc-mod-table-modification)# header value-pattern "example string"

vesr(esbc-mod-table-modification)# exit
vesr(esbc-mod-table)# exit

#Привязать таблицу модификаторов к входящемуисходящему транку TRUNK_INOUT:
vesr(config-esbc)# trunk sip TRUNK_INOUT 
vesr(config-esbc-trunk-sip)# mod-table sip inout MODTABLE_INOUT 

#Применить и подтвердить изменения:
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.

Scroll Pagebreak
До После внесения изменений в конфигурацию с в TRUNK_IN приходит OUT отправлялся следующий INVIITE:

Блок кода
languagec#
INVITE sip:24000@192.168.114.130129:54615460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.129130:54615460;rport;branch=z9hG4bK-372660-1-5z9hG4bKPjjju.7u4O03Aty93vQq0Q1huigSIqGVIr
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130130>;cpc=priority>;tag=1372660
To: "24000" <sip:24000@192tag=CW.53L5FPJAUBsiRspMYqtjTtOTzZxHg
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130>130:5460;transport=udp>
Call-ID: 1-372660@192.168.114.129V4OOROjNahUbinXtA648s9eI2kjE5cCI
CSeq: 118905 INVITE
Contact: <sip:24001@192.168.114.129:5461>
Max-Forwards: 70Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90
#Заголовок, который должен быть удален:
Test_header: example string
Content-Type: application/sdp
Content-Length: 149  157

v=0
o=tester 1234563927595234 6543213927595234 IN IP4 192.168.114.129130
s=A conversation
c=IN IP4 192.168.114.129130
t=0 0
m=audio 83388066 RTP/AVP 8
a=rtpmap:8 PCMA/8000

...



После внесения изменений в конфигурацию в TRUNK_OUT отправляется

...

следующий INVITE (заголовок Test_header отсутствует):

Блок кода
languagec#
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPjz9hG4bKPjz8Y5BfoTrBQlqecLCu34TIyYn-fvzSQlwN2zoMaGUR5JCLMkjmkBV3Vz16rX5dH
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=l2jkRSMeumV03IdhjPntOt7l0XBKy-LnqTwcY3ZHvA6SHvuRsoo7w40r9yXzjEEp
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: P-W.2oee.2vJw0JoaFbNkRDvnxY40FoPyHvNLSIvp0DQYSRFPRpfgVUv9U0uKEHT
CSeq: 3073810147 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90
#Добавленный через таблицу модификаторов заголовок:
Test_header: example string 
Content-Type: application/sdp
Content-Length: 157

v=0
o=tester 3927594021 3927594021 IN IP4 192.168.114.130
s=A conversation
c=IN IP4 192.168.114.130
t=0 0
m=audio 8062 RTP/AVP 8
a=rtpmap:8 PCMA/8000

Scroll Pagebreak

Пример использования модификатора удаления заголовка (no-transit)

Схема: 

Image RemovedВ конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Test_header. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Test_header, если в его содержимом есть "example string".


Content-Type: application/sdp
Content-Length:   157

v=0
o=tester 3927597375 3927597375 IN IP4 192.168.114.130
s=A conversation
c=IN IP4 192.168.114.130
t=0 0
m=audio 8070 RTP/AVP 8
a=rtpmap:8 PCMA/8000

Scroll Pagebreak
В случае если в заголовке Test_header будет содержимое, отличное от "example string", заголовок будет отправлен в TRUNK_OUT:

Блок кода
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPj8e1WEAvAy16Bk8Vrj-VZiFK-bNOjnjY9
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=R83mrTm4KQsFL1Bk87hTOB8e182yCSJ.
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: eQueXFpyDZESB.hXK.uCGn7XL7TBUdmQ
CSeq: 8831 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90
#Заголовок Test_header с содержимым, отличным от "example string", не удаляется:
Test_header: new string
Content-Type: application/sdp
Content-Length:   157

v=0
o=tester 3927597832 3927597832 IN IP4 192.168.114.130
s=A conversation
c=IN IP4 192.168.114.130
t=0 0
m=audio 8074 RTP/AVP 8
a=rtpmap:8 PCMA/8000

Пример использования модификатора транзита и замены заголовка (replace)

Схема:

Image Added

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Из TRUNK_IN приходит INVITE с заголовком Test_header: 123. Требуется, чтобы в TRUNK_OUT отправился INVITE с заголовком Test_header: 123456.

Блок кода
languagec#
vesr# 
vesr# configure 
vesr(config)# esbc 

#Создание таблицы модификаторов MODTABLE_IN:
vesr(config-esbc)# mod-table sip MODTABLE_IN
Блок кода
languagec#
vesr# 
vesr# configure 
vesr(config)# esbc 

#Создание таблицы модификаторов MODTABLE_OUT:
vesr(config-esbc)# mod-table sip MODTABLE_OUT
vesr(esbc-mod-table)# 

#Добавление в таблицу модификаторов правила на удаление заголовка:
vesr(esbc-mod-table)# mod 0 no-transit
vesr(esbc-mod-table-modification)# 

#Выбор запроса, в котором будет удален заголовок (в данном случае INVITE):
vesr(esbc-mod-table-modification)# sip-method type Invite

#Указать название заголовка, который необходимо удалить (в данном случае Test_header):
vesr(esbc-mod-table-modification)# sip-header pattern Test_header

#Указать содержимое заголовка, при совпадении с которым заголовок будет удален (в данном случае example string):
vesr(esbc-mod-table-modification)# value-pattern "example string"

vesr(esbc-mod-table-modification)# exit
vesr(esbc-mod-table)# exit

#Привязать#Добавление в таблицу модификаторов кправила исходящемуна транкузамену TRUNK_OUTзаголовка:
vesr(configesbc-mod-esbctable)# trunk sip TRUNK_OUT  mod 1 replace

#Выбор запроса, в котором будут заменяться заголовки:
vesr(configesbc-esbcmod-trunktable-sipmodification)# modsip method-table sip out MODTABLE_OUT 

#Применить и подтвердить измененияtype Invite

#Указать название заголовка, содержимое которого необходимо заменить:
vesr(configesbc-esbcmod-trunktable-sipmodification)# dosip 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.

Scroll Pagebreak
До внесения изменений в конфигурацию в TRUNK_OUT отправлялся следующий INVIITE:

Блок кода
languagec#
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPjjju.7u4O03Aty93vQq0Q1huigSIqGVIr
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=CW.53L5FPJAUBsiRspMYqtjTtOTzZxHg
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: V4OOROjNahUbinXtA648s9eI2kjE5cCI
CSeq: 18905 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90
#Заголовок, который должен быть удален:
Test_header: example string
Content-Type: application/sdp
Content-Length:   157

v=0
o=tester 3927595234 3927595234 IN IP4 192.168.114.130
s=A conversation
c=IN IP4 192.168.114.130
t=0 0
m=audio 8066 RTP/AVP 8
a=rtpmap:8 PCMA/8000

После внесения изменений в конфигурацию в TRUNK_OUT отправляется следующий INVITE (заголовок Test_header отсутствует):

header-pattern Test_header

#Указать место в содержимом заголовка, которое необходимо заменить (конец строки исходного содержимого заголовка):
vesr(esbc-mod-table-modification)# value-pattern $

#Добавить правило для подмены содержимого заголовка (к концу строки исходного содержимого заголовка добавляется 456):
vesr(esbc-mod-table-modification)# replacement 456

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.


Scroll Pagebreak
После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:

Блок кода
Блок кода
languagec#
INVITE sip:24000@192.168.114.129130:54605461 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130129:54605461;rport;branch=z9hG4bKPjz8Y5BfoTrBQlqecLCu34TIyYn-6rX5dH
Max-Forwards: 70z9hG4bK-375510-1-5
From: "Simple UAC send bye"  <sip:24001@192.168.114.130>130;cpc=priority>;tag=qTwcY3ZHvA6SHvuRsoo7w40r9yXzjEEp1375510
To: "24000" <sip:24000@192:24000@192.168.114.130>
Call-ID: 1-375510@192.168.114.129>129
CSeq: 1 INVITE
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: yHvNLSIvp0DQYSRFPRpfgVUv9U0uKEHT
CSeq: 10147 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90129:5461>
Max-Forwards: 70
#Заголовок, который необходимо протранзитить и заменить:
Test_header: 123
Content-Type: application/sdp
Content-Length:   157149

v=0
o=tester 3927597375123456 3927597375654321 IN IP4 192.168.114.130129
s=A conversation
c=IN IP4 192.168.114.130129
t=0 0
m=audio 80707624 RTP/AVP 8
a=rtpmap:8 PCMA/8000

...

На TRUNK_OUT

...

отправляется уже модифицированный INVITE с измененным заголовком:

Блок кода
languagec#
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPj8e1WEAvAy16Bk8Vrj-VZiFK-bNOjnjY9z9hG4bKPjIbcILUaVB0cQTFaGLLb7ccpnbTQIRvV3
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=R83mrTm4KQsFL1Bk87hTOB8e182yCSJ.toP8wIO79wo47ChSYy69MFOyd4vhGRNF
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: eQueXFpyDZESB.hXK.uCGn7XL7TBUdmQdLsiFI4-aD2faceSTLZu.-kuHfN.pJtG
CSeq: 883122556 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90
#Заголовок Test_header с содержимым отличным от "example string не удаляется#Измененный заголовок:
Test_header: new string123456
Content-Type: application/sdp
Content-Length:   157

v=0
o=tester 39275978323927607871 39275978323927607871 IN IP4 192.168.114.130
s=A conversation
c=IN IP4 192.168.114.130
t=0 0
m=audio 80748090 RTP/AVP 8
a=rtpmap:8 PCMA/8000

Scroll Pagebreak

Пример использования

...

локальных переменных pcre в модификации replace (схема та же):

...

Схема:

Image Removed

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Из TRUNK_IN приходит INVITE с заголовком Test_header: 123. Требуется, чтобы в TRUNK_OUT отправился INVITE с заголовком Test_header: 123456.

Блок кода
languagec#
vesr# 
vesr# configure 
vesr(config)# esbc 

#Создание таблицы модификаторов MODTABLE_IN:
vesr(config-esbc)# mod-table sip MODTABLE_IN
vesr(esbc-mod-table sip MODTABLE_IN)# 

#Добавление в таблицу модификаторов правила на замену заголовка:
vesr(esbc-mod-table)# mod 1 replace

#Добавление#Выбор запроса, в таблицукотором модификаторовбудут правила на транзит заголовказаменяться заголовки:
vesr(esbc-mod-table-modification)# mod 0 transit sip method-type Invite

#Указать название заголовка, содержимое которого необходимо заменить:
vesr(esbc-mod-table-modification)# sip header-pattern Date

#Выбор#Указать запроса,место в котором будет транзититься заголовок (в данном случае INVITEсодержимом заголовка, которое необходимо заменить (шаблон — дата в формате "год-месяц-число"):
vesr(esbc-mod-table-modification)# sipvalue-method type Invite  

#Указать название заголовка, который необходимо транзитить (в данном случае Test_headerpattern "(\\d{4})-(\\d{2})-(\\d{2})"

#Добавить правило для подмены содержимого заголовка (меняем формат даты на "месяц/число/год"):
vesr(esbc-mod-table-modification)# sip-header pattern Test_headerreplacement "\\2/\\3/\\1"

vesr(esbc-mod-table-modification)# exit

#Добавление в таблицу модификаторов правила на замену заголовка:
vesr(esbc-mod-table)# mod 1 replaceexit

#Выбор#Привязать запроса,таблицу вмодификаторов которомк будутвходящему заменятьсятранку заголовкиTRUNK_IN:
vesr(config-esbc-mod-table-modification)# trunk sip TRUNK_IN
vesr(config-esbc-trunk-sip)# sip-method type Invite

#Указать название заголовка, содержимое которого необходимо заменитьmod-table sip in MODTABLE_IN 

#Применить и подтвердить изменения:
vesr(config-esbc-mod-table-modification)# sip-header pattern Test_header

#Указать место в содержимом заголовка, которое необходимо заменить (конец строки исходного содержимого заголовка):
vesr(esbc-mod-table-modification)# value-pattern $

#Добавить правило для подмены содержимого заголовка (к концу строки исходного содержимого заголовка добавляется 456):
vesr(esbc-mod-table-modification)# replacement 456

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.

Scroll Pagebreak
После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:

Блок кода
INVITE sip:24000@192.168.114.130:5461 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.129:5461;branch=z9hG4bK-375510-1-5
From: "Simple UAC send bye"  <sip:24001@192.168.114.130;cpc=priority>;tag=1375510
To: "24000" <sip:24000@192.168.114.130>
Call-ID: 1-375510@192.168.114.129
CSeq: 1 INVITE
Contact: <sip:24001@192.168.114.129:5461>
Max-Forwards: 70
#Заголовок, который необходимо протранзитить и заменить:
Test_header: 123
Content-Type: application/sdp
Content-Length:   149

v=0
o=tester 123456 654321 IN IP4 192.168.114.129
s=A conversation
c=IN IP4 192.168.114.129
t=0 0
m=audio 7624 RTP/AVP 8
a=rtpmap:8 PCMA/8000

На TRUNK_OUT отправляется уже модифицированный INVITE с измененным заголовком:

Блок кода
languagec#
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPjIbcILUaVB0cQTFaGLLb7ccpnbTQIRvV3
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=toP8wIO79wo47ChSYy69MFOyd4vhGRNF
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: dLsiFI4-aD2faceSTLZu.-kuHfN.pJtG
CSeq: 22556 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90
#Измененный заголовок:
Test_header: 123456
Content-Type: application/sdp
Content-Length:   157

v=0
o=tester 3927607871 3927607871 IN IP4 192.168.114.130
s=A conversation
c=IN IP4 192.168.114.130
t=0 0
m=audio 8090 RTP/AVP 8
a=rtpmap:8 PCMA/8000

Scroll Pagebreak
Есть возможность разбивать скобками шаблон value-pattern на группы (максимум 9 групп). И оперировать ими в replacement с помощью цифр, экранированных обратной чертой ('\1-9'). '\0' - весь текст. 
Пример (схема та же):

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.

Scroll Pagebreak
После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:

Блок кода
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_OUT отправляется уже модифицированный INVITE с измененным заголовком:

Блок кода
languagec#
Via: SIP/2.0/UDP 10.25.72.151:5060;rport;branch=z9hG4bKPjc5kLf-R0rh5Stla2eTvpoVAxOc0Jr.kX
Max-Forwards: 70
From: <sip:134@10.25.72.151>;tag=lMWgbj2x66hzNDHhP8ef8tWvB2HT2DwH
To: <sip:135@192.168.23.140>
Contact: <sip:134@10.25.72.151:5060;transport=udp>
Call-ID: c09c3761560702267daaee76eb769a9c
CSeq: 5021 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: 100rel, replaces
#Измененный заголовок:
Date: 09/10/2024
Content-Type: application/sdp
Content-Length:   163

Пример использования модификатора копирования (copy)

Схема: 

Image AddedВ конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из 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)# 

#Выбор запроса, в котором будет использоваться модификатор copy (в данном случае 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
Блок кода
languagec#
vesr# 
vesr# configure 
vesr(config)# esbc 

#Создание таблицы модификаторов MODTABLE_IN:
vesr(config-esbc)# mod-table sip MODTABLE_IN
vesr(esbc-mod-table)# 

#Добавление в таблицу модификаторов правила replace надля транзитзамены заголовка From:
vesr(esbc-mod-table)# mod 0 transit1 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)# sipvalue-headerpattern pattern Date

vesr(esbc-mod-table-modification)# exit

#Добавление в таблицу модификаторов правила на замену заголовка:
vesr(esbc-mod-table)# mod 1 replace

#Выбор запроса, в котором будут заменяться заголовки'.+ <sip:'

# Указать переменную u01, которая содержит значение, полученное в модификации copy:
vesr(esbc-mod-table-modification)# sip-method type Invite

#Указать название заголовка, содержимое которого необходимо заменить:# replacement '\u01 <sip:$'
vesr(esbc-mod-table-modification)# sip-header pattern Dateexit

#Указать#Добавление место в содержимомтаблицу заголовка,модификаторов которое необходимо заменить (шаблон - дата в формате "год-месяц-число")правила no-transit для удаления заголовка Diversion:
vesr(esbc-mod-table-modification)# value-pattern "(\\d{4})-(\\d{2})-(\\d{2})"

#Добавить правило для подмены содержимого заголовка (меняем формат даты на "месяц/число/год"):mod 2 no-transit
vesr(esbc-mod-table-modification)# sip header-pattern 'Diversion'
vesr(esbc-mod-table-modification)# replacement "\\2/\\3/\\1"

sip method type Invite
vesr(esbc-mod-table-modification)# exit
vesr(esbc-mod-table)# exit

#Привязать таблицу модификаторов к входящемуисходящему транку TRUNK_INOUT:
vesr(config-esbc)# trunk sip TRUNK_INOUT 
vesr(config-esbc-trunk-sip)# mod-table sip inout MODTABLE_INOUT 

#Применить и подтвердить изменения:
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.
Scroll Pagebreak

После внесения изменений в конфигурацию с TRUNK_IN приходит следующий INVIITE:

Блок кода
languagec#
INVITE sip:135@1024001@192.25168.7280.151129:50605080 SIP/2.0
Via: SIP/2.0/UDP 10192.25168.7280.3526:50635070;rport;branch=z9hG4bK-1104631473191-1-01
From: test <sip:134@1024001@192.25168.7280.15126:50605070>;user=phone>;tag=1
To: sut <sip:135@1023002@192.25168.7280.151:5060;user=phone>129:5070>
Call-ID: 1-1104631@10473191@192.25168.7280.3526
CSeqCseq: 1 INVITE
Contact: <sip:24001@192.168.80.26:5070>
Max-Forwards: 70
Supported: replaces, timer
Contact: <sip:134@10.25.72.35:5063>#Заголовок, который необходимо протранзитить и изменить
Date: 2024-09-10
Diversion: <sip:11111@test.loc>;reason=time-of-day
Subject: Performance Test
Allow: INVITE, ACK, BYE, CANCEL, UPDATE, SUBSCRIBE
Content-Type: application/sdp
Content-Length:   153118

[SDP]...

На TRUNK_OUT отправляется уже модифицированный INVITE с измененным заголовком From и без заголовка Diversion:

Блок кода
languagec#
INVITE sip:23002@192.168.80.26:5080 SIP/2.0
Via: SIP/2.0/UDP 10192.25168.7280.151129:50605080;rport;branch=z9hG4bKPjc5kLf-R0rh5Stla2eTvpoVAxOc0Jrz9hG4bKPjbURYAQZxa2m1zsT6x.kXs6RQ28ONE4EifS
Max-Forwards: 70
From: "11111" <sip:134@1024001@192.25168.7280.151>129>;tag=lMWgbj2x66hzNDHhP8ef8tWvB2HT2DwHJfl7n8XBMrh6vjCcB036Ogz6QX4BTDCo
To: "sut" <sip:135@19223002@192.168.2380.140>26>
Contact: <sip:134@1024001@192.25168.7280.151:5060;transport=udp>129:5080>
Call-ID: c09c3761560702267daaee76eb769a9cbbf5db1c228015eecddfe0d7079ce876
CSeq: 50218798 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: 100rel, replaces
#Измененный заголовок:
Date: 09/10/2024
Content-Type: application/sdp
Content-Length:   163119

[SDP]...

Scroll Pagebreak
Работа с логами

...

  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