|
@@ -27,11 +27,14 @@ MYSQL_ROW g_row; // 字符串数组,mysql 记录行
|
|
|
#define MYSQL_CONNECT_CONF "/etc/asterisk/exten_gen.ini"
|
|
|
#define EXTEN_IVR_FILE "/etc/asterisk/extensions_ivr_custom.conf"
|
|
|
#define EXTEN_DIALRULE_FILE "/etc/asterisk/extensions_dialrule_custom.conf"
|
|
|
+#define EXTEN_INBOUND_FILE "/etc/asterisk/extensions_inbound_custom.conf"
|
|
|
+#define EXTEN_GLOBAL_FILE "/etc/asterisk/extensions_global_custom.conf"
|
|
|
#define KEYVALLEN 100
|
|
|
#define VERSION "V1.0.1"
|
|
|
|
|
|
#define QUERY_IVR_SQL "select name,exten,prompt,loops,timeout,language,dialplan,keys_action from t_pbx_ivr"
|
|
|
#define QUERY_DIALRULE_SQL "select t_pbx_users_voiptrunk.trunk as trunk,rule,del_prefix,add_before,add_after from t_pbx_dialrule join t_pbx_users_voiptrunk on t_pbx_users_voiptrunk.id=t_pbx_dialrule.trunk_id"
|
|
|
+#define QUERY_GLOBAL_SQL "select * from t_global_config"
|
|
|
|
|
|
char g_host_name[MINI_SIZE];
|
|
|
char g_user_name[MINI_SIZE];
|
|
@@ -40,6 +43,7 @@ char g_db_name[MINI_SIZE];
|
|
|
const unsigned int g_db_port = 3306;
|
|
|
char dialrule[MIDLE_SIZE];
|
|
|
char ivrstr[MAX_SIZE];
|
|
|
+char inboundstr[MIDLE_SIZE];
|
|
|
|
|
|
//读取配置文件函数----功能:删除左边空格
|
|
|
char *l_trim(char *szOutput, const char *szInput)
|
|
@@ -233,6 +237,7 @@ if (init_mysql()){
|
|
|
exit(1);
|
|
|
}
|
|
|
|
|
|
+//读取自动话务员的数据,并写入配置文件
|
|
|
if (executesql(QUERY_IVR_SQL)){
|
|
|
print_mysql_error(NULL);
|
|
|
exit(1);
|
|
@@ -336,6 +341,7 @@ exten = _IVR-X.,n,WaitExten(1)
|
|
|
exten = t,1,Hangup
|
|
|
*/
|
|
|
|
|
|
+//读取拨号规则的数据,并写入配置文件
|
|
|
if (executesql(QUERY_DIALRULE_SQL)){
|
|
|
print_mysql_error(NULL);
|
|
|
exit(1);
|
|
@@ -384,6 +390,102 @@ fputs("[CallingRule_OutCall]\n",conf_dialrule_fp);
|
|
|
fputs(dialrule,conf_dialrule_fp);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+//读取全局配置数据,并写入配置文件
|
|
|
+if (executesql(QUERY_GLOBAL_SQL)){
|
|
|
+ print_mysql_error(NULL);
|
|
|
+ exit(1);
|
|
|
+}
|
|
|
+
|
|
|
+g_res = mysql_store_result(g_conn); // 从服务器传送结果集至本地,mysql_use_result直接使用服务器上的记录集
|
|
|
+FILE *conf_inbound_fp = fopen(EXTEN_INBOUND_FILE, "w+");
|
|
|
+FILE *conf_global_fp = fopen(EXTEN_GLOBAL_FILE, "w+");
|
|
|
+
|
|
|
+if (conf_inbound_fp == NULL){
|
|
|
+ perror("Open paging conf file Error: ");
|
|
|
+ exit(1);
|
|
|
+ }
|
|
|
+
|
|
|
+if (conf_global_fp == NULL){
|
|
|
+ perror("Open paging conf file Error: ");
|
|
|
+ exit(1);
|
|
|
+ }
|
|
|
+
|
|
|
+ fprintf(conf_inbound_fp, ";!\n\
|
|
|
+;! Automatically generated configuration file\n\
|
|
|
+;! Filename: extensions_inbound_custom.conf (/etc/asterisk/extensions_inbound_custom.conf)\n\
|
|
|
+;! Generator: Generator INBOUND\n\
|
|
|
+;! Creation Date: %s\n\
|
|
|
+;!\n\n\
|
|
|
+",\
|
|
|
+mytime()\
|
|
|
+);
|
|
|
+
|
|
|
+ fprintf(conf_global_fp, ";!\n\
|
|
|
+;! Automatically generated configuration file\n\
|
|
|
+;! Filename: extensions_global_custom.conf (/etc/asterisk/extensions_global_custom.conf)\n\
|
|
|
+;! Generator: Generator GLOBAL\n\
|
|
|
+;! Creation Date: %s\n\
|
|
|
+;!\n\n\
|
|
|
+",\
|
|
|
+mytime()\
|
|
|
+);
|
|
|
+
|
|
|
+//t_pbx_users_voiptrunk.trunk as trunk,rule,del_prefix,add_before,add_after
|
|
|
+ while ((g_row=mysql_fetch_row(g_res))){ // 打印结果集
|
|
|
+ if (g_row[0] == NULL || g_row[1] == NULL || g_row[2] == NULL){
|
|
|
+ printf("some feild is empty!\n");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(strcmp(g_row[1],"pbx.voip.inbound") == 0){
|
|
|
+ memset(inboundstr,0,sizeof(inboundstr));
|
|
|
+ pJson = cJSON_Parse(g_row[2]);
|
|
|
+ if(strcmp(cJSON_GetObjectItem(pJson, "type")->valuestring, "hangup") == 0){
|
|
|
+ sprintf(inboundstr,"\
|
|
|
+[direct-analog]\n\
|
|
|
+exten => direct,1,Hangup()\n\
|
|
|
+[direct-voip]\n\
|
|
|
+exten => direct,1,Hangup()\n"
|
|
|
+ );
|
|
|
+ }
|
|
|
+ else if(strcmp(cJSON_GetObjectItem(pJson, "type")->valuestring, "extension") == 0){
|
|
|
+ sprintf(inboundstr,"\
|
|
|
+[direct-analog]\n\
|
|
|
+exten => direct,1,Goto(default,%s,1)\n\
|
|
|
+[direct-voip]\n\
|
|
|
+exten => direct,1,Goto(default,%s,1)\n",\
|
|
|
+cJSON_GetObjectItem(pJson, "exten")->valuestring,\
|
|
|
+cJSON_GetObjectItem(pJson, "exten")->valuestring\
|
|
|
+ );
|
|
|
+ }
|
|
|
+ else if(strcmp(cJSON_GetObjectItem(pJson, "type")->valuestring, "ivr") == 0){
|
|
|
+ sprintf(inboundstr,"\
|
|
|
+[direct-analog]\n\
|
|
|
+exten => direct,1,Goto(voicemenu-custom-%s,%s,1)\n\
|
|
|
+[direct-voip]\n\
|
|
|
+exten => direct,1,Goto(voicemenu-custom-%s,%s,1)\n",\
|
|
|
+cJSON_GetObjectItem(pJson, "exten")->valuestring,\
|
|
|
+cJSON_GetObjectItem(pJson, "exten")->valuestring,\
|
|
|
+cJSON_GetObjectItem(pJson, "exten")->valuestring,\
|
|
|
+cJSON_GetObjectItem(pJson, "exten")->valuestring\
|
|
|
+ );
|
|
|
+ }
|
|
|
+ fputs(inboundstr,conf_inbound_fp);
|
|
|
+ }
|
|
|
+ else if(strcmp(g_row[1],"paging.prompt.config") == 0){
|
|
|
+ pJson = cJSON_Parse(g_row[2]);
|
|
|
+ fprintf(conf_global_fp, "\
|
|
|
+enPaging_prompt_start = %s\n\
|
|
|
+enPaging_prompt_end = %s\n\
|
|
|
+",\
|
|
|
+cJSON_GetObjectItem(pJson, "start")->valuestring,\
|
|
|
+cJSON_GetObjectItem(pJson, "end")->valuestring\
|
|
|
+);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
fclose(conf_dialrule_fp);
|
|
|
fclose(conf_ivr_fp);
|
|
|
mysql_free_result(g_res); // 释放结果集
|