| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666 | #include <stdio.h>#include <json-c/json.h>#include "../ytCore/yt_unit_shm.h"#include <string.h>#include <sqlite3.h>#include <time.h>#include <sys/time.h>#include <stdlib.h>#include <unistd.h>#define CMD_GET_REALTIME_STATUS 1#define CMD_GET_HISTORY_VALUE 2#define CMD_GET_COMM_PARAMS 3#define CMD_SET_COMM_PARAMS 4#define CMD_GET_SPNO_PARAMS 5#define CMD_SET_SPNO_PARAMS 6#define CMD_CTL 64YT_UNIT_SHM *ytShm;bool load_shm(){    int shmid;    key_t key;    if((key = ftok(SHM_PATH,(int)SHM_PORT))==-1)        return false;    if((shmid = shmget(key,sizeof(YT_UNIT_SHM),IPC_CREAT|0666))==-1)        return false;    ytShm = (YT_UNIT_SHM *)shmat(shmid,NULL,0);    return true;}void get_realtime_status(json_object *q_body, json_object *body){    int commid,ncomm=0,comm_alarm=0,pno_alarm=0,alarmL1=0,alarmL2=0,total_count=0;    char tmp[256];    json_object *comm_list = json_object_new_array();    for(commid=0;commid<4;commid++){        if(ytShm->commList.comm[commid].ENABLED==0x01){            int count=0,add;            time_t t;            struct tm *loc_time;            json_object *o_comm = json_object_new_object();            json_object *pno_list = json_object_new_array();            ncomm++;            for(add=0;add<256;add++){                if((ytShm->sPointList.sPoint[commid][add].ENABLED==0x01)                        &&(ytShm->sPointList.sPoint[commid][add].PNO_TYPE>0)                        &&(ytShm->sPointList.sPoint[commid][add].PNO_TYPE<3)){                    count++;                    json_object *spno = json_object_new_object();                    sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][add].COMM_IDX);                    json_object_object_add(spno,"COMM",json_object_new_string(tmp));                    sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][add].BUS_ADD);                    json_object_object_add(spno,"ADDR",json_object_new_string(tmp));                    json_object_object_add(spno,"NAME",json_object_new_string(ytShm->sPointList.sPoint[commid][add].NAME));                    sprintf(tmp,"%ld",ytShm->sPointList.sPoint[commid][add].SUB_TYPE);                    json_object_object_add(spno,"SUB_TYPE",json_object_new_string(tmp));                    sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][add].PNO_TYPE);                    json_object_object_add(spno,"PNO_TYPE",json_object_new_string(tmp));                    if(ytShm->spStatusList.spStatus[commid][add].ALARM_STATUS>0){                        pno_alarm++;                        if(ytShm->spStatusList.spStatus[commid][add].ALARM_STATUS==2)                            alarmL2++;                        else if(ytShm->spStatusList.spStatus[commid][add].ALARM_STATUS==1)                            alarmL1++;                    }                    sprintf(tmp,"%d",ytShm->spStatusList.spStatus[commid][add].ALARM_STATUS);                    json_object_object_add(spno,"STATUS",json_object_new_string(tmp));                    if(ytShm->sPointList.sPoint[commid][add].PNO_TYPE==1){                        if(ytShm->spStatusList.spStatus[commid][add].REALTIME_VALUE==0)                            json_object_object_add(spno,"VALUE",json_object_new_string("0"));                        else                            json_object_object_add(spno,"VALUE",json_object_new_string("1"));                    }else{                        sprintf(tmp,"%.03f",ytShm->spStatusList.spStatus[commid][add].REALTIME_VALUE);                        json_object_object_add(spno,"VALUE",json_object_new_string(tmp));                    }                    t = ytShm->spStatusList.spStatus[commid][add].REALTIME_TIMESTAMP;                    loc_time = localtime(&t);                    sprintf(tmp,"%04d-%02d-%02d %02d:%02d:%02d",                            loc_time->tm_year,                            loc_time->tm_mon,                            loc_time->tm_mday,                            loc_time->tm_hour,                            loc_time->tm_min,                            loc_time->tm_sec);                    json_object_object_add(spno,"UPDATETIME",json_object_new_string(tmp));                    sprintf(tmp,"%d",(ytShm->currentTime.TIMESTAMP-ytShm->spStatusList.spStatus[commid][add].REALTIME_TIMESTAMP));                    json_object_object_add(spno,"DLYTIME",json_object_new_string(tmp));                    json_object_array_add(pno_list,spno);                }            }            total_count += count;            sprintf(tmp,"%d",ytShm->commList.comm[commid].IDX);            json_object_object_add(o_comm,"IDX",json_object_new_string(tmp));            json_object_object_add(o_comm,"PNOLIST",pno_list);            if(ytShm->commStatusList.commStatus[commid].STATUS!=0)                comm_alarm++;            sprintf(tmp,"%d",ytShm->commStatusList.commStatus[commid].STATUS);            json_object_object_add(o_comm,"STATUS",json_object_new_string(tmp));            json_object_array_add(comm_list,o_comm);        }    }    json_object_object_add(body,"COMMLIST",comm_list);}void get_history_value(json_object *q_body, json_object *body){    json_object *CommId=NULL, *BusAdd=NULL;    json_object_object_foreach(q_body, key, val){        if(strcmp("COMM",key)==0)            CommId = val;        else if(strcmp("ADDR",key)==0)            BusAdd = val;    }    if((CommId!=NULL)&&(BusAdd!=NULL)){        sqlite3 *db;        time_t t;        struct tm *tm_loc;        char **azResult, *errMsg, sql[1024],tmp[256];        int nrow,ncol,i;        int commid = atoi(json_object_get_string(CommId));        int busadd = atoi(json_object_get_string(BusAdd));        sprintf(tmp,"%d",commid);        json_object_object_add(body,"COMM",json_object_new_string(tmp));        sprintf(tmp,"%d",busadd);        json_object_object_add(body,"ADDR",json_object_new_string(tmp));        if((commid>=0)&&(commid<4)&&(busadd>=0)&&(busadd<256)){            if(sqlite3_open(REC_DB,&db)==SQLITE_OK){                sprintf(sql,"select REALTIME_VALUE, AVE_VALUE, REALTIME_TIMESTAMP, MAX_VALUE, MAX_TIMESTAMP, MIN_VALUE, MIN_TIMESTAMP from yt_rec_pno where COMMID=%s and BUSADD=%s",                        json_object_get_string(CommId), json_object_get_string(BusAdd));//                printf("sql:%s<br>",sql);                json_object *value_list = json_object_new_array();                if(sqlite3_get_table(db,sql,&azResult,&nrow,&ncol,&errMsg)==SQLITE_OK){                    if((nrow>0)&&(ncol>=7)){                        for(i=1;i<(nrow+1);i++){                            json_object *value = json_object_new_object();                            sprintf(tmp,"%s",azResult[i*ncol+0]);                            json_object_object_add(value,"REALTIME_VALUE",json_object_new_string(tmp));                            sprintf(tmp,"%s",azResult[i*ncol+1]);                            json_object_object_add(value,"AVE_VALUE",json_object_new_string(tmp));                            t = atoll(azResult[i*ncol+2])&0xffffffff;                            tm_loc = localtime(&t);                            sprintf(tmp,"%04d-%02d-%02d %02d:%02d:%02d",                                    tm_loc->tm_year,                                    tm_loc->tm_mon+1,                                    tm_loc->tm_mday,                                    tm_loc->tm_hour,                                    tm_loc->tm_min,                                    tm_loc->tm_sec);                            json_object_object_add(value,"REALTIME_TIMESTAMP",json_object_new_string(tmp));                            sprintf(tmp,"%s",azResult[i*ncol+3]);                            json_object_object_add(value,"MAX_VALUE",json_object_new_string(tmp));                            t = atoll(azResult[i*ncol+4])&0xffffffff;                            tm_loc = localtime(&t);                            sprintf(tmp,"%04d-%02d-%02d %02d:%02d:%02d",                                    tm_loc->tm_year,                                    tm_loc->tm_mon+1,                                    tm_loc->tm_mday,                                    tm_loc->tm_hour,                                    tm_loc->tm_min,                                    tm_loc->tm_sec);                            json_object_object_add(value,"MAX_TIMESTAMP",json_object_new_string(tmp));                            sprintf(tmp,"%s",azResult[i*ncol+5]);                            json_object_object_add(value,"MIN_VALUE",json_object_new_string(tmp));                            t = atoll(azResult[i*ncol+6])&0xffffffff;                            tm_loc = localtime(&t);                            sprintf(tmp,"%04d-%02d-%02d %02d:%02d:%02d",                                    tm_loc->tm_year,                                    tm_loc->tm_mon+1,                                    tm_loc->tm_mday,                                    tm_loc->tm_hour,                                    tm_loc->tm_min,                                    tm_loc->tm_sec);                            json_object_object_add(value,"MIN_TIMESTAMP",json_object_new_string(tmp));                            json_object_array_add(value_list,value);                        }                        json_object_object_add(body,"VALUELIST",value_list);                    }else{                        json_object_object_add(body,"ErrMsg",json_object_new_string("table struct error"));                    }                    sqlite3_free_table(azResult);                }else{                    json_object_object_add(body,"ErrMsg",json_object_new_string("db gettable failed"));                    sqlite3_free(errMsg);                }                sqlite3_close(db);            }else{                json_object_object_add(body,"ErrMsg",json_object_new_string("db open failed"));            }            json_object *pno_param = json_object_new_object();            sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][busadd].ENABLED);            json_object_object_add(pno_param,"ENABLED",json_object_new_string(tmp));            json_object_object_add(pno_param,"NAME",json_object_new_string(ytShm->sPointList.sPoint[commid][busadd].NAME));            sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][busadd].PNO_TYPE);            json_object_object_add(pno_param,"PNO_TYPE",json_object_new_string(tmp));            sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][busadd].PNO_ALARM);            json_object_object_add(pno_param,"PNO_ALARM",json_object_new_string(tmp));            sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][busadd].PNO_VALUE);            json_object_object_add(pno_param,"PNO_VALUE",json_object_new_string(tmp));            sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][busadd].PNO_DLY);            json_object_object_add(pno_param,"PNO_DLY",json_object_new_string(tmp));            sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][busadd].PNO_AD);            json_object_object_add(pno_param,"PNO_AD",json_object_new_string(tmp));            sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][busadd].OFFSET);            json_object_object_add(pno_param,"OFFSET",json_object_new_string(tmp));            sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][busadd].OFFSET_FLAG);            json_object_object_add(pno_param,"OFFSET_FLAG",json_object_new_string(tmp));            sprintf(tmp,"%.03f",ytShm->sPointList.sPoint[commid][busadd].PNO_MAX);            json_object_object_add(pno_param,"PNO_MAX",json_object_new_string(tmp));            sprintf(tmp,"%.03f",ytShm->sPointList.sPoint[commid][busadd].PNO_MIN);            json_object_object_add(pno_param,"PNO_MIN",json_object_new_string(tmp));            sprintf(tmp,"%.03f",ytShm->sPointList.sPoint[commid][busadd].ALARM_H);            json_object_object_add(pno_param,"ALARM_H",json_object_new_string(tmp));            sprintf(tmp,"%.03f",ytShm->sPointList.sPoint[commid][busadd].ALARM_L);            json_object_object_add(pno_param,"ALARM_L",json_object_new_string(tmp));            json_object_object_add(body,"PARAMS",pno_param);        }else{            json_object_object_add(body,"ErrMsg",json_object_new_string("query out of size"));        }    }else{        json_object_object_add(body,"ErrMsg",json_object_new_string("query params error"));    }}void get_comm_params(json_object *q_body, json_object *body){    json_object *CommId=NULL;    json_object_object_foreach(q_body, key, val){        if(strcmp("COMM",key)==0)            CommId = val;    }    if((CommId!=NULL)){        char tmp[256];        int commid = atoi(json_object_get_string(CommId));        sprintf(tmp,"%d",commid);        json_object_object_add(body,"COMM",json_object_new_string(tmp));        if((commid>=0)&&(commid<4)){            json_object *comm_param = json_object_new_object();            sprintf(tmp,"%d",ytShm->commList.comm[commid].IDX);            json_object_object_add(comm_param,"IDX",json_object_new_string(tmp));            sprintf(tmp,"%d",ytShm->commList.comm[commid].ENABLED);            json_object_object_add(comm_param,"ENABLED",json_object_new_string(tmp));            sprintf(tmp,"%d",ytShm->commList.comm[commid].CommType);            json_object_object_add(comm_param,"COMMTYPE",json_object_new_string(tmp));            json_object_object_add(comm_param,"PATH",json_object_new_string(ytShm->commList.comm[commid].PATH));            json_object_object_add(body,"PARAMS",comm_param);        }else{            json_object_object_add(body,"ErrMsg",json_object_new_string("query out of size"));        }    }else{        json_object_object_add(body,"ErrMsg",json_object_new_string("query params error"));    }}void set_comm_params(json_object *q_body, json_object *body){    json_object *CommId=NULL, *CommParams=NULL;    json_object_object_foreach(q_body, key, val){        if(strcmp("COMM",key)==0)            CommId = val;        else if(strcmp("PARAMS",key)==0)            CommParams = val;    }    if((CommId!=NULL)&&(CommParams!=NULL)){        char tmp[256];        int commid = atoi(json_object_get_string(CommId));        sprintf(tmp,"%d",commid);        json_object_object_add(body,"COMM",json_object_new_string(tmp));        if((commid>=0)&&(commid<4)){            json_object *Idx=NULL, *Enabled=NULL, *CommType=NULL, *Path=NULL;            json_object_object_foreach(CommParams, key, val){                if(strcmp("IDX",key)==0)                    Idx = val;                else if(strcmp("ENABLED",key)==0)                    Enabled = val;                else if(strcmp("COMMTYPE",key)==0)                    CommType = val;                else if(strcmp("PATH",key)==0)                    Path = val;            }            if((Idx!=NULL)                    &&(json_object_get_int(Idx)==commid)                    &&(Enabled!=NULL)                    &&(CommType!=NULL)                    &&(Path!=NULL))            {                int enabled = json_object_get_int(Enabled);                int commtype = json_object_get_int(CommType);                char path[512];                sprintf(path,"%s",json_object_get_string(Path));                if((enabled>=0)&&(enabled<2)&&(commtype>=0)&&(strlen(path)<255)){                    ytShm->commList.comm[commid].IDX = commid&0xff;                    ytShm->commList.comm[commid].ENABLED = enabled&0xff;                    ytShm->commList.comm[commid].CommType = commtype&0xff;                    sprintf(ytShm->commList.comm[commid].PATH,"%s",path);                    ytShm->commList.comm[commid].UNSAVED =0x01;                    json_object_object_add(body,"SETUP",json_object_new_string("TRUE"));                }else{                    json_object_object_add(body,"SETUP",json_object_new_string("FALSE"));                    json_object_object_add(body,"ErrMsg",json_object_new_string("set params out of size"));                }            }else{                json_object_object_add(body,"SETUP",json_object_new_string("FALSE"));                json_object_object_add(body,"ErrMsg",json_object_new_string("set params error"));            }        }else{            json_object_object_add(body,"SETUP",json_object_new_string("FALSE"));            json_object_object_add(body,"ErrMsg",json_object_new_string("query out of size"));        }    }else{        json_object_object_add(body,"SETUP",json_object_new_string("FALSE"));        json_object_object_add(body,"ErrMsg",json_object_new_string("query params error"));    }}void get_spno_params(json_object *q_body, json_object *body){    json_object *CommId=NULL, *Addr=NULL;    json_object_object_foreach(q_body, key, val){        if(strcmp("COMM",key)==0)            CommId = val;        else if(strcmp("ADDR",key)==0)            Addr = val;    }    if((CommId!=NULL)&&(Addr!=NULL)){        char tmp[256];        int commid = json_object_get_int(CommId);        int addr = json_object_get_int(Addr);        sprintf(tmp,"%d",commid);        json_object_object_add(body,"COMM",json_object_new_string(tmp));        sprintf(tmp,"%d",addr);        json_object_object_add(body,"ADDR",json_object_new_string(tmp));        if((commid>=0)&&(commid<4)                &&(addr>=0)&&(addr<256)){            json_object *params = json_object_new_object();            sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][addr].COMM_IDX);            json_object_object_add(params,"COMM_IDX",json_object_new_string(tmp));            sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][addr].BUS_ADD);            json_object_object_add(params,"BUS_ADD",json_object_new_string(tmp));            sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][addr].ENABLED);            json_object_object_add(params,"ENABLED",json_object_new_string(tmp));            json_object_object_add(params,"NAME",json_object_new_string(ytShm->sPointList.sPoint[commid][addr].NAME));            sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][addr].PNO_TYPE);            json_object_object_add(params,"PNO_TYPE",json_object_new_string(tmp));            sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][addr].PNO_ALARM);            json_object_object_add(params,"PNO_ALARM",json_object_new_string(tmp));            sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][addr].PNO_VALUE);            json_object_object_add(params,"PNO_VALUE",json_object_new_string(tmp));            sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][addr].PNO_DLY);            json_object_object_add(params,"PNO_DLY",json_object_new_string(tmp));            sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][addr].PNO_AD);            json_object_object_add(params,"PNO_AD",json_object_new_string(tmp));            sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][addr].OFFSET);            json_object_object_add(params,"OFFSET",json_object_new_string(tmp));            sprintf(tmp,"%d",ytShm->sPointList.sPoint[commid][addr].OFFSET_FLAG);            json_object_object_add(params,"OFFSET_FLAG",json_object_new_string(tmp));            sprintf(tmp,"%.03f",ytShm->sPointList.sPoint[commid][addr].PNO_MAX);            json_object_object_add(params,"PNO_MAX",json_object_new_string(tmp));            sprintf(tmp,"%.03f",ytShm->sPointList.sPoint[commid][addr].PNO_MIN);            json_object_object_add(params,"PNO_MIN",json_object_new_string(tmp));            sprintf(tmp,"%.03f",ytShm->sPointList.sPoint[commid][addr].ALARM_H);            json_object_object_add(params,"ALARM_H",json_object_new_string(tmp));            sprintf(tmp,"%.03f",ytShm->sPointList.sPoint[commid][addr].ALARM_L);            json_object_object_add(params,"ALARM_L",json_object_new_string(tmp));            sprintf(tmp,"%ld",ytShm->sPointList.sPoint[commid][addr].SUB_TYPE);            json_object_object_add(params,"SUB_TYPE",json_object_new_string(tmp));            json_object_object_add(body,"PARAMS",params);        }else{            json_object_object_add(body,"ErrMsg",json_object_new_string("query out of size"));        }    }else{        json_object_object_add(body,"ErrMsg",json_object_new_string("query params error"));    }}void set_spno_params(json_object *q_body, json_object *body){    json_object *CommId=NULL, *Addr=NULL, *Params=NULL;    json_object_object_foreach(q_body, key, val){        if(strcmp("COMM",key)==0)            CommId = val;        else if(strcmp("ADDR",key)==0)            Addr = val;        else if(strcmp("PARAMS",key)==0)            Params = val;    }    if((CommId!=NULL)&&(Addr!=NULL)            &&(Params!=NULL)){        char tmp[256];        int commid = json_object_get_int(CommId);        int addr = json_object_get_int(Addr);        sprintf(tmp,"%d",commid);        json_object_object_add(body,"COMM",json_object_new_string(tmp));        sprintf(tmp,"%d",addr);        json_object_object_add(body,"ADDR",json_object_new_string(tmp));        if((commid>=0)&&(commid<4)                &&(addr>=0)&&(addr<256)){            json_object *CommIdx=NULL, *BusAdd=NULL, *Enabled=NULL, *Name=NULL;            json_object *PnoType=NULL, *PnoAlarm=NULL, *PnoValue=NULL, *PnoDly=NULL;            json_object *PnoAd=NULL, *Offset=NULL, *OffsetFlag=NULL, *PnoMax=NULL;            json_object *PnoMin=NULL, *AlarmH=NULL, *AlarmL=NULL, *SubType=NULL;            json_object_object_foreach(Params, key, val){                if(strcmp("COMM_IDX",key)==0)                    CommIdx = val;                else if(strcmp("BUS_ADD",key)==0)                    BusAdd = val;                else if(strcmp("ENABLED",key)==0)                    Enabled = val;                else if(strcmp("NAME",key)==0)                    Name = val;                else if(strcmp("PNO_TYPE",key)==0)                    PnoType = val;                else if(strcmp("PNO_ALARM",key)==0)                    PnoAlarm = val;                else if(strcmp("PNO_VALUE",key)==0)                    PnoValue = val;                else if(strcmp("PNO_DLY",key)==0)                    PnoDly = val;                else if(strcmp("PNO_AD",key)==0)                    PnoAd = val;                else if(strcmp("OFFSET",key)==0)                    Offset = val;                else if(strcmp("OFFSET_FLAG",key)==0)                    OffsetFlag = val;                else if(strcmp("PNO_MAX",key)==0)                    PnoMax = val;                else if(strcmp("PNO_MIN",key)==0)                    PnoMin = val;                else if(strcmp("ALARM_H",key)==0)                    AlarmH = val;                else if(strcmp("ALARM_L",key)==0)                    AlarmL = val;                else if(strcmp("SUB_TYPE",key)==0)                    SubType = val;            }            if((CommIdx!=NULL)&&(BusAdd!=NULL)&&(Enabled!=NULL)                    &&(Name!=NULL)&&(PnoType!=NULL)&&(PnoAlarm!=NULL)                    &&(PnoValue!=NULL)&&(PnoDly!=NULL)&&(PnoAd!=NULL)                    &&(Offset!=NULL)&&(OffsetFlag!=NULL)&&(PnoMax!=NULL)                    &&(PnoMin!=NULL)&&(AlarmH!=NULL)&&(AlarmL!=NULL)                    &&(SubType!=NULL)){                int commidx = atoi(json_object_get_string(CommIdx));                int busadd = atoi(json_object_get_string(BusAdd));                int enabled = atoi(json_object_get_string(Enabled));                int pnotype = atoi(json_object_get_string(PnoType));                int pnoalarm = atoi(json_object_get_string(PnoAlarm));                int pnovalue = atoi(json_object_get_string(PnoValue));                int pnodly = atoi(json_object_get_string(PnoDly));                int pnoad = atoi(json_object_get_string(PnoAd));                int offset = atoi(json_object_get_string(Offset));                int offset_flag = atoi(json_object_get_string(OffsetFlag));                float pnomax = atof(json_object_get_string(PnoMax));                float pnomin = atof(json_object_get_string(PnoMin));                float alarmh = atof(json_object_get_string(AlarmH));                float alarml = atof(json_object_get_string(AlarmL));                uint subtype = (atoll(json_object_get_string(SubType)))&0xffffffff;                if((commidx==commid)&&(busadd==addr)&&(enabled>=0)&&(enabled<2)                        &&(pnotype>=0)&&(pnotype<5)&&(pnoalarm>=0)&&(pnoalarm<3)                        &&(pnovalue>=0)&&(pnovalue<4)&&(pnodly>=0)&&(pnodly<256)                        &&(pnoad>=0)&&(pnoad<17)&&(offset>=0)&&(offset<256)                        &&(offset_flag>=0)&&(offset_flag<2)&&(strlen(json_object_get_string(Name))<=220)){                    ytShm->sPointList.sPoint[commid][addr].COMM_IDX = commidx;                    ytShm->sPointList.sPoint[commid][addr].BUS_ADD = busadd;                    ytShm->sPointList.sPoint[commid][addr].ENABLED = enabled;                    sprintf(ytShm->sPointList.sPoint[commid][addr].NAME,"%s",json_object_get_string(Name));                    ytShm->sPointList.sPoint[commid][addr].PNO_TYPE = pnotype;                    ytShm->sPointList.sPoint[commid][addr].PNO_ALARM = pnoalarm;                    ytShm->sPointList.sPoint[commid][addr].PNO_VALUE = pnovalue;                    ytShm->sPointList.sPoint[commid][addr].PNO_DLY = pnodly;                    ytShm->sPointList.sPoint[commid][addr].PNO_AD = pnoad;                    ytShm->sPointList.sPoint[commid][addr].OFFSET = offset;                    ytShm->sPointList.sPoint[commid][addr].OFFSET_FLAG = offset_flag;                    ytShm->sPointList.sPoint[commid][addr].PNO_MAX = pnomax;                    ytShm->sPointList.sPoint[commid][addr].PNO_MIN = pnomin;                    ytShm->sPointList.sPoint[commid][addr].ALARM_H = alarmh;                    ytShm->sPointList.sPoint[commid][addr].ALARM_L = alarml;                    ytShm->sPointList.sPoint[commid][addr].SUB_TYPE = subtype;                    ytShm->sPointList.sPoint[commid][addr].UNSAVED = 0x01;                    json_object_object_add(body,"SETUP",json_object_new_string("TRUE"));                }else{                    json_object_object_add(body,"SETUP",json_object_new_string("FALSE"));                    json_object_object_add(body,"ErrMsg",json_object_new_string("set params out of size"));                }            }else{                json_object_object_add(body,"SETUP",json_object_new_string("FALSE"));                json_object_object_add(body,"ErrMsg",json_object_new_string("set params error"));            }        }else{            json_object_object_add(body,"SETUP",json_object_new_string("FALSE"));            json_object_object_add(body,"ErrMsg",json_object_new_string("query out of size"));        }    }else{        json_object_object_add(body,"SETUP",json_object_new_string("FALSE"));        json_object_object_add(body,"ErrMsg",json_object_new_string("query params error"));    }}void json_cmd(int cmd, json_object *q_body, json_object *body){    switch (cmd) {    case CMD_GET_REALTIME_STATUS:        get_realtime_status(q_body,body);        break;    case CMD_GET_HISTORY_VALUE:        get_history_value(q_body,body);        break;    case CMD_GET_COMM_PARAMS:        get_comm_params(q_body,body);        break;    case CMD_SET_COMM_PARAMS:        set_comm_params(q_body,body);        break;    case CMD_GET_SPNO_PARAMS:        get_spno_params(q_body, body);        break;    case CMD_SET_SPNO_PARAMS:        set_spno_params(q_body, body);        break;    case CMD_CTL:        break;    default:        break;    }}bool json_request_action(char *request, json_object *body){    json_object *q_json = NULL, *q_ver = NULL, *q_body =NULL;    json_object *q_cmd = NULL, *q_reply=NULL;    int cmd;    q_json = json_tokener_parse(request);    if(q_json!=NULL){        json_object_object_foreach(q_json,key,val){            if(strcmp(key,"REPLY")==0){                q_reply = val;            }else if(strcmp(key,"VER")==0){                q_ver = val;            }else if(strcmp(key,"BODY")==0){                q_body = val;            }        }        if(q_reply==NULL){            json_object_put(q_json);            json_object_object_add(body,"ErrMsg",json_object_new_string("reply null"));            return false;        }else if(strcmp(json_object_get_string(q_reply),"0")!=0){            json_object_put(q_json);            json_object_object_add(body,"ErrMsg",json_object_new_string("reply error"));            return false;        }        if(q_ver==NULL){            json_object_put(q_json);            json_object_object_add(body,"ErrMsg",json_object_new_string("version null"));            return false;        }else if(strcmp(json_object_get_string(q_ver),"1.00")!=0){            json_object_put(q_json);            json_object_object_add(body,"ErrMsg",json_object_new_string("version error"));            return false;        }        if(q_body==NULL){            json_object_put(q_json);            json_object_object_add(body,"ErrMsg",json_object_new_string("body null"));            return false;        }        json_object_object_foreach(q_body,key2,val2){            if(strcmp(key2,"CMD")==0){                q_cmd = val2;            }        }        if(q_cmd==NULL){            json_object_put(q_json);            json_object_object_add(body,"ErrMsg",json_object_new_string("cmd null"));            return false;        }else if(json_object_get_type(q_cmd)!=json_type_int){            json_object_put(q_json);            json_object_object_add(body,"ErrMsg",json_object_new_string("cmd datatype error"));            return false;        }        cmd = json_object_get_int(q_cmd);        json_object_object_add(body,"CMD",json_object_new_int(cmd));        json_cmd(cmd,q_body,body);        json_object_put(q_json);    }else{        json_object_object_add(body,"ErrMsg",json_object_new_string("query null"));        return false;    }    return true;}int main(void){    char *input,*lenstr,*data;    char tmpstr[1024];    json_object *json,*json_body;    int len;    printf("%s%c%c\n","Content-Type:text/html;charset=UTF-8",13,10);    json = json_object_new_object();    json_object_object_add(json,"VER",json_object_new_string("1.00"));    json_object_object_add(json,"NAME",json_object_new_string("Usky_IoT-03"));    lenstr = getenv("CONTENT_LENGTH");    if(lenstr){        len = atoi(lenstr);        if((len>0)&&(len<1024)){            input = (char *)malloc((unsigned)(len+2));            data = (char *)malloc((unsigned)(len+2));            fgets(input,len+1,stdin);//            if((input[0]=='q')//                    &&(input[1]=='u')//                    &&(input[2]=='e')//                    &&(input[3]=='r')//                    &&(input[4]=='y')//                    &&(input[5]=='J')//                    &&(input[6]=='s')//                    &&(input[7]=='o')//                    &&(input[8]=='n')//                    &&(input[9]=='=')){//                for(i=0;i<(len-10);i++)//                    data[i] = input[i+10];//                data[len-10]=0;                if(load_shm()){                    sprintf(tmpstr,"%04d-%02d-%02d %02d:%02d:%02d",                            ytShm->currentTime.YEAR,                            ytShm->currentTime.MONTH,                            ytShm->currentTime.DAY,                            ytShm->currentTime.HOUR,                            ytShm->currentTime.MINUTE,                            ytShm->currentTime.SECOND);                    json_object_object_add(json,"TIMESTAMP",json_object_new_string(tmpstr));                    json_body = json_object_new_object();                   if(json_request_action(input, json_body)){                       json_object_object_add(json,"RESULT",json_object_new_string("1"));                       json_object_object_add(json,"BODY",json_body);                   }else{                       json_object_object_add(json,"RESULT",json_object_new_string("0"));                       json_object_object_add(json,"MESSAGE",json_object_new_string("Query Json error."));                       json_object_object_add(json,"BODY",json_body);                   }                   shmdt(ytShm);                }else{                    json_object_object_add(json,"RESULT",json_object_new_string("0"));                    json_object_object_add(json,"MESSAGE",json_object_new_string("Load Share Memory failed."));                }                json_object_object_add(json,"VER",json_object_new_string("1.00"));                json_object_object_add(json,"REPLY",json_object_new_string("1"));//            }else{//                json_object_object_add(json,"RESULT",json_object_new_string("0"));//                json_object_object_add(json,"MESSAGE",json_object_new_string("Query Params error."));//                json_object_object_add(json,"QUERY",json_object_new_string(input));//            }            free(data);            free(input);        }else{            json_object_object_add(json,"RESULT",json_object_new_string("0"));            json_object_object_add(json,"MESSAGE",json_object_new_string("Length error."));        }    }else{        json_object_object_add(json,"RESULT",json_object_new_string("0"));        json_object_object_add(json,"MESSAGE",json_object_new_string("No Content error."));    }    printf("%s",json_object_to_json_string(json));    json_object_put(json);    return 0;}
 |