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

Ключ

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

...

Модификаторы SIP позволяют гибко осуществалять выбор требуемого метода (Request) или ответного сообщения (Response) по конкретному коду. Для этого используются команды:

...

Блок кода
languagec#
mod-table sip SIP_MOD
  mod 1 add
# Т.к. по условию требуется добавлять заголовок во все ответы от 100 до 199, используется, например, следующее регулярное выражение '1\d{2}'
      sip response-pattern '1\\d{2}'
    header name Test_header
    header value test_value
  exit

...

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

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

  • copy — позволяет скопировать значение или часть значения заголовка в переменную для использования этого значения в модификаторах add или transit в рамках одной таблицы модификаций (на одном плече вызова).

...

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

Пример 2.

Схема:

Image Added

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT.  При отправки сообщения INVITE, полученного из TRUNK_IN в TRUNK_OUT, в host-part заголовков To и From будут использоваться IP-адрес настроенный в качестве remote address в транке TRUNK_OUT и IP-адрес sip транспорта для TRUNK_OUT соответственно (при условии что в транке TRUNK_OUT не настроен домен). 

Требуется при отправке INVITE заменять эти адреса на testdomain.loc. 

Решение:

Конфигурация  ESBC до использования модификаторов:

Блок кода
esbc
  media resource MEDIA_IN
    ip address 192.168.23.199
  exit
  media resource MEDIA_OUT
    ip address 192.168.80.129
  exit
  sip transport IN
    ip address 192.168.23.199
    port 5070
  exit
  sip transport OUT
    ip address 192.168.80.129
    port 5080
  exit
  route-table TO_TRUNK_OUT
    rule 0
      action direct-to-trunk TRUNK_OUT
    exit
  exit
  trunk sip TRUNK_IN
    sip transport IN
    route-table TO_TRUNK_OUT
    media resource 0 MEDIA_IN
    remote address 192.168.23.200
    remote port 5070
  exit
  trunk sip TRUNK_OUT
    sip transport OUT
    media resource 0 MEDIA_OUT
    remote address 192.168.80.26
    remote port 5080
  exit
exit

Т.к. в транке TRUNK_OUT не настроен домен, то в host-part заголовков To и From, сообщения INVITE, будут указаны IP-адреса в соответствии с конфигурацией:

Блок кода
INVITE sip:23002@192.168.80.26:5080 SIP/2.0
Via: SIP/2.0/UDP 192.168.80.129:5080;rport;branch=z9hG4bKPj11eb899a-a1c3-4659-b78d-4bba6bdc17ce
Max-Forwards: 70
From: "sipp" <sip:24001@192.168.80.129>;tag=c090d50d-4b15-4db1-94ac-3ea77fe3dd7d
To: "sut" <sip:23002@192.168.80.26>
Contact: <sip:24001@192.168.80.129:5080;transport=udp>
Call-ID: db38ba3ff093153f38b412372a1bed35
CSeq: 20022 INVITE
Allow: INVITE, ACK, BYE, CANCEL, PRACK, REGISTER, INFO, REFER, NOTIFY, OPTIONS, SUBSCRIBE, MESSAGE, UPDATE
Supported: 100rel, replaces, ice
Content-Type: application/sdp
Content-Length:   241

[SDP]

Настраиваем модификатор MOD_TABLE для замены IP-адресов на testdomain.loc:

Блок кода
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# mod-table sip MOD_TABLE
# Создаем модификатор замены
vesbc(esbc-mod-table)# mod 1 replace
# С помощью паттерна выбираем заголовки в которых необходимо выполнить замену
vesbc(esbc-mod-table-modification)# sip header-pattern '(From|To)'
# Указываем метод в котором необходимо выполнить замену
vesbc(esbc-mod-table-modification)# sip method pattern 'INVITE'
# Выбираем часть заголовка которая начинается с символ @, содержит любое количество, любых символов и заканчивается символом >. под это выражение попадает host-part заголовков. 
vesbc(esbc-mod-table-modification)# value-pattern '@.*>'
# Указываем что тербуется заменить то что мы получили в предыдущем правиле на @testdomain.loc>. 
vesbc(esbc-mod-table-modification)# replacement '@testdomain.loc>'
vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit
vesbc(config-esbc)# 

Используем это правило в TRUNK_OUT в кочестве OUT:

Блок кода
vesbc# 
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# trunk sip TRUNK_OUT 
vesbc(config-esbc-trunk-sip)# mod-table sip out MOD_TABLE 
vesbc(config-esbc-trunk-sip)# do commit 
vesbc(config-esbc-trunk-sip)# do confirm 

Теперь, в результате модификации, в host-part заголовков To и From, сообщения INVITE, будет указан домен - testdomain.loc:

Блок кода
INVITE sip:23002@192.168.80.26:5080 SIP/2.0
Via: SIP/2.0/UDP 192.168.80.129:5080;rport;branch=z9hG4bKPje431c80c-619a-43cc-a631-9ad3be4e6679
Max-Forwards: 70
From: "sipp" <sip:24001@testdomain.loc>;tag=0a5f2f31-e27e-4f7c-a3f8-70ca1d5a9f22
To: "sut" <sip:23002@testdomain.loc>
Contact: <sip:24001@192.168.80.129:5080;transport=udp>
Call-ID: 81a874656978d43e11d57e3662996fde
CSeq: 26399 INVITE
Allow: INVITE, ACK, BYE, CANCEL, PRACK, REGISTER, INFO, REFER, NOTIFY, OPTIONS, SUBSCRIBE, MESSAGE, UPDATE
Supported: 100rel, replaces, ice
Content-Type: application/sdp
Content-Length:   241

[SDP]

Scroll Pagebreak

Модификатор копирования (copy)

...