Sfoglia il codice sorgente

1、ntp同时适应ip和域名
2、清理数据库查询时对product_id的约束

guohui 1 anno fa
parent
commit
f06396d7ba
3 ha cambiato i file con 81 aggiunte e 130 eliminazioni
  1. 37 41
      pro/src/app.c
  2. 37 58
      pro/src/ntpclient.c
  3. 7 31
      pro/src/sqlite_handle.c

+ 37 - 41
pro/src/app.c

@@ -1786,26 +1786,51 @@ static void* ntp_thread(void *arg)
     NTPClient  *pc=NULL;
     time_t time1=0,time2=0,ntp_time;
     thread_handle_t *h=(thread_handle_t*)arg;
-    NTPManager *pm=&_globalNTPManager;
+    GlobalDeviceManager *dm=(GlobalDeviceManager*)h->arg;;
+    NTPManager *pntp=&_globalNTPManager;
     
+    r = dev_get_ntp_info(dm->db,  pntp);
+    if (r) {
+        pntp->mode = 1;
+        strcpy(pntp->ntpaddress, "119.28.183.184");
+        strcpy(pntp->ntpName, "百度NTP");
+        pntp->port = 123;
+        pntp->product_id = dm->_globalDevInfo.product.id;
+        time_t t = time(NULL);
+        struct tm* ptm = localtime(&t);
+        sprintf(pntp->time, "%04d-%02d-%02d %02d:%02d:%02d", ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec);
+        struct tm* ptm_gm = gmtime(&t);
+        pntp->tzone = 8;
+        pntp->weekday = (ptm->tm_wday == 0) ? 7 : ptm->tm_wday;
+        if (dev_insert_ntp_info(dm->db,  pntp)) {
+            log_e("insert npt info failed");
+        }
+    }
+    else {
+        log_d("get ntp info from database succeeded");
+    }
+    dev_Alarm_Run_message(dm, language_alarm_Init_Success[0], "NTP");
+
+
     #define NTP_INTERVAL_TIME  600
     time1 = time(NULL);
+
     while(h->quit==0) {
-        if(pm->mode>0) {
+        if(pntp->mode>0) {
             if(ntp_sync_flag) {
                 destroyNTPClient(pc); pc = NULL;
             }
 
             if(pc==NULL) {
-                pc = createNTPClient(pm->ntpaddress, pm->port);
+                pc = createNTPClient(pntp->ntpaddress, pntp->port);
             }
 
             if(pc) {
                 if((time2==0) || ((time2-time1)>=NTP_INTERVAL_TIME) || ntp_sync_flag) {
                     if (getCurrentTimeFromNTP(pc, &ntp_time)==0) {
-                        log_d("getCurrentTimeFromNTP ok!");
                         time_t host_time = time(NULL);
-                        if (abs(host_time - ntp_time) >= 5) {
+                        log_d("host_time: %ld, ntp_time: %ld", host_time, ntp_time);
+                        if (host_time != ntp_time) {
                             struct tm *ptm = localtime(&ntp_time);
                             set_time(ptm);
                         }
@@ -1876,6 +1901,7 @@ static void* snmp_thread(void *arg)
 {
     //int ret = 0 ;
     thread_handle_t *h=(thread_handle_t*)arg;
+    GlobalDeviceManager *dm=(GlobalDeviceManager*)h->arg;
     
     /* we are a subagent */
     char path[PATH_MAX];
@@ -1894,6 +1920,9 @@ static void* snmp_thread(void *arg)
     /* pduMIB will be used to read pduMIB.conf files. */
     init_snmp(path);
     init_snmp_alarm();
+
+    dev_get_snmp_info(dm->db, &_globalSNMPManager);
+    dev_Alarm_Run_message(dm, language_alarm_Init_Success[0], "SNMP");
 	
     int reconfig=0;
     while(h->quit==0) {
@@ -2174,45 +2203,11 @@ int app_init(void)
     thread_start(THREAD_ID_BREAKER_SCANNER, breaker_scanner_thread, _globalDeviceManager);
     thread_start(THREAD_ID_BREAKER, breaker_thread, _globalDeviceManager);
 
-    dev_Alarm_Run_message(_globalDeviceManager,language_alarm_Init_Success[0],"Server Thread");
-
-    ret = dev_get_ntp_info(_globalDeviceManager->db,  &_globalNTPManager);
-    if (ret == -1)
-    {
-        log_e("get ntp info from database failed");
-    }
-    else if (ret == -2)
-    {
-        _globalNTPManager.mode = 1;
-        strcpy(_globalNTPManager.ntpaddress, "119.28.183.184");
-        strcpy(_globalNTPManager.ntpName, "百度NTP");
-        _globalNTPManager.port = 123;
-        _globalNTPManager.product_id = _globalDeviceManager->_globalDevInfo.product.id;
-        time_t t = time(NULL);
-        struct tm* ptm = localtime(&t);
-        sprintf(_globalNTPManager.time, "%04d-%02d-%02d %02d:%02d:%02d", ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec);
-        struct tm* ptm_gm = gmtime(&t);
-        _globalNTPManager.tzone = 8;//ptm_gm->tm_hour - ptm->tm_hour;
-        _globalNTPManager.weekday = (ptm->tm_wday == 0) ? 7 : ptm->tm_wday;
-        if (dev_insert_ntp_info(_globalDeviceManager->db,  &_globalNTPManager))
-        {
-            log_e("insert npt info failed");
-        }
-    }
-    else
-    {
-        log_d("get ntp info from database succeeded");
-    }
-
-    thread_start(THREAD_ID_NTP, ntp_thread, NULL);
-    dev_Alarm_Run_message(_globalDeviceManager, language_alarm_Init_Success[0], "NTP");
-
-    //初始化snmp
-     dev_get_snmp_info(_globalDeviceManager->db, &_globalSNMPManager);
+    thread_start(THREAD_ID_NTP, ntp_thread, _globalDeviceManager);
+    
 #ifndef USE_NETSWITCH
     thread_start(THREAD_ID_SNMP, snmp_thread, _globalDeviceManager);
 #endif
-    dev_Alarm_Run_message(_globalDeviceManager, language_alarm_Init_Success[0], "SNMP");
 
     cascade_init();
     netswitch_init();
@@ -2223,6 +2218,7 @@ int app_init(void)
     websocket_init();
     appweb_init();
 
+    dev_Alarm_Run_message(_globalDeviceManager,language_alarm_Init_Success[0],"Server Thread");
     //通知smartUPG,app已经运行起来
     upg_init();
     

+ 37 - 58
pro/src/ntpclient.c

@@ -37,29 +37,27 @@ static time_t parseNTPResponse(const char* ntp_packet) {
     return (time_t)(sec_since_1900 - 2208988800U) + (time_t)frac;  
 }  
 
-static int get_addr(const char* ip, int port, struct sockaddr *saddr)
+typedef struct {
+    char     ip[64];
+    uint16_t port;
+}ipaddr_t;
+static int get_addr(ipaddr_t *addr, struct addrinfo *info)
 {
-    char *p=NULL;
-    struct sockaddr_in *p4=(struct sockaddr_in*)saddr;
-    struct sockaddr_in6 *p6=(struct sockaddr_in6*)saddr;
-
-    p4->sin_family = AF_INET;
-    p4->sin_port = port;
-    p = (char*)inet_pton(AF_INET, ip, &p4->sin_addr);
-    if(p) {
-        printf("____ ipv4, %d\n", AF_INET);
-        return 0;
+    addr->ip[0] = 0; addr->port = 0;
+    if(info->ai_family==AF_INET) {
+        struct sockaddr_in* p=(struct sockaddr_in*)(info->ai_addr);
+        addr->port = htons(p->sin_port);
+        inet_ntop(p->sin_family, &p->sin_addr, addr->ip, sizeof(addr->ip));
     }
-
-    p6->sin6_family = AF_INET6;
-    p6->sin6_port = port;
-    p = (char*)inet_pton(AF_INET, ip, &p6->sin6_addr);
-    if(p) {
-        printf("____ ipv6, %d\n", AF_INET6);
-        return 0;
+    else if(info->ai_family==AF_INET6) {
+        struct sockaddr_in6* p=(struct sockaddr_in6*)(info->ai_addr);
+        addr->port = htons(p->sin6_port);
+        inet_ntop(p->sin6_family, &p->sin6_addr, addr->ip, sizeof(addr->ip));
     }
-
-    return -1;
+    else {
+        return -1;
+    }
+    return 0;
 }
 NTPClient* createNTPClient(const char* ntp_server, int port) {  
     NTPClient* client = (NTPClient*)malloc(sizeof(NTPClient));  
@@ -68,57 +66,38 @@ NTPClient* createNTPClient(const char* ntp_server, int port) {
         return NULL;  
     } 
 
-    int r,fd=-1;
-    char tmp[32];
+    ipaddr_t ipa;
+    int r,fd=-1,err;
     struct addrinfo hints;
     struct addrinfo *res=NULL,*rp;
-    char temp[INET6_ADDRSTRLEN];
-    struct sockaddr_in *p4=NULL;
-    struct sockaddr_in6 *p6=NULL;
+    char tmp[32];
 
     memset(&hints, 0, sizeof hints);
     hints.ai_family   = AF_UNSPEC;
     hints.ai_socktype = SOCK_DGRAM;
     hints.ai_protocol = 0;//IPPROTO_UDP;
 
-    r = get_addr(ntp_server, port, &client->server_addr);
-    if(r==0) {
-        fd = socket(client->server_addr.sa_family, SOCK_DGRAM, 0);
-        if (fd>=0) {
-            client->sockfd = fd;
-        }
-        printf("socket to %s:%d %s, %d\n", ntp_server, port, (fd>=0)?"ok!":"failed!", client->server_addr.sa_family);
+    sprintf(tmp, "%d", port);
+    err = getaddrinfo(ntp_server, tmp, &hints, &res);
+    if(err){
+        printf(" getaddrinfo from %sfailed, %s\n", ntp_server, gai_strerror(err));  
+        free(client); return NULL;
     }
-    else {
-        sprintf(tmp, "%d", port);
-        if(getaddrinfo(ntp_server, tmp, &hints, &res) || (res==NULL)){
-            printf(" getaddrinfo from %s:%d failed\n", ntp_server, port);  
-            free(client); return NULL;
-        }
 
-        for(rp=res; rp; rp=rp->ai_next){
-            if(rp->ai_family==AF_INET) {
-                p4=(struct sockaddr_in*)rp->ai_addr;
-                inet_ntop(AF_INET, p4, temp, INET6_ADDRSTRLEN);
-                printf("socket to %s:%d ", temp, p4->sin_port);
-            }
-            else {
-                p6=(struct sockaddr_in6*)rp->ai_addr;
-                inet_ntop(AF_INET6, p6, temp, INET6_ADDRSTRLEN);
-                printf("socket to %s:%d ", temp, p6->sin6_port);
-            }
+    for(rp=res; rp; rp=rp->ai_next){
+        get_addr(&ipa, rp);
+        printf("22 socket to %s:%d ", ipa.ip, ipa.port);
 
-            fd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);
-            if (fd>=0) {
-                client->sockfd = fd;
-                client->server_addr = *rp->ai_addr;
-                printf("ok!\n");
-                break;
-            }
-            printf("failed!\n");
+        fd = socket(rp->ai_family, rp->ai_socktype, 0);
+        if (fd>=0) {
+            client->sockfd = fd;
+            client->server_addr = *rp->ai_addr;
+            printf("ok!\n");
+            break;
         }
-        freeaddrinfo(res);
+        printf("failed!\n");
     }
+    freeaddrinfo(res);
 
     if(fd<0) {
         free(client); return NULL;

+ 7 - 31
pro/src/sqlite_handle.c

@@ -452,12 +452,6 @@ int dev_search_latest_power_info(sqlite3 *db,int product_id,int product_ch_id,Gl
     char** pResult = NULL;      //用来指向sql执行结果的指针
     char* err_msg=NULL;
 
-    // SELECT *   
-    // FROM Table_PowerInfo   
-    // WHERE product_id = 1 AND product_ch_id = 0   
-    // ORDER BY product_samp_time DESC   
-    // LIMIT 1;
-
     // sprintf(select_sql,"SELECT * FROM Table_PowerInfo WHERE product_ch_id=%d ORDER BY strftime('%%Y-%%m-%%d %%H:%%M:%%S',product_samp_time || '.000') DESC LIMIT 1;",
     //                     product_id);
 
@@ -779,12 +773,6 @@ int dev_search_time_power_info(sqlite3 *db,int product_id,int product_ch_id,int
     char** pResult = NULL;      //用来指向sql执行结果的指针
     char* err_msg=NULL;
 
-    // SELECT *   
-    // FROM Table_PowerInfo   
-    // WHERE product_id = 1 AND product_ch_id = 0   
-    // ORDER BY product_samp_time DESC   
-    // LIMIT 1;
-
     // sprintf(select_sql,"SELECT * FROM Table_PowerInfo WHERE product_ch_id=%d ORDER BY strftime('%%Y-%%m-%%d %%H:%%M:%%S',product_samp_time || '.000') DESC LIMIT 1;",
     //                     product_id,
     //                     product_ch_id);
@@ -1084,12 +1072,6 @@ int dev_search_power_trend_info(sqlite3 *db,int product_id,int product_ch_id,Glo
     char** pResult = NULL;      //用来指向sql执行结果的指针
     char* err_msg=NULL;
 
-    // SELECT *   
-    // FROM Table_PowerInfo   
-    // WHERE product_id = 1 AND product_ch_id = 0   
-    // ORDER BY product_samp_time DESC   
-    // LIMIT 1;
-
     // sprintf(select_sql,"SELECT * FROM Table_PowerInfo WHERE product_ch_id=%d ORDER BY strftime('%%Y-%%m-%%d %%H:%%M:%%S',product_samp_time || '.000') DESC LIMIT 1;",
     //                     product_id,
     //                     product_ch_id);
@@ -1178,12 +1160,6 @@ int dev_search_power_AC_trend_info(sqlite3 *db,int product_id,int product_ch_id,
     char** pResult = NULL;      //用来指向sql执行结果的指针
     char* err_msg=NULL;
 
-    // SELECT *   
-    // FROM Table_PowerInfo   
-    // WHERE product_id = 1 AND product_ch_id = 0   
-    // ORDER BY product_samp_time DESC   
-    // LIMIT 1;
-
     // sprintf(select_sql,"SELECT * FROM Table_PowerInfo WHERE product_ch_id=%d ORDER BY strftime('%%Y-%%m-%%d %%H:%%M:%%S',product_samp_time || '.000') DESC LIMIT 1;",
     //                     product_id,
     //                     product_ch_id);
@@ -2870,7 +2846,7 @@ int dev_get_ntp_info(sqlite3 *db,NTPManager* _globalNTPInfo)
     char* err_msg=NULL;
     char select_sql[1024] = {0};
 
-    sprintf(select_sql, "SELECT* from Table_NTPManage WHERE product_id = %d;", __globalDeviceManage._globalDevInfo.product.id);
+    sprintf(select_sql, "SELECT* from Table_NTPManage;");
     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);
@@ -2964,7 +2940,7 @@ int dev_get_snmp_info(sqlite3 *db, SNMPManager* _globalSNMPInfo)
     char* err_msg=NULL;
     char select_sql[1024] = {0};
 
-    sprintf(select_sql, "SELECT* from Table_SNMPManage WHERE product_id = %d;", __globalDeviceManage._globalDevInfo.product.id);
+    sprintf(select_sql, "SELECT* from Table_SNMPManage;");
     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);
@@ -3134,7 +3110,7 @@ int dev_get_group_info(sqlite3 *db, GroupInfo* _globalgroupInfo)
     char* err_msg=NULL;
     char select_sql[1024] = {0};
 
-    sprintf(select_sql, "SELECT* from Table_GroupManage WHERE product_id = %d;", __globalDeviceManage._globalDevInfo.product.id);
+    sprintf(select_sql, "SELECT* from Table_GroupManage;");
     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);
@@ -3263,7 +3239,7 @@ int dev_get_user_info(sqlite3 *db, UserInfo* _globaluserInfo)
     char* err_msg=NULL;
     char select_sql[1024] = {0};
 
-    sprintf(select_sql, "SELECT * from Table_Userinfo WHERE product_id = %d;", __globalDeviceManage._globalDevInfo.product.id);
+    sprintf(select_sql, "SELECT * from Table_Userinfo;");
     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);
@@ -3399,7 +3375,7 @@ int dev_get_role_info(sqlite3 *db, RoleInfo* _globalRoleInfo)
     char* err_msg=NULL;
     char select_sql[1024] = {0};
 
-    sprintf(select_sql, "SELECT* from Table_RoleInfo WHERE product_id = %d;", __globalDeviceManage._globalDevInfo.product.id);
+    sprintf(select_sql, "SELECT* from Table_RoleInfo;");
     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);
@@ -3458,9 +3434,9 @@ int dev_get_power_ds(sqlite3 *db,GlobalPowerManger* _powerAll,char* dateSelect)
 
     if (dateSelect)
     {
-        sprintf(select_sql, "SELECT* from Table_ChnTimerManage WHERE product_id = %d and date=date('%s');", __globalDeviceManage._globalDevInfo.product.id,dateSelect);
+        sprintf(select_sql, "SELECT* from Table_ChnTimerManage date=date('%s');",dateSelect);
     }else{
-        sprintf(select_sql, "SELECT* from Table_ChnTimerManage WHERE product_id = %d;", 1);
+        sprintf(select_sql, "SELECT* from Table_ChnTimerManage;");
     }        
     res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
     if(res != SQLITE_OK) {