Просмотр исходного кода

增加邮件发送多个文件功能
解决配置文件导入后异常的bug

guohui 1 год назад
Родитель
Сommit
97bba0e71b
10 измененных файлов с 265 добавлено и 231 удалено
  1. 6 7
      pro/src/app.c
  2. 5 2
      pro/src/appweb_handle.c
  3. 37 135
      pro/src/json_handle.c
  4. 1 3
      pro/src/json_handle.h
  5. 135 0
      pro/src/language_hashmap.c
  6. 1 1
      pro/src/language_hashmap.h
  7. 15 6
      pro/src/mail.c
  8. 10 10
      pro/src/paras.c
  9. 15 5
      pro/src/sqlite_handle.c
  10. 40 62
      pro/src/sys.c

+ 6 - 7
pro/src/app.c

@@ -200,10 +200,6 @@ static void* power_thread(void* arg)
     GlobalDeviceManager* _globalDeviceManager = (GlobalDeviceManager*)h->arg;
     _PowerDSManage_t* _powerDsManageTemp = NULL ;
     ProductInfo_t *prod=&_globalDeviceManager->_globalDevInfo.product;
-
-    dev_search_last_Index(_globalDeviceManager->db, &lastIndex, tabPower);       // 查询日志最大点
-    dev_search_last_Index(_globalDeviceManager->db, &lastIndex3, tabPower3);      // 查询日志最大点
-    InitHashTable(_globalDeviceManager);
     unsigned int samp_time = _globalDeviceManager->_globalDevInfo.product.samp_time;
     unsigned int usleepTime = samp_time*1000;
     unsigned int sSaveTime = _globalDeviceManager->_globalDevInfo.product.save_time;
@@ -211,6 +207,10 @@ static void* power_thread(void* arg)
 
     bool isErrorBreak=false;
     _globalDeviceManager->_ReloadChm_flag=false;
+
+    dev_search_last_Index(_globalDeviceManager->db, &lastIndex, tabPower);       // 查询日志最大点
+    dev_search_last_Index(_globalDeviceManager->db, &lastIndex3, tabPower3);      // 查询日志最大点
+
     list_for_each_entry(_globalPowerMangerTemp, &_globalDeviceManager->_globalPowerManger.list, list)
     {
         ret = g_switch_set_all_start_time_delay(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_ch_type,_globalPowerMangerTemp->product_saddr,_globalPowerMangerTemp->product_ch_addr,_globalPowerMangerTemp->product_ch_start_delay);
@@ -1965,7 +1965,7 @@ static int ntp_init(void)
 }
 
 
-int snmp_config(SNMPManager *m)
+int snmp_config(SNMPManager *m, int quit)
 {
     char path[200];
     char *conf="/snmp/conf/snmpd.conf";
@@ -2003,8 +2003,7 @@ int snmp_config(SNMPManager *m)
     }
 
     system("/etc/init.d/S90PDUApp restart snmpd");
-    //exit(0);
-    //thread_restart(THREAD_ID_SNMP);
+    if(quit) exit(0);
 
     return 0;
 }

+ 5 - 2
pro/src/appweb_handle.c

@@ -4001,8 +4001,8 @@ static void serviceManagement(void *conn)
             log_e("update snmp info err.");
         }
         else {
-            extern int snmp_config(SNMPManager *m);
-            snmp_config(&_globalSNMPManager);
+            extern int snmp_config(SNMPManager *m, int quit);
+            snmp_config(&_globalSNMPManager, 1);
         }
     }   
     //查询snmp_trap信息
@@ -5660,6 +5660,9 @@ static void controlBoardUpgrade(void *conn)
     if(strstr(hm->uri.buf, "listCbQuery")) {
 
     }
+    else if(strstr(hm->uri.buf, "type=importData")) {
+
+    }
 
 #if 0
     sprintf(path, "%s/%s", DOWN_FOLDER, "power.bin");

+ 37 - 135
pro/src/json_handle.c

