SER Модуль textops
Это, главным образом, модуль для примера. Он предоставляет функции для операций с текстом (поиск, замена, добавление и т.д.).
Известные ограничения.
поиск игнорирует многострочные строки. Например, функция search("(From|f):.*@foo.bar") не найдет нижеприведенное заголовочное поле "From":
From: medabeda
<sip:medameda@foo.bar>;tag=1234
Функции поиска оперируют с оригинальным запросом , т.е., они игнорируют все изменения, которые были в него внесены в процессе обработки сервером OpenSER.
Зависимости от других модулей.
Этот модуль имеет зависимости от следующих модулей (другими словами, ниже перечисленные модули должны быть загружены до загрузки этого модуля):
Нет зависимостей от других модулей.
Зависимости от внешних библиотек и приложений.
Следующие библиотеки или приложения должны быть установлены перед использованием OpenSER с этим модулем:
Нет.
Экспортируемые функции.
search(re)
Поиск соответствия регулярному выражению в строках сообщения.Параметры имеют следующие значения:
- re - регулярное выражение.
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
Пример использования функции search:
...
if ( search("[Ss][Ii][Pp]" ) { /*....*/ };
...
search_body(re)
Поиск соответствия регулярному выражению в теле сообщения.Параметры имеют следующие значения:
- re - регулярное выражение.
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
Пример использования функции search_body:
...
if ( search_body("[Ss][Ii][Pp]" ) { /*....*/ };
...
search_append(re, txt)
Поиск первого соответствия регулярному выражению "re" и добавления текста "txt" после него.Параметры имеют следующие значения:
- re - регулярное выражение.
- txt - добавляемая строка.
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
Пример использования функции search_append:
...
search_append("[Oo]pen[Ss]er", " SIP Proxy");
...
search_append_body(re, txt)
Поиск в теле сообщения первого соответствия регулярному выражению "re" и добавления текста "txt" после него.Параметры имеют следующие значения:
- re - регулярное выражение.
- txt - добавляемая строка.
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
Пример использования функции search_append_body:
...
search_append_body("[Oo]pen[Ss]er", " SIP Proxy");
...
replace(re, txt)
Замена первого соответствия регулярному выражению re на строку txt.Параметры имеют следующие значения:
- re - регулярное выражение.
- txt - Строка.
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
Пример использования функции replace:
...
replace("openser", "OpenSER SIP Proxy");
...
replace_body(re, txt)
Замена в теле сообщения первого соответствия регулярному выражению re на строку txt.Параметры имеют следующие значения:
- re - регулярное выражение.
- txt - Строка.
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
Пример использования функции replace_body:
...
replace_body("openser", "OpenSER SIP Proxy");
...
replace_all(re, txt)
Замена всех соответствий регулярному выражению re на строку txt.Параметры имеют следующие значения:
- re - регулярное выражение.
- txt - Строка.
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
Пример использования функции replace_all:
...
replace_all("openser", "OpenSER SIP Proxy");
...
replace_body_all(re, txt)
Замена в теле сообщения всех соответствий регулярному выражению re на строку txt.Параметры имеют следующие значения:
- re - регулярное выражение.
- txt - Строка.
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
Пример использования функции replace_body_all:
...
replace_body_all("openser", "OpenSER SIP Proxy");
...
subst('/re/repl/flags')
Замена строки соотв. регулярному выражению re на выражение repl (в стиле sed или perl).Параметры имеют следующие значения:
'/re/repl/flags' - регулярное выражение в формате sed. Флаги могут состоять из комбинации: i (регистронезависимый поиск), g (global) или s (найденный перевод строки не означает конец строки).
- 're' - регулярное выражение.
- 'repl' - строка для замены - может содержать псевдопеременные.
- 'flags' - флаги (i - регистронезависимая замена, g - global).
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
Пример использования функции subst:
...
# replace the uri in to: with the message uri (just an example)
if ( subst('/^To:(.*)sip:[^@]*@[a-zA-Z0-9.]+(.*)$/t:\1\u\2/ig') ) {};
# replace the uri in to: with the value of avp sip_address (just an example)
if ( subst('/^To:(.*)sip:[^@]*@[a-zA-Z0-9.]+(.*)$/t:\1$avp(sip_address)\2/ig') ) {};
...
subst_uri('/re/repl/flags')
Функция производит замену для строки uri в сообщении (по типу функции subst, но операция производиться только над полем uri).Параметры имеют следующие значения:
'/re/repl/flags' - регулярное выражение в формате sed. Флаги могут состоять из комбинации: i (регистронезависимый поиск), g (global) или s (найденный перевод строки не означает конец строки).
- 're' - регулярное выражение.
- 'repl' - строка для замены - может содержать псевдопеременные.
- 'flags' - флаги (i - регистронезависимая замена, g - global).
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
Пример использования функции subst_uri:
...
# adds 3463 prefix to numeric uris, and save the original uri (\0 match)
# as a parameter: orig_uri (just an example)
if (subst_uri('/^sip:([0-9]+)@(.*)$/sip:3463\1@\2;orig_uri=\0/i')){$
# adds the avp 'uri_prefix' as prefix to numeric uris, and save the original
# uri (\0 match) as a parameter: orig_uri (just an example)
if (subst_uri('/^sip:([0-9]+)@(.*)$/sip:$avp(uri_prefix)\1@\2;orig_uri=\0/i')){$
...
subst_user('/re/repl/flags')
Функция производит замену для строки uri (часть с именем пользователя) в сообщении (по типу функции subst, но операция производиться только над пользовательской частью поля uri).Параметры имеют следующие значения:
'/re/repl/flags' - регулярное выражение в формате sed. Флаги могут состоять из комбинации: i (регистронезависимый поиск), g (global) или s (найденный перевод строки не означает конец строки).
- 're' - регулярное выражение
- 'repl' - строка для замены - может содержать псевдопеременные.
- 'flags' - флаги (i - регистронезависимая замена, g - global).
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
Пример использования функции subst_user:
...
# adds 3463 prefix to uris ending with 3642 (just an example)
if (subst_user('/3642$/36423463/')){$
...
# adds avp 'user_prefix' as prefix to username in r-uri ending with 3642
if (subst_user('/(.*)3642$/$avp(user_prefix)\13642/')){$
...
subst_body('/re/repl/flags')
Замена в теле сообщения строки соотв. регулярному выражению re на выражение repl (в стиле sed или perl).Параметры имеют следующие значения:
'/re/repl/flags' - регулярное выражение в формате sed. Флаги могут состоять из комбинации: i (регистронезависимый поиск), g (global) или s (найденный перевод строки не означает конец строки).
- 're' - регулярное выражение
- 'repl' - строка для замены - может содержать псевдопеременные.
- 'flags' - флаги (i - регистронезависимая замена, g - global).
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
Пример использования функции subst_body:
...
if ( subst_body('/^o=(.*) /o=$fU ') ) {};
...
append_to_reply(txt)
Добавляет строку txt как заголовок с ответное сообщение.Параметры имеют следующие значения:
- txt - Строка, которая может содержать псевдопеременные.
Эта функция может использоваться из блоков: REQUEST_ROUTE, BRANCH_ROUTE, ERROR_ROUTE.
Пример использования функции append_to_reply:
...
append_to_reply("Foo: bar\r\n");
append_to_reply("Foo: $rm at $Ts\r\n");
...
append_hf(txt)
Функция добавляет заголовочное поле 'txt', после первого заголовочного поля.Параметры имеют следующие значения:
- txt - Заголовочное поле, которое будет добавлено. Значение может содержать псевдопеременные, которые будут заменяться на значения в момент использования.
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
Пример использования функции append_hf:
...
append_hf("P-hint: VOICEMAIL\r\n");
append_hf("From-username: $fU\r\n");
...
append_hf(txt, hdr)
Функция добавляет заголовочное поле 'txt', после первого заголовочного поля, указанного в 'hdr'.Параметры имеют следующие значения:
- txt - Заголовочное поле, которое будет добавлено. Значение может содержать псевдопеременные, которые будут заменяться на значения в момент использования.
- hdr - Название заголовочного поля, после которого будет вставлено значение 'txt'.
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
Пример использования функции append_hf:
...
append_hf("P-hint: VOICEMAIL\r\n", "Call-ID");
append_hf("From-username: $fU\r\n", "Call-ID");
...
insert_hf(txt)
Функция вставляет строку 'txt', как заголовочное поле перед первым заголовочным полем.Параметры имеют следующие значения:
- txt - Заголовочное поле, которое будет вставлено. Значение может содержать псевдопеременные, которые будут заменяться на значения в момент использования.
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
Пример использования функции insert_hf:
...
insert_hf("P-hint: VOICEMAIL\r\n");
insert_hf("To-username: $tU\r\n");
...
insert_hf(txt, hdr)
Функция вставляет строку 'txt', как заголовочное поле перед первым встретившимся полем 'hdr'.Параметры имеют следующие значения:
- txt - Заголовочное поле, которое будет вставлено. Значение может содержать псевдопеременные, которые будут заменяться на значения в момент использования.
- hdr - Название заголовочного поля, перед которым будет вставлено значение 'txt'.
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
Пример использования функции insert_hf:
...
insert_hf("P-hint: VOICEMAIL\r\n", "Call-ID");
insert_hf("To-username: $tU\r\n", "Call-ID");
...
append_urihf(prefix, suffix)
Функция добавляет заголовочное поле с оригинальным значением Request-URI в середине, между префиксом и суффиксом.Параметры имеют следующие значения:
- prefix - строка (обычно, как минимум, название заголовочного поля).
- suffix - строка (обычно, как минимум, символы перевода строки).
Эта функция может использоваться из блоков: REQUEST_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
Пример использования функции append_urihf:
...
append_urihf("CC-Diversion: ", "\r\n");
...
is_present_hf(hf_name)
Функция возвращает true, если указанное заголовочное поле присутствует в сообщении.Эта функция также различает компактные названия заголовочных полей. Например, при поиске поля "From", будет осуществлен также поиск поля "f".
Параметры имеют следующие значения:
- hf_name - Имя заголовочного поля. (Полная или сокращенная форма.)
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
Пример использования функции is_present_hf:
...
if (is_present_hf("From")) log(1, "From HF Present");
...
append_time()
Добавляет заголовочное поле с временем в ответное сообщение на запрос. Вы должны использовать ее до функций, которые фактически отправляют ответное сообщение, например, save() из модуля 'registrar'. Формат заголовка следующий: "Date: %a, %d %b %Y %H:%M:%S GMT".- % - абривиатура для дня недели (locale) .
- %d - десятичное значение дня месяца.
- %b - абривиатура для названия месяца (locale) .
- %Y - год в полном формате.
- %H - час.
- %M - минуты.
- %S - секунды.
Функция возвращает true, если заголовок успешно добавлен.
Эта функция может использоваться из блоков: REQUEST_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
Пример использования функции append_time:
...
append_time();
...
is_method(name)
Проверка на совпадения названия метода SIP сообщения с указанным(и) в параметре. Если в "name" содержится название известного метода (invite, cancel, ack, bye, options, info, update, register, message, subscribe, notify, refer, prack), то функция произведет проверку метода на основании его ID (числовое сравнение), вместо регистронезависимого сравнения строк.Параметр 'name' может содержать список методов в виде: 'method1|method2|...'. В этом случае, функция вернет true, если метод SIP сообщения совпадает с одним из указанных в списке. Важное замечание: в списке могут быть указаны только те методы, для которых определен ID в OpenSER (invite, cancel, ack, bye, options, info, update, register, message, subscribe, notify, refer, prack, publish; смотри список по адресу: http://www.iana.org/assignments/sip-parameters).
Если используется для обработки ответных сообщений, функция определяет метод исходного сообщения, основываясь на заголовочном поле CSeq.
Параметры имеют следующие значения:
- name - имя метода SIP сообщения.
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE и BRANCH_ROUTE.
Пример использования функции is_method:
...
if(is_method("INVITE"))
{
# тут обрабатываем сообщения INVITE
}
if(is_method("OPTION|UPDATE"))
{
# тут обрабатываем сообщения OPTION и UPDATE
}
...
remove_hf(hname)
Функция удаляет из сообщения все заголовочные поля с именем, указанным в параметре "hname".Возвращает true, если хотя бы один заголовок был найден и удален.
Параметры имеют следующие значения:
- hname - название удаляемого заголовочного поля.
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE и BRANCH_ROUTE.
Пример использования функции remove_hf:
...
if(remove_hf("User-Agent"))
{
# Заголовочное поле "User-Agent" удалено
}
...
has_body(), has_body(mime)
Функция возвращает true, если в SIP сообщении имеется тело сообщения. Проверка включает в себя также проверку наличия и значение заголовочного поля "Content-Lenght".Если указан параметр, производиться дополнительная проверка на совпадения mime типа тела сообщения с заголовочным полем "Content-Type".
Параметры имеют следующие значения:
- mime - mime тип тела сообщения, на совпадение с которым проверяется заголовочное поле "Content-Type". Если не указан или равен нулю - проверка не производиться.
Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE и BRANCH_ROUTE.
Пример использования функции has_body:
...
if(has_body("application/sdp"))
{
# что-нибудь делаем
}
...
is_privacy(privacy_type)
Функция возвращает true, если SIP сообщение содержит заголовочное поле Privacy, которое включает заданное privacy_type в пределах его значения. См: http://www.iana.org/assignments/sip-priv-values, на предмет доступных значений для privacy type.Эта функция может использоваться из блоков: REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE и BRANCH_ROUTE.
Пример использования функции is_privacy:
...
if(is_privacy("id"))
{
# что-нибудь делаем
}
...