浏览代码

1、改交换机的默认ip为234网段
2、交换机口数改为28
3、添加smtp,编译通过,准备调试

guohui 2 年之前
父节点
当前提交
562d07eeec

+ 3 - 3
pro/config/cfg.h

@@ -55,12 +55,12 @@
     #define SW_STATIC_PORT_START
 
     #ifdef SW_STATIC_IP
-        #define SW_HOST_IP              "192.168.1.1"
-        #define SW_PDU_IP               "192.168.1.132"
+        #define SW_HOST_IP              "192.168.234.1"
+        #define SW_PDU_IP               "192.168.234.132"
     #endif
     
     #undef MAX_CHN_COUNT
-    #define MAX_CHN_COUNT               4//24
+    #define MAX_CHN_COUNT               24
 #endif
 
 ////////////////////////////////////////////////////

+ 5 - 1
pro/src/app.c

@@ -2419,7 +2419,11 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
 
     thread_start(THREAD_ID_NTP, ntp_thread, NULL, 10 * MB, 0);
     dev_Alarm_Run_message(_globalDeviceManager, language_alarm_Init_Success[0], "NTP");
-    //thread_start(THREAD_ID_SNMP, snmp_thread, _globalDeviceManager, 10 * MB, 0);
+
+#ifndef USE_NETSWITCH
+    thread_start(THREAD_ID_SNMP, snmp_thread, _globalDeviceManager, 10 * MB, 0);
+#endif
+
     dev_Alarm_Run_message(_globalDeviceManager, language_alarm_Init_Success[0], "SNMP");
  #endif
 

+ 30 - 2
pro/src/appweb_handle.c

@@ -2692,6 +2692,7 @@ static void serviceManagement(void *conn)
     mg_stream_t *s=(mg_stream_t*)conn;
     struct mg_http_message *hm=s->ev_data;
     char *rx_body_buf = (char*)hm->body.buf;
+    GlobalDeviceManager *gdm=&__globalDeviceManage;
 
     //转换json参数
     memset(&_serviceManageRequestInfo, 0, sizeof(_serviceManageRequestInfo));
@@ -2705,13 +2706,40 @@ static void serviceManagement(void *conn)
     else if(strcmp(_serviceManageRequestInfo.type,"listSmtpQuery")==0)
     {
     #ifdef USE_SMTP
-         //ack_str = service_smtp_ack_to_json(&globalSMTPManager);
+         ack_str = service_smtp_ack_to_json(&gdm->smtp_sett);
     #endif
     }   
     else if(strcmp(_serviceManageRequestInfo.type,"SmtpSave")==0)
     {
     #ifdef USE_SMTP
-        
+        //_SMTP_ServerRequestInfo
+        //gdm->smtp_sett. 
+        smtp_manager_t *man=&gdm->smtp_sett.man;
+        _SMTP_ServerRequestInfo *info=&_serviceManageRequestInfo._smtp_info;
+
+        if(info->mode) {
+            man->mode = atoi(info->mode);
+        }
+        if(info->smtpAccount) {
+            strcpy(man->auth, info->smtpAccount);
+        }
+        if(info->passWord) {
+            strcpy(man->password, info->passWord);
+        }
+        if(info->server) {
+            strcpy(man->server, info->server);
+        }
+        if(info->port) {
+            strcpy(man->port, info->port);
+        }
+        if(info->auth) {
+            strcpy(man->auth, info->auth);
+        }
+        if(info->receiveAccount) {
+            //strcpy(man->auth, info->receiveAccount);
+        }
+
+        //dev_smtp_update_man(gdm->db, man);
     #endif
     }   
     //查询snmp信息

+ 23 - 16
pro/src/common.h

@@ -205,7 +205,7 @@ typedef struct {
     char            desc[128];
 }port_info_t;
 typedef struct {
-    #define SW_PORT_MAX 24
+    #define SW_PORT_MAX 28
     port_info_t     port[SW_PORT_MAX];
 }netswitch_info_t;
 
