Команда Perl() приложения res_perl


Copyright (C) 2005, Anthony Minessale
Anthony Minessale

res_perl версии 3.5 доступен на: PBXFreeware.org

Описание:

res_perl - это модуль "mod_perl" адаптированный под Asterisk. res_perl использует встроенный интерпретатор Perl, для запуска Perl приложений "изнутри" работающего сервера Asterisk. Специальный Perl модуль AstAPI.pm для Asterisk будет всегда подгружаться, когда требуется выполнить Perl код в Asterisk, он позволяет приложению получить полный доступ к API сервера Asterisk.

Важные замечания:

Для данной версии, вам необходимо скомпилировать Perl с поддержкой usethreads и useithreads.
Для быстрой компиляции perl из исходных кодов, используйте 'make perl'
Замечание ***при этом уже существующая версия perl будет стерта***

Возможности:

res_perl позволяет выполнить Perl код из плана набора extensions.conf с помощью специального программного пакета Asterisk::Embed, который загружается при начале выполнения из файла /usr/local/res_perl/modules/asterisk_init.pm.
Первым аргументом команды Perl должно быть имя функции из пакета Asterisk::Embed, за которым следуют, разделенные символом ":", необязательные параметры для этой функции.

Например: exten => 1,1,Perl(myfunc:arg_1:arg_2:arg_n......)

Замечание Когда Вы выполняете команду Perl(), то для выполняемого Perl приложения будет создано свое окружение. Все изменения созданные в этом окружении, во время выполнения Perl кода, будут потеряны при завершении выполнения команды. Это ограничение, накладываемое механизмом thread во встроенном интерпретаторе Perl.

Если вы измените содержимое файла asterisk_init.pm, то Вам необходимо будет в CLI консоли Asterisk выполнить команду "perl labotomy", для вступления изменений в силу.
Замечание Использование данной команды не рекомендуется для рабочих серверов!

Так же существует модуль с именем LoadFile, который позволяет Вам сохранять Perl приложения в отдельных файлах и загружать их в память системы без необходимости рестарта. Файлы загружаются из директории /usr/local/res_perl/apps автоматически.

Пример: exten => 1,1,Perl(Loadfile:demo.pl:arg_1:arg_2:arg_n....)

Если Вы модифицировали файл demo.pl, то он, при следующем выполнении, будет загружен с диска, а не из памяти.

Для очистки кеша загруженных файлов используйте CLI команду "perl call LoadFileCacheAll". Смотри файл: /usr/local/res_perl/apps/demo.pl

Внутри Perl функций Вы имеете доступ к некоторым предопределенным командам API, которые определяются при запуске Asterisk.
Смотри содержимое файла: /usr/local/res_perl/modules/asterisk_init.pm, на предмет некоторых примеров
(Смотри файл AstAPIBase.c на предмет C определений, которые будут доступны в Ваших Perl приложениях, после компиляции и запуска.)

Специальные возвращаемые значения:


Существуют *некоторые* специальные команды выхода: (на данный момент только одна)

thread:

Это позволяет назначить perl функцию, которая будет выполнена по завершению задач.
Она получает один аргумент скалярного типа, содержащий значение, сколько раз эта функция выполнялась (начиная с 1)

Функция startup:

Perl функция startup(), будет вызвана из файла asterisk_init.pm, при загрузке данного модуля.


Функции:

Модуль res_perl также зарегистрирует функцию PERL в плане набора. В отличие от команды Perl(), функция PERL выполняется в Глобальном окружении и следовательно может использоваться для создания глобальных изменений в этом окружении. Во время выполнения функции PERL функции, выполнение всех других команд блокируется, следовательно, выполнение слишком большого набора инструкций в этой команде крайне нежелательно.

Функция PERL использует аргументы, аналогично команде Perl().
Пример: exten => 1,1,Dial($WARNING: No such module PERL! )


Конфигурация:

Модуль res_perl имеет возможность работать с обоими механизмами конфигурации asterisk в реальном времени (res_config) и realtime.
Модуль с именем AstConfig.pm даст Вам возможность создавать, загружать и сохранять файлы в формате файлов конфигурации asterisk.
Файл AstConfig.pm содержит специальный метод return_data(), который возвращает специальную версию конфигурационного объекта Perl-to-Asterisk, который может в дальнейшем передан в Asterisk. (Смотри функцию sub perl_config() в файле /usr/local/res_perl/modules/asterisk_init.pm)


Использование директивы SWITCH:

Модуль res_perl может обрабатывает Asterisk Switch API с помощью команды Perl аналогично тому, если бы эта директива вызывалась непосредственно из плана набора, следовательно с помощью Вашего Perl кода вы можете использовать все возможности этой директивы плана набора. Смотри подпрограмму perl_switch_register в файле /usr/local/res_perl/modules/asterisk_init.pm

Работа с записями CDR:

Модуль res_perl имеет возможности по внедрению в механизм обработки записей CDR. Подпрограмма perl_log вызывается с хешом всех полей записи CDR в качестве аргумента. А также, в ХЕШЕ %ENV уже содержаться %CHAN_VARS и %CDR_VARS.