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

Ключ

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

...

Пример 3. Синхронизация переменных между плечами вызова.

Схема:

"TRUNK_IN(MODTABLE_IN)" нужно заменить на "TRUNK_IN(MODTABLE_IN_TRUNK_IN)", "TRUNK_OUT" заменить на "TRUNK_OUT(MODTABLE_OUT_TRUNK_OUT)"

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Из TRUNK_IN приходит INVITE с заголовком Route. Требуется, используя только переменную var1, скопировать значение заголовка Test_header из INVITE на первом плечаплече, вставить его в заголовок Test_header_INVITE в ответе 180 на втором плече и скопировать значение заголовка Test_header из ответа 200 на втором плече и вставить его в заголовок Test_header_200 в запрос BYE на первом плече.

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

#Создание таблицы модификаторов MODTABLE_IN_TRUNK_IN для модификаций на первом плече:
vesbc(config-esbc)# mod-table sip MODTABLE_IN_TRUNK_IN
vesbc(esbc-mod-table)# 

#Добавление в таблицу модификаторов правила copy для копирования значения заголовка Route в переменную route:
vesbc(esbc-mod-table)# mod 0 copy
vesbc(esbc-mod-table-modification)# 

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

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

#Указать содержимое заголовка, при совпадении с которым будет выполнено копирование в переменную. В переменную будет скопирована та часть отбора, которая указана в скобках:
vesbc(esbc-mod-table-modification)# value-pattern '(.+)'

#Указать переменную, в которую будет скопировано значение, указанное в скобках, в примере - (.+):
vesbc(esbc-mod-table-modification)# variable-str 'var1'
vesbc(esbc-mod-table-modification)# exit

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

#Выбор запроса, в котором будет использоваться модификатор add (в данном случае BYE):
vesbc(esbc-mod-table-modification)# sip method type Bye

#Название добавляемого заголовка:
vesbc(esbc-mod-table-modification)# header name Test_header_180200

#Указать значение заголовка(переменная var1):
vesbc(esbc-mod-table-modification)# header value '${var1}'
vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit

#Привязать таблицу модификаторов к входящему транку TRUNK_IN:
vesbc(config-esbc)# trunk sip TRUNK_IN 
vesbc(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN_TRUNK_IN
vesbc(config-esbc-trunk-sip)# exit

#Создание таблицы модификаторов MODTABLE_IN_TRUNK_OUT для модификаций на втором плече:
vesbc(config-esbc)# mod-table sip MODTABLE_IN_TRUNK_OUT
vesbc(esbc-mod-table)# 

#Добавление в таблицу модификаторов правила copy для копирования значения заголовка Test_header в переменную var1:
vesbc(esbc-mod-table)# mod 0 copy
vesbc(esbc-mod-table-modification)# 

#Выбор ответа, в котором будет использоваться модификатор copy (в данном случае 180200):
vesbc(esbc-mod-table-modification)# sip response-pattern 180200

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

#Указать содержимое заголовка, при совпадении с которым будет выполнено копирование в переменную. В переменную будет скопирована та часть отбора, которая указана в скобках:
vesbc(esbc-mod-table-modification)# value-pattern '(.+)'

#Указать переменную, в которую будет скопировано значение, указанное в скобках, в примере - (.+):
vesbc(esbc-mod-table-modification)# variable-str 'var1'
vesbc(esbc-mod-table-modification)# exit

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

#Выбор ответа, в котором будет использоваться модификатор add (в данном случае 180):
vesbc(esbc-mod-table-modification)# sip response-pattern '180'

#Название добавляемого заголовка:
vesbc(esbc-mod-table-modification)# header name Test_header_INVITE

#Указать значение заголовка(переменная var1):
vesbc(esbc-mod-table-modification)# header value '${var1}'
vesbc(esbc-mod-table-modification)# exit
vesbc(esbc-mod-table)# exit

#Привязать таблицу модификаторов к входящему транку TRUNK_OUT:
vesbc(config-esbc)# trunk sip TRUNK_OUT 
vesbc(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN_TRUNK_OUT

#Применить и подтвердить изменения:
vesbc(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.
vesbc(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.

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

Блок кода
languagec#
INVITE sip:23002@192.168.113.195:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.113.190:5061;rport;branch=z9hG4bK-1151121-1-1
From: "24001" <sip:24001@192.168.113.195>;tag=1
To: "23002" <sip:23002@192.168.113.195:5060>
Call-ID: 1-1151121@192.168.113.190
Cseq: 1 INVITE
Contact: <sip:24001@192.168.113.190:5061>
Max-Forwards: 70
Subject: Performance Test
Allow: INVITE, ACK, BYE, CANCEL
Content-Type: application/sdp
Test_header: INVITE
Supported: timer
Content-Length:   142

[SDP]...

Модифицированный ответ 180 Ringing, отправленный с TRUNK_OUT на TRUNK_IN содержит заголовок Test_header_INVITE со значением из переменной var1:

Блок кода
languagec#
SIP/2.0 180 Ringing
Via: SIP/2.0/UDP 192.168.113.190:5061;rport=5061;received=192.168.113.190;branch=z9hG4bK-1152099-1-1
Call-ID: 1-1152099@192.168.113.190
From: "24001" <sip:24001@192.168.113.195>;tag=1
To: "23002" <sip:23002@192.168.113.195>;tag=e782be58-9527-409a-8c9f-de4f32d8fdb2
CSeq: 1 INVITE
Contact: <sip:23002@192.168.113.195:5060;transport=udp>
Allow: INVITE, ACK, BYE, CANCEL, UPDATE
Warning: warning
Test_header_INVITE: INVITE
Content-Length:  0

[SDP]...

Далее с TRUNK_OUT на TRUNK_IN приходит ответ 200 OK, значение заголовка Test_header копируется в переменную var1:

Блок кода
languagec#
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.113.195:5060;rport;branch=z9hG4bKPjf8b5024e-425d-434c-83ea-e315a365644a
From: "24001" <sip:24001@192.168.113.195>;tag=9ca5b465-69ee-4d19-8891-6d99cc8d7b2c
To: "23002" <sip:23002@192.168.113.190>;tag=1
Call-ID: e5e140176f2119a643b0504e9afa69bb
CSeq: 1446 INVITE
Contact: <sip:23002@192.168.113.190:5063;transport=UDP>
Allow: INVITE, ACK, BYE, CANCEL, UPDATE
Test_header: 200 OK
Warning: warning
Min-Expires: 300
Supported: 100rel, timer, replaces, qwe
Require: 100rel, answermode
Content-Type: application/sdp
Content-Length:   166

[SDP]...

Модифицированный запрос запрос BYE, отправленный с TRUNK_IN На на TRUNK_OUT содержит заголовок INVITETest_header_Route 200 со значением заголовка Route из запроса INVITEпеременной var1:

Блок кода
languagec#
BYE sip:23002@192.168.113.190:5063;transport=UDP SIP/2.0
Via: SIP/2.0/UDP 192.168.113.195:5060;rport;branch=z9hG4bKPja999d007z9hG4bKPj091e9a98-7d8754a1-46f74631-98caa024-dcc40ee3188e6fe968fa0ba5
Max-Forwards: 70
From: "24001" <sip:24001@192.168.113.195>;tag=a25bc5579ca5b465-78fd69ee-4a9c4d19-871d8891-87099fbfc9ce6d99cc8d7b2c
To: "23002" <sip:23002@192.168.113.190>;tag=141
Call-ID: 38a3fddd817f6b738707b21ee5fe1c7de5e140176f2119a643b0504e9afa69bb
CSeq: 105881447 BYE
Allow: INVITE, ACK, BYE, CANCEL
INVITETest_header_Route200: <sip:192.168.113.195>200 OK
Content-Length:  0

[SDP]...

...