@@ -592,25 +592,30 @@ typedef struct
 //SMTP管理
 typedef struct
 {
+    int                 use;
     int                 idx;
-    char*               receive_account;
-    char*               receive_account_info;
-    struct list_head    list;
-}SMTPreceiveAccount;
-
+    char                account[64];
+}smtp_recv_t;
+typedef struct
+{
+    #define SMTP_RECV_MAX  10
+    smtp_recv_t         recv[SMTP_RECV_MAX];      //接收账号列表
+}smtp_recvs_t;
 typedef struct 
 {
     int                 product_id;
-    int                 mode;    				//状态
-    char*               account;                //用户账号
-    char*               password; 		        //用户密码
-    char*               server; 			    //服务器
-    int                 port;    		        //端口
-    char                auth[16];    			//认证方式
-    SMTPreceiveAccount* receive_account;        //接收账号列表
-
-}SMTPManager;
-SMTPManager globalSMTPManager;
+    int                 mode;    				        //状态
+    char                account[64];                    //用户账号
+    char                password[24]; 		            //用户密码
+    char                server[64]; 			        //服务器
+    char                port[10];    		                //端口
+    char                auth[16];    			        //认证方式  
+}smtp_manager_t;
+typedef struct
+{
+    smtp_manager_t      man;
+    smtp_recvs_t        rcv;
+}smtp_sett_t;
 
 typedef struct 
 {
@@ -923,6 +928,8 @@ typedef struct
     cascade_single_mmap_t *single_mmap;
     cascade_triphasic_mmap_t *triphasic_mmap;	
 	GlobalBreakerManager g_new_global_breaker;
+
+    smtp_sett_t          smtp_sett;
 }GlobalDeviceManager;
 
 extern GlobalDeviceManager __globalDeviceManage;

+ 26 - 19
pro/src/json_handle.c

@@ -4701,9 +4701,12 @@ char* service_snmp_ack_to_json(SNMPManager* __SNMPManager_t)
     return str;
 }
 
-char* service_smtp_ack_to_json(SMTPManager* sm)
+char* service_smtp_ack_to_json(smtp_sett_t* sett)
 {
+    int idx=0;
     char* str = NULL;
+    smtp_manager_t *man=&sett->man;
+    smtp_recv_t *recv=sett->rcv.recv;
     
     // 创建 JSON 对象
     cJSON* root = cJSON_CreateObject();   
@@ -4713,27 +4716,31 @@ char* service_smtp_ack_to_json(SMTPManager* sm)
     cJSON* data_filed = cJSON_CreateObject();
     char buf[30];
     memset(buf, 0, sizeof(buf));
-    sprintf(buf, "%d", sm->mode);
+    sprintf(buf, "%d", man->mode);
     cJSON_AddStringToObject(data_filed,"mode", buf);
-    cJSON_AddStringToObject(data_filed,"server", sm->server);
-    memset(buf, 0, sizeof(buf));
-    sprintf(buf, "%d", sm->port);
-    cJSON_AddStringToObject(data_filed,"public", buf);
-    cJSON_AddStringToObject(data_filed,"zh", sm->account);
-    cJSON_AddStringToObject(data_filed,"mm", sm->password);
-    cJSON_AddStringToObject(data_filed,"rzfs", sm->auth);
-
-    SMTPreceiveAccount* iterator = NULL;
-    //循环添加数据
-    list_for_each_entry(iterator, &sm->receive_account->list, list)
-    {
-        cJSON* data_filed = cJSON_CreateObject();   
-        cJSON_AddStringToObject(data_filed,"receiveAccount", iterator->receive_account);
-        cJSON_AddNumberToObject(data_filed,"idx",iterator->idx);
-        cJSON_AddItemToObject(root, "data", data_filed);
+    cJSON_AddStringToObject(data_filed,"server", man->server);
+    cJSON_AddStringToObject(data_filed,"port", man->port);
+    cJSON_AddStringToObject(data_filed,"zh", man->account);
+    cJSON_AddStringToObject(data_filed,"mm", man->password);
+    cJSON_AddStringToObject(data_filed,"rzfs", man->auth);
+
+    cJSON* array = cJSON_CreateArray();
+    if(array) {
+        for(int i=0; i<SMTP_RECV_MAX; i++) {
+            if(recv[i].use) {
+                cJSON* tmp = cJSON_CreateObject();
+                if(tmp) {
+                    cJSON_AddStringToObject(tmp,"receiveAccount", recv[i].account);
+                    cJSON_AddNumberToObject(tmp,"idx", idx++);
+                    cJSON_AddItemToArray(array, tmp);
+                }
+            }
+        }
+        cJSON_AddItemToObject(data_filed, "receiveAccountList", array);
     }
+    
     //添加汇总
-    cJSON_AddItemToObject(root, "data", root);
+    cJSON_AddItemToObject(root, "data", data_filed);
     //添加结果
     cJSON_AddStringToObject(root, "msg", "操作成功");
     //转换

+ 3 - 3
pro/src/json_handle.h

@@ -347,7 +347,7 @@ typedef struct
     char* port;
     char* auth;
     char* receiveAccount;
-}_SMPT_ServerRequestInfo;
+}_SMTP_ServerRequestInfo;
 
 /// @brief SNMP信息
 typedef struct
