houxiao
2016-12-08 c88f653a08d0006fafa9c7b08c43888df2c46b8c
merge my fix

git-svn-id: http://192.168.1.226/svn/proxy@3 454eff88-639b-444f-9e54-f578c98de674
1个文件已添加
2个文件已修改
420 ■■■■ 已修改文件
ProxyServer/make.sh 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ProxyServer/proxyserver.c 397 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ProxyServer/proxyserver.h 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ProxyServer/make.sh
New file
@@ -0,0 +1,14 @@
#!/bin/sh
rm /tmp/tmp.zip
rm /tmp/tmpZip -r
rm demo *.o *.so
gcc -g -c -fPIC -o proxy.o proxyserver.c
gcc -shared -pthread -o libproxy.so proxy.o -lmysqlclient
cp libproxy.so /usr/local/lib
/sbin/ldconfig
gcc -g -o demo main.c -lproxy
service apache2 restart
ProxyServer/proxyserver.c
@@ -28,9 +28,10 @@
int ZipSerFileNum=0;
int ZipCountidx;
char NetInfo[128];
char EventString[100000];
EVENT_LOG myEventLogs[200];
char EventString[5000 * 1024];
EVENT_LOG myEventLogs[1000 * 1024];
int EventCount=0;
int EventCountInSearchRange=0;
int FindIdx(char* IP);
int FindEmpty();
@@ -42,6 +43,9 @@
#define MAX 1024
#define fileread_buf 128
AlarmInfo RealAlarmEvent[16][1000];
//#define DBG_LOG
#define ZIP_HOME "/tmp"
/////////////////////////////////////////////////
char* strnncat(char*s1,char*s2,int n)
@@ -120,8 +124,53 @@
    }
    return EventString;
}
int InsertAnalyser(char *AnalyserName,char* AnalyserIP,char* AnalyserPort,char* ServerIP,char* ServerPort,char* user,char* pass,char* resol,char* commType)
{
    int ret=0;
    ret=Check_MysqlData(AnalyserName,AnalyserIP,AnalyserPort,ServerIP,ServerPort,user, pass, resol, commType);
    if(ret !=9)
       return InsertMysqlData(AnalyserName,AnalyserIP,AnalyserPort,ServerIP,ServerPort,user, pass, resol, commType);
    else
      return 0;
}
int DeleteAnalyser(char* AnalyserIP)                                                                                                    //8.删除设备   参数:设备ip    返回:成功或失败的提示。
{
    int ret=0;
    MYSQL *conn;
    char *server="localhost";
    char *user="root";
    char *password="123";
    char *database="opentutorials";
    char query[255];
    if(!(conn=mysql_init((MYSQL*)NULL))){
        printf("init fail\n");
        return -1;
    }
    if(!mysql_real_connect(conn,server,user,password,NULL,3306,NULL,0)){
        printf("connect error.\n");
        return -1;
    }
    if(mysql_select_db(conn,database)!=0){
        mysql_close(conn);
        printf("select_db_fail.\n");
        return -1;
    }
    sprintf(query, "delete from tbl_deviceinfo where equipmentip='%s';",AnalyserIP);
    if(mysql_query(conn,query)){
        printf("query fail\n");
        return -1;
    }
    mysql_close(conn);
    return ret;
}
char* GetAnalyserAll()                                                                                                                //9.查询设备   参数:无        返回:分析器的名称和ip
{
    memset(EventString,0,100000);
    int ret = Read_MysqlData();
    if(ret==0)    return     EventString;
    else  return "fail";
}
char* GetAnalyserNet(void)                                                                                                                //5.获取当前转发器的ip        参数:无。返回:当前的ip地址子网掩码和网关
{
    memset(NetInfo,0,128);
@@ -561,7 +610,6 @@
//// 查询报警记录
//// 输入:分析器IP,开始时间,结束时间,信道号,用户,密码
//// 输出:查询结果。(包括信道号,报警时间,播放地址,等。)
@@ -575,12 +623,16 @@
    if(AnalyserIP==NULL || AnalyserIP[0]==0) return "-1";
//    if(gGettingStep>0) return -2;
    
    chmod(ZIP_HOME,0777);
    //delete_file(ZIP_HOME "/tmp/tmp.zip");
    //delete_file(ZIP_HOME "/tmpZip/*");
    struct tm ttm;
    time_t StepTm;
    int length;
    char* httpUri;
    char sss[24],eee[24];
    chmod("/home",0777);
    chmod("/home",0777);//#todo ZIP_HOME
    const char* folderr;
    const char* filename1;
    folderr="/home/tmpZip";
@@ -598,14 +650,30 @@
    if(RequestChannel==1) httpUri= "/PSIA/VIQ/Event/metadata/1/files";
    if(RequestChannel==2) httpUri= "/PSIA/VIQ/Event/metadata/2/files";
    if(RequestChannel==3) httpUri= "/PSIA/VIQ/Event/metadata/3/files";
    ttm.tm_year=StartTm->Year;ttm.tm_mon=StartTm->Month;ttm.tm_mday=StartTm->Day;ttm.tm_hour=StartTm->Hour;ttm.tm_min=StartTm->Min;ttm.tm_sec=StartTm->Sec;
    ttm.tm_year=StartTm->Year - 1900;
    ttm.tm_mon=StartTm->Month - 1;
    ttm.tm_mday=StartTm->Day;
    ttm.tm_hour=StartTm->Hour;
    ttm.tm_min=StartTm->Min;
    ttm.tm_sec=StartTm->Sec;
    time_t SearchStartTm = mktime(&ttm);
    ttm.tm_year=EndTm->Year;ttm.tm_mon=EndTm->Month;ttm.tm_mday=EndTm->Day;ttm.tm_hour=EndTm->Hour;ttm.tm_min=EndTm->Min;ttm.tm_sec=EndTm->Sec;
    SearchStartTm -= 8 * 60 * 60;
    ttm.tm_year=EndTm->Year - 1900;
    ttm.tm_mon=EndTm->Month - 1;
    ttm.tm_mday=EndTm->Day;
    ttm.tm_hour=EndTm->Hour;
    ttm.tm_min=EndTm->Min;
    ttm.tm_sec=EndTm->Sec;
    time_t SearchEndTm = mktime(&ttm);
    SearchEndTm -= 8 * 60 * 60;
    
#ifdef DBG_LOG
    printf("stm=%d,etm=%d\n",(int)SearchStartTm,(int)SearchEndTm);
#endif
    for (StepTm=SearchEndTm;StepTm>SearchStartTm;StepTm-=2*3600)
    //for (StepTm=SearchEndTm; StepTm>SearchStartTm; StepTm-=1*3600)
    {
        zclock_sleep(200);
//        printf(" ==== Search loop function execution  =================%d,%d \n",(int)StepTm,(int)SearchStartTm);
@@ -625,14 +693,21 @@
            close(GSocket);
            return "-4";
        }
        time_t ttt=StepTm-2*3600;
        time_t ttt=SearchStartTm;
        struct tm *t;
        //ttt-=4*60*60;
        t = localtime(&ttt);
        sprintf(sss,"%d-%02d-%02dT%02d:%02d:%02d.000",t->tm_year+2000-100,t->tm_mon,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);// = "2016-08-26T07:31:00.000";
        sprintf(sss,"%d-%02d-%02dT%02d:%02d:%02d.000",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);// = "2016-08-26T07:31:00.000";
        sss[23]=0;
        t = localtime(&StepTm);
        sprintf(eee,"%d-%02d-%02dT%02d:%02d:%02d.000",t->tm_year+2000-100,t->tm_mon,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);// = "2016-08-26T07:31:00.000";
        ttt=SearchEndTm;
        //ttt+=4*60*60;
        t = localtime(&ttt);
        sprintf(eee,"%d-%02d-%02dT%02d:%02d:%02d.000",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);// = "2016-08-26T07:31:00.000";
        eee[23]=0;
#ifdef DBG_LOG
        printf("sss=%s, eee=%s\n", sss, eee);
#endif
        RequestMetaFiles(gAnalyzerIP,httpUri,sss,eee);
        write(GSocket,byte_array,strlen(byte_array));
        
@@ -734,6 +809,7 @@
            }
         }// while end
    }//for 
    //////// get
    for(ZipCountidx = 0; ZipCountidx<ZipSerFileNum; ZipCountidx++)
    {
@@ -762,8 +838,6 @@
        write(GSocket,byte_array,strlen(byte_array));
//        printf("==========================================================================================================================>>>>>>>>\n");
//        printf("%s",byte_array);
        while(1){
            length=read(GSocket,&buff,sizeof(buff)-1);       
            if(length<=0)
@@ -787,7 +861,7 @@
            if(bZipFileSaving==1){
                //下载Zip filesave
                int file;
                if((file = open("/home/tmp.zip", O_RDWR, S_IREAD|S_IWRITE)) <0)
                if((file = open(ZIP_HOME "/tmp.zip", O_RDWR, S_IREAD|S_IWRITE)) <0)
                    printf("open file fail!\n");
                lseek(file,0,SEEK_END);
                write(file,&buff[0], length);//CString m_data
@@ -798,17 +872,18 @@
                    bZipFileSaving = 0;
                    close(GSocket);
                    //Convert Zip file to Ser file
                    system("unzip -o /home/tmp.zip -d /home/tmpZip");
                    system("unzip -o " ZIP_HOME "/tmp.zip -d " ZIP_HOME "/tmpZip");
                }
            }
            else{
                int sidx = stringcmp((char*)buff,"PK",2);
                if(sidx >=0){//下载Zip filesave
                    delete_file("/home/tmp.zip");
                    delete_file(ZIP_HOME "/tmp.zip");
                    //delete_file(ZIP_HOME "/tmpZip/*");
                    //下载Zip filesave
                    bZipFileSaving = 1;
                    int file;
                    if((file = open("/home/tmp.zip",O_CREAT|O_RDWR,S_IREAD|S_IWRITE)) <0)
                    if((file = open(ZIP_HOME "/tmp.zip",O_CREAT|O_RDWR,S_IREAD|S_IWRITE)) <0)
                        printf("open file fail!\n");
                    write(file,&buff[sidx], length-sidx);//CString m_data
                    close(file);
@@ -819,15 +894,15 @@
                        bZipFileSaving = 0;
                        close(GSocket);
                        //Convert Zip file to Ser file
                        system("unzip -o /home/tmp.zip -d /home/tmpZip");
                        system("unzip -o " ZIP_HOME "/tmp.zip -d " ZIP_HOME "/tmpZip");
                    }
                }
            }
        }//while
    }//for
    int   i,res=0,num=0; //得长度
    int res=0,num=0; //得长度
    filenames filename[100];
    num = GetFileNameInFolder("/home/tmpZip",filename);
    num = GetFileNameInFolder(ZIP_HOME "/tmpZip",filename);
    char stringpath[1024];
    unsigned char p_save_buf[6144000];
    