@@ -1502,6 +1502,43 @@ char* upgrade_to_json(void)
     return str;
 }
 
+char* ctrlboard_to_json(void)
+{
+    char* str = NULL;
+    char *p,temp[200];
+    GlobalDeviceManager *dm=&__globalDeviceManage;
+    ProductInfo_t *prod=&dm->_globalDevInfo.product;
+
+    // 创建 JSON 对象
+    cJSON* root = cJSON_CreateObject(); 
+    // 添加基本键值对
+    cJSON_AddNumberToObject(root, "code", 200);       
+    cJSON* array = cJSON_CreateArray();
+    cJSON* data_field = cJSON_CreateObject();
+
+#if 0
+    sprintf(temp,"%d",prod->id);
+    cJSON_AddStringToObject(data_field,"productId",temp);
+    cJSON_AddStringToObject(data_field,"productName",prod->name);
+    cJSON_AddStringToObject(data_field,"productNumber",prod->name);
+    cJSON_AddStringToObject(data_field,"productChNumber",prod->name);
+    cJSON_AddStringToObject(data_field,"productVersion",prod->name);
+    cJSON_AddStringToObject(data_field,"upgradeDate",prod->name);
+    cJSON_AddStringToObject(data_field,"status",prod->name);
+#endif
+
+    cJSON_AddItemToArray(array, data_field);
+    cJSON_AddItemToObject(root, "data", array);
+
+    cJSON_AddStringToObject(root, "msg", language_Operation_Tips_Success[__globalDeviceManage._globalDevInfo.product.language]);    
+    //转换
+    str = cJSON_Print(root);    
+    //释放资源
+    cJSON_Delete(root);
+    return str;
+}
+
+
 char* vendor_info_to_json(GlobalDeviceInfo *dev)
 {
     char* str = NULL;
@@ -5724,138 +5761,3 @@ char* service_userRole_ack_to_json(char* _userName,UserInfo* __UserInfo_t,RoleIn
     return str;
 }
 
-int InitHashTable(GlobalDeviceManager *gdm)
-{
-    int r,nMaxSize=4;
-    int retry=0,step=100,cnt;
-    HashTable *table=NULL;
-
-    if(gdm==NULL) {
-        return -1;
-    }
-    gdm->alarmTab = NULL;
-
-retry:
-    cnt = step*(retry+1);
-    printf("___ hash table init, retry: %d, table size: %d\n", retry, cnt);
-    table = create_hash_table(cnt);
-    if(table==NULL) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_Ch[0],language_alarm_Ch,nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_V[0],language_alarm_V,nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_A[0],language_alarm_A,nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_W[0],language_alarm_W,nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_P[0],language_alarm_P,nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_Up[0],language_alarm_Up,nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_Down[0],language_alarm_Down,nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_ctrl_Open[0],language_alarm_ctrl_Open,nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_ctrl_Close[0],language_alarm_ctrl_Close,nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_Ctrl_ALL[0],language_alarm_Ctrl_ALL,nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_connect_ERROR[0],language_alarm_connect_ERROR,nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_Init_Success[0],language_alarm_Init_Success,nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_NULL_ERROR[0], language_alarm_NULL_ERROR, nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    //13
-    r = insert_Newhash(table,(const char*)language_temperature[0], language_temperature, nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_humidity[0], language_humidity, nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_atmosphere_gas[0], language_atmosphere_gas, nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_atmosphere_airflow[0], language_atmosphere_airflow, nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_atmosphere_pressure[0], language_atmosphere_pressure, nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    //18
-    r = insert_Newhash(table,(const char*)language_RS485_install[0], language_RS485_install, nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_RS485_master[0], language_alarm_RS485_master, nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_RS485_slave[0], language_alarm_RS485_slave, nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_NTP_install[0], language_NTP_install, nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    //22
-    r = insert_Newhash(table,(const char*)language_alarm_ctrl_OpenCH[0],language_alarm_ctrl_OpenCH,nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_ctrl_CloseCH[0],language_alarm_ctrl_CloseCH,nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_ctrl_Alarm[0],language_alarm_ctrl_Alarm,nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    //25
-    r = insert_Newhash(table,(const char*)language_alarm_Type_Power[0],language_alarm_Type_Power,nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_Type_Sensor[0],language_alarm_Type_Sensor,nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_Type_Network[0],language_alarm_Type_Network,nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    //28
-    r = insert_Newhash(table,(const char*)language_alarm_phaseA_lose[0], language_alarm_phaseA_lose, nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_phaseB_lose[0], language_alarm_phaseB_lose, nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    r = insert_Newhash(table,(const char*)language_alarm_phaseC_lose[0], language_alarm_phaseC_lose, nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    //31
-    r = insert_Newhash(table,(const char*)language_alarm_MAC_changed[0], language_alarm_MAC_changed, nMaxSize);
-    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
-
-    gdm->alarmTab = table;
-
-    log_d("___ hash table init OK, table size: %d\n", table->size);
-    return 0;
-
-repeat:
-    retry++;
-    free_hash_table(table);
-    goto retry;
-
-failed:
-    free_hash_table(table);
-    
-
-    return -1;
-}

+ 1 - 3
pro/src/json_handle.h

@@ -637,9 +637,6 @@ char* ws_chn_status_ack_to_json(int type,_OverChnPwrAckInfo* _over_chn_pwr_back_
 
 int json_to_switch_language(const char* str);
 
-int InitHashTable(GlobalDeviceManager *gdm);
-
-
 int GetRoleIDByUserName(char* _userName,UserInfo* __UserInfo_t);
 int GetRoleLevelByID(int _RoleID,RoleInfo* __RoleInfo_t);
 char* GetRoleNameByID(int _RoleID,RoleInfo* __RoleInfo_t);
@@ -654,5 +651,6 @@ char* over_all_breaker_chn_info_to_json(_OverBreakerChnInfo* _over_all_breaker_b
 char* over_all_breaker_switch_info_to_json(_OverBreakerSwitchInfo* _over_all_breaker_switch_info,int nWSType);
 char *breaker_status_ack_to_json(GlobalDeviceManager *gm,int slave);
 char* upgrade_to_json(void);
+char* ctrlboard_to_json(void);
 #endif
 

+ 135 - 0
pro/src/language_hashmap.c

@@ -152,3 +152,138 @@ void replace_sequences(char *str, HashTable *table) {
     str[output_len] = '\0'; // 确保字符串以null结尾  
 }  
 
+
+int init_hash_table(void)
+{
+    int r,nMaxSize=4;
+    int retry=0,step=100,cnt;
+    HashTable *table=NULL;
+    GlobalDeviceManager *dm=&__globalDeviceManage;
+
+    dm->alarmTab = NULL;
+
+retry:
+    cnt = step*(retry+1);
+    printf("___ hash table init, retry: %d, table size: %d\n", retry, cnt);
+    table = create_hash_table(cnt);
+    if(table==NULL) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_Ch[0],language_alarm_Ch,nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_V[0],language_alarm_V,nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_A[0],language_alarm_A,nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_W[0],language_alarm_W,nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_P[0],language_alarm_P,nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_Up[0],language_alarm_Up,nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_Down[0],language_alarm_Down,nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_ctrl_Open[0],language_alarm_ctrl_Open,nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_ctrl_Close[0],language_alarm_ctrl_Close,nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_Ctrl_ALL[0],language_alarm_Ctrl_ALL,nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_connect_ERROR[0],language_alarm_connect_ERROR,nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_Init_Success[0],language_alarm_Init_Success,nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_NULL_ERROR[0], language_alarm_NULL_ERROR, nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    //13
+    r = insert_Newhash(table,(const char*)language_temperature[0], language_temperature, nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_humidity[0], language_humidity, nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_atmosphere_gas[0], language_atmosphere_gas, nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_atmosphere_airflow[0], language_atmosphere_airflow, nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_atmosphere_pressure[0], language_atmosphere_pressure, nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    //18
+    r = insert_Newhash(table,(const char*)language_RS485_install[0], language_RS485_install, nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_RS485_master[0], language_alarm_RS485_master, nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_RS485_slave[0], language_alarm_RS485_slave, nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_NTP_install[0], language_NTP_install, nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    //22
+    r = insert_Newhash(table,(const char*)language_alarm_ctrl_OpenCH[0],language_alarm_ctrl_OpenCH,nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_ctrl_CloseCH[0],language_alarm_ctrl_CloseCH,nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_ctrl_Alarm[0],language_alarm_ctrl_Alarm,nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    //25
+    r = insert_Newhash(table,(const char*)language_alarm_Type_Power[0],language_alarm_Type_Power,nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_Type_Sensor[0],language_alarm_Type_Sensor,nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_Type_Network[0],language_alarm_Type_Network,nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    //28
+    r = insert_Newhash(table,(const char*)language_alarm_phaseA_lose[0], language_alarm_phaseA_lose, nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_phaseB_lose[0], language_alarm_phaseB_lose, nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    r = insert_Newhash(table,(const char*)language_alarm_phaseC_lose[0], language_alarm_phaseC_lose, nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    //31
+    r = insert_Newhash(table,(const char*)language_alarm_MAC_changed[0], language_alarm_MAC_changed, nMaxSize);
+    if(r==HASH_REPEAT) goto repeat; else if(r<HASH_REPEAT) goto failed;
+
+    dm->alarmTab = table;
+
+    log_d("___ hash table init OK, table size: %d\n", table->size);
+    return 0;
+
+repeat:
+    retry++;
+    free_hash_table(table);
+    goto retry;
+
+failed:
+    free_hash_table(table);
+    
+
+    return -1;
+}
+

+ 1 - 1
pro/src/language_hashmap.h

@@ -43,7 +43,7 @@ void free_hash_table(HashTable *table);
 // 替换管包裹字符
 void replace_sequences(char *str, HashTable *table);
 
-
+int init_hash_table(void);
 
 
 #endif

+ 15 - 6
pro/src/mail.c

@@ -79,8 +79,9 @@ static void fill_send_buff(char *dst_buf, const char *to,const char *from,const
                     "%s\r\n"
                     "\r\n",subject,from,to,asctime(tblock),body);
 }
-static int curl_add_files(curl_mimepart *part, char *attach)
+static int curl_add_files(curl_mime *mm, char *attach)
 {
+    curl_mimepart *part;
     int nlen=strlen(attach);
     char *p,*tmp=strdup(attach),*p2;
 
@@ -90,13 +91,21 @@ static int curl_add_files(curl_mimepart *part, char *attach)
 
     p = tmp;
     p2 = tmp+nlen;
-    while((*p)==';') {
-        *p=0; p++;
+    while(*p) {
+        if((*p)==';') *p=0;
+         p++;
     }
 
     p = tmp;
     while(1) {
         if(p>=p2) break;
+        part = curl_mime_addpart(mm);
+        if(!part) {
+            printf("____part is null!\n");
+            free(tmp); return -1;
+        }
+
+        curl_mime_name(part, "file");
         curl_mime_filedata(part, p);
         p += strlen(p)+1;
     }
@@ -188,10 +197,10 @@ static int send_mail(mail_send_t *send, void *addr, char *sub, char *body, char
         slist = curl_slist_append(NULL, "Content-Disposition: inline");
         curl_mime_headers(part, slist, 1);
 
-        part = curl_mime_addpart(mm);
+        //part = curl_mime_addpart(mm);
         //curl_mime_name(part, "file");
-        curl_mime_filedata(part, attach);
-        //curl_add_files(part, attach);
+        //curl_mime_filedata(part, attach);
+        curl_add_files(mm, attach);
         curl_easy_setopt(curl, CURLOPT_MIMEPOST, mm);
     }
 

+ 10 - 10
pro/src/paras.c

@@ -936,7 +936,10 @@ static int proc_snmp(char *path, int op, SNMPManager *snmp)
             r = proc_snmp(path, PARAS_CHECK, psnmp);
             if(r==0) {
                 //r = dev_clear_table(dm->db, TAB_ID_SNMP);  if(r) goto quit;
-                r = dev_update_snmp_info(dm->db, 0, psnmp);
+                r = dev_update_snmp_info(dm->db, 0, psnmp);  if(r) goto quit;
+
+                extern int snmp_config(SNMPManager *m, int quit);
+                snmp_config(psnmp, 0);
             }
         }
         break;
@@ -984,13 +987,6 @@ quit:
     iniparser_freedict(dic);
     return r;
 }
-static void do_mqtt_init(mqtt_info_t *info)
-{
-    memset(info, 0, sizeof(mqtt_info_t));
-    for(int i=0; i<MQTT_SER_MAX; i++) {
-        info->ser[i].id = -1;
-    }
-}
 static int proc_mqtt(char *path, int op, mqtt_info_t *mqtt)
 {
     char *p;
@@ -1091,7 +1087,7 @@ static int proc_mqtt(char *path, int op, mqtt_info_t *mqtt)
             pmqtt = &mqtt2;
             dic = iniparser_load(path); if(!dic) return -1;
 
-            do_mqtt_init(pmqtt);
+            memset(pmqtt, 0, sizeof(mqtt_info_t));
             for(i=0; i<MQTT_SER_MAX; i++) {
                 ser = &pmqtt->ser[j];
 
@@ -1127,8 +1123,12 @@ static int proc_mqtt(char *path, int op, mqtt_info_t *mqtt)
                 sprintf(token, "mqtt:broker%d.cert", i+1);
                 r = ini_rw(dic, token, ser->cert, sizeof(ser->cert), TYPE_STR, op); if(r) break;
                 str_replace(ser->cert,";;", "\r\n");
-                ser->id = j;
 
+                if(ser->cid[0] || ser->server[0] || ser->user[0] || ser->password[0]) {
+                    ser->id = -1;
+                    r = -1; break;
+                }
+                ser->id = j;
                 j++;
             }
 

+ 15 - 5
pro/src/sqlite_handle.c

@@ -7,6 +7,7 @@
 #include "cfg.h"
 #include "mail.h"
 #include "mqtt.h"
+#include "file.h"
 #include "sys.h"
 #include "switch_ctrl.h"
 #include "pduMIB_trap.h"
@@ -4819,10 +4820,6 @@ int dev_mqtt_update_ser(sqlite3 *db, mqtt_server_t *ser)
         return -1;
     }
 
-    if(sys_get_mac(mac, sizeof(mac))==0) {
-        sprintf(ser->cid, "SmartPDU_%s", mac);
-    }
-
     cnt = get_count(db, table);
     if(cnt>0) {
         sprintf(pbuf, "UPDATE %s SET id=%d, mode=%d, name='%s', server='%s', port='%s', cid='%s', user='%s', password='%s', cert='%s' WHERE id=%d;", 
@@ -4942,7 +4939,7 @@ const char *tabNamePool[TAB_ID_MAX]={
 
 static int db_exec(sqlite3 *db, int tab_id, int io_type, time_t from, time_t to, handle_t l)
 {
-    int r=-1;
+    int r=-1,cnt=0;
     char *p,temp[1024];
     char time_s[64],time_e[64];
     sqlite3_stmt *stmt=NULL;
@@ -4989,6 +4986,7 @@ static int db_exec(sqlite3 *db, int tab_id, int io_type, time_t from, time_t to,
                 strcpy(tmp.samp_time, (char*)sqlite3_column_text(stmt, 0));
 
                 xlist_append(l, tab_id, &tmp, sizeof(tmp));
+                cnt++;
             }
             sqlite3_finalize(stmt);
         }
@@ -5018,6 +5016,7 @@ static int db_exec(sqlite3 *db, int tab_id, int io_type, time_t from, time_t to,
                 strcpy(tmp.samp_time, (char*)sqlite3_column_text(stmt, 10));
 
                 xlist_append(l, tab_id, &tmp, sizeof(tmp));
+                cnt++;
             }
             sqlite3_finalize(stmt);
         }
@@ -5060,6 +5059,7 @@ static int db_exec(sqlite3 *db, int tab_id, int io_type, time_t from, time_t to,
                 else tmp.content[0] = 0;
 
                 xlist_append(l, tab_id, &tmp, sizeof(tmp));
+                cnt++;
             }
             sqlite3_finalize(stmt);
         }
@@ -5132,6 +5132,7 @@ static int db_exec(sqlite3 *db, int tab_id, int io_type, time_t from, time_t to,
                 if(p) strcpy(tmp.over_manager.sensor_val2_lower_threshold_ctrl_para, p);
 
                 xlist_append(l, tab_id, &tmp, sizeof(tmp));
+                cnt++;
             }
             sqlite3_finalize(stmt);
         }
@@ -5159,6 +5160,7 @@ static int db_exec(sqlite3 *db, int tab_id, int io_type, time_t from, time_t to,
                 tmp.val2 = sqlite3_column_double(stmt, 6);
 
                 xlist_append(l, tab_id, &tmp, sizeof(tmp));
+                cnt++;
             }
             sqlite3_finalize(stmt);
         }
@@ -5462,6 +5464,10 @@ int dev_log_xport(int type, time_t from, time_t to, char *path)
     GlobalDeviceManager *dm=&__globalDeviceManage;
     int stype=((type==0)?ALARM_TYPE_RUNNING:ALARM_TYPE_OPRATION);
 
+    if(file_exist(path)) {
+        return 0;
+    }
+
     l = xlist_init(&lc);
     r = db_exec(dm->db, TAB_ID_ALARM_INFO, IO_EXPORT, from, to, l);
     if(r) {
@@ -5547,6 +5553,10 @@ int dev_power_xport(time_t from, time_t to, char *path)
     GlobalDeviceManager *dm=&__globalDeviceManage;
     int tab_id=TAB_ID_POWER_INFO;
 
+    if(file_exist(path)) {
+        return 0;
+    }
+
     if(dm->_globalDevInfo.product.pwr_type>=SmartPDU_Tree_AC_Tree) {
         tab_id = TAB_ID_POWER3_INFO;
     }

+ 40 - 62
pro/src/sys.c

@@ -17,6 +17,7 @@
 #include "shell.h"
 #include "common.h"
 #include "sqlite_handle.h"
+#include "language_hashmap.h"
 
 #if 1
 #define LOGE  log_e
@@ -1179,85 +1180,62 @@ struct tm* get_curtime(void)
     time_t cur = time(NULL);
     return localtime(&cur);
 }
-static void send_power_data(struct tm *tm, char *dir)
+#define TMP_DIR  "/tmp/pdu"
+static int tmp_create(void)
 {
-    int r;
-    char path[200],sub[100];
+    return mkdir(TMP_DIR, 0777);
+}
+static int tmp_remove(void)
+{
+    char cmd[100];
+    sprintf(cmd, "rm -f %s/* > /dev/null", TMP_DIR);
+    return system(cmd);
+}
+static void send_by_mail(struct tm *tm, char *dir)
+{
+    int r=-1;
+    char temp[200],sub[100];
     char tmp1[100],tmp2[100];
+    char path[1024];
     GlobalDeviceManager *dm=&__globalDeviceManage;
+    ProductInfo_t *prod=&dm->_globalDevInfo.product;
     static time_t sended_id=0;
-    
+
     time_t from,to;
     get_range(tm, &from, &to, 1);
-
     if(sended_id != from) {
+        path[0] = 0;
         get_time_str2(tmp1,sizeof(tmp1),from);
         get_time_str2(tmp2,sizeof(tmp2),to);
 
-        sprintf(path, "%s/power_%s_%s.csv", dir, tmp1, tmp2);
-        if(!file_exist(path)) {
-            dev_power_xport(from, to, path);
+        sprintf(temp, "%s/log_run_%s_%s.txt", dir, tmp1, tmp2);
+        r = dev_log_xport(0, from, to, temp);
+        if(r==0) {
+            strcat(path, temp);strcat(path, ";");
         }
 
-        if(file_exist(path)) {
-            sprintf(sub, "%s %d power data", dm->_globalDevInfo.product.name, dm->_globalDevInfo.product.id);
+        sprintf(temp, "%s/log_opr_%s_%s.txt", dir, tmp1, tmp2);
+        r = dev_log_xport(1, from, to, temp);
+        if(r==0) {
+            strcat(path, temp);strcat(path, ";");
+        }
+        
+        sprintf(temp, "%s/power_%s_%s.csv", dir, tmp1, tmp2);
+        r = dev_power_xport(from, to, temp);
+        if(r==0) {
+            strcat(path, temp);strcat(path, ";");
+        }
+
+        if(r==0) {
+            sprintf(sub, "%s %d power and log data", prod->name, prod->id);
             r = mail_send(sub, NULL, path);
             if(r==0) {
-                file_remove(path);
+                tmp_remove();
                 sended_id = from;
             }
         }
     }
 }
-static void send_log_data(struct tm *tm, char *dir)
-{
-    int i,r;
-    char path[200],sub[100];
-    char tmp1[100],tmp2[100];
-    GlobalDeviceManager *dm=&__globalDeviceManage;
-    static time_t sended_id[2]={0};
-    char *logname[2]={"run","opr"};
-
-#ifndef LOG_SEND_MAIL
-    return;
-#endif
-
-    time_t from,to;
-    get_range(tm, &from, &to, 1);
-
-    for(i=0; i<2; i++) {
-        if(sended_id[i] != from) {
-            get_time_str2(tmp1,sizeof(tmp1),from);
-            get_time_str2(tmp2,sizeof(tmp2),to);
-
-            sprintf(path, "%s/log_%s_%s_%s.txt", dir, logname[i], tmp1, tmp2);
-            if(!file_exist(path)) {
-                dev_log_xport(i, from, to, path);
-            }
-
-            if(file_exist(path)) {
-                sprintf(sub, "%s %d %s log", dm->_globalDevInfo.product.name, dm->_globalDevInfo.product.id, logname[i]);
-                r = mail_send(sub, NULL, path);
-                if(r==0) {
-                    file_remove(path);
-                    sended_id[i] = from;
-                }
-            }
-        }
-    }
-}
-
-#define TMP_DIR  "/tmp/pdu"
-static int tmp_create(void)
-{
-    return mkdir(TMP_DIR, 0777);
-}
-static int tmp_remove(void)
-{
-    char cmd[100];
-    sprintf(cmd, "rm -f %s/* > /dev/null", TMP_DIR);
-    return system(cmd);
-}
 static void send_check(void)
 {
     static int file_flag=0;
@@ -1268,8 +1246,7 @@ static void send_check(void)
         struct tm *tm=get_curtime();
 
         if(tm->tm_hour==0) {
-            send_power_data(tm, TMP_DIR);
-            send_log_data(tm, TMP_DIR);
+            send_by_mail(tm, TMP_DIR);
             file_flag = 1;
         }
         else if(tm->tm_hour==1 && file_flag) {
@@ -1298,6 +1275,7 @@ int sys_init(void)
     initLogger();
     lock_s_init();
     paras_init();
+    init_hash_table();
     
     //nic_restart(DFLT_NIC);
     thread_start(THREAD_ID_POLLING, polling_thread, NULL);