@@ -421,7 +421,7 @@ typedef struct
 {
     char* user_token;
     char* type;
-    _SMPT_ServerRequestInfo _smtp_info ;
+    _SMTP_ServerRequestInfo _smtp_info ;
     _SNMP_ServerRequestInfo _snmp_info ;
     _SNMPTRAP_ServerRequestInfo _snmp_trap_info;
     _NTP_ServiceRequestInfo _ntp_info ;
@@ -589,7 +589,7 @@ char* service_ds_all_ack_to_json(char* pDate,char* Name,char* nchID,GlobalPowerM
 char* service_sx_ack_to_json(int product_id, GlobalPowerManger * __PowerManage_t);
 char* service_ntp_ack_to_json(NTPManager* __NTPManager_t);
 char* service_snmp_ack_to_json(SNMPManager* __SNMPManager_t);
-char* service_smtp_ack_to_json(SMTPManager* __SMTPManager_t);
+char* service_smtp_ack_to_json(smtp_sett_t* sett);
 char* service_group_ack_to_json(GroupInfo* _globalgroupInfo);
 ///请求管理
 cJSON* json_to_sensor_manage(const char* str,_OverSensorRequest* _overSensorRequest);

+ 8 - 0
pro/src/language_common.c

@@ -540,6 +540,14 @@ const char language_alarm_RS485_slave[LANGUAGE_TYPE][LANGUAGE_SIZE] =
     " "
 } ;
 
+const char language_alarm_MAC_changed[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
+{
+    "MAC地址变化, 从 %s 到 %s",
+    "MAC address changed, from %s to %s",
+    "MAC - адрес изменен с% s на% s",
+    " "
+} ;
+
 const char language_Role_Super_Admin[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
 {
     "超级管理员",

+ 2 - 0
pro/src/language_common.h

@@ -133,6 +133,8 @@ extern const char language_alarm_RS485_master[LANGUAGE_TYPE][LANGUAGE_SIZE];
 
 extern const char language_alarm_RS485_slave[LANGUAGE_TYPE][LANGUAGE_SIZE];
 
+extern const char language_alarm_MAC_changed[LANGUAGE_TYPE][LANGUAGE_SIZE];
+
 extern const char language_Role_Super_Admin[LANGUAGE_TYPE][LANGUAGE_SIZE];
 
 extern const char language_Role_Admin[LANGUAGE_TYPE][LANGUAGE_SIZE];

+ 35 - 11
pro/src/netswitch.c

@@ -1,5 +1,7 @@
 #include <net-snmp/net-snmp-config.h>
 #include <net-snmp/net-snmp-includes.h>
+#include <net/if.h>
+#include <ifaddrs.h>
 #include "netswitch.h"
 #include "sys.h"
 #include "elog.h"
@@ -7,8 +9,8 @@
 #include "cfg.h"
 #include "lock.h"
 #include "sqlite_handle.h"
-#include <net/if.h>
-#include <ifaddrs.h>
+#include "smtp.h"
+
 
 #if 1
     #define LOGD            log_d
@@ -38,6 +40,7 @@ typedef struct {
     pthread_mutex_t  mutex;
 }ns_handle_t;
 static ns_handle_t nsHandle;
+static char *get_string(netsnmp_variable_list *var);
 
 ///////////////////////////////////////////////////////////
 static netsnmp_variable_list* snmp_getx(int version, char *community, char *ip, char *oid_str, int msgtype)
@@ -51,7 +54,7 @@ static netsnmp_variable_list* snmp_getx(int version, char *community, char *ip,
     netsnmp_variable_list *vars=NULL,*pvar=NULL;
     
     snmp_sess_init(&session);
-    session.timeout = 200000;   //us
+    //session.timeout = 500000;   //us
     session.version  = version;
     session.peername = ip;
     session.community = (unsigned char*)community;
@@ -83,7 +86,7 @@ static netsnmp_variable_list* snmp_getx(int version, char *community, char *ip,
 
  retry:
     status = snmp_synch_response(ss, pdu, &rsp);
-    if (status == STAT_SUCCESS) {
+    if (status == STAT_SUCCESS && rsp) {
         if (rsp->errstat == SNMP_ERR_NOERROR) {
             pvar = snmp_clone_varbind(rsp->variables);
 
@@ -109,7 +112,7 @@ static netsnmp_variable_list* snmp_getx(int version, char *community, char *ip,
             }
         }
     } else if (status == STAT_TIMEOUT) {
-        LOGE("snmp_getx timeout: No response from %s\n", session.peername);
+        LOGE("snmp_getx timeout: no response from %s\n", session.peername);
     } else {                    /* status == STAT_ERROR */
         snmp_sess_perror("snmp_getx", ss);
     }
@@ -125,6 +128,8 @@ out:
     return pvar;
 }
 
+
+
 /*
     SNMP_VERSION_1 SNMP_VERSION_2c SNMP_VERSION_3
     SNMP_MSG_GET SNMP_MSG_GETNEXT SNMP_MSG_GETBULK  SNMP_MSG_INFORM SNMP_MSG_SET
@@ -494,7 +499,8 @@ static int set_gw(char *gw)
 }
 static int sw_get(netswitch_info_t *sw)
 {
-    int i,j,r,find=0;
+    int r=-1;
+    int i,j,find=0;
     char temp[200];
     netswitch_info_t tmp;
     netsnmp_variable_list *var,*pvar;
@@ -508,7 +514,7 @@ static int sw_get(netswitch_info_t *sw)
         strcpy(h->host_ip, SW_HOST_IP);
         //get_hostnet(hnet, h->host_ip);
         //sprintf(temp, "ip addr add dev eth0 %s/24; ip route add %s/24 via %s", SW_PDU_IP, hnet, h->host_ip);
-//set_ip(SW_PDU_IP); set_gw(h->host_ip);
+        set_ip(SW_PDU_IP); set_gw(h->host_ip);
         h->ipflag = 1;
 #else
         r = get_ipaddr(AF_INET, "eth0", h->host_ip);
@@ -533,6 +539,9 @@ static int sw_get(netswitch_info_t *sw)
         }
     }
 
+    //system("/root/run/app/snmp/bin/snmpbulkget -v 2c -c public 192.168.234.1 1.3.6.1.2.1.17.4.3.1");
+
+#if 1
     char *dot1dTpFdbEntryOid="1.3.6.1.2.1.17.4.3.1";
     var = snmp_getbulk(SNMP_VERSION_2c, "public", h->host_ip, dot1dTpFdbEntryOid);
     if(var) {
@@ -587,7 +596,9 @@ static int sw_get(netswitch_info_t *sw)
     if(find==0) {
         return -1;
     }
+#endif
 
+#if 1
     char *ipNetToMediaEntryOid="1.3.6.1.2.1.4.22.1";
     var = snmp_getbulk(SNMP_VERSION_2c, "public", h->host_ip, ipNetToMediaEntryOid);
     if(var) {
@@ -618,7 +629,7 @@ static int sw_get(netswitch_info_t *sw)
                     if(p) {
                         p += strlen(tok);
                         get_mac(p, tmp.port[i].mac);
-                        LOGD("__%d__ %s\n", i, tmp.port[i].mac);
+                        //LOGD("__%d__ %s\n", i, tmp.port[i].mac);
 
                         i++;
                     }
@@ -630,7 +641,7 @@ static int sw_get(netswitch_info_t *sw)
                     if(p) {
                         p += strlen(tok);
                         strcpy(tmp.port[j].ip, p);
-                        LOGD("__%d__ %s\n", j, p);
+                        //LOGD("__%d__ %s\n", j, p);
 
                         j++;
                     }
@@ -649,7 +660,9 @@ static int sw_get(netswitch_info_t *sw)
     else {
         LOGE("___snmp_getbulk ip addr failed\n");
     }
+#endif
 
+#if 1
     char *ifEntry="1.3.6.1.2.1.2.2.1.8";
     for(i=0; i<SW_PORT_MAX; i++) {
         sprintf(temp, "%s.%d", ifEntry, i+h->port_start);
@@ -689,6 +702,7 @@ static int sw_get(netswitch_info_t *sw)
         }
     }
     //sw_print("111", sw);
+#endif
 
     return 0;
 }
@@ -736,6 +750,11 @@ static int sw_cpy(netswitch_info_t *dst, netswitch_info_t *src)
 {
     int i;
     for(i=0; i<SW_PORT_MAX; i++) {
+
+        if(i<SW_PORT_INDEX_START || i>SW_PORT_INDEX_END) {
+            continue;
+        }
+
         dst->port[i].up = src->port[i].up;
         if(src->port[i].ip[0]) {
             strcpy(dst->port[i].ip, src->port[i].ip);
@@ -785,10 +804,13 @@ static int sw_alarm(netswitch_evts_t *evts, netswitch_info_t *old, netswitch_inf
         
         temp[0] = 0;
         if(evts->evt[i].dev) {
-            flag = 1;
             if(evts->evt[i].dev==EVT_MAC_CHG) {
-                snprintf(temp, sizeof(temp), "port[%d] mac changed from %s to %s\n", i+1, old->port[i].mac, new->port[i].mac);
+                char ttt[100];
+                //snprintf(temp, sizeof(temp), "port[%d] mac changed from %s to %s\n", i+1, old->port[i].mac, new->port[i].mac);
+                sprintf(ttt, "$通道$|%d |$%s$", i+1, language_alarm_MAC_changed[0]);
+                sprintf(temp, ttt, old->port[i].mac, new->port[i].mac);
                 strcat(alarm_str, temp);
+                flag = 1;
             }
         }
     }
@@ -799,6 +821,8 @@ static int sw_alarm(netswitch_evts_t *evts, netswitch_info_t *old, netswitch_inf
 
     return r;
 }
+
+
 static void* sw_thread(void *arg)
 {
     int r;

+ 85 - 12
pro/src/smtp.c

@@ -3985,47 +3985,59 @@ smtp_attachment_clear_all(struct smtp *const smtp){
 #define MAIL_AUTH                SMTP_AUTH_PLAIN
 
 
-int smtp_send(smtp_data_t *sd)
+typedef struct {
+    char server[64];
+    char port[10];
+    
+    char user[32];
+    char passwd[32];
+    
+    char name_fr[64];
+    char mail_fr[64];
+    
+    char name_to[64];
+    char mail_to[64];
+    
+    char *sub;
+    char *body;
+}smtp_para_t;
+static int send_mail(smtp_para_t *para, enum smtp_authentication_method auth)
 {
     int r;
     struct smtp *smtp;
     
-    if(!sd) {
-        return -1;
-    }
-    
-    r = smtp_open(sd->server, sd->port, MAIL_CONNECTION_SECURITY, MAIL_FLAGS, MAIL_CAFILE, &smtp);
+    r = smtp_open(para->server, para->port, MAIL_CONNECTION_SECURITY, MAIL_FLAGS, MAIL_CAFILE, &smtp);
     if(r != SMTP_STATUS_OK) {
         LOGE("___ smtp_auth failed, %s\n", smtp_status_code_errstr(r));
         return -1;
     }
     
-    r = smtp_auth(smtp, MAIL_AUTH, sd->user, sd->passwd);
+    r = smtp_auth(smtp, auth, para->user, para->passwd);
     if(r != SMTP_STATUS_OK) {
         LOGE("___ smtp_auth failed, %s\n", smtp_status_code_errstr(r));
         goto quit;
     }
     
-    r = smtp_address_add(smtp, SMTP_ADDRESS_FROM, sd->mail_fr, sd->name_fr);
+    r = smtp_address_add(smtp, SMTP_ADDRESS_FROM, para->mail_fr, para->name_fr);
     if(r != SMTP_STATUS_OK) {
         LOGE("___ smtp_address_add fr failed\n, %s", smtp_status_code_errstr(r));
         goto quit;
     }
     
-    r = smtp_address_add(smtp, SMTP_ADDRESS_TO, sd->mail_to, sd->name_to);
+    r = smtp_address_add(smtp, SMTP_ADDRESS_TO, para->mail_to, para->name_to);
     if(r != SMTP_STATUS_OK) {
         LOGE("___ smtp_address_add to failed, %s\n", smtp_status_code_errstr(r));
         goto quit;
     }
     
-    r = smtp_header_add(smtp, "Subject", sd->subject);
+    r = smtp_header_add(smtp, "Subject", para->sub);
     if(r != SMTP_STATUS_OK) {
         LOGE("___ smtp_header_add failed, %s\n", smtp_status_code_errstr(r));
         goto quit;
     }
     
     //r = smtp_attachment_add_mem(smtp, "test.txt", "Test email attachment.", -1);
-    r = smtp_mail(smtp, sd->body);
+    r = smtp_mail(smtp, para->body);
     if(r != SMTP_STATUS_OK) {
         LOGE("___ smtp_mail failed, %s\n", smtp_status_code_errstr(r));
     }
@@ -4038,7 +4050,68 @@ quit:
     
     return r;
 }
-    
 
 
+#include "sqlite_handle.h"
+
+int smtp_init(void)
+{
+    GlobalDeviceManager *gdm=&__globalDeviceManage;
+    smtp_sett_t *sett=&gdm->smtp_sett;
+
+    dev_smtp_init(gdm->db, &gdm->smtp_sett);
+    sett->man.product_id = gdm->_globalDevInfo.product_id;
+
+    return 0;
+}
+
+int smtp_send(smtp_sett_t *sett, char *sub, char *body)
+{
+    int i,r;
+    smtp_para_t para;
+    smtp_recv_t *recv=NULL;
+    enum smtp_authentication_method auth=SMTP_AUTH_PLAIN;
+
+    if(!sett || !sub || !body || sett->man.mode==0) {
+        return -1;
+    }
+
+    strcpy(para.name_fr, "smartPDU");
+    strcpy(para.mail_fr, sett->man.account);
+
+    strcpy(para.user, sett->man.account);
+    strcpy(para.passwd, sett->man.password);
+
+    strcpy(para.port, sett->man.port);
+    strcpy(para.server, sett->man.server);
+    para.sub = sub;
+    para.body = body;
+
+    recv = sett->rcv.recv;
+    for(i=0; i<SMTP_RECV_MAX; i++) {
+        if(sett->rcv.recv[i].use && strlen(sett->rcv.recv[i].account)>0) {
+            strcpy(para.name_to, recv[i].account);
+            strcpy(para.mail_to, recv[i].account);
+            r = send_mail(&para, auth);
+        }
+    }
+
+    return 0;
+}
+
+
+int smtp_test(void)
+{
+    int r,cnt=0;
+    smtp_sett_t sett={
+        
+    };
+
+    while(cnt++<10) {
+        r = smtp_send(&sett, "123", "hello 123!");
+        sleep(2);
+    }
+
+    return r;
+}
 

+ 4 - 18
pro/src/smtp.h

@@ -2,27 +2,13 @@
 #define __SMTP_H__
 
 #include <stdint.h>
+#include "common.h"
 
-typedef struct {
-    char server[128];
-    char port[10];
-    
-    char user[128];
-    char passwd[128];
-    
-    char name_fr[128];
-    char mail_fr[128];
-    
-    char name_to[128];
-    char mail_to[128];
-    
-    char subject[128];
-    int  bodylen;
-    char *body;
-}smtp_data_t;
 
 
-int smtp_send(smtp_data_t *sd);
+int smtp_init(void);
+int smtp_test(void);
+int smtp_send(smtp_sett_t *sett, char *sub, char *body);
 
 #endif /* SMTP_H */
 

+ 139 - 102
pro/src/sqlite_handle.c

@@ -2609,80 +2609,6 @@ int dev_update_snmp_info(sqlite3 *db, int product_id, SNMPManager* _globalSNMPIn
     return 0;
 }
 
-int dev_get_smtp_info(sqlite3 *db, SMTPManager* _globalSMTPInfo)
-{
-    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};
-
-    sprintf(select_sql, "SELECT* from Table_SMTPManage WHERE product_id = %d;", __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 ;
-    }
-    //提取数据
-    if(nrow==0) {
-        sqlite3_free_table(pResult);
-        return -2 ;
-    }
-
-    //获取ID
-    _globalSMTPInfo->product_id = atoi(pResult[rowIndex*ncolumn+0]);
-    _globalSMTPInfo->mode = atoi(pResult[rowIndex*ncolumn+1]);
-    strcpy(_globalSMTPInfo->account,pResult[rowIndex*ncolumn+2]);
-    strcpy(_globalSMTPInfo->password,pResult[rowIndex*ncolumn+3]);
-    strcpy(_globalSMTPInfo->server,pResult[rowIndex*ncolumn+4]);
-    _globalSMTPInfo->port = atoi(pResult[rowIndex*ncolumn+5]); 
-    strcpy(_globalSMTPInfo->auth,pResult[rowIndex*ncolumn+6]);
-
-    sqlite3_free_table(pResult);
-    return 0;
-}
-
-int dev_get_smtp_recv_user_list(sqlite3 *db, SMTPreceiveAccount* _globalSMTPreceiveAccount)
-{
-    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};
-
-    sprintf(select_sql, "SELECT* from Table_SMTPRecAccount;");
-    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 ;
-    }
-
-    if(nrow==0) {
-        sqlite3_free_table(pResult);
-        return -2 ;
-    }
-
-    for(int i = 1; i <= nrow; i++)
-    {
-        SMTPreceiveAccount* iterator = (SMTPreceiveAccount*)malloc(sizeof(SMTPreceiveAccount));
-        iterator->idx = atoi(pResult[i*ncolumn+0]);
-        iterator->receive_account = malloc(128);
-        strcpy(iterator->receive_account,pResult[i*ncolumn+1]);
-        iterator->receive_account_info = malloc(128);
-        strcpy(iterator->receive_account_info,pResult[i*ncolumn+2]);
-        list_add_tail(&iterator->list, &_globalSMTPreceiveAccount->list);
-    }
-
-    sqlite3_free_table(pResult);
-    return 0;
-}
-
 
 /// @brief 插入一条报警信息
 /// @param db 
@@ -3510,27 +3436,6 @@ static int tab_exists(sqlite3 *db, char *table)
  
     return exists;
 }
-static int tab_sw_create(sqlite3 *db, char *table)
-{
-    int r;
-    char temp[1024] = {0};
-    char *err_msg = NULL;
-
-    sprintf(temp, "CREATE TABLE IF NOT EXISTS %s("
-                        "id INTEGER PRIMARY KEY,"
-                        "up INTEGER,"
-                        "ip TEXT,"
-                        "mac TEXT,"
-                        "desc TEXT);", table);
-    r = sqlite3_exec(db, temp, 0, 0, &err_msg);
-    if(r!=SQLITE_OK) {
-        log_e("___ %s create failed, %s\n%s\n", table, temp, err_msg); sqlite3_free(err_msg);
-        return -1;
-    }
-
-    return 0;
-}
-
 static int sw_load(sqlite3 *db, netswitch_info_t *sw)
 {
     int i=0,r;
@@ -3654,16 +3559,26 @@ int dev_switch_init(sqlite3 *db, netswitch_info_t *sw)
     char *table=SWITCH_TABLE;
     
     if(!tab_exists(db, table)) {
-        r = tab_sw_create(db, table);
-        if(r==0) {
-            memset(sw, 0, sizeof(netswitch_info_t));
-            sw_update_all(db, sw);
+        char temp[1024] = {0};
+        char *err_msg = NULL;
+
+        sprintf(temp, "CREATE TABLE IF NOT EXISTS %s("
+                            "id INTEGER PRIMARY KEY,"
+                            "up INTEGER,"
+                            "ip TEXT,"
+                            "mac TEXT,"
+                            "desc TEXT);", table);
+        r = sqlite3_exec(db, temp, 0, 0, &err_msg);
+        if(r!=SQLITE_OK) {
+            log_e("___ %s create failed, %s\n%s\n", table, temp, err_msg); sqlite3_free(err_msg);
+            return -1;
         }
-    }
 
-    r = sw_load(db, sw);
+        memset(sw, 0, sizeof(netswitch_info_t));
+        sw_update_all(db, sw);
+    }
 
-    return r;
+    return sw_load(db, sw);
 }
 
 int dev_switch_update_port(sqlite3 *db, port_info_t *pt)
@@ -3686,3 +3601,125 @@ int dev_switch_update_all(sqlite3 *db, netswitch_info_t *sw)
 }
 
 
+////////////////smtp/////////////////////////////////////////////
+#define SMTP_MANAGER_TABLE   "Table_SMTPManage"
+#define SMTP_RECVEIVE_TABLE  "Table_SMTPReceive"
+int dev_smtp_init(sqlite3 *db, smtp_sett_t *sett)
+{
+    int i,r;
+    char temp[1024];
+    char *err_msg=NULL;
+    char *table=NULL;
+    int nrow,ncol;
+    char** pResult = NULL;
+    
+    table = SMTP_MANAGER_TABLE;
+    if(!tab_exists(db, table)) {
+        sprintf(temp, "CREATE TABLE IF NOT EXISTS %s("
+                            "product_id INTEGER,"
+                            "mode INTEGER,"
+                            "account TEXT,"
+                            "password TEXT,"
+                            "server TEXT,"
+                            "port TEXT,"
+                            "auth TEXT);", table);
+        r = sqlite3_exec(db, temp, 0, 0, &err_msg);
+        if(r!=SQLITE_OK) {
+            log_e("___ %s create failed, %s\n%s\n", table, temp, err_msg); sqlite3_free(err_msg);
+            return -1;
+        }
+    }
+
+    nrow = ncol = 0;
+    sprintf(temp, "SELECT * FROM %s;", table);
+    r = sqlite3_get_table(db, temp, &pResult, &nrow, &ncol, &err_msg);
+    if(r != SQLITE_OK) {
+        log_e("sqlite handle error: %s \n%s\n", temp, err_msg); sqlite3_free(err_msg);
+        return -1 ;
+    }
+
+    smtp_manager_t *man=&sett->man; 
+    memset(&man, 0, sizeof(smtp_manager_t));
+    man->product_id = atoi(pResult[ncol+0]);
+    man->mode = atoi(pResult[ncol+1]);
+    strcpy(man->account, pResult[ncol+2]);
+    strcpy(man->password, pResult[ncol+3]);
+    strcpy(man->server, pResult[ncol+4]);
+    strcpy(man->port, pResult[ncol+5]);
+    strcpy(man->auth, pResult[ncol+6]);
+    ////////////////////////////////////////////////////////////////////////
+
+    table = SMTP_RECVEIVE_TABLE;
+    if(!tab_exists(db, table)) {
+        sprintf(temp, "CREATE TABLE IF NOT EXISTS %s("
+                            "use INTEGER,"
+                            "idx INTEGER,"
+                            "account TEXT);", table);
+        r = sqlite3_exec(db, temp, 0, 0, &err_msg);
+        if(r!=SQLITE_OK) {
+            log_e("___ %s create failed, %s\n%s\n", table, temp, err_msg); sqlite3_free(err_msg);
+            return -1;
+        }
+    }
+
+    nrow = ncol = 0;
+    sprintf(temp, "SELECT * FROM %s;", table);
+    r = sqlite3_get_table(db, temp, &pResult, &nrow, &ncol, &err_msg);
+    if(r != SQLITE_OK) {
+        log_e("sqlite handle error: %s \n%s\n", temp, err_msg); sqlite3_free(err_msg);
+        return -1 ;
+    }
+
+    smtp_recvs_t *rcv=&sett->rcv;
+    memset(rcv, 0, sizeof(smtp_recvs_t));
+    for(i=1; i<=nrow; i++) {
+        rcv->recv[i-1].use = atoi(pResult[i*ncol+0]);
+        rcv->recv[i-1].idx = i-1;
+        strcpy(rcv->recv[i-1].account, pResult[i*ncol+1]);
+    }
+    sqlite3_free_table(pResult);
+    
+    return 0;
+}
+
+int dev_smtp_update_mang(sqlite3 *db, smtp_manager_t *man)
+{
+    int i,r=0;
+    char temp[1024];
+    sqlite3_stmt *stmt;
+    char *err_msg=NULL;
+    char *table=SMTP_MANAGER_TABLE;
+
+    sprintf(temp, "UPDATE %s SET product_id=%d, mode='%d', account='%s', password='%s', server='%s', port=%s, auth='%s';", 
+            table, man->product_id, man->mode, man->account, man->password, man->server, man->port, man->auth);
+    r = sqlite3_exec(db, temp, NULL, 0, &err_msg);
+    if(r != SQLITE_OK) {
+        log_e("___sw_update_port failed, %s, %s\n\n", temp, err_msg);
+
+        sqlite3_free(err_msg);
+        return -1;
+    }
+
+    return 0;
+}
+
+int dev_smtp_update_recv(sqlite3 *db, smtp_recv_t *rcv)
+{
+    int i,r=0;
+    char temp[1024];
+    sqlite3_stmt *stmt;
+    char *err_msg=NULL;
+    char *table=SMTP_RECVEIVE_TABLE;
+
+    sprintf(temp, "UPDATE %s SET use=%d, idx=%d, account='%s' WHERE idx=%d;", 
+            table, rcv->use, rcv->idx, rcv->account, rcv->idx);
+    r = sqlite3_exec(db, temp, NULL, 0, &err_msg);
+    if(r != SQLITE_OK) {
+        log_e("___sw_update_port failed, %s, %s\n\n", temp, err_msg);
+
+        sqlite3_free(err_msg);
+        return -1;
+    }
+
+    return 0;
+}

+ 5 - 5
pro/src/sqlite_handle.h

@@ -101,11 +101,6 @@ int dev_get_snmp_info(sqlite3 *db, SNMPManager* _globalSNMPInfo);
 int dev_insert_snmp_info(sqlite3 *db, SNMPManager* _globalSNMPInfo);
 int dev_update_snmp_info(sqlite3 *db, int product_id, SNMPManager* _globalSNMPInfo);
 
-int dev_get_smtp_info(sqlite3 *db, SMTPManager* _globalSMTPInfo);
-
-int dev_get_smtp_recv_user_list(sqlite3 *db, SMTPreceiveAccount* _globalSMTPreceiveAccount);
-
-
 int dev_insert_alarm_ctrl(sqlite3* db,int product_id,int nAlarmType,char* alarm_content);
 int dev_delete__group_info(sqlite3 *db,int product_id);
 int dev_insert_group_info(sqlite3 *db,GroupInfo* _globalgroupInfo);
@@ -143,4 +138,9 @@ int dev_switch_init(sqlite3 *db, netswitch_info_t *sw);
 int dev_switch_update_port(sqlite3 *db, port_info_t *pt);
 int dev_switch_update_all(sqlite3 *db, netswitch_info_t *sw);
 
+int dev_smtp_init(sqlite3 *db, smtp_sett_t *sett);
+int dev_smtp_update_mang(sqlite3 *db, smtp_manager_t *man);
+int dev_smtp_update_recv(sqlite3 *db, smtp_recv_t *rcv);
+
+
 #endif

+ 14 - 10
pro/src/thread.c

@@ -22,10 +22,21 @@ int thread_start(int id, thread_fn fn, void *arg, int stksize, int prio)
         return -1;
     }
 
