天天看點

asterisk 加載 mysql_asterisk連接配接mysql資料庫

下面是以

版本安裝完成并測試過的小結.

配置檔案的樣例我們可以在每個包安裝後的目錄下看到.在make samples後,我們在/etc/asterisk/configs/目錄下有幾乎所有配置的樣例,沒有也可以到相應安裝包的configs目錄下去找

<1>資料庫的設定

1.使asterisk能連接配接上資料庫(asterisk-addons-1.4.7/configs/内可以看到設定的樣例): 在/etc/asterisk/res_mysql.conf内設定 如: [general] dbhost = localhost    //資料庫的位址,因為資料庫一般在asterisk啟動的機子上,是以就為localhost dbname = mya2billing    //庫名 dbuser = root        //資料庫登陸的使用者名 dbpass = 123456        //資料庫登陸密碼 dbport = 3306        //端口号 dbsock = /var/lib/mysql/mysql.sock    //mysql連接配接的檔案 這樣就連接配接上資料庫了. 2.上面我們連接配接 在/etc/asterisk/extconfig.conf内加連接配接引擎: sipusers => mysql,mya2billing,cc_sip_buddies//兩張電話注冊的表 sippeers => mysql,mya2billing,cc_sip_buddies 也就是讓sippeers連接配接對應 mya2billing庫内的cc_sip_buddies表,在下面會說明用處. 3.分析連接配接過程:(以struct ast_variable *ast_load_realtime(const char *family, ...)為例) (1)asterisk-1.4.23.1/include/asterisk/config.h内定義了struct ast_config_engine,在此上面typedef定義一種函數類型(typedef struct ast_variable *realtime_var_get(const char *database, const char *table, va_list ap)),而此函數類型就是在res_config_mysql.c内的函數類型,并在struct ast_config_engine内定義一個指針(realtime_var_get *realtime_func;)指向它,這樣就把這函數加到engine内了 (2)asterisk-addons-1.4.7内res_config_mysql.c進行與mysql的連接配接,運用的是mysql的CAPI接口函數.通過 static struct ast_config_engine mysql_engine = {     .name = "mysql",     .load_func = config_mysql,     .realtime_func = realtime_mysql,//用于查找     .realtime_multi_func = realtime_multi_mysql,//也是用于查找     .update_func = update_mysql    //修改 };結構體指向對應的函數來進行操作,而此結構體内.realtime_func就是在(1)内提到的函數指針,把此指針指到要響應的函數。 (3)使用這個接口函數 在config.c内ast_load_realtime()看到如何找到這個接口并運用的 struct ast_variable *ast_load_realtime(const char *family, ...) {     ............................        struct ast_config_engine *eng;     va_list ap;     va_start(ap, family);     eng = find_engine(family, db, sizeof(db), table, sizeof(table));//處理2中的連接配接引擎,也就是寫入db,table     if (eng && eng->realtime_func)         res = eng->realtime_func(db, table, ap);//在這裡找到并執行此函數     va_end(ap);     ................ } (4)函數肯定需要聲明才能用,在config.h檔案中聲明struct ast_variable *ast_load_realtime(const char *family, ...),隻要包含了config.h就能使用ast_load_realtime()函數了。自己寫一個也是這個流程。寫完後需要重新 make,makeinstall才會生效. (5)運用這個函數隻要在/etc/asterisk/extconfig.conf内加入需要連接配接的引擎,就可以運用了 //student => mysql,student,stuscore    //mysql資料庫類型,student資料庫,stuscore此庫内的表 ast_load_realtime("資料庫引擎", "字段名", "與字段名對應的值", NULL); //而電話登陸注冊時的連接配接則加 同樣我們對資料庫的操作還有Cdr:與其類似的試着做做. 在/etc/asterisk/cdr_mysql.conf内配置如下:(與上面mysql意思一樣,如果在此目錄下沒有,那我們是不是就可以在相應的 configs檔案内找到呢,是的) [global] hostname=localhost dbname=ipbx table=cdr password=123456 port=3306 sock=/var/lib/mysql/mysql.sock userfield=1