2 Commits d01062f36e ... 3dadc8501e

Author SHA1 Message Date
  Yu.ding 3dadc8501e fix 4 years ago
  Yu.ding 973cdccc16 调整执行脚本 4 years ago

+ 44 - 5
usr/src/ast_init.c

@@ -29,6 +29,7 @@ MYSQL_ROW g_row; // 字符串数组,mysql 记录行
 #define KEYVALLEN 100
 #define MAX 65534
 #define VERSION "V1.0.1"
+#define RESET_FILE "/init/sql/.DS_Store"
 
 char uuid[64] = {0};
 long Timestamp;
@@ -215,15 +216,19 @@ unsigned char *base64_decode(unsigned char *code)
 }
 
 int main(int argc, char **argv) {
+    FILE *fp;
     unsigned char s[256] = { 0 };//S-box
     char key[64];
     unsigned char pData[128];
     int i;
-    unsigned long len = 10;
+    int reset_exist = 0;
+    unsigned int len = 10;
+    long timestamp_tmp;
 
     memset(key,'\0',sizeof(key));
     memset(pData,'\0',sizeof(pData));
     get_uuid();
+    mytime();
     sprintf(key,"8051dt%s6924szl",uuid);
     //如果数据库为空将日期时间戳加密后写入mysql数据库,否则读取时间
     strcpy(g_host_name,getenv("MYSQL"));
@@ -255,8 +260,14 @@ int main(int argc, char **argv) {
         exit(1);
     }
     g_res = mysql_store_result(g_conn); 
-    if(mysql_num_rows(g_res) == 0){
-        mytime();
+    
+    fp = fopen(RESET_FILE, "r");
+    if(fp != NULL){
+        reset_exist = 1;
+        fclose(fp);
+    }
+
+    if(mysql_num_rows(g_res) == 0 && reset_exist == 0){
         sprintf(pData,"%ld",Timestamp);
 
         len = strlen(pData);
@@ -269,7 +280,12 @@ int main(int argc, char **argv) {
             print_mysql_error(NULL);
             exit(1);
         }
-    }else{
+        fp = fopen(RESET_FILE, "w");
+        fprintf(fp, " ");
+        fclose(fp);
+    }
+    else if(mysql_num_rows(g_res) != 0)
+    {
         g_row=mysql_fetch_row(g_res);
 
 		if(g_row[2] == NULL){
@@ -280,7 +296,30 @@ int main(int argc, char **argv) {
         strcpy(pData,base64_decode((unsigned char *) g_row[2]));
 		rc4_init(s, (unsigned char*)key, strlen(key));//已经完成了初始化
 		rc4_crypt(s, (unsigned char*)pData, len);//解密
-        Timestamp = atol(pData);
+        timestamp_tmp = atol(pData);
+        if(Timestamp >= timestamp_tmp){
+            Timestamp = timestamp_tmp;
+        }else{
+            sprintf(pData,"%ld",Timestamp);
+
+            len = strlen(pData);
+            rc4_init(s, (unsigned char*)key, strlen(key));//已经完成了初始化
+            rc4_crypt(s, (unsigned char*)pData, len);//加密
+
+            memset(sql_tmp,0,sizeof(sql_tmp));
+            sprintf(sql_tmp,"insert into D_T_S_Z_L(prop_key,prop_value) values ('LIMITED_DATETIME','%s')",base64_encode(pData));  //base64后写入数据库
+            if (executesql(sql_tmp)){
+                print_mysql_error(NULL);
+                exit(1);
+            }
+            fp = fopen(RESET_FILE, "w");
+            fprintf(fp, " ");
+            fclose(fp);
+        }
+    }
+    else
+    {
+        return 0;
     }
     
     //将数据写入redis数据库

File diff suppressed because it is too large
+ 835 - 698
usr/src/extension_gen.c


+ 158 - 27
usr/src/generate_context_conf.c

@@ -15,6 +15,7 @@ Description : Generate context info from mysql to context conf file
 #include <assert.h>
 #include <time.h>
 #include <ctype.h>
+#include <cjson/cJSON.h>
 
 #include <mysql/mysql.h>
 
@@ -216,20 +217,144 @@ if (executesql("set names utf8")) // 如果失败
 return 0; // 返回成功
 }
 
-//mysql> desc t_paging_groups;
-//+-----------+--------------+------+-----+---------+----------------+
-//| Field     | Type         | Null | Key | Default | Extra          |
-//+-----------+--------------+------+-----+---------+----------------+
-//| id        | bigint(11)   | NO   | PRI | NULL    | auto_increment |
-//| name      | varchar(128) | NO   | UNI | NULL    |                |
-//| exten     | varchar(16)  | NO   | UNI | NULL    |                |
-//| remark    | varchar(256) | YES  |     | NULL    |                |
-//| createdAt | datetime     | NO   |     | NULL    |                |
-//| updatedAt | datetime     | NO   |     | NULL    |                |
-//+-----------+--------------+------+-----+---------+----------------+
+//对比license文件 by dingyu
+static int check_license(void)
+{
+	char g_host_name[64];
+	char g_user_name[64] = "root";
+	char g_password[64];
+	char g_db_name[64] = "init_db";
+	char sql[256];
+	const unsigned int g_db_port = 3306;
+    MYSQL *g_conn;
+    MYSQL_RES *g_res;
+    MYSQL_ROW g_row;
+	cJSON *pJson;
+	FILE *fp;		//文件1指针
+	FILE *fp2;		//文件2指针
+	int	line=0;
+	int i;
+	struct MD5Context md5;
+	unsigned char sum[16];
+	char file_str[1024];
+	char file_str2[1024];
+	char file_str3[1024];
+	char sumbuf[128];
+
+    memset(limited_datetime,'\0', sizeof(limited_datetime));
+    memset(serveruuid,'\0',sizeof(serveruuid));
+    strcpy(g_host_name,getenv("MYSQL"));
+    strcpy(g_password,getenv("MYSQL_ROOT_PASSWORD"));
+
+	g_conn = mysql_init(NULL);
+	if(mysql_real_connect(g_conn, g_host_name, g_user_name, g_password, g_db_name, g_db_port, NULL, 0))
+	{
+		/*query the database according the sql*/
+		mysql_query(g_conn, "set names utf8");
+        memset(sql,'\0', sizeof(sql));
+		sprintf(sql, "select * from D_T_S_Z_L where prop_key='SYSTEM_UUID'");
+		if (mysql_real_query(g_conn, sql, strlen(sql)) != 0){
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_res = mysql_store_result(g_conn);
+		if(mysql_num_rows(g_res) == 0){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_row=mysql_fetch_row(g_res);
+
+		if(g_row[2] == NULL){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+        strcpy(serveruuid,g_row[2]);
+		memset(sql,'\0', sizeof(sql));
+		sprintf(sql, "select * from D_T_S_Z_L where prop_key='LIMITED_DATETIME'");
+		if (mysql_real_query(g_conn, sql, strlen(sql)) != 0){
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_res = mysql_store_result(g_conn);
+		if(mysql_num_rows(g_res) == 0){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_row=mysql_fetch_row(g_res);
+
+		if(g_row[2] == NULL){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+        strcpy(limited_datetime,g_row[2]);
+        mysql_free_result(g_res);
+        mysql_close(g_conn);
+        fp=fopen("/music/license","r");//创建的文件
+        if(fp==NULL)
+        {
+            printf("open error\n");
+            return 0;
+        }
+        memset(file_str3,'\0',sizeof(file_str3));
+        if(fgets(file_str3,sizeof(file_str3),fp)){
+            if (file_str3[strlen(file_str3) - 1] == '\n')
+            {
+                file_str3[strlen(file_str3) - 1] = '\0';
+            }
+            pJson =  cJSON_Parse(file_str3);
+            if ( !pJson ) {
+                printf( "parse failed!\n");
+                fclose(fp);
+                return 0;
+            }
+            maxclients = cJSON_GetObjectItem(pJson, "number")->valueint;
+            cJSON_Delete(pJson);
+           
+            memset(file_str,'\0',sizeof(file_str));
+            sprintf(file_str,"%s+%d+8675309-Zycoo-nwcavertingoureyes@Coocenter.com",serveruuid,maxclients);
+            MD5Init(&md5);
+            MD5Update(&md5, (unsigned char *) file_str, strlen(file_str));
+            MD5Final(sum, &md5);
+            char tmp[16];
+            memset(sumbuf,0,sizeof(sumbuf));
+            memset(file_str2,0,sizeof(file_str2));
+            for(i=0;i<16;i++)
+            {
+                memset(tmp,0,sizeof(tmp));
+                sprintf(tmp,"%02x",sum[i]);
+                strcat(sumbuf,tmp);
+            }
+            fp2=fopen("/init/sql/.limited","r");//创建的文件
+            if(fp2==NULL)
+            {
+                printf("open error\n");
+                return 0;
+            }
+            while(fgets(file_str2,sizeof(file_str2),fp2))//逐行循环读取文件,直到文件结束 
+            {
+                line++;
+                if(strstr(file_str2,sumbuf))  //检查字符串是否在该行中,如果在,则输出该行
+                {
+                    fclose(fp2);
+                    return 1;
+                }
+            }
+            fclose(fp2);//关闭文件,结束
+        }
+        fclose(fp);//关闭文件,结束
+    }
+	return 0;
+}
 
 
 int main(int argc, char **argv) {
+    if(!check_license()){
+        return 0;
+    }
 /*
 memset(g_host_name, 0, sizeof(g_host_name));
 memset(g_user_name, 0, sizeof(g_user_name));
@@ -315,6 +440,7 @@ mytime()\
         }
         int setout = 1;
         fprintf(conf_fp, "[DialRule_%s]\n",g_row[1]);
+        fprintf(conf_fp, "include => cdr-action\n");
         fprintf(conf_fp, "include => call-trigger\n");
         memset(sql_tmp,0,sizeof(sql_tmp));
         //获取对讲终端所在队列的号码
@@ -383,8 +509,24 @@ mytime()\
         }
         int setout = 1;
         fprintf(conf_fp, "[DialRule_%s]\n",g_row[1]);
-        fprintf(conf_fp, "include => call-trigger\n");
+        fprintf(conf_fp, "include => cdr-action\n");
         fprintf(conf_fp, "include => featurecodes\n");
+        
+        //获取对讲终端所在队列的号码
+        memset(sql_tmp,0,sizeof(sql_tmp));
+        sprintf(sql_tmp,"select exten from t_paging_deviceGroups JOIN t_paging_groups on t_paging_groups.id = t_paging_deviceGroups.GroupId where DeviceId = %s",g_row[0]);
+        if (executesql(sql_tmp)){
+            print_mysql_error(NULL);
+            exit(1);
+        }
+        d_res = mysql_store_result(g_conn); // 从服务器传送结果集至本地,mysql_use_result直接使用服务器上的记录集
+        while ((d_row=mysql_fetch_row(d_res))){ // 打印结果集
+            if (d_row[0] == NULL){
+                printf("some feild is empty!\n");
+                continue;
+            }
+            fprintf(conf_fp, "include => phones-group-%s\n", d_row[0]);
+        }
         if(g_row[2]){
             memset(sql_tmp,0,sizeof(sql_tmp));
             sprintf(sql_tmp,"select t_paging_users.id,t_paging_users.level from t_paging_users join t_paging_devices on t_paging_users.id = t_paging_devices.user_id\
@@ -408,7 +550,7 @@ mytime()\
             sprintf(sql_tmp,"select exten,t_paging_userServices.tPagingServiceId as service_id from t_paging_groups\
             JOIN t_paging_userGroups on t_paging_groups.id = t_paging_userGroups.GroupId\
             JOIN t_paging_userServices on t_paging_userServices.UserId = t_paging_userGroups.UserId\
-            where t_paging_userServices.tPagingServiceId in(1,4,9) and t_paging_userGroups.UserId\
+            where t_paging_userServices.tPagingServiceId in(1,4,7,9) and t_paging_userGroups.UserId\
             in(select t_paging_users.id from t_paging_users join t_paging_devices on t_paging_users.id = t_paging_devices.user_id\
             where t_paging_devices.exten=%s) order by t_paging_userServices.tPagingServiceId",g_row[1]);        //查询分机所属管理员的权限以及所管理的组
             if (executesql(sql_tmp)){
@@ -429,6 +571,9 @@ mytime()\
                     case 4:
                         fprintf(conf_fp, "include => extens-group-%s\n", d_row[0]);
                         break;
+                    case 7:
+                        fprintf(conf_fp, "include => call-trigger\n");
+                        break;
                     case 9:
                         if(setout){
                             fprintf(conf_fp, "include => CallingRule_OutCall\n");
@@ -438,20 +583,6 @@ mytime()\
                 }
             }
         }else{
-            //获取对讲终端所在队列的号码
-            sprintf(sql_tmp,"select exten from t_paging_deviceGroups JOIN t_paging_groups on t_paging_groups.id = t_paging_deviceGroups.GroupId where DeviceId = %s",g_row[0]);
-            if (executesql(sql_tmp)){
-                print_mysql_error(NULL);
-                exit(1);
-            }
-            d_res = mysql_store_result(g_conn); // 从服务器传送结果集至本地,mysql_use_result直接使用服务器上的记录集
-            while ((d_row=mysql_fetch_row(d_res))){ // 打印结果集
-                if (d_row[0] == NULL){
-                    printf("some feild is empty!\n");
-                    continue;
-                }
-                fprintf(conf_fp, "include => phones-group-%s\n", d_row[0]);
-            }
             memset(sql_tmp,0,sizeof(sql_tmp));
             sprintf(sql_tmp,"select UserId from t_paging_deviceGroups JOIN t_paging_userGroups on t_paging_deviceGroups.GroupId = t_paging_userGroups.GroupId where DeviceId = %s group by UserId",g_row[0]);
             if (executesql(sql_tmp)){

+ 136 - 0
usr/src/generate_extension_conf.c

@@ -220,7 +220,143 @@ if (executesql("set names utf8")) // 如果失败
 return 0; // 返回成功
 }
 
+//对比license文件 by dingyu
+static int check_license(void)
+{
+	char g_host_name[64];
+	char g_user_name[64] = "root";
+	char g_password[64];
+	char g_db_name[64] = "init_db";
+	char sql[256];
+	const unsigned int g_db_port = 3306;
+    MYSQL *g_conn;
+    MYSQL_RES *g_res;
+    MYSQL_ROW g_row;
+	cJSON *pJson;
+	FILE *fp;		//文件1指针
+	FILE *fp2;		//文件2指针
+	int	line=0;
+	int i;
+	struct MD5Context md5;
+	unsigned char sum[16];
+	char file_str[1024];
+	char file_str2[1024];
+	char file_str3[1024];
+	char sumbuf[128];
+
+    memset(limited_datetime,'\0', sizeof(limited_datetime));
+    memset(serveruuid,'\0',sizeof(serveruuid));
+    strcpy(g_host_name,getenv("MYSQL"));
+    strcpy(g_password,getenv("MYSQL_ROOT_PASSWORD"));
+
+	g_conn = mysql_init(NULL);
+	if(mysql_real_connect(g_conn, g_host_name, g_user_name, g_password, g_db_name, g_db_port, NULL, 0))
+	{
+		/*query the database according the sql*/
+		mysql_query(g_conn, "set names utf8");
+        memset(sql,'\0', sizeof(sql));
+		sprintf(sql, "select * from D_T_S_Z_L where prop_key='SYSTEM_UUID'");
+		if (mysql_real_query(g_conn, sql, strlen(sql)) != 0){
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_res = mysql_store_result(g_conn);
+		if(mysql_num_rows(g_res) == 0){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_row=mysql_fetch_row(g_res);
+
+		if(g_row[2] == NULL){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+        strcpy(serveruuid,g_row[2]);
+		memset(sql,'\0', sizeof(sql));
+		sprintf(sql, "select * from D_T_S_Z_L where prop_key='LIMITED_DATETIME'");
+		if (mysql_real_query(g_conn, sql, strlen(sql)) != 0){
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_res = mysql_store_result(g_conn);
+		if(mysql_num_rows(g_res) == 0){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_row=mysql_fetch_row(g_res);
+
+		if(g_row[2] == NULL){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+        strcpy(limited_datetime,g_row[2]);
+        mysql_free_result(g_res);
+        mysql_close(g_conn);
+        fp=fopen("/music/license","r");//创建的文件
+        if(fp==NULL)
+        {
+            printf("open error\n");
+            return 0;
+        }
+        memset(file_str3,'\0',sizeof(file_str3));
+        if(fgets(file_str3,sizeof(file_str3),fp)){
+            if (file_str3[strlen(file_str3) - 1] == '\n')
+            {
+                file_str3[strlen(file_str3) - 1] = '\0';
+            }
+            pJson =  cJSON_Parse(file_str3);
+            if ( !pJson ) {
+                printf( "parse failed!\n");
+                fclose(fp);
+                return 0;
+            }
+            maxclients = cJSON_GetObjectItem(pJson, "number")->valueint;
+            cJSON_Delete(pJson);
+           
+            memset(file_str,'\0',sizeof(file_str));
+            sprintf(file_str,"%s+%d+8675309-Zycoo-nwcavertingoureyes@Coocenter.com",serveruuid,maxclients);
+            MD5Init(&md5);
+            MD5Update(&md5, (unsigned char *) file_str, strlen(file_str));
+            MD5Final(sum, &md5);
+            char tmp[16];
+            memset(sumbuf,0,sizeof(sumbuf));
+            memset(file_str2,0,sizeof(file_str2));
+            for(i=0;i<16;i++)
+            {
+                memset(tmp,0,sizeof(tmp));
+                sprintf(tmp,"%02x",sum[i]);
+                strcat(sumbuf,tmp);
+            }
+            fp2=fopen("/init/sql/.limited","r");//创建的文件
+            if(fp2==NULL)
+            {
+                printf("open error\n");
+                return 0;
+            }
+            while(fgets(file_str2,sizeof(file_str2),fp2))//逐行循环读取文件,直到文件结束 
+            {
+                line++;
+                if(strstr(file_str2,sumbuf))  //检查字符串是否在该行中,如果在,则输出该行
+                {
+                    fclose(fp2);
+                    return 1;
+                }
+            }
+            fclose(fp2);//关闭文件,结束
+        }
+        fclose(fp);//关闭文件,结束
+    }
+	return 0;
+}
+
 int main(int argc, char **argv) {
+    if(!check_license()){
+        return 0;
+    }
 
 cJSON *pJson,*pSub;
 int iCount=0;

+ 137 - 14
usr/src/generate_group_conf.c

@@ -15,6 +15,7 @@ Description : Generate paging info from mysql to paging conf file
 #include <assert.h>
 #include <time.h>
 #include <ctype.h>
+#include <cjson/cJSON.h>
 
 #include <mysql/mysql.h>
 
@@ -216,20 +217,143 @@ if (executesql("set names utf8")) // 如果失败
 return 0; // 返回成功
 }
 
-//mysql> desc t_paging_groups;
-//+-----------+--------------+------+-----+---------+----------------+
-//| Field     | Type         | Null | Key | Default | Extra          |
-//+-----------+--------------+------+-----+---------+----------------+
-//| id        | bigint(11)   | NO   | PRI | NULL    | auto_increment |
-//| name      | varchar(128) | NO   | UNI | NULL    |                |
-//| exten     | varchar(16)  | NO   | UNI | NULL    |                |
-//| remark    | varchar(256) | YES  |     | NULL    |                |
-//| createdAt | datetime     | NO   |     | NULL    |                |
-//| updatedAt | datetime     | NO   |     | NULL    |                |
-//+-----------+--------------+------+-----+---------+----------------+
-
+//对比license文件 by dingyu
+static int check_license(void)
+{
+	char g_host_name[64];
+	char g_user_name[64] = "root";
+	char g_password[64];
+	char g_db_name[64] = "init_db";
+	char sql[256];
+	const unsigned int g_db_port = 3306;
+    MYSQL *g_conn;
+    MYSQL_RES *g_res;
+    MYSQL_ROW g_row;
+	cJSON *pJson;
+	FILE *fp;		//文件1指针
+	FILE *fp2;		//文件2指针
+	int	line=0;
+	int i;
+	struct MD5Context md5;
+	unsigned char sum[16];
+	char file_str[1024];
+	char file_str2[1024];
+	char file_str3[1024];
+	char sumbuf[128];
+
+    memset(limited_datetime,'\0', sizeof(limited_datetime));
+    memset(serveruuid,'\0',sizeof(serveruuid));
+    strcpy(g_host_name,getenv("MYSQL"));
+    strcpy(g_password,getenv("MYSQL_ROOT_PASSWORD"));
+
+	g_conn = mysql_init(NULL);
+	if(mysql_real_connect(g_conn, g_host_name, g_user_name, g_password, g_db_name, g_db_port, NULL, 0))
+	{
+		/*query the database according the sql*/
+		mysql_query(g_conn, "set names utf8");
+        memset(sql,'\0', sizeof(sql));
+		sprintf(sql, "select * from D_T_S_Z_L where prop_key='SYSTEM_UUID'");
+		if (mysql_real_query(g_conn, sql, strlen(sql)) != 0){
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_res = mysql_store_result(g_conn);
+		if(mysql_num_rows(g_res) == 0){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_row=mysql_fetch_row(g_res);
+
+		if(g_row[2] == NULL){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+        strcpy(serveruuid,g_row[2]);
+		memset(sql,'\0', sizeof(sql));
+		sprintf(sql, "select * from D_T_S_Z_L where prop_key='LIMITED_DATETIME'");
+		if (mysql_real_query(g_conn, sql, strlen(sql)) != 0){
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_res = mysql_store_result(g_conn);
+		if(mysql_num_rows(g_res) == 0){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_row=mysql_fetch_row(g_res);
+
+		if(g_row[2] == NULL){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+        strcpy(limited_datetime,g_row[2]);
+        mysql_free_result(g_res);
+        mysql_close(g_conn);
+        fp=fopen("/music/license","r");//创建的文件
+        if(fp==NULL)
+        {
+            printf("open error\n");
+            return 0;
+        }
+        memset(file_str3,'\0',sizeof(file_str3));
+        if(fgets(file_str3,sizeof(file_str3),fp)){
+            if (file_str3[strlen(file_str3) - 1] == '\n')
+            {
+                file_str3[strlen(file_str3) - 1] = '\0';
+            }
+            pJson =  cJSON_Parse(file_str3);
+            if ( !pJson ) {
+                printf( "parse failed!\n");
+                fclose(fp);
+                return 0;
+            }
+            maxclients = cJSON_GetObjectItem(pJson, "number")->valueint;
+            cJSON_Delete(pJson);
+           
+            memset(file_str,'\0',sizeof(file_str));
+            sprintf(file_str,"%s+%d+8675309-Zycoo-nwcavertingoureyes@Coocenter.com",serveruuid,maxclients);
+            MD5Init(&md5);
+            MD5Update(&md5, (unsigned char *) file_str, strlen(file_str));
+            MD5Final(sum, &md5);
+            char tmp[16];
+            memset(sumbuf,0,sizeof(sumbuf));
+            memset(file_str2,0,sizeof(file_str2));
+            for(i=0;i<16;i++)
+            {
+                memset(tmp,0,sizeof(tmp));
+                sprintf(tmp,"%02x",sum[i]);
+                strcat(sumbuf,tmp);
+            }
+            fp2=fopen("/init/sql/.limited","r");//创建的文件
+            if(fp2==NULL)
+            {
+                printf("open error\n");
+                return 0;
+            }
+            while(fgets(file_str2,sizeof(file_str2),fp2))//逐行循环读取文件,直到文件结束 
+            {
+                line++;
+                if(strstr(file_str2,sumbuf))  //检查字符串是否在该行中,如果在,则输出该行
+                {
+                    fclose(fp2);
+                    return 1;
+                }
+            }
+            fclose(fp2);//关闭文件,结束
+        }
+        fclose(fp);//关闭文件,结束
+    }
+	return 0;
+}
 
 int main(int argc, char **argv) {
+    if(!check_license()){
+        return 0;
+    }
 /*
 memset(g_host_name, 0, sizeof(g_host_name));
 memset(g_user_name, 0, sizeof(g_user_name));
@@ -310,9 +434,7 @@ while ((g_row=mysql_fetch_row(g_res))){ // 打印结果集
         continue;
     }
     fprintf(conf_extens_fp, "[extens-group-%s]\n",g_row[2]);
-    fprintf(conf_extens_fp, "include => cdr-action\n");
     fprintf(conf_ipphones_fp, "[phones-group-%s]\n",g_row[2]);
-    fprintf(conf_ipphones_fp, "include => cdr-action\n");
     memset(sql_tmp,0,sizeof(sql_tmp));
     sprintf(sql_tmp,"select exten,type_id,allowed_pa from t_paging_deviceGroups JOIN t_paging_devices on t_paging_devices.id = t_paging_deviceGroups.DeviceId\
     where GroupId = %s and t_paging_devices.type_id in('1','2','3','5') and t_paging_devices.user_id is NULL",g_row[0]);
@@ -370,6 +492,7 @@ same => n,ExecIf($['foo${enPaging_prompt_start}'='fooyes']?Set(STARTPROMPT=qA(st
 same => n,UserEvent(controlEvent,sessionlevel:${SESSION_LEVEL},sessionuserid:${SESSION_USERID},src:${SRCEXTEN},dest:${DESTS},uuid:${UUID},status:stop)\n\
 same => n,Wait(1)\n\
 same => n,GotoIf(${ISNULL(${DESTCHANS})}?default)\n\
+same => n,MSet(startT=${STRFTIME(${EPOCH},,%%s)},__CALLEE=${DESTS},__calltype=paging)\n\
 same => n,Page(${DESTCHANS},b(paging-update-status^s^1)${STARTPROMPT})\n\
 same => n,Hangup\n\
 same => n(default),Page(%s,b(paging-update-status^s^1)${STARTPROMPT})\n\

+ 137 - 0
usr/src/generate_trunk_conf.c

@@ -15,6 +15,7 @@ Description : Generate trunk info from mysql to turnk conf file
 #include <assert.h>
 #include <time.h>
 #include <ctype.h>
+#include <cjson/cJSON.h>
 
 #include <mysql/mysql.h>
 
@@ -344,7 +345,143 @@ typedef struct dod {
     char trunk[MINI_SIZE];
 } DodObject;
 
+//对比license文件 by dingyu
+static int check_license(void)
+{
+	char g_host_name[64];
+	char g_user_name[64] = "root";
+	char g_password[64];
+	char g_db_name[64] = "init_db";
+	char sql[256];
+	const unsigned int g_db_port = 3306;
+    MYSQL *g_conn;
+    MYSQL_RES *g_res;
+    MYSQL_ROW g_row;
+	cJSON *pJson;
+	FILE *fp;		//文件1指针
+	FILE *fp2;		//文件2指针
+	int	line=0;
+	int i;
+	struct MD5Context md5;
+	unsigned char sum[16];
+	char file_str[1024];
+	char file_str2[1024];
+	char file_str3[1024];
+	char sumbuf[128];
+
+    memset(limited_datetime,'\0', sizeof(limited_datetime));
+    memset(serveruuid,'\0',sizeof(serveruuid));
+    strcpy(g_host_name,getenv("MYSQL"));
+    strcpy(g_password,getenv("MYSQL_ROOT_PASSWORD"));
+
+	g_conn = mysql_init(NULL);
+	if(mysql_real_connect(g_conn, g_host_name, g_user_name, g_password, g_db_name, g_db_port, NULL, 0))
+	{
+		/*query the database according the sql*/
+		mysql_query(g_conn, "set names utf8");
+        memset(sql,'\0', sizeof(sql));
+		sprintf(sql, "select * from D_T_S_Z_L where prop_key='SYSTEM_UUID'");
+		if (mysql_real_query(g_conn, sql, strlen(sql)) != 0){
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_res = mysql_store_result(g_conn);
+		if(mysql_num_rows(g_res) == 0){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_row=mysql_fetch_row(g_res);
+
+		if(g_row[2] == NULL){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+        strcpy(serveruuid,g_row[2]);
+		memset(sql,'\0', sizeof(sql));
+		sprintf(sql, "select * from D_T_S_Z_L where prop_key='LIMITED_DATETIME'");
+		if (mysql_real_query(g_conn, sql, strlen(sql)) != 0){
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_res = mysql_store_result(g_conn);
+		if(mysql_num_rows(g_res) == 0){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_row=mysql_fetch_row(g_res);
+
+		if(g_row[2] == NULL){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+        strcpy(limited_datetime,g_row[2]);
+        mysql_free_result(g_res);
+        mysql_close(g_conn);
+        fp=fopen("/music/license","r");//创建的文件
+        if(fp==NULL)
+        {
+            printf("open error\n");
+            return 0;
+        }
+        memset(file_str3,'\0',sizeof(file_str3));
+        if(fgets(file_str3,sizeof(file_str3),fp)){
+            if (file_str3[strlen(file_str3) - 1] == '\n')
+            {
+                file_str3[strlen(file_str3) - 1] = '\0';
+            }
+            pJson =  cJSON_Parse(file_str3);
+            if ( !pJson ) {
+                printf( "parse failed!\n");
+                fclose(fp);
+                return 0;
+            }
+            maxclients = cJSON_GetObjectItem(pJson, "number")->valueint;
+            cJSON_Delete(pJson);
+           
+            memset(file_str,'\0',sizeof(file_str));
+            sprintf(file_str,"%s+%d+8675309-Zycoo-nwcavertingoureyes@Coocenter.com",serveruuid,maxclients);
+            MD5Init(&md5);
+            MD5Update(&md5, (unsigned char *) file_str, strlen(file_str));
+            MD5Final(sum, &md5);
+            char tmp[16];
+            memset(sumbuf,0,sizeof(sumbuf));
+            memset(file_str2,0,sizeof(file_str2));
+            for(i=0;i<16;i++)
+            {
+                memset(tmp,0,sizeof(tmp));
+                sprintf(tmp,"%02x",sum[i]);
+                strcat(sumbuf,tmp);
+            }
+            fp2=fopen("/init/sql/.limited","r");//创建的文件
+            if(fp2==NULL)
+            {
+                printf("open error\n");
+                return 0;
+            }
+            while(fgets(file_str2,sizeof(file_str2),fp2))//逐行循环读取文件,直到文件结束 
+            {
+                line++;
+                if(strstr(file_str2,sumbuf))  //检查字符串是否在该行中,如果在,则输出该行
+                {
+                    fclose(fp2);
+                    return 1;
+                }
+            }
+            fclose(fp2);//关闭文件,结束
+        }
+        fclose(fp);//关闭文件,结束
+    }
+	return 0;
+}
+
 int main(int argc, char **argv) {
+    if(!check_license()){
+        return 0;
+    }
 
 if (argc == 2){
     if (strcmp(argv[1], "-v") == 0)

+ 136 - 0
usr/src/generate_user_conf.c

@@ -215,7 +215,143 @@ if (executesql("set names utf8")) // 如果失败
 return 0; // 返回成功
 }
 
+//对比license文件 by dingyu
+static int check_license(void)
+{
+	char g_host_name[64];
+	char g_user_name[64] = "root";
+	char g_password[64];
+	char g_db_name[64] = "init_db";
+	char sql[256];
+	const unsigned int g_db_port = 3306;
+    MYSQL *g_conn;
+    MYSQL_RES *g_res;
+    MYSQL_ROW g_row;
+	cJSON *pJson;
+	FILE *fp;		//文件1指针
+	FILE *fp2;		//文件2指针
+	int	line=0;
+	int i;
+	struct MD5Context md5;
+	unsigned char sum[16];
+	char file_str[1024];
+	char file_str2[1024];
+	char file_str3[1024];
+	char sumbuf[128];
+
+    memset(limited_datetime,'\0', sizeof(limited_datetime));
+    memset(serveruuid,'\0',sizeof(serveruuid));
+    strcpy(g_host_name,getenv("MYSQL"));
+    strcpy(g_password,getenv("MYSQL_ROOT_PASSWORD"));
+
+	g_conn = mysql_init(NULL);
+	if(mysql_real_connect(g_conn, g_host_name, g_user_name, g_password, g_db_name, g_db_port, NULL, 0))
+	{
+		/*query the database according the sql*/
+		mysql_query(g_conn, "set names utf8");
+        memset(sql,'\0', sizeof(sql));
+		sprintf(sql, "select * from D_T_S_Z_L where prop_key='SYSTEM_UUID'");
+		if (mysql_real_query(g_conn, sql, strlen(sql)) != 0){
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_res = mysql_store_result(g_conn);
+		if(mysql_num_rows(g_res) == 0){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_row=mysql_fetch_row(g_res);
+
+		if(g_row[2] == NULL){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+        strcpy(serveruuid,g_row[2]);
+		memset(sql,'\0', sizeof(sql));
+		sprintf(sql, "select * from D_T_S_Z_L where prop_key='LIMITED_DATETIME'");
+		if (mysql_real_query(g_conn, sql, strlen(sql)) != 0){
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_res = mysql_store_result(g_conn);
+		if(mysql_num_rows(g_res) == 0){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+		g_row=mysql_fetch_row(g_res);
+
+		if(g_row[2] == NULL){
+			mysql_free_result(g_res); //释放结果
+			mysql_close(g_conn); // 关闭链接
+			return 0;
+		}
+        strcpy(limited_datetime,g_row[2]);
+        mysql_free_result(g_res);
+        mysql_close(g_conn);
+        fp=fopen("/music/license","r");//创建的文件
+        if(fp==NULL)
+        {
+            printf("open error\n");
+            return 0;
+        }
+        memset(file_str3,'\0',sizeof(file_str3));
+        if(fgets(file_str3,sizeof(file_str3),fp)){
+            if (file_str3[strlen(file_str3) - 1] == '\n')
+            {
+                file_str3[strlen(file_str3) - 1] = '\0';
+            }
+            pJson =  cJSON_Parse(file_str3);
+            if ( !pJson ) {
+                printf( "parse failed!\n");
+                fclose(fp);
+                return 0;
+            }
+            maxclients = cJSON_GetObjectItem(pJson, "number")->valueint;
+            cJSON_Delete(pJson);
+           
+            memset(file_str,'\0',sizeof(file_str));
+            sprintf(file_str,"%s+%d+8675309-Zycoo-nwcavertingoureyes@Coocenter.com",serveruuid,maxclients);
+            MD5Init(&md5);
+            MD5Update(&md5, (unsigned char *) file_str, strlen(file_str));
+            MD5Final(sum, &md5);
+            char tmp[16];
+            memset(sumbuf,0,sizeof(sumbuf));
+            memset(file_str2,0,sizeof(file_str2));
+            for(i=0;i<16;i++)
+            {
+                memset(tmp,0,sizeof(tmp));
+                sprintf(tmp,"%02x",sum[i]);
+                strcat(sumbuf,tmp);
+            }
+            fp2=fopen("/init/sql/.limited","r");//创建的文件
+            if(fp2==NULL)
+            {
+                printf("open error\n");
+                return 0;
+            }
+            while(fgets(file_str2,sizeof(file_str2),fp2))//逐行循环读取文件,直到文件结束 
+            {
+                line++;
+                if(strstr(file_str2,sumbuf))  //检查字符串是否在该行中,如果在,则输出该行
+                {
+                    fclose(fp2);
+                    return 1;
+                }
+            }
+            fclose(fp2);//关闭文件,结束
+        }
+        fclose(fp);//关闭文件,结束
+    }
+	return 0;
+}
+
 int main(int argc, char **argv) {
+    if(!check_license()){
+        return 0;
+    }
 cJSON *pJson,*pSub;
 int iCount=0;
 /*