У нас есть установка Freeswitch как часть системы графического интерфейса FusionPBX. FusionPBX версии 3.7.1, Freeswitch версии 1.4.9. База данных, используемая FusionPBX, - Postgres.
Программа установки компилирует модуль маршрутизации с наименьшей стоимостью "mod_lcr" по умолчанию, и он включен в файле конфигурации модуля, модуль "/usr/local/freeswitch/mod/mod_lcr.so" присутствует.
Однако, похоже, я не могу использовать mod_lcr.
Выдача команды
reload mod_lcr
дает следующие ошибки:
2016-10-22 23:22:12.023181 [ERR] mod_lcr.c:1078 Unable to determine database RANDOM function
2016-10-22 23:22:12.023181 [DEBUG] mod_lcr.c:1110 param val is rate,quality,reliability
2016-10-22 23:22:12.023181 [DEBUG] mod_lcr.c:1113 arg #0/3 is rate
2016-10-22 23:22:12.023181 [DEBUG] mod_lcr.c:1113 arg #1/3 is quality
2016-10-22 23:22:12.023181 [DEBUG] mod_lcr.c:1113 arg #2/3 is reliability
2016-10-22 23:22:12.023181 [ERR] mod_lcr.c:2089 Unable to load lcr config file
2016-10-22 23:22:12.023181 [CRIT] switch_loadable_module.c:1447 Error Loading module /usr/local/freeswitch/mod/mod_lcr.so
**Module load routine returned an error**
Я просмотрел исходный код "mod_lcr.c" и не могу понять, в чем именно заключается ошибка. Он явно загружает конфигурацию и выполняет часть функции «lcr_load_config», как видно из того, что записано в консоль выше, но ошибки в точке, которую я не могу четко идентифицировать.
Похоже, это как-то связано с неправильным определением базы данных для этого модуля. В строке 1056 файла mod_lcr.c он должен записать имя источника данных в журнал после того, как прочитал xml-тег конфигурации "setting", но это не так. Тег настройки действительно существует - смотрите ниже, как выглядит конфигурация. Но он не устанавливает переменную globals.odbc_dsn.
Документация Freeswitch для "mod_lcr" очень скудна на этот счет и просто говорит
"Отредактируйте настройки по умолчанию для ваших профилей и информацию о подключении к базе данных /usr/local/freeswitch/conf/autoload_configs/lcr.conf.xml"
Но что мне нужно поместить в этот файл конфигурации?
По умолчанию в моей установке он содержит:
<settings>
<param name="odbc-dsn" value="$${dsn_system}"/>
</settings>
Я добавил таблицы lcr, carrier, carrier_gateway как в базу данных «freeswitch», так и в «fusionpbx». Без изменений, все та же ошибка.
Есть идеи, что здесь может быть не так?
Разобрался сам.
Фактически ошибка заключалась в отсутствии информации в базе данных. Сообщение об ошибке «не удается прочитать файл конфигурации» вводит в заблуждение.
Дело в том, что при установке FusionPBX не задана переменная «dsn_system». Можно установить эту переменную или явно указать строку подключения в файле конфигурации /usr/local/freeswitch/conf/autoload_configs/lcr.conf.xml.
Итак, чтобы улучшить страницу руководства Freeswitch для mod_lcr, вам нужно сделать следующее, чтобы использовать "mod_lcr":
Для баз данных Postgres это довольно просто. Вот явная настройка в файле lcr.conf.xml:
<settings>
<param name="odbc-dsn" value="pgsql://hostaddr=127.0.0.1 dbname=freeswitch
user=freeswitch password=xxxx "/>
</settings>