Команда Perl() приложения res_perl
Copyright (C) 2005, Anthony Minessale
Anthony Minessale <anthmct@yahoo.com>
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:<function>
Это позволяет назначить perl функцию, которая будет выполнена по завершению задач.
Она получает один аргумент скалярного типа, содержащий значение, сколько раз эта функция выполнялась (начиная с 1)
Функция startup:
Perl функция startup(), будет вызвана из файла asterisk_init.pm, при загрузке данного модуля.Функции:
Модуль res_perl также зарегистрирует функцию PERL в плане набора. В отличие от команды Perl(), функция PERL выполняется в Глобальном окружении и следовательно может использоваться для создания глобальных изменений в этом окружении. Во время выполнения функции PERL функции, выполнение всех других команд блокируется, следовательно, выполнение слишком большого набора инструкций в этой команде крайне нежелательно.Функция PERL использует аргументы, аналогично команде Perl().
Пример: exten => 1,1,Dial(${PERL(LoadFile:find_dest:${EXTENSION})})
Конфигурация:
Модуль 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)