Преглед на файлове

1、修复部分web后端内存泄漏;
2、修复分组名称不能修改bug;
3、修复可插入重名的用户bug;
4、调整ROM容量检测周期为1min

liyuezong преди 2 години
родител
ревизия
c9564a79b3
променени са 6 файла, в които са добавени 213 реда и са изтрити 30 реда
  1. 168 27
      pro/src/appweb_handle.c
  2. 16 0
      pro/src/json_handle.c
  3. 1 0
      pro/src/json_handle.h
  4. 26 1
      pro/src/sqlite_handle.c
  5. 1 1
      pro/src/sqlite_handle.h
  6. 1 1
      pro/src/sys.c

+ 168 - 27
pro/src/appweb_handle.c

@@ -4074,6 +4074,13 @@ static void serviceManagement(void *conn)
                 }               
             }
         }
+        GroupInfo *node;
+        GroupInfo *next;
+        list_for_each_entry_safe(node, next, &group_list.list, list)
+        {
+            list_del(&node->list);
+            free(node);
+        }
         ack_str = ctrl_sts_ack_to_json();
     }
     else if (strcmp(_serviceManageRequestInfo.type, "listFzQuery") == 0) // 分组查询
@@ -4086,6 +4093,48 @@ static void serviceManagement(void *conn)
             // 返回分组信息
             ack_str = service_group_ack_to_json(&group_list);
         }
+        GroupInfo *node;
+        GroupInfo *next;
+        list_for_each_entry_safe(node, next, &group_list.list, list)
+        {
+            list_del(&node->list);
+            free(node);
+        }
+    }
+    else if (strcmp(_serviceManageRequestInfo.type, "updateFz") == 0) // 分组修改
+    {
+        if (_serviceManageRequestInfo._group_info.opergroupid && _serviceManageRequestInfo._group_info.updategroupName)
+        {
+            int ngroup = atoi(_serviceManageRequestInfo._group_info.opergroupid);
+            // 查询分组信息
+            GroupInfo group_list;
+            INIT_LIST_HEAD(&group_list.list);
+            if (0 == dev_get_group_info(__globalDeviceManage.db, &group_list))
+            {
+                GroupInfo *_GroupInfoTemp = NULL;
+                list_for_each_entry(_GroupInfoTemp, &group_list.list, list)
+                {
+                    if (_GroupInfoTemp->GroupID == ngroup)
+                    {
+                        strncpy(_GroupInfoTemp->GroupName, _serviceManageRequestInfo._group_info.updategroupName, sizeof(_GroupInfoTemp->GroupName)-1);
+                        _GroupInfoTemp->GroupName[sizeof(_GroupInfoTemp->GroupName) - 1] = '\0';
+                        dev_update_group_info(__globalDeviceManage.db, _GroupInfoTemp);
+                    }
+                }
+            }
+            GroupInfo *node;
+            GroupInfo *next;
+            list_for_each_entry_safe(node, next, &group_list.list, list)
+            {
+                list_del(&node->list);
+                free(node);
+            }
+            char temp[100];
+            // sprintf(temp, "$打开$|$分组$|%d", ngroup);
+            sprintf(temp, "Update group %d", ngroup);
+            dev_insert_alarm_ctrl(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, ALARM_TYPE_OPRATION, temp);
+        }
+        ack_str = ctrl_sts_ack_to_json();
     }
     else if (strcmp(_serviceManageRequestInfo.type, "fzOpen") == 0) // 分组开
     {
@@ -4181,6 +4230,13 @@ static void serviceManagement(void *conn)
                 }
             }
         }
+        GroupInfo *node;
+        GroupInfo *next;
+        list_for_each_entry_safe(node, next, &group_list.list, list)
+        {
+            list_del(&node->list);
+            free(node);
+        }
         char temp[100];
         //sprintf(temp, "$打开$|$分组$|%d", ngroup);
         sprintf(temp, "Open group %d", ngroup);
@@ -4284,6 +4340,13 @@ static void serviceManagement(void *conn)
                 }
             }
         }
