...
Модификаторы SIP позволяют гибко осуществалять выбор требуемого метода (Request) или ответного сообщения (Response) по конкретному коду. Для этого используются команды:
...
| Блок кода | ||
|---|---|---|
| ||
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 в рамках одной таблицы модификаций (на одном плече вызова).
...
| Блок кода | ||
|---|---|---|
| ||
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.
Схема:
В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из 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)
...
