Changes between Version 2 and Version 3 of FunctionsSipRouting
- Timestamp:
- Mar 2, 2018, 5:55:42 PM (7 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
FunctionsSipRouting
v2 v3 13 13 Но что делать, если требуется, например, вызовы абонентов, номера которых начинаются с цифры 1, направлять в одну АТС, вызовы абонентов, номера которых начинаются с цифры 9 - в другую АТС, а все остальные вызовы - в третью? В этом случае поможет функция маршрутизации SIP. 14 14 15 Прокси-сервер платы VE-01 имеет таблицу маршрутов SIP. Каждый маршрут состоит из двух основных частей - регулярного выражения, на совпадение с которым проверяется цель (target) запроса SIP, и строки, которой заменяется цель в случае совпадения. Благодаря этому механизму можно организовать желаемую схему подключения:15 Прокси-сервер платы VE-01 имеет таблицу маршрутов SIP. Каждый маршрут состоит из двух основных частей - регулярного выражения, на совпадение с которым проверяется цель (target) запроса SIP, и строки, которой заменяется цель в случае совпадения. В маршрутах SIP используются [https://www.pcre.org/ Perl Compatible Regular Expressions] (начиная с прошивки платы ревизии 41, в прошивках до ревизии 41 использовались регулярные выражения POSIX). Благодаря этому механизму можно организовать желаемую схему подключения: 16 16 17 17 [[Image(dia2.png)]] … … 27 27 На этой вкладке отображается таблица маршрутов, содержащая регулярное выражение URI, замену URI и комментарий. Также для случаев, когда требуется определенный порядок проверки маршрутов, у каждого маршрута имеется поле "Порядок", значение которого определяет приоритет маршрута: проверки выполняется в порядке возрастания значения. Для добавления маршрутов в таблицу служит кнопка "Добавить маршрут" над таблицей. Также для каждого маршрута в таблице имеются кнопки "Редактировать маршрут" и "Удалить маршрут". 28 28 29 В данном примере в таблице маршрутизации установлено два маршрута. Первый маршрут имеет регулярное выражение `^sip:(1.*)@10.0.0.3 $`, которому удовлетворяют SIP URI, имя пользователя которых начинается с цифры 1, а имя хоста - "10.0.0.3". Имя пользователя в этом выражении заключено в круглые скобки для того чтобы подставить его в новый URI в процессе замены. В качестве замены в этом маршруте указана строка `sip:\1@10.0.0.1`. Вместо имени пользователя в этом URI стоит комбинация "\1", предписывающая подставить вместо нее подстроку, соответствующую фрагменту регулярного выражения, заключенного в круглые скобки.29 В данном примере в таблице маршрутизации установлено два маршрута. Первый маршрут имеет регулярное выражение `^sip:(1.*)@10.0.0.3`, которому удовлетворяют SIP URI, имя пользователя которых начинается с цифры 1, а имя хоста - "10.0.0.3". Имя пользователя в этом выражении заключено в круглые скобки для того чтобы подставить его в новый URI в процессе замены. В качестве замены в этом маршруте указана строка `sip:\1@10.0.0.1`. Вместо имени пользователя в этом URI стоит комбинация "\1", предписывающая подставить вместо нее подстроку, соответствующую фрагменту регулярного выражения, заключенного в круглые скобки. 30 30 31 Рассмотрим пример. Канальным окончанием PRI принят вызов номера 143. Шлюз формирует сообщение INVITE с URI "sip:143@10.0.0.3". Прокси сервер платы VE-01, получив это сообщение, последовательно проверяет URI "sip:143@10.0.0.3" на совпадение с регулярными выражениями маршрутов из таблицы маршрутизации. При проверке регулярного выражения `^sip:(1.*)@10.0.0.3 $` будет обнаружено совпадение. Прокси сервер заменит исходный URI в сообщении INVITE на URI из найденного маршрута, подставив на место "\1" исходное имя пользователя. На этом поиск в таблице маршрутизации будет закончен, и сообщение INVITE будет направлено на URI "sip:143@10.0.0.1".31 Рассмотрим пример. Канальным окончанием PRI принят вызов номера 143. Шлюз формирует сообщение INVITE с URI "sip:143@10.0.0.3". Прокси сервер платы VE-01, получив это сообщение, последовательно проверяет URI "sip:143@10.0.0.3" на совпадение с регулярными выражениями маршрутов из таблицы маршрутизации. При проверке регулярного выражения `^sip:(1.*)@10.0.0.3` будет обнаружено совпадение. Прокси сервер заменит исходный URI в сообщении INVITE на URI из найденного маршрута, подставив на место "\1" исходное имя пользователя. На этом поиск в таблице маршрутизации будет закончен, и сообщение INVITE будет направлено на URI "sip:143@10.0.0.1". 32 32 33 Аналогичным образом таблицу маршрутов можно использовать для модификации имени пользователя. Например, для удаления префикса "9" можно создать маршрут с регулярным выражением `^sip:9(.*)` и заменой URI `sip:\1`. 33 //Обратите внимание, что в конце приведенных выше регулярных выражений нет символа "доллар" ($), означающего конец строки. Это вызвано тем, что в вызываемом URI не всегда заканчивается доменом, после домена могут следовать другие элементы, например порт и/или параметры.// 34 35 Аналогичным образом таблицу маршрутов можно использовать для модификации имени пользователя. Например, для удаления префикса "9" можно создать маршрут с регулярным выражением `^sip:9(.*)$` и заменой URI `sip:\1`. 34 36 35 37 === Два режима поиска цели === … … 49 51 [[Image(dia3.png)]] 50 52 51 Для того чтобы номера вида 2XX обслуживались блоком локально, достаточно создать маршрут, направляющий вызов обратно в шлюз. Для этого в поле "Замена URI" маршрута в качестве домена можно указать собственный IP адрес платы VE-01, в данном примере "10.0.0.10". Также можно использовать loopback-адрес 127.0.0.1. Таким образом, для решения данной задачи добавим маршрут с регулярным выражением `^sip:(2..)@10.0.0.3 $` и заменой URI `sip:\1@127.0.0.1`:53 Для того чтобы номера вида 2XX обслуживались блоком локально, достаточно создать маршрут, направляющий вызов обратно в шлюз. Для этого в поле "Замена URI" маршрута в качестве домена можно указать собственный IP адрес платы VE-01, в данном примере "10.0.0.10". Также можно использовать loopback-адрес 127.0.0.1. Таким образом, для решения данной задачи добавим маршрут с регулярным выражением `^sip:(2..)@10.0.0.3` и заменой URI `sip:\1@127.0.0.1`: 52 54 53 55 [[Image(ss2.jpg)]]