+        GroupInfo *node;
+        GroupInfo *next;
+        list_for_each_entry_safe(node, next, &group_list.list, list)
+        {
+            list_del(&node->list);
+            free(node);
+        }
         char temp[100];
        // sprintf(temp, "$关闭$|$分组$|%d", ngroup);
         sprintf(temp, "Close group %d", ngroup);
@@ -4335,7 +4398,22 @@ static void systemManagent(void *conn)
                 ack_str = service_userRole_ack_to_json(nName,&User_list, &Role_list);
             }
         }
-        
+
+        UserInfo *node;
+        UserInfo *next;
+        list_for_each_entry_safe(node, next, &User_list.list, list)
+        {
+            list_del(&node->list);
+            free(node);
+        }
+
+        RoleInfo *node1;
+        RoleInfo *next1;
+        list_for_each_entry_safe(node1, next1, &Role_list.list, list)
+        {
+            list_del(&node1->list);
+            free(node1);
+        }
     } 
     //查询用户列表 
     else if(strcmp(_UserRoleManageRequestInfo.type,"listUserQuery")==0)
@@ -4357,6 +4435,21 @@ static void systemManagent(void *conn)
                 ack_str = service_userQuery_ack_to_json(nName, &User_list, &Role_list);
             }
         }
+        UserInfo *node;
+        UserInfo *next;
+        list_for_each_entry_safe(node, next, &User_list.list, list)
+        {
+            list_del(&node->list);
+            free(node);
+        }
+
+        RoleInfo *node1;
+        RoleInfo *next1;
+        list_for_each_entry_safe(node1, next1, &Role_list.list, list)
+        {
+            list_del(&node1->list);
+            free(node1);
+        }
     }   
     //删除用户
     else if(strcmp(_UserRoleManageRequestInfo.type,"deleteUser")==0)
@@ -4384,6 +4477,13 @@ static void systemManagent(void *conn)
                     }
                 }
             }