-    r = pthread_attr_setstacksize(&attr, stksize);
-    if(r) {
-        printf("____ thread %d attr setstacksize %d failed\n", id, stksize);
+#if 0
+    h->stk = malloc(stksize);
+    if(h->stk) {
+        r = pthread_attr_setstack(h->stk, stksize);
+        if(r) {
+            printf("____ thread %d attr setstack failed\n", id);
+        }
+    }
+    else {
+        r = pthread_attr_setstacksize(&attr, stksize);
+        if(r) {
+            printf("____ thread %d attr setstacksize %d failed\n", id, stksize);
+        }
     }
+#endif
     
     r = pthread_create(&h->tid, &attr, fn, h);
     pthread_attr_destroy(&attr);
@@ -41,13 +52,6 @@ int thread_stop(int id)
     thread_handle_t *h=&myThdHandles[id];
 
     h->quit = 1;
-
-#ifdef USE_WEBAPP
-    if(id==THREAD_ID_WEB) {
-    extern void httpStopEndpoints();
-        httpStopEndpoints();
-    }
-#endif
     pthread_join(h->tid, NULL);
     h->tid = 0;
     h->arg = NULL;

+ 1 - 0
pro/src/thread.h

@@ -39,6 +39,7 @@ typedef struct {
     int        quit;
     void       *arg;
     thread_fn  fn;
+    void       *stk;
 }thread_handle_t;