Назад | Перейти на главную страницу

Маршрутизация с наименьшей стоимостью в Freeswitch - не удается прочитать файл конфигурации

У нас есть установка 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":

  1. Убедитесь, что Freeswitch скомпилирован с модулем mod_lcr
  2. Убедитесь, что Freeswitch загружает mod_lcr в конфигурациях автозагрузки
  3. Создайте таблицы для LCR. Каталог / usr / src / freeswitch / src / mod / applications / mod_lcr / sql / содержит сценарии для этого.
  4. Разработайте строку подключения для базы данных, которую вы собираетесь использовать, и поместите ее в тег XML «settings» в файле /usr/local/freeswitch/conf/autoload_configs/lcr.conf.xml.

Для баз данных Postgres это довольно просто. Вот явная настройка в файле lcr.conf.xml:

<settings>
   <param name="odbc-dsn" value="pgsql://hostaddr=127.0.0.1 dbname=freeswitch 
          user=freeswitch password=xxxx "/>
</settings>