+            UserInfo *node;
+            UserInfo *next;
+            list_for_each_entry_safe(node, next, &User_list.list, list)
+            {
+                list_del(&node->list);
+                free(node);
+            }
         }
         if (!CurUserFlag)
         {
@@ -4418,6 +4518,7 @@ static void systemManagent(void *conn)
         new_user->product_id =  __globalDeviceManage._globalDevInfo.product_id;
 
         int nMaxUserNum=1;
+        bool existFlag=false;
         UserInfo User_list;
         INIT_LIST_HEAD(&User_list.list);
        // 查询角色信息
@@ -4426,7 +4527,6 @@ static void systemManagent(void *conn)
 
         if (0 == dev_get_user_info(__globalDeviceManage.db, &User_list) && 0 == dev_get_role_info(__globalDeviceManage.db, &Role_list))
         {
-
             UserInfo *_UserInfoTemp = NULL;
             list_for_each_entry(_UserInfoTemp, &User_list.list, list)
             {
@@ -4437,34 +4537,69 @@ static void systemManagent(void *conn)
                 {
                     nMaxUserNum=_UserInfoTemp->userID;
                 }
-            }
-
-            new_user->userID = nMaxUserNum+1;
 
-            new_user->userName = malloc(256);
-            strcpy(new_user->userName, _UserRoleManageRequestInfo.userName);
-            new_user->userPW = malloc(256);
-            strcpy(new_user->userPW, _UserRoleManageRequestInfo.password);
-            new_user->nickName = malloc(256);
-            strcpy(new_user->nickName, _UserRoleManageRequestInfo.nickName);
-            new_user->roleID = _UserRoleManageRequestInfo.roleId;//GetRoleIDByName(_UserRoleManageRequestInfo.roleName,&Role_list);
-
-            new_user->createTime = malloc(64);
-            struct tm *t;
-            struct timeval tv;
-            gettimeofday(&tv, NULL);
-            t = localtime(&tv.tv_sec);
-            sprintf(new_user->createTime, "%04d-%02d-%02d %02d:%02d:%02d", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour,  t->tm_min, t->tm_sec);
+                if (strcmp(_UserInfoTemp->userName, _UserRoleManageRequestInfo.userName) == 0)
+                {
+                    existFlag = true;
+                    break;
+                }
+                
+            }
 
-            dev_insert_user_info(__globalDeviceManage.db, new_user);
+            if (existFlag)
+            {
+                ack_str = ctrl_breaker_err_ack_to_json("User already exists!");
+            }
+            else
+            {
+                new_user->userID = nMaxUserNum + 1;
+
+                new_user->userName = malloc(256);
+                strcpy(new_user->userName, _UserRoleManageRequestInfo.userName);
+                new_user->userPW = malloc(256);
+                strcpy(new_user->userPW, _UserRoleManageRequestInfo.password);
+                new_user->nickName = malloc(256);
+                strcpy(new_user->nickName, _UserRoleManageRequestInfo.nickName);
+                new_user->roleID = _UserRoleManageRequestInfo.roleId; // GetRoleIDByName(_UserRoleManageRequestInfo.roleName,&Role_list);
+
+                new_user->createTime = malloc(64);
+                struct tm *t;
+                struct timeval tv;
+                gettimeofday(&tv, NULL);
+                t = localtime(&tv.tv_sec);
+                sprintf(new_user->createTime, "%04d-%02d-%02d %02d:%02d:%02d", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
+
+                dev_insert_user_info(__globalDeviceManage.db, new_user);
+
+                free(new_user->userName);
+                free(new_user->userPW);
+                free(new_user->nickName);
+                free(new_user->createTime);
+
+                char temp[100];
+                // sprintf(temp, "$添加$|$用户$|%s", _UserRoleManageRequestInfo.userName);
+                sprintf(temp, "Add user %s", _UserRoleManageRequestInfo.userName);
+                dev_insert_alarm_ctrl(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, ALARM_TYPE_OPRATION, temp);
+                
+                ack_str=ctrl_sts_ack_to_json();
+            }
+        }       
+        free(new_user);
+        UserInfo *node;
+        UserInfo *next;
+        list_for_each_entry_safe(node, next, &User_list.list, list)
+        {
+            list_del(&node->list);
+            free(node);
         }
 
-        char temp[100];
-        //sprintf(temp, "$添加$|$用户$|%s", _UserRoleManageRequestInfo.userName);
-        sprintf(temp, "Add user %s", _UserRoleManageRequestInfo.userName);
-        dev_insert_alarm_ctrl(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, ALARM_TYPE_OPRATION, temp);
-
-        ack_str=ctrl_sts_ack_to_json();
+        RoleInfo *node1;
+        RoleInfo *next1;
+        list_for_each_entry_safe(node1, next1, &Role_list.list, list)
+        {
+            list_del(&node1->list);
+            free(node1);
+        }
     }   
     //更新用户信息
     else if(strcmp(_UserRoleManageRequestInfo.type,"updateUser")==0)
@@ -4487,14 +4622,20 @@ static void systemManagent(void *conn)
 
         dev_update_user_info(__globalDeviceManage.db, new_user);
 
+        free(new_user->userName);
+        free(new_user->userPW);
+        free(new_user->nickName);
+        free(new_user->createTime);
+        free(new_user);
         char temp[100];
         //sprintf(temp, "$修改$|$用户$|%s", _UserRoleManageRequestInfo.userName);
          sprintf(temp, "Update user %s", _UserRoleManageRequestInfo.userName);
         dev_insert_alarm_ctrl(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, ALARM_TYPE_OPRATION, temp);
 
         ack_str=ctrl_sts_ack_to_json();
-    }    
 
+    }    
+  
     cJSON_Delete(cjson);
     http_reply(conn, 200, ack_str);
     cJSON_free((void*)ack_str);

+ 16 - 0
pro/src/json_handle.c

@@ -4741,6 +4741,22 @@ cJSON* json_to_service_manage(const char* str,_ServiceManageRequestInfo* _servic
             _serviceManageRequestInfo->_group_info.opergroupid = cjson_Group_fzh->valuestring;
         }
     }
+    else if (strcmp(_serviceManageRequestInfo->type, "updateFz") == 0)
+    {
+        cJSON *cjson_Group_fzh = cJSON_GetObjectItem(cjson, "fzh");
+
+        if (cjson_Group_fzh != NULL)
+        {
+            _serviceManageRequestInfo->_group_info.opergroupid = cjson_Group_fzh->valuestring;
+        }
+
+        cJSON *cjson_Group_fzmc = cJSON_GetObjectItem(cjson, "fzmc");
+
+        if (cjson_Group_fzmc != NULL)
+        {
+            _serviceManageRequestInfo->_group_info.updategroupName = cjson_Group_fzmc->valuestring;
+        }
+    }
     return cjson;
 }
 

+ 1 - 0
pro/src/json_handle.h

@@ -429,6 +429,7 @@ typedef struct
     char* xlnumber;
     char* jgnumber;
     char* opergroupid;
+    char* updategroupName;
 }_GROUP_ServiceRequestInfo;
 
 

+ 26 - 1
pro/src/sqlite_handle.c

@@ -94,7 +94,7 @@ int sqlite_init(sqlite3** db,pthread_mutex_t* pDBMutex, const char* daba_name)
     ret = sqlite3_open(daba_name,db);
     if(ret != SQLITE_OK)
         return -1 ;
-    char SetData[]="PRAGMA cache_size = 0; VACUUM;";
+    char SetData[]="PRAGMA cache_size = 0;";//"PRAGMA cache_size = 0; VACUUM;";
     ret = sqlite3_exec(*db,SetData,NULL,NULL,&errorMsg);
     return 0;
 }
@@ -3153,6 +3153,31 @@ int dev_get_group_info(sqlite3 *db, GroupInfo* _globalgroupInfo)
     return 0;
 }
 
+int dev_update_group_info(sqlite3 *db, GroupInfo* _globalgroupInfo)
+{
+    int res = 0 ;
+    int rowIndex = 1 ;
+    char *errorMsg = NULL;
+    int nrow = 0;               //满足条件的记录数目
+    int ncolumn = 0;            //每条记录包含的字段数据
+    char** pResult = NULL;  //用来指向sql执行结果的指针
+    char* err_msg=NULL;
+    char select_sql[1024] = {0};
+
+    if (_globalgroupInfo == NULL)
+    {
+        return -1;
+    }
+    sprintf(select_sql, "UPDATE Table_GroupManage SET groupName='%s' WHERE groupID=%d AND product_id=%d;",_globalgroupInfo->GroupName,_globalgroupInfo->GroupID, __globalDeviceManage._globalDevInfo.product_id);
+    res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
+    if(res != SQLITE_OK) {
+        log_e("sqlite handle error: %s\n%s\n", err_msg,select_sql); sqlite3_free(err_msg);
+        return -1 ;
+    }
+    sqlite3_free_table(pResult);
+
+    return 0;
+}
 
 ///用户管理
 int dev_update_user_info(sqlite3 *db, UserInfo* _globaluserInfo)                     

+ 1 - 1
pro/src/sqlite_handle.h

@@ -112,7 +112,7 @@ int dev_insert_alarm_ctrl(sqlite3* db,int product_id,int nAlarmType,char* alarm_
 int dev_delete__group_info(sqlite3 *db,int product_id);
 int dev_insert_group_info(sqlite3 *db,GroupInfo* _globalgroupInfo);
 int dev_get_group_info(sqlite3 *db, GroupInfo* _globalgroupInfo);
-
+int dev_update_group_info(sqlite3 *db, GroupInfo* _globalgroupInfo);
 
 int dev_update_user_info(sqlite3 *db, UserInfo* _globaluserInfo);
 int dev_insert_user_info(sqlite3 *db,UserInfo* _globaluserInfo);

+ 1 - 1
pro/src/sys.c

@@ -1166,7 +1166,7 @@ quit:
     #define ROM_PERIOD      1
 #else
     #define ROM_THRD        50
-    #define ROM_PERIOD      1
+    #define ROM_PERIOD      60
 #endif
 
 static void mem_check(void)