Voip

Freeswitch 中的最低成本路由 - 無法讀取配置文件

  • September 24, 2018

作為 FusionPBX GUI 系統的一部分,我們安裝了 Freeswitch。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”的一部分,從上面記錄到控制台的內容可以看出,但在我無法清楚辨識的地方出現錯誤。

這似乎與沒有為此模組正確定義數據庫有關。在 mod_lcr.c 的第 1056 行中,它應該在讀取配置的“設置”xml 標籤後將數據源名稱寫入日誌,但它沒有。設置標籤確實存在 - 請參閱下面的配置外觀。但它沒有設置“globals.odbc_dsn”變數。

“mod_lcr”的 Freeswitch 文件在這一點上非常吝嗇,只是說

“編輯配置文件和數據庫連接資訊的預設配置 /usr/local/freeswitch/conf/autoload_configs/lcr.conf.xml”

但是我需要在該配置文件中添加什麼?

預設情況下,在我的安裝中它包含:

<settings>
 <param name="odbc-dsn" value="$${dsn_system}"/>
</settings>

我將 lcr、carriers、carrier_gateway 表添加到數據庫“freeswitch”和“fusionpbx”中。沒有變化,仍然是同樣的錯誤。

任何想法這裡可能有什麼問題?

我自己想通了。

該錯誤實際上是缺少數據庫資訊。錯誤消息“無法讀取配置文件”具有誤導性。

關鍵是FusionPBX安裝沒有設置變數“dsn_system”。可以設置該變數,或者在配置文件 /usr/local/freeswitch/conf/autoload_configs/lcr.conf.xml 中明確聲明連接字元串。

因此,要改進 mod_lcr 的 Freeswitch 手冊頁,您需要執行以下操作才能使用“mod_lcr”:

  1. 確保使用 mod_lcr 模組編譯 Freeswitch
  2. 確保 Freeswitch 在自動載入配置中載入 mod_lcr
  3. 為 LCR 創建表。目錄 /usr/src/freeswitch/src/mod/applications/mod_lcr/sql/ 包含執行此操作的腳本。
  4. 為您打算使用的數據庫制定一個連接字元串,並將其放入文件 /usr/local/freeswitch/conf/autoload_configs/lcr.conf.xml 中的“設置”XML 標記中。

對於 Postgres 數據庫,這相當簡單。這是 lcr.conf.xml 文件中的顯式設置:

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

引用自:https://serverfault.com/questions/810736