@@ -835,37 +910,68 @@
    {   
        if(filename[i].name[0]=='.') continue;
        memset(stringpath,0,1024);
        memcpy(stringpath,"/home/tmpZip/",13);
        memcpy(stringpath, ZIP_HOME "/tmpZip/",13);
        strcat(stringpath,filename[i].name);
        int handle;
        if((handle = open(stringpath, O_RDWR, S_IREAD|S_IWRITE)) <0)
            printf("open file fail!\n");
        res = read(handle,p_save_buf,6144000);//CString m_data
        close(handle);
        AnalySerFile((char*)p_save_buf,res);
        AnalySerFile((char*)p_save_buf,res,SearchStartTm,SearchEndTm);
    }   
    memset(EventString,0,100000);
    memset(EventString,0,sizeof(EventString));
    //for(i=0;i<1000;i++)
#ifdef DBG_LOG
    printf("EventCount===========================%d\n",EventCount);    
    for (int i=0;i<EventCount;i++)
    printf("EventCountInSearchRange==============%d\n",EventCountInSearchRange);
#endif
    strcat(EventString,"[");
    for (i=0;i<EventCount;i++)
    {
#ifndef DBG_LOG
        if (! myEventLogs[i].InSearchRange)
            continue;
#endif
        strcat(EventString,"{");
        strcat(EventString,"\"datetime\":\"");
        strcat(EventString,myEventLogs[i].Date);
        strcat(EventString,"\n");
        strcat(EventString," ");
        strcat(EventString,myEventLogs[i].Time);
        strcat(EventString,"\n");
        strcat(EventString,myEventLogs[i].Duration);
        strcat(EventString,"\n");
        strcat(EventString,"\",\"path\":\"");
        strcat(EventString,myEventLogs[i].clipUrl);
        strcat(EventString,"\n");
        strcat(EventString,myEventLogs[i].Region);
        strcat(EventString,"\n");
        strcat(EventString,myEventLogs[i].Rule);
        strcat(EventString,"\n");
        strcat(EventString,myEventLogs[i].DebugMessageS);
        strcat(EventString,"\n");
        strcat(EventString,myEventLogs[i].DebugMessageE);
        strcat(EventString,"\n");
        strcat(EventString,"\"}");
        if (i < EventCount - 1)
            strcat(EventString,",");
        //strcat(EventString,myEventLogs[i].Date);
        //strcat(EventString,"\n");
        //strcat(EventString,myEventLogs[i].Time);
        //strcat(EventString,"\n");
        //strcat(EventString,myEventLogs[i].Duration);
        //strcat(EventString,"\n");
        //strcat(EventString,myEventLogs[i].clipUrl);
        //strcat(EventString,"\n");
        //strcat(EventString,myEventLogs[i].Region);
        //strcat(EventString,"\n");
        //strcat(EventString,myEventLogs[i].Rule);
        //strcat(EventString,"\n");
        //strcat(EventString,myEventLogs[i].DebugMessageS);
        //strcat(EventString,"\n");
        //strcat(EventString,myEventLogs[i].DebugMessageE);
        //strcat(EventString,"\n");
    }
    strcat(EventString,"]");
    //reset
    //EventCount = 0;//#todo
    //EventCountInSearchRange = 0;
    //RequestChannel = -1;
    //memset(&myEventLogs, 0, sizeof(myEventLogs));
    return EventString;
    //return "333333333333333333333333333333333333333333333333333333333333333333789";
}
@@ -1357,11 +1463,12 @@
    }
    return n;
}
void AnalySerFile(char* p_save_buf,int res)
void AnalySerFile(char* p_save_buf,int res, int SearchStartTm, int SearchEndTm)
{
    int ParagraphIdx;
    bool somewhat;
first:
    somewhat=false;
    memset(myEventLogs[EventCount].DebugMessageS,0,200);
    memset(myEventLogs[EventCount].DebugMessageE,0,200);
@@ -1401,6 +1508,37 @@
        if(sidx>=0 && p_save_buf[sidx+7]==0x08){
            int flen = (unsigned char)p_save_buf[sidx+7+1]*256+(unsigned char)p_save_buf[sidx+7+2];
            memcpy(myEventLogs[EventCount].clipUrl,&p_save_buf[sidx+7+3],flen);
            // ensure accurate range
            {
                const char* dtInUrlPos = strrchr(myEventLogs[EventCount].clipUrl, '/');
                //printf("%s\n", dtInUrlPos);
                struct tm dtInUrl;
                memset(&dtInUrl, 0, sizeof(dtInUrl));
                sscanf(dtInUrlPos, "/%d_%d_%d-%d_%d_%d.",
                    &dtInUrl.tm_year, &dtInUrl.tm_mon, &dtInUrl.tm_mday, &dtInUrl.tm_hour, &dtInUrl.tm_min, &dtInUrl.tm_sec);
                dtInUrl.tm_year-=1900;
                dtInUrl.tm_mon--;
                time_t tt = mktime(&dtInUrl);
                if(tt<SearchStartTm||tt>SearchEndTm)
                {
                    myEventLogs[EventCount].InSearchRange = 0;
#ifdef DBG_LOG
                    sprintf(myEventLogs[EventCount].clipUrl,"%s ER %d",myEventLogs[EventCount].clipUrl, tt);
#endif
                }
                else
                {
                    myEventLogs[EventCount].InSearchRange = 1;
#ifdef DBG_LOG
                    sprintf(myEventLogs[EventCount].clipUrl,"%s OK %d",myEventLogs[EventCount].clipUrl, tt);
#endif
                    EventCountInSearchRange++;
                }
            }
        }
        sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "debugMessage",12);
        if(sidx>=0 && p_save_buf[sidx+12]==0x08){
@@ -1501,14 +1639,31 @@
                            sscanf(tmpTime,"%d:%d:%d",&hh2,&Mm2,&ss2);
                            struct tm ttm;
                            ttm.tm_year = yy-2000+100;ttm.tm_mon=mm;ttm.tm_mday = dd;ttm.tm_hour=hh;ttm.tm_min=Mm;ttm.tm_sec=ss;
                            ttm.tm_year = yy-1900;
                            ttm.tm_mon=mm - 1;
                            ttm.tm_mday = dd;
                            ttm.tm_hour=hh;
                            ttm.tm_min=Mm;
                            ttm.tm_sec=ss;
                            time_t StartTm = mktime(&ttm);
                            ttm.tm_year = yy2-2000+100;ttm.tm_mon=mm2;ttm.tm_mday = dd2;ttm.tm_hour=hh2;ttm.tm_min=Mm2;ttm.tm_sec=ss2;
                            ttm.tm_year = yy2-1900;
                            ttm.tm_mon=mm2 - 1;
                            ttm.tm_mday = dd2;
                            ttm.tm_hour=hh2;
                            ttm.tm_min=Mm2;
                            ttm.tm_sec=ss2;
                            time_t EndTm = mktime(&ttm);
                            int dur = EndTm-StartTm;
                            sprintf(myEventLogs[i].Duration,"%d 秒",dur);
                            memcpy(myEventLogs[i].DebugMessageE,tmpdeg,msglen);
                            //calc offset datetime
                            StartTm+=8*60*60;
                            struct tm* toffset = localtime(&StartTm);
                            sprintf(myEventLogs[i].Date, "%d/%d/%d", toffset->tm_year+1900, toffset->tm_mon+1, toffset->tm_mday);
                            sprintf(myEventLogs[i].Time, "%d:%d:%d", toffset->tm_hour, toffset->tm_min, toffset->tm_sec);
                        }
                    }
                }
@@ -1520,7 +1675,7 @@
    if((myEventLogs[EventCount].DebugMessageE[0]!=0|| myEventLogs[EventCount].DebugMessageS[0]!=0) && myEventLogs[EventCount].Rule[0]==0 && myEventLogs[EventCount].Region[0]==0){
        memcpy(ttmp,(unsigned char*)p_save_buf,5000);
    }
    if(somewhat && EventCount<200-1){///repair
    if(somewhat && EventCount<200-1){///repair //#todo 12.7
        sprintf(myEventLogs[EventCount].Camera,"%d",RequestChannel+1);
        int i;
        for (i=0;i<EventCount;i++)
@@ -1967,8 +2122,166 @@
  outb(DATA,PortNum);
}
int Read_MysqlData(){
    int ret=0;
    MYSQL *conn;
    MYSQL_RES *res;
    MYSQL_ROW row;
    char *server="localhost";
    char *user="root";
    char *password="123";
    char *database="opentutorials";
    puts("Step.0 ========>MySQL is getting......");
    if(!(conn=mysql_init((MYSQL*)NULL))){
        printf("init fail\n");
        return -1;
    }
    if(!mysql_real_connect(conn,server,user,password,NULL,3306,NULL,0)){
        printf("connect error.\n");
        return -1;
    }
    if(mysql_select_db(conn,database)!=0){
        mysql_close(conn);
        printf("select_db_fail.\n");
        return -1;
    }
    if(mysql_query(conn,"select * from tbl_deviceinfo")){
        printf("query fail\n");
        return -1;
    }
    res=mysql_store_result(conn);
    while((row=mysql_fetch_row(res))!=NULL){
        strcat(EventString,row[1]);    strcat(EventString,":");
        strcat(EventString,row[2]); strcat(EventString,":");
        strcat(EventString,row[3]);    strcat(EventString,":");
        strcat(EventString,row[4]);    strcat(EventString,":");
        strcat(EventString,row[5]);    strcat(EventString,":");
        strcat(EventString,row[6]);    strcat(EventString,":");
        strcat(EventString,row[7]);    strcat(EventString,":");
        strcat(EventString,row[8]);    strcat(EventString,":");
        strcat(EventString,row[9]);    strcat(EventString,":");
        strcat(EventString,row[10]);strcat(EventString,"\n");
    }
    mysql_close(conn);
    return ret;
}
int UpdateMysqData(int key)
{
    int ret=0;
    MYSQL *conn;
    char *server="localhost";
    char *user="root";
    char *password="123";
    char *database="opentutorials";
    char query[255];
    puts("Step.0 ========>MySQL is getting......");
    if(!(conn=mysql_init((MYSQL*)NULL))){
        printf("init fail\n");
        exit(1);
    }
    if(!mysql_real_connect(conn,server,user,password,NULL,3306,NULL,0)){
        printf("connect error.\n");
        exit(1);
    }
    if(mysql_select_db(conn,database)!=0){
        mysql_close(conn);
        printf("select_db_fail.\n");
        exit(1);
    }
    sprintf(query,"UPDATE tbl_deviceinfo SET reboot=0 where id=%d",key);
    if(mysql_query(conn,query)){
        printf("query fail\n");
        exit(1);
    }
    mysql_close(conn);
    return ret;
}
int Check_MysqlData(char *AnalyserName,char* AnalyserIP,char* AnalyserPort,char* ServerIP,char* ServerPort,char* user,char* pass,char* resol,char* commType){
    int ret=0;
    MYSQL *conn;
    MYSQL_RES *res;
    MYSQL_ROW row;
    char *server="localhost";
    char *user1="root";
    char *password="123";
    char *database="opentutorials";
    puts("Step.0 ========>MySQL is getting......");
    if(!(conn=mysql_init((MYSQL*)NULL))){
        printf("init fail\n");
        exit(1);
    }
    if(!mysql_real_connect(conn,server,user1,password,NULL,3306,NULL,0)){
        printf("connect error.\n");
        exit(1);
    }
    if(mysql_select_db(conn,database)!=0){
        mysql_close(conn);
        printf("select_db_fail.\n");
        exit(1);
    }
    if(mysql_query(conn,"select * from tbl_deviceinfo")){
        printf("query fail\n");
        exit(1);
    }
    res=mysql_store_result(conn);
    while((row=mysql_fetch_row(res))!=NULL){
        ret=0;
//       printf("====%s:%s",row[0],row[11]);       //sprintf(equipments[NUM].m_id,"%d",row[0]);
       if(strcmp(AnalyserName,row[10]) ==0) ret = 1;
       if(strcmp(AnalyserIP,row[1]) ==0) ret =ret+1;
       if(strcmp(AnalyserPort,row[2]) ==0) ret =ret+1;
       if(strcmp(ServerIP,row[3]) ==0) ret =ret+1;
       if(strcmp(ServerPort,row[4]) ==0) ret =ret+1;
       if(strcmp(user,row[6]) ==0) ret =ret+1;
       if(strcmp(pass,row[5]) ==0) ret =ret+1;
       if(strcmp(resol,row[7]) ==0) ret =ret+1;
       if(strcmp(commType,row[8]) ==0) ret =ret+1;
       if(ret==9) break;
    }
    mysql_close(conn);
    return ret;
}
int InsertMysqlData(char *AnalyserName,char* AnalyserIP,char* AnalyserPort,char* ServerIP,char* ServerPort,char* username,char* pass,char* resol,char* commType)
{
    int ret=0;
    MYSQL *conn;
    char *server="localhost";
    char *user="root";
    char *password="123";
    char *database="opentutorials";
    char query[255];
    struct tm *t;
    char time_info[20]={0,};
    time_t timer;
    timer=time(NULL);
    t=localtime(&timer);
    sprintf(time_info, "%d-%d-%d %d:%d:%d",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
    if(!(conn=mysql_init((MYSQL*)NULL))){
        printf("init fail\n");
        return -1;
    }
    if(!mysql_real_connect(conn,server,user,password,NULL,3306,NULL,0)){
        printf("connect error.\n");
        return -1;
    }
    if(mysql_select_db(conn,database)!=0){
        mysql_close(conn);
        printf("select_db_fail.\n");
        return -1;
    }
    sprintf(query, "INSERT INTO tbl_deviceinfo(equipmentip,equipmentport,serverip,serverport,password,username,analysis,comtype,redate,comment,reboot)VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s','%s','%s',0);",AnalyserIP, AnalyserPort, ServerIP, ServerPort,pass,username, resol, commType,time_info,AnalyserName);//?????????????
    printf("query=%s",query);
    if(mysql_query(conn,query)){
        printf("query fail\n");
        return -1;
    }
    mysql_close(conn);
    return ret;
}
//=====================================MD5 Function Definition============================================
void MD5Init (MD5_CTX *context)    /* context */
{
ProxyServer/proxyserver.h
@@ -61,6 +61,7 @@
{
    bool mp4downed;
    bool Ack;
    bool InSearchRange;
    char Date[15];
    char Time[15];
    char Rule[20];
@@ -112,7 +113,7 @@
int doesFileExist(const char *filename);
void delete_file(const char *path);
void delete_folder(const char *path);
void AnalySerFile(char* p_save_buf,int res);
void AnalySerFile(char* p_save_buf,int res, int SearchStartTm, int SearchEndTm);
int GetFileNameInFolder(char* dirname,lpfilenames lpfilename);
int net_test(char* serverIP,char* port);
void GPIOinit(void);
@@ -127,7 +128,7 @@
void AurhorizationResponseBytesReatart(char* byte_array_out,int * byte_array_length_out,char *Myuri, char *nonce,char *cnonce,char *response);
int Read_MysqlData();
int UpdateMysqData(int key);
int InsertMysqlData(char *AnalyserName,char* AnalyserIP,char* AnalyserPort,char* ServerIP,char* ServerPort,char* username,char* pass,char* resol,char* commType);
@@ -142,7 +143,9 @@
char* GetAnalyserNet(void);                                                                                                                //5.获取当前转发器的ip        参数:无。返回:当前的ip地址子网掩码和网关
int SetAnalyserNet(char* NetInfo);
char* GetMp4Info(char* AnalyserIP,char* user,char* pass,int Channel,char* path)    ;    
char* GetAnalyserAll();                                                                                                                    //9.查询设备   参数:无        返回:分析器的名称和ip
int DeleteAnalyser(char* AnalyserIP);                                                                                                    //8.删除设备   参数:设备ip    返回:成功或失败的提示。
int InsertAnalyser(char *AnalyserName,char* AnalyserIP,char* AnalyserPort,char* ServerIP,char* ServerPort,char* user,char* pass,char* resol,char* commType);//                                                                    7.添加设备   参数:设备属性。返回:成功返回对应的视频流地址,失败返回一个提示。
char* GetDeviceInfo(char* AnalyserIP);
int Check_MysqlData(char *AnalyserName,char* AnalyserIP,char* AnalyserPort,char* ServerIP,char* ServerPort,char* user,char* pass,char* resol,char* commType);
//