/* * proxyserver.c * * Created on: Oct 9, 2016 * Author: JKM */ #include #include"proxyserver.h" #include #include #include #include #include int RequestChannel; char* gAnalyzerIP; char* gUser; char* gPass; int GSocket; int gMySock[16]; int threadIdx=0; char byte_array[2600]; int gGettingStep=0; char uri[300]; time_t StartTm,EndTm; int bMetadataSaving=0; int bZipFileSaving=0; unsigned char *memoryband[100]; int bandsize[100]; int bandCount = 0; char ZipSerFileName[1000][300]; int ZipSerFileNum=0; int ZipCountidx; char NetInfo[128]; char EventString[1 * 1024 * 1024]; EVENT_LOG myEventLogs[2000]; int EventCount=0; int EventCountInSearchRange=0; int FindIdx(char* IP); int FindEmpty(); void* MyEquipmentthread(void* arg); pthread_t thread_noEQ[16]; int gCapturing[16]; SESSION sessions[16]; #define MAX_NUM 16 #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) { int len = strlen(s1); for(int i=0;i=0 && eidx>=0 && eidx>sidx+len) { strcat(EventString,dispName);strnncat(EventString,&buff[sidx+len],eidx-sidx-len); strcat(EventString,"\n"); } } char* GetDeviceInfo(char* AnalyserIP) { char buff[102400]; memset(EventString,0,sizeof(EventString)); gAnalyzerIP = AnalyserIP; if(AnalyserIP==NULL || AnalyserIP[0]==0) return "Param Error"; struct sockaddr_in servaddr; int strlen1=sizeof(servaddr); if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){ return "socket fail2"; } memset(&servaddr,0,strlen1); servaddr.sin_family=AF_INET; inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr); servaddr.sin_port=htons(80); if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){ close(GSocket); return "Equipment connect fail"; } int length = 0;//GET /PSIA/System/deviceInfo HTTP/1.1 length = sprintf(byte_array,"GET /PSIA/System/deviceInfo HTTP/1.1\r\nContent-Type: text/xml\r\nHost: %s\r\nContent-Length: 0\r\nConnection: Keep-Alive\r\n\r\n",AnalyserIP); write(GSocket,byte_array,length); // printf("%s",byte_array); memset(EventString,0,sizeof(EventString)); while(1){ memset(buff,0,sizeof(buff)); length=read(GSocket,&buff,sizeof(buff)); if(length<=0) { close(GSocket); break; } if(stringcmp((char*)buff,"=0){ SearchAppendString((char*)buff,"","","deviceName:"); SearchAppendString((char*)buff,"","","deviceID:"); SearchAppendString((char*)buff,"","","deviceDescription:"); SearchAppendString((char*)buff,"","","model:"); SearchAppendString((char*)buff,"","","serialNumber:"); SearchAppendString((char*)buff,"","","macAddress:"); SearchAppendString((char*)buff,"","","firmwareVersion:"); SearchAppendString((char*)buff,"","","bootVersion:"); SearchAppendString((char*)buff,"","","httpPort:"); SearchAppendString((char*)buff,"","","httpsPort:"); SearchAppendString((char*)buff,"","","rtspPort:"); SearchAppendString((char*)buff,"","","httpsEnabled:"); SearchAppendString((char*)buff,"","","webAuthenticationType:"); SearchAppendString((char*)buff,"","","rtspAuthenticationEnabled:"); close(GSocket); return EventString; } } 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,sizeof(EventString)); int ret = Read_MysqlData(); if(ret==0) return EventString; else return "fail"; } char* GetAnalyserNet(void) //5.鑾峰彇褰撳墠杞彂鍣ㄧ殑ip 鍙傛暟锛氭棤銆傝繑鍥烇細褰撳墠鐨刬p鍦板潃瀛愮綉鎺╃爜鍜岀綉鍏? { memset(NetInfo,0,128); /// function return NetInfo; } int SetAnalyserNet(char* NetInfo) //6.鎵嬪姩璁剧疆杞彂鍣ㄧ殑ip 鍙傛暟锛歩p锛屽瓙缃戞帺鐮侊紝榛樿缃戝叧 銆?杩斿洖锛氫慨鏀圭姸鎬?鎴愬姛鎴栬€呭け璐? { int ret=0; /// function return ret; } //// 功能:查看分析器连接状态 //// 输入:分析器IP //// 输出:0(成功), -1(初始化失败),-2(连接失败) int GetConnectState(char* AnalyserIP) { return net_test(AnalyserIP,"80"); } //// 功能:重启分析器 //// 输入:分析器IP,用户,密码,RestartKind=0(GPIO out),RestartKind=1(Protocol Mode), no(GPIO Pin no=>0~15) //// 输出:0(成功), -1(初始化失败),-2(连接失败) int RestartAnalyser(char* AnalyserIP,char* user,char* pass,int RestartKind,int no) { switch(RestartKind){ case 0: if(no<0 || no>15) return -1; GPIOinit(); GPIOoutput(no); printf("GPIO output no=%d",no); return 0; case 1: return RestartCommand(AnalyserIP,user,pass); default: return -1; } return 0; } //// 功能:开始查看实时监控 //// 输入:分析器IP,用户,密码 //// 输出:0(成功), -1(初始化失败),-2(连接失败) int RealEventStart(char* AnalyserIP,char* user,char* pass) { char buff[10240]; gAnalyzerIP = AnalyserIP; gUser = user; gPass = pass; int bbbb=0; if(AnalyserIP==NULL || AnalyserIP[0]==0) return -1; struct sockaddr_in servaddr; int strlen1=sizeof(servaddr); if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){ perror("socket fail2"); return -1; } memset(&servaddr,0,strlen1); servaddr.sin_family=AF_INET; inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr); servaddr.sin_port=htons(80); if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){ printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80); close(GSocket); return -2; } int length = 0; length = sprintf(byte_array,"POST /PSIA/VIQ/System/sessions/permanent HTTP/1.1\r\nContent-Type: text/xml\r\nHost: %s\r\nContent-Length: 0\r\nConnection: Keep-Alive\r\n\r\n",AnalyserIP); write(GSocket,byte_array,length); // printf("%s",byte_array); while(1){ memset(buff,0,sizeof(buff)); length=read(GSocket,&buff,sizeof(buff)); if(length<=0) { close(GSocket); break; } if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0 && bbbb==0) { // analyse reception MakeAuthorizedPacketReal(buff,length,"POST","/PSIA/VIQ/System/sessions/permanent"); zclock_sleep(100); write(GSocket,byte_array,strlen(byte_array)); // printf("%s\n",(char*)byte_array); bbbb=1; continue; } if(bbbb==1){ int sidx = stringcmp((char*)buff,"",8); if(sidx >=0){//2016-08-18T01:07:20.74902016-08-29T08:33:48.2310 int eidx = stringcmp((char*)buff,"",9); if(eidx>=0 && sidx+8 %s\n",(char*)sessions[Idx].ID); break; } } } } close(GSocket); int Idx=FindIdx(gAnalyzerIP); if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){ perror("socket fail2"); return -1; } memset(&servaddr,0,strlen1); servaddr.sin_family=AF_INET; inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr); servaddr.sin_port=htons(80); if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){ printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80); close(GSocket); return -2; } char uri[200]; sprintf(uri,"/PSIA/Custom/Event/notification/notificationStream?sessionId=%s",sessions[Idx].ID); length = sprintf(byte_array,"GET %s HTTP/1.1\r\nContent-Type: text/xml\r\nHost: %s\r\nContent-Length: 0\r\nConnection: Keep-Alive\r\n\r\n",uri,gAnalyzerIP); write(GSocket,byte_array,strlen(byte_array)); while(1){ memset(buff,0,sizeof(buff)); length=read(GSocket,&buff,sizeof(buff)); if(length<=0) { close(GSocket); break; } if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0 && bbbb==2) { char uri[200]; sprintf(uri,"/PSIA/Custom/Event/notification/notificationStream?sessionId=%s",sessions[Idx].ID); MakeAuthorizedPacketReal(buff,length,"GET",uri); write(GSocket,byte_array,strlen(byte_array)); // printf("%s\n",(char*)byte_array); bbbb=3; continue; } /*if(memorycmp((unsigned char*)buff,length, "ViqEventNotificationAlert",25)>0 && bbbb==3 ) { if(RealAlarmEventNum[Idx]<1000-1) { memset(&RealAlarmEvent[Idx][RealAlarmEventNum[Idx]],0,sizeof(AlarmInfo)); AnalyXMLUrnEVENT(buff,length,&RealAlarmEvent[Idx][RealAlarmEventNum[Idx]++]); } continue; } */ if(stringcmp(buff,"multipart/text; boundary=VIQeventEVENTeventVIQ",46)>0 && bbbb==3) /// if(stringcmp(buff,"HTTP/1.1 200 OK",15)>0 && bbbb==3) { gMySock[Idx]=GSocket; pthread_create(&thread_noEQ[Idx],NULL,&MyEquipmentthread,(void*)Idx);//super(void*)(&equipments[0]) gCapturing[Idx]=1; return 0; } } return -2; } //// 功能:停止查看实时监控 //// 输入:分析器IP //// 输出:0(成功), -1(初始化失败) int RealEventStop(char* AnalyserIP) { int Idx=FindIdx(AnalyserIP); if(Idx>=0 && Idx<16){ gCapturing[Idx]=0; sessions[Idx].IP[0]=0; } else return -1; return 0; } //// 功能:查看实时监控线程 //// 输入:分析器编号 void* MyEquipmentthread(void* arg) { int eidx = (int)arg; int length; char buff[10240]; puts("Step.2 ========>Equipment Thread is strarted......"); while(gCapturing[eidx]==1) { length=read(gMySock[eidx],&buff,sizeof(buff)-1); if(length<=0) { printf("\n \\\\\\ Read error \n"); break; } else if(length>0){ if(memorycmp((unsigned char*)buff,length, "ViqEventNotificationAlert",25)>0 ) { if(RealAlarmEventNum[eidx]<1000-1) { memset(&RealAlarmEvent[eidx][RealAlarmEventNum[eidx]],0,sizeof(AlarmInfo)); AnalyXMLUrnEVENT(buff,length,&RealAlarmEvent[eidx][RealAlarmEventNum[eidx]++]); } // printf("%s=============================%d\n",(char*)buff,RealAlarmEventNum[eidx]); // printf("%s\n",RealAlarmEvent[eidx][1].channelId); continue; } } } close(gMySock[eidx]); puts("Equipment Thread is stoped.."); pthread_exit((void*)thread_noEQ[eidx]); } /* --VIQeventEVENTeventVIQ Content-type: application/xml; charset="UTF-8" 3 6478 2016-11-07T08:50:54.06328800000 /media/clips/3/2016/11/7/8/3/2016_11_07-08_50_48.mp4 17 Video Lost Rule -1 Reserved SOI Video Lost Unknown false false false 2016/11/07 08:50:54.63: Video lost detected: 101. Event (id=6478) started. */ //// 功能:获取实时监控报警 //// 输入:分析器IP //// 输出:结果 char* GetRealEvent(char* AnalyserIP) //3.查看实时监控 参数:分析器IP。返回:信道号及其对应的视频流地址 { int Idx=FindIdx(AnalyserIP); memset(EventString,0,sizeof(EventString)); if(Idx>=0 && Idx<16 && RealAlarmEventNum[Idx]>0){ for (int i=0;i0) { // analyse reception //printf("==================================="); MakeAuthorizedPacketSimp(buff,length,"GET",httpUri); write(GSocket,byte_array,strlen(byte_array)); continue; } if(httpUri[0]!=0){ printf("**************************************flag======%d\n",bMp4FileSaving); if(bMp4FileSaving==1){ if((file = open(Pathbuffer, O_RDWR, S_IREAD|S_IWRITE)) <0){ printf("open file fail===2!\n"); result="File open error(2)!"; close(GSocket); return result; } lseek(file,0,SEEK_END); write(file,&buff[0], length);//CString m_data Mp4FileAppendingSiz += length; if (Mp4FileAppendingSiz>=Mp4FileSiz+8) { int sidx = memorycmp((unsigned char*)buff,length, "moov",4); Mp4FileSiz+=buff[sidx-4]*256*256*256+buff[sidx-3]*256*256+buff[sidx-2]*256+buff[sidx-1]; //movie box size printf("**************************************Mp4FileSiz======%d\n",Mp4FileSiz); } if (Mp4FileAppendingSiz>=Mp4FileSiz) { close(file); bMp4FileSaving = false; break; } } else { int sidx = memorycmp((unsigned char*)buff,length, "ftypmp42",8); if(sidx>=0){ bMp4FileSaving= 1; Mp4FileAppendingSiz = length-sidx+4; printf("**************************************Mp4FileAppendingSiz======%d\n",Mp4FileAppendingSiz); if(length>36){ //printf("****************************************"); Mp4FileSiz = 24 + buff[sidx+20]*256*256*256+buff[sidx+21]*256*256+buff[sidx+22]*256+buff[sidx+23];// file_type box size + Media databox size printf("**************************************Mp4FileSiz======%d\n",Mp4FileSiz); int count=0,i; for(i=0;i=9) break; } } sprintf(Pathbuffer,"/tmp/%s",/*RequestChannel*/&httpUri[i+1]); iidx+=llen; if((file = open(Pathbuffer,O_CREAT|O_RDWR,S_IREAD|S_IWRITE)) <0){ printf("open file fail===1!\n"); result="File open error(1)!"; close(GSocket); return result; } write(file,&buff[sidx-4], length-sidx+4); } } } } } close(GSocket); return "ok"; } void DownloadSerFile(const char* uri) { return; char buff[1024]; sprintf(buff, "cd " ZIP_HOME "/tmpZip/;" " curl -u supervisor:supervisor 'http://%s%s' -O" , gAnalyzerIP, uri); int ret = system(buff); printf("DownloadSerFile, ret=%d, %s\n", ret, buff); } //// 查询报警记录 //// 输入:分析器IP,开始时间,结束时间,信道号,用户,密码 //// 输出:查询结果。(包括信道号,报警时间,播放地址,等。) char* GetSearchMetaInfo(char* AnalyserIP,char* user,char* pass,int Channel,lpMyTime StartTm,lpMyTime EndTm) { char buff[102400]; //reset memset(ZipSerFileName, 0, sizeof(ZipSerFileName)); ZipSerFileNum=0; ZipCountidx; EventCount = 0; EventCountInSearchRange = 0; RequestChannel = -1; memset(myEventLogs, 0, sizeof(myEventLogs)); memset(EventString, 0, sizeof(EventString)); memset(byte_array, 0, sizeof(byte_array)); RequestChannel = Channel; gAnalyzerIP = AnalyserIP; gUser = user; gPass = pass; bMetadataSaving = 0; if(AnalyserIP==NULL || AnalyserIP[0]==0) return "-1"; // if(gGettingStep>0) return -2; //chmod(ZIP_HOME,0777); //delete_file(ZIP_HOME "/tmp.zip"); //delete_file(ZIP_HOME "/tmpZip/*"); struct tm ttm; time_t StepTm; int length; char* httpUri; char sss[24],eee[24]; chmod(ZIP_HOME,0777); const char* folderr; const char* filename1; folderr=ZIP_HOME "/tmpZip"; filename1=ZIP_HOME "/tmp.zip"; struct stat sb; //if(stat(folderr,&sb)==0 && S_ISDIR(sb.st_mode)) // { delete_folder(ZIP_HOME "/tmpZip"); // } //if (doesFileExist(filename1)) // { delete_file(ZIP_HOME "/tmp.zip"); // } if(RequestChannel==0) httpUri= "/PSIA/VIQ/Event/metadata/0/files"; 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 - 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); 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 syslog(LOG_USER | LOG_INFO, "SearchStartTm=%d,SearchEndTm=%d\n",(int)SearchStartTm,(int)SearchEndTm); #endif //for (StepTm=SearchEndTm; StepTm>SearchStartTm; StepTm-=1*3600) { zclock_sleep(200); // printf(" ==== Search loop function execution =================%d,%d \n",(int)StepTm,(int)SearchStartTm); struct sockaddr_in servaddr; int strlen1=sizeof(servaddr); if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){ syslog(LOG_USER | LOG_INFO, "socket fail2"); return "-3"; } memset(&servaddr,0,strlen1); servaddr.sin_family=AF_INET; inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr); servaddr.sin_port=htons(80); if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){ syslog(LOG_USER | LOG_INFO, "Equipment connect fail-%s:%d\n",gAnalyzerIP,80); close(GSocket); return "-4"; } 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+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; 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 syslog(LOG_USER | LOG_INFO, "SearchStartTm=%s, SearchEndTm=%s\n", sss, eee); #endif RequestMetaFiles(gAnalyzerIP,httpUri,sss,eee); write(GSocket,byte_array,strlen(byte_array)); //#test { length=read(GSocket,&buff,sizeof(buff)); //#test //{ // FILE * pFile = fopen ("pro.txt","rb"); // length = fread ( buff, 1, sizeof(buff), pFile ); // fclose(pFile); // bMetadataSaving = 0; //} if(length<=0) { close(GSocket); syslog(LOG_USER | LOG_INFO, "length<=0"); } if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0) { // analyse reception MakeAuthorizedPacketSimp111(buff,length,"GET",httpUri,sss,eee); write(GSocket,byte_array,strlen(byte_array)); } //FILE * pFile = fopen ("pro.txt","rb"); //length = fread ( buff, 1, sizeof(buff), pFile ); xmlParserCtxtPtr ctxt; char chars[5000]; xmlDocPtr doc; /* the resulting document tree */ int res,totalres=0; char* pBuff = buff; while ((res = read(GSocket,chars,sizeof(chars))) > 0) { memcpy(pBuff, chars, res); pBuff+=res; totalres+=res; } *pBuff='\0'; //res = fread ( chars, 1, sizeof(chars), pFile ); char* urnbegin=strstr(buff, " 0) { // fread(chars, 4) //while ((res = read(GSocket,chars,sizeof(chars))) > 0) { // xmlParseChunk(ctxt, chars, res, 0); //} //doc = ctxt->myDoc; doc = xmlParseDoc(urnbegin); //res = ctxt->wellFormed; //xmlFreeParserCtxt(ctxt); //if (!res) { // fprintf(stderr, "Failed to parse %s\n", "pro.txt"); //} /* Create xpath evaluation context */ xmlXPathContextPtr xpathCtx = xmlXPathNewContext(doc); if(xpathCtx == NULL) { fprintf(stderr,"Error: unable to create new XPath context\n"); xmlFreeDoc(doc); return(-1); } //xmlNode * root_element = xmlDocGetRootElement(doc); //{ // xmlNode *cur_node = NULL; // // for (cur_node = root_element; cur_node; cur_node = cur_node->next) { // if (cur_node->type == XML_ELEMENT_NODE) { // syslog(LOG_USER | LOG_INFO, "node type: Element, name: %s %s\n", cur_node->ns->prefix,cur_node->ns->href ); // } // } //} if(xmlXPathRegisterNs(xpathCtx, "urn", "urn:videoiq-com") != 0) { fprintf(stderr,"Error: unable to register NS with prefix=\"\" and href=\"\"\n"); return(-1); } xmlXPathObjectPtr xpathObj = xmlXPathEvalExpression("//urn:strings", xpathCtx); if(xpathObj == NULL) { fprintf(stderr,"Error: unable to evaluate xpath expression \"%s\"\n", "urn:strings"); xmlXPathFreeContext(xpathCtx); xmlFreeDoc(doc); return(-1); } ZipSerFileNum=0; xmlNodeSetPtr nodes = xpathObj->nodesetval; for(int i = 0; inodeNr; i++) { const char* uri=xmlNodeGetContent(nodes->nodeTab[i]); strcpy(ZipSerFileName[ZipSerFileNum], uri+18); ZipSerFileNum++; syslog(LOG_USER | LOG_INFO, "%s\n", uri+18); } syslog(LOG_USER | LOG_INFO, "ser parse finished\n"); xmlFreeDoc(doc); //fclose(pFile); close(GSocket); } }//for //////// get syslog(LOG_USER | LOG_INFO, "ZipSerFileNum=%d\n", ZipSerFileNum); for(ZipCountidx = 0; ZipCountidx=0) { DownloadSerFile(ZipSerFileName[ZipCountidx]); continue; } zclock_sleep(200); // printf(" ==== Search loop function execution =================%d,%d \n",(int)StepTm,(int)SearchStartTm); struct sockaddr_in servaddr; int strlen1=sizeof(servaddr); if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){ syslog(LOG_USER | LOG_INFO, "socket fail2"); return "-3"; } memset(&servaddr,0,strlen1); servaddr.sin_family=AF_INET; inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr); servaddr.sin_port=htons(80); if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){ syslog(LOG_USER | LOG_INFO, "Equipment connect fail-%s:%d\n",gAnalyzerIP,80); close(GSocket); return "-4"; } httpUri = ZipSerFileName[ZipCountidx];//"/media/metadata/0/2016/8/25/1/2/s_5b4103706a6411e6855e574ec330e01d_20160825_013633_93003.zip"; RequestZipSerFiles(gAnalyzerIP, httpUri); 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) { close(GSocket); break; } if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0) { // analyse reception MakeAuthorizedPacketSimp(buff,length,"GET",httpUri); write(GSocket,byte_array,strlen(byte_array)); // printf("%s",byte_array); continue; } if(memorycmp((unsigned char*)buff,length, "Error 404 NOT_FOUND",19)>0) { break; } if(bZipFileSaving==1){ //下载Zip filesave int file; 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 close(file); //mp4Save(_T("tmp.zip"),(unsigned char*)buffer, size,CFile::modeWrite| CFile::typeBinary); char tmppattern[8]; tmppattern[0]='P';tmppattern[1]='K';tmppattern[2]=0x05;tmppattern[3]=0x06;tmppattern[4]=0x00;tmppattern[5]=0x00; if(memorycmp((unsigned char*)&buff[0],length, tmppattern,8)>=0) { bZipFileSaving = 0; close(GSocket); //Convert Zip file to Ser file int ret=system("unzip -o " ZIP_HOME "/tmp.zip -d " ZIP_HOME "/tmpZip"); #ifdef DBG_LOG syslog(LOG_USER | LOG_INFO, "unzip1 ret=%d\n", ret); #endif } } else{ int sidx = stringcmp((char*)buff,"PK",2); if(sidx >=0){//下载Zip filesave delete_file(ZIP_HOME "/tmp.zip"); //delete_file(ZIP_HOME "/tmpZip/*"); //下载Zip filesave bZipFileSaving = 1; int file; 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); char tmppattern[8]; tmppattern[0]='P';tmppattern[1]='K';tmppattern[2]=0x05;tmppattern[3]=0x06;tmppattern[4]=0x00;tmppattern[5]=0x00; if(memorycmp((unsigned char*)&buff[sidx],length-sidx, tmppattern,8)>=0) { bZipFileSaving = 0; close(GSocket); //Convert Zip file to Ser file int ret=system("unzip -o " ZIP_HOME "/tmp.zip -d " ZIP_HOME "/tmpZip"); #ifdef DBG_LOG syslog(LOG_USER | LOG_INFO, "unzip0 ret=%d\n", ret); #endif } } } }//while }//for int res=0,num=0; //得长度 filenames filename[100]; num = GetFileNameInFolder(ZIP_HOME "/tmpZip",filename); char stringpath[1024]; unsigned char p_save_buf[6144000]; for(int i=0;i0) { // analyse reception MakeAuthorizedPacketRestart(buff,length,"PUT","/PSIA/System/reboot");//////???????? bbbb=1; break; } if(memorycmp((unsigned char*)buff,length, "HTTP/1.1 200 OK",15)>0) break; } close(GSocket); if (bbbb==0) { syslog(LOG_USER | LOG_INFO, "bbbb==0"); return -1; } // zclock_sleep(200); if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){ syslog(LOG_USER | LOG_INFO, "socket fail2"); return -1; } memset(&servaddr,0,strlen1); servaddr.sin_family=AF_INET; inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr); servaddr.sin_port=htons(80); if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){ syslog(LOG_USER | LOG_INFO, "Equipment connect fail-%s:%d\n",gAnalyzerIP,80); close(GSocket); return -2; } write(GSocket,byte_array,strlen(byte_array)); while(1){ memset(buff,0,sizeof(buff)); length=read(GSocket,&buff,sizeof(buff)); if(length<=0) { close(GSocket); return -3; } if(memorycmp((unsigned char*)buff,length, "HTTP/1.1 200 OK",15)>0) break; } close(GSocket); return 0; } void RequestMetaFiles(char* AnaylyIP,char* httpUri,char* Tm1,char* Tm2) { #ifdef DBG_LOG syslog(LOG_USER | LOG_INFO, "RequestMetaFiles, httpUri=%s\n", httpUri); #endif char byte_arrayxxx[1600]; int lengthxxx = 0; memset(byte_array,0,sizeof(byte_array)); UrnStringToBytes(byte_arrayxxx,&lengthxxx,Tm1,Tm2);// xml int iidx =0,llen=0;; llen = sprintf(byte_array,"GET %s %s",httpUri,"HTTP/1.1\r\n"); iidx+=llen; llen = sprintf(&byte_array[iidx],"Content-Length: %d\r\n",lengthxxx); iidx+=llen; llen = sprintf(&byte_array[iidx],"%s","Content-Type: text/xml\r\n"); iidx+=llen; llen = sprintf(&byte_array[iidx],"Host: %s:%d\r\n",AnaylyIP,80); iidx+=llen; llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n\r\n"); iidx+=llen; strncpy(&byte_array[iidx],byte_arrayxxx,lengthxxx); iidx+=lengthxxx; } void RequestZipSerFiles(char* AnaylyIP,char* httpUri) { #ifdef DBG_LOG syslog(LOG_USER | LOG_INFO, "RequestZipSerFiles, httpUri=%s\n", httpUri); #endif memset(byte_array,0,sizeof(byte_array)); int iidx =0,llen=0;; llen = sprintf(byte_array,"GET %s %s",httpUri,"HTTP/1.1\r\n"); iidx+=llen; llen = sprintf(&byte_array[iidx],"User-Agent: Java/1.6.0_05\r\n"); iidx+=llen; llen = sprintf(&byte_array[iidx],"Host: %s:%d\r\n",AnaylyIP,80); iidx+=llen; llen = sprintf(&byte_array[iidx],"%s","Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n"); iidx+=llen; llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n\r\n"); iidx+=llen; } void UrnStringToBytes(char* byte_array_out,int * byte_array_length_out,char* StartTim,char* EndTime) { int idx=0,len; idx = sprintf(byte_array_out,"%s0%s0",EndTime);idx+=len;//2016-08-26T09:31:00.000 *byte_array_length_out = idx; } ///// for Restart void MakeAuthorizedPacketRestart(char* buff,int length, char* Method,char* uri) { char Device[150] ; char Realm_buf1[512] ; char nonce_buf2[512] ; char auth_buf3[512] ; char domain_buf4[512] ; unsigned char len[4]; memset(Device,0,150); memset(domain_buf4,0,512); CharToByte((char*)buff, Device, length,Realm_buf1,nonce_buf2,auth_buf3,domain_buf4,len); // printf("%s,%s,%s,%s\n",Realm_buf1,nonce_buf2,auth_buf3,domain_buf4); // printf("%d,%d,%d,%d\n",len[0],len[1],len[2],len[3]); char* cnonce_buf="08a9d86c1b5e45963cf82f43dca59c51"; //Authorization: Digest username="supervisor",realm="VideoIQ",nonce="IcTFMVgBAAAHmywcsJspvAlyBqpQy",uri="/PSIA/System/reboot",algorithm="MD5",cnonce="08a9d86c1b5e45963cf82f43dca59c51",nc=00000001,qop="auth",response="0c31efdd27017412cd0b6aaf550da084" Realm_buf1[len[0]]=0; nonce_buf2[len[1]]=0; auth_buf3[len[2]]=0; char* nc="00000001"; //CString qop;qop=auth_buf3;///////////////////////////// char User[200]; memset(User,0,200); sprintf(User,"%s:%s:%s",gUser,Realm_buf1,gPass); char urii[200]; int kk=sprintf(urii,"%s:%s",Method,uri);//PUT:/PSIA/System/reboot"; urii[kk]=0; char* A1 = MDString(User); char AA1[33]; memset(AA1,0,33); memcpy(AA1,A1,strlen(A1)); char* A2 = MDString(urii); char AA2[33]; memset(AA2,0,33); memcpy(AA2,A2,strlen(A2)); char rrr[200]; memset(rrr,0,200); sprintf(rrr,"%s:%s:%s:%s:auth:%s",AA1,nonce_buf2,nc,cnonce_buf,AA2); char* response = MDString(rrr); char res[33]; memset(res,0,33); memcpy(res,response,strlen(response)); //// 第二次 发送 char byte_arrayxxx[2600]; int lengthxxx = 0; int iidx = 0; AurhorizationResponseBytesReatart(byte_arrayxxx,&lengthxxx,uri,nonce_buf2,cnonce_buf,res); int llen = sprintf(byte_array,"%s %s HTTP/1.1\r\n",Method,uri); iidx+=llen; llen = sprintf(&byte_array[iidx],"Content-Type: text/xml\r\n"); iidx+=llen; strncpy(&byte_array[iidx],byte_arrayxxx,lengthxxx); iidx+=lengthxxx; byte_array[iidx]=0x0d; iidx+=1; byte_array[iidx]=0x0a; iidx+=1; llen = sprintf(&byte_array[iidx],"Host: %s\r\n",gAnalyzerIP); iidx+=llen; llen = sprintf(&byte_array[iidx],"Content-Length: 0\r\n"); iidx+=llen; // llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n"); iidx+=llen; byte_array[iidx]=0x0d; iidx+=1; byte_array[iidx]=0x0a; iidx+=1; byte_array[iidx]=0; } //for real event void MakeAuthorizedPacketReal(char* buff,int length, char* Method,char* uri) { char Device[150] ; char Realm_buf1[512] ; char nonce_buf2[512] ; char auth_buf3[512] ; char domain_buf4[512] ; unsigned char len[4]; memset(Device,0,150); memset(domain_buf4,0,512); CharToByte((char*)buff, Device, length,Realm_buf1,nonce_buf2,auth_buf3,domain_buf4, len); char* cnonce_buf="163acd0e58793a190f29ee879d4b224f";//"08a9d86c1b5e45963cf82f43dca59c51"; Realm_buf1[len[0]]=0; nonce_buf2[len[1]]=0; auth_buf3[len[2]]=0; char* nc="00000001"; //CString qop;qop=auth_buf3;///////////////////////////// char User[200]; memset(User,0,200); sprintf(User,"%s:%s:%s",gUser,Realm_buf1,gPass); char urii[200]; int kk=sprintf(urii,"%s:%s",Method,uri);//PUT:/PSIA/System/reboot"; urii[kk]=0; char* A1 = MDString(User); char AA1[33]; memset(AA1,0,33); memcpy(AA1,A1,strlen(A1)); char* A2 = MDString(urii); char AA2[33]; memset(AA2,0,33); memcpy(AA2,A2,strlen(A2)); char rrr[200]; memset(rrr,0,200); sprintf(rrr,"%s:%s:%s:%s:auth:%s",AA1,nonce_buf2,nc,cnonce_buf,AA2); // printf("%s:%s:%s:%s:auth:%s\n",AA1,nonce_buf2,nc,cnonce_buf,AA2); char* response = MDString(rrr); char res[33]; memset(res,0,33); memcpy(res,response,strlen(response)); //// 第二次 发送 char byte_arrayxxx[2600]; int lengthxxx = 0; int iidx = 0; AurhorizationResponseBytesReal(byte_arrayxxx,&lengthxxx,uri,nonce_buf2,cnonce_buf,res); int llen = sprintf(byte_array,"%s %s HTTP/1.1\r\n",Method,uri); iidx+=llen; llen = sprintf(&byte_array[iidx],"Content-Type: text/xml\r\n"); iidx+=llen; strncpy(&byte_array[iidx],byte_arrayxxx,lengthxxx); iidx+=lengthxxx; byte_array[iidx]=0x0d; iidx+=1; byte_array[iidx]=0x0a; iidx+=1; llen = sprintf(&byte_array[iidx],"Host: %s\r\n",gAnalyzerIP); iidx+=llen; llen = sprintf(&byte_array[iidx],"Content-Length: 0\r\n"); iidx+=llen; // llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n"); iidx+=llen; byte_array[iidx]=0x0d; iidx+=1; byte_array[iidx]=0x0a; iidx+=1; byte_array[iidx]=0; } //RequestZipSerFileDownload.. void MakeAuthorizedPacketSimp(char* buff,int length, char* Method,char* uri) { char Device[150] ; char Realm_buf1[512] ; char nonce_buf2[512] ; char auth_buf3[512] ; char domain_buf4[512] ; unsigned char len[4]; memset(Device,0,150); memset(domain_buf4,0,512); CharToByte((char*)buff, Device, length,Realm_buf1,domain_buf4,nonce_buf2,auth_buf3, len); char* cnonce_buf="7e4c63bd7cb20c49ceafd1bd812428da"; Realm_buf1[len[0]]=0; nonce_buf2[len[2]]=0; auth_buf3[len[3]]=0; char* nc="00000001"; //CString qop;qop=auth_buf3;///////////////////////////// char User[200]; memset(User,0,200); sprintf(User,"%s:%s:%s",gUser,Realm_buf1,gPass); char urii[200]; int kk=sprintf(urii,"%s:%s",Method,uri);//PUT:/PSIA/System/reboot"; urii[kk]=0; char* A1 = MDString(User); char AA1[33]; memset(AA1,0,33); memcpy(AA1,A1,strlen(A1)); char* A2 = MDString(urii); char AA2[33]; memset(AA2,0,33); memcpy(AA2,A2,strlen(A2)); char rrr[200]; memset(rrr,0,200); sprintf(rrr,"%s:%s:%s:%s:auth:%s",AA1,nonce_buf2,nc,cnonce_buf,AA2); char* response = MDString(rrr); char res[33]; memset(res,0,33); memcpy(res,response,strlen(response)); //// 第二次 发送 char byte_arrayxxx[2600]; int lengthxxx = 0; int iidx = 0; AurhorizationResponseBytes(byte_arrayxxx,&lengthxxx,uri,nonce_buf2,cnonce_buf,res); int llen = sprintf(byte_array,"%s %s HTTP/1.1\r\n",Method,uri); iidx+=llen; llen = sprintf(&byte_array[iidx],"Content-Type: text/xml\r\n"); iidx+=llen; strncpy(&byte_array[iidx],byte_arrayxxx,lengthxxx); iidx+=lengthxxx; byte_array[iidx]=0x0d; iidx+=1; byte_array[iidx]=0x0a; iidx+=1; llen = sprintf(&byte_array[iidx],"Host: %s\r\n",gAnalyzerIP); iidx+=llen; llen = sprintf(&byte_array[iidx],"Content-Length: 0\r\n"); iidx+=llen; // llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n"); iidx+=llen; byte_array[iidx]=0x0d; iidx+=1; byte_array[iidx]=0x0a; iidx+=1; byte_array[iidx]=0; } void MakeAuthorizedPacketSimp111(char* buff,int length, char* Method,char* uri,char* Tm1,char* Tm2) { char Device[150] ; char Realm_buf1[512] ; char nonce_buf2[512] ; char auth_buf3[512] ; char domain_buf4[512] ; unsigned char len[4]; memset(Device,0,150); memset(domain_buf4,0,512); CharToByte((char*)buff, Device, length,Realm_buf1,nonce_buf2,auth_buf3,domain_buf4, len); char* cnonce_buf="7e4c63bd7cb20c49ceafd1bd812428da"; Realm_buf1[len[0]]=0; nonce_buf2[len[1]]=0; auth_buf3[len[2]]=0; char* nc="00000001"; //CString qop;qop=auth_buf3;///////////////////////////// char User[200]; memset(User,0,200); sprintf(User,"%s:%s:%s",gUser,Realm_buf1,gPass); char urii[200]; int kk=sprintf(urii,"%s:%s",Method,uri);//PUT:/PSIA/System/reboot"; urii[kk]=0; char* A1 = MDString(User); char AA1[33]; memset(AA1,0,33); memcpy(AA1,A1,strlen(A1)); char* A2 = MDString(urii); char AA2[33]; memset(AA2,0,33); memcpy(AA2,A2,strlen(A2)); char rrr[200]; memset(rrr,0,200); sprintf(rrr,"%s:%s:%s:%s:auth:%s",AA1,nonce_buf2,nc,cnonce_buf,AA2); char* response = MDString(rrr); char res[33]; memset(res,0,33); memcpy(res,response,strlen(response)); //// 第二次 发送 char byte_arrayxxx[2600]; char xmlbyte_array[512]; int lengthxxx = 0; int iidx = 0; int llen11=0; AurhorizationResponseBytes(byte_arrayxxx,&lengthxxx,uri,nonce_buf2,cnonce_buf,res); UrnStringToBytes(xmlbyte_array,&llen11,Tm1,Tm2);//xml calculation int llen = sprintf(byte_array,"GET %s %s",uri,"HTTP/1.1\r\n"); iidx+=llen; llen = sprintf(&byte_array[iidx],"Content-Length: %d\r\n",llen11); iidx+=llen; llen = sprintf(&byte_array[iidx],"%s","Content-Type: text/xml\r\n"); iidx+=llen; llen = sprintf(&byte_array[iidx],"Host: %s:%d\r\n",gAnalyzerIP,80); iidx+=llen; llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n"); iidx+=llen; strncpy(&byte_array[iidx],byte_arrayxxx,lengthxxx); iidx+=lengthxxx; byte_array[iidx]=0x0d; iidx+=1; byte_array[iidx]=0x0a; iidx+=1; byte_array[iidx]=0x0d; iidx+=1; byte_array[iidx]=0x0a; iidx+=1; strncpy(&byte_array[iidx],xmlbyte_array,length); iidx+=length; byte_array[iidx]=0; } int FindIdx(char* IP) { for (int i=0;i<16;i++) { if(strcmp(sessions[i].IP,IP)==0) return i; } return -1; } int FindEmpty() { for (int i=0;i<16;i++) { if(sessions[i].IP[0]==0) return i; } return -1; } int DivideTimeToYMDHMS(char* DateTimeStr,int* year,int* month,int* day, int* hour,int* min,int* sec) { int yy,mm,dd,hh,Mm,ss; //DivideTime(DateTimeStr,DateStr,TimeStr); sscanf(DateTimeStr,"%d-%d-%dT%d:%d:%d",&yy,&mm,&dd,&hh,&Mm,&ss); *year = yy; *month = mm; *day = dd; *hour = hh; *min = Mm; *sec = ss; return 0; } int CharToByte(char* chars, char* bytes, unsigned int count,char* ptr1,char* ptr2,char* ptr3,char* ptr4,unsigned char* number){ int p=0; int n=0; int i=0; unsigned char temp; for(i = 0; i < count; i++) { temp = (unsigned char)chars[i]; if (p==1) { if (temp!=0x22) { bytes[n++]=(unsigned char)chars[i]; } } if (temp==0x22) { p=p+1; } if (p==2) { bytes[n++]=0x2C; p=0; } } char* token=NULL; char s[]=","; token=strtok(bytes,s); number[0]=strlen(token); memcpy(ptr1,token,strlen(token)); int nn=0; while(token!=NULL) { token=strtok(NULL,s); nn=nn+1; if (nn==1) { number[1]=strlen(token); memcpy(ptr2,token,strlen(token)); } if (nn==2) { //ptr3=new char[strlen(token)]; number[2]=strlen(token); memcpy(ptr3,token,strlen(token)); } if (nn==3) { if(token!=NULL) { number[3]=strlen(token); memcpy(ptr4,token,strlen(token)); }//ptr3=new char[strlen(token)]; } } return n; } 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); memset(myEventLogs[EventCount].Rule,0,20); memset(myEventLogs[EventCount].Region,0,30); memset(myEventLogs[EventCount].clipUrl,0,200); memset(myEventLogs[EventCount].Date,0,15); memset(myEventLogs[EventCount].Time,0,15); memset(myEventLogs[EventCount].Duration,0,20); ParagraphIdx = memorycmp((unsigned char*)p_save_buf,res, "com.videoiq.fusion.cameraapi.metadata.Incident",46); if(ParagraphIdx<0) ParagraphIdx = res; int tmpSidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "started.",8); int tmpEidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "Event ended.",12); if(tmpSidx<0 && tmpEidx<0) goto last; if(tmpSidx>=0 && tmpEidx<0){// Started paragraph int sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "ruleName",8); if(sidx>=0 && p_save_buf[sidx+8]==0x08){ int flen = p_save_buf[sidx+8+1]*256+p_save_buf[sidx+8+2]; memcpy(myEventLogs[EventCount].Rule,&p_save_buf[sidx+8+3],flen); } sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "soiName",7); if(sidx>=0 && p_save_buf[sidx+7]==0x08){ int flen = p_save_buf[sidx+7+1]*256+p_save_buf[sidx+7+2]; memcpy(myEventLogs[EventCount].Region,&p_save_buf[sidx+7+3],flen); } sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "activity",8); if(sidx>=0){ myEventLogs[EventCount].ActivityNum[0]=p_save_buf[sidx+8]; myEventLogs[EventCount].ActivityNum[1]=p_save_buf[sidx+8+1]; myEventLogs[EventCount].ActivityNum[2]=p_save_buf[sidx+8+2]; myEventLogs[EventCount].ActivityNum[3]=p_save_buf[sidx+8+3]; myEventLogs[EventCount].ActivityNum[4]=p_save_buf[sidx+8+4]; } sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "clipUrl",7); 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(ttSearchEndTm) { 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){ int flen = (unsigned char)p_save_buf[sidx+12+1]*256+(unsigned char)p_save_buf[sidx+12+2]; memcpy(myEventLogs[EventCount].DebugMessageS,&p_save_buf[sidx+12+3],flen); } char tmp[200]; int tlen=0; memset(tmp,0,200); tlen = strlen(myEventLogs[EventCount].DebugMessageS); memcpy(tmp,myEventLogs[EventCount].DebugMessageS,tlen); if(myEventLogs[EventCount].DebugMessageS[0]!=0) somewhat = true; // Get Vide lost int eidx = memorycmp((unsigned char*)tmp,tlen, "Video lost detected",19); if(eidx>=0){ strcpy(myEventLogs[EventCount].Rule,"Video Lost Rule"); } // Get System Event eidx = memorycmp((unsigned char*)tmp,tlen, "System activity detected",24); if(eidx>=0){ strcpy(myEventLogs[EventCount].Rule,"System Event Rule"); } // Get Start Time eidx = memorycmp((unsigned char*)tmp,tlen, " ",1); if (eidx>=0){ memcpy(myEventLogs[EventCount].Date,tmp,eidx); memcpy(tmp,&tmp[eidx+1],tlen-eidx); eidx = memorycmp((unsigned char*)tmp,tlen-eidx, " ",1); if (eidx>=0){ memcpy(myEventLogs[EventCount].Time,tmp,eidx-1); memcpy(tmp,&tmp[eidx+1],tlen-eidx); somewhat = true; } } } if(tmpSidx>=0 && tmpEidx>=0){// Started. Event Ended paragraph int sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "debugMessage",12); if(sidx>=0 && p_save_buf[sidx+12]==0x08) { int flen = (unsigned char)p_save_buf[sidx+12+1]*256+(unsigned char)p_save_buf[sidx+12+2]; char tmpdeg[200]; memset(tmpdeg,0,200); memcpy(tmpdeg,&p_save_buf[sidx+12+3],flen); // find owner record int i; for (i=0;i=llen) break; } if(i=0){ myEventLogs[i].ActivityNum[0]=p_save_buf[sidx+8]; myEventLogs[i].ActivityNum[1]=p_save_buf[sidx+8+1]; myEventLogs[i].ActivityNum[2]=p_save_buf[sidx+8+2]; myEventLogs[i].ActivityNum[3]=p_save_buf[sidx+8+3]; myEventLogs[i].ActivityNum[4]=p_save_buf[sidx+8+4]; } // goto last; // strcpy(myEventLogs[i].DebugMessageE,tmpdeg); // goto last; // get End time char tmp[200]; memset(tmp,0,200); memcpy(tmp,tmpdeg,flen); int msglen = flen; // goto last; int eeidx = memorycmp((unsigned char*)tmp,flen, "started.",8); if (eeidx>=0){ memcpy(tmp,&tmp[eeidx+8+1],flen-eeidx-8-1); flen = flen-eeidx-8-1 ; tmp[flen]=0; char tmpDate[15]; char tmpTime[15]; int eidx = memorycmp((unsigned char*)tmp,flen, " ",1); if (eidx>=0){ memcpy(tmpDate,tmp,eidx); tmpDate[eidx]=0; memcpy(tmp,&tmp[eidx+1],flen-eidx); eidx = memorycmp((unsigned char*)tmp,flen-eidx, " ",1); if (eidx>=0){ memcpy(tmpTime,tmp,eidx-1); tmpTime[eidx-1]=0; //// Calculation duration int yy2,mm2,dd2,hh2,Mm2,ss2; int yy,mm,dd,hh,Mm,ss; sscanf(myEventLogs[i].Date,"%d/%d/%d",&yy,&mm,&dd); sscanf(myEventLogs[i].Time,"%d:%d:%d",&hh,&Mm,&ss); sscanf(tmpDate,"%d/%d/%d",&yy2,&mm2,&dd2); sscanf(tmpTime,"%d:%d:%d",&hh2,&Mm2,&ss2); struct tm ttm; 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-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); } } } } } } char ttmp[5000]; 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<2000-1){///repair //#todo 12.7 sprintf(myEventLogs[EventCount].Camera,"%d",RequestChannel+1); int i; for (i=0;i=EventCount) { EventCount++; } } last: res = res - ParagraphIdx - 46 ; if (res<=0) return; memcpy((unsigned char*)p_save_buf,&p_save_buf[ParagraphIdx + 46],res); goto first; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////// int memorycmp(unsigned char* src ,int slen, char* token, int len) { int start=0,k,i,klen=strlen(token); lp1: for(i=start;i=slen) return -1; k=i; for(i=0;i=klen) return k; return -1; } int stringcmp(char* src ,char* token, int len) { int start=0,k,i,slen=strlen(src); lp: for(i=start;i=slen) return -1; k=i; for(i=0;i=len) return k; return -1; } void AurhorizationResponseBytes(char* byte_array_out,int * byte_array_length_out,char *Myuri, char *nonce,char *cnonce,char *response) { // Authorization: Digest username="supervisor", realm="VideoIQ", nonce="n99u1VYBAABAf0HT+h92EO4hT2CzmfxG", uri="/PSIA/VIQ/Event/metadata/0/files", response="7d8d929e39655ad9f3e6e94e9004792e", qop=auth, nc=00000001, cnonce="0d2175d8cdb63f84f18894200e129ace", algorithm="MD5" int idx=0,len; idx = sprintf(byte_array_out,"%s","Authorization: Digest username="); byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s","supervisor");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",realm=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s","VideoIQ");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",nonce=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx], "%s",nonce);idx+=len;//"n99u1VYBAABAf0HT+h92EO4hT2CzmfxG" byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",uri=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",Myuri);idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",algorithm=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s","MD5");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",response=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",response);idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",qop=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s","auth");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",nc=00000001,cnonce=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",cnonce);idx+=len;//cnonce byte_array_out[idx++]=0x22;//'"' *byte_array_length_out = idx; } void AurhorizationResponseBytesReal(char* byte_array_out,int * byte_array_length_out,char *Myuri, char *nonce,char *cnonce,char *response) { // Authorization: Digest username="supervisor", realm="VideoIQ", nonce="n99u1VYBAABAf0HT+h92EO4hT2CzmfxG", uri="/PSIA/VIQ/Event/metadata/0/files", response="7d8d929e39655ad9f3e6e94e9004792e", qop=auth, nc=00000001, cnonce="0d2175d8cdb63f84f18894200e129ace", algorithm="MD5" int idx=0,len; idx = sprintf(byte_array_out,"%s","Authorization: Digest username="); byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s","supervisor");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",realm=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s","VideoIQ");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",nonce=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx], "%s",nonce);idx+=len;//"n99u1VYBAABAf0HT+h92EO4hT2CzmfxG" byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",uri=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",Myuri);idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",algorithm=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s","MD5");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",cnonce=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",cnonce);idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",nc=00000001,qop=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s","auth");idx+=len;//cnonce byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",response=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",response);idx+=len; byte_array_out[idx++]=0x22;//'"' *byte_array_length_out = idx; } void AurhorizationResponseBytesReatart(char* byte_array_out,int * byte_array_length_out,char *Myuri, char *nonce,char *cnonce,char *response) { int idx=0,len; idx = sprintf(byte_array_out,"%s","Authorization: Digest username="); byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s","supervisor");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",realm=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s","VideoIQ");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",nonce=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx], "%s",nonce);idx+=len;//"n99u1VYBAABAf0HT+h92EO4hT2CzmfxG" byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",uri=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",Myuri);idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",algorithm=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s","MD5");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",cnonce=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",cnonce);idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",nc=00000001");idx+=len; len = sprintf(&byte_array_out[idx],"%s",",qop=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s","auth");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",",response=");idx+=len; byte_array_out[idx++]=0x22;//'"' len = sprintf(&byte_array_out[idx],"%s",response);idx+=len; byte_array_out[idx++]=0x22;//'"' *byte_array_length_out = idx; } /* --VIQeventEVENTeventVIQ Content-type: application/xml; charset="UTF-8" 3 6478 2016-11-07T08:50:54.06328800000 /media/clips/3/2016/11/7/8/3/2016_11_07-08_50_48.mp4 17 Video Lost Rule -1 Reserved SOI Video Lost Unknown false false false 2016/11/07 08:50:54.63: Video lost detected: 101. Event (id=6478) started. */ int AnalyXMLUrnEVENT(char* buff,int length,AlarmInfo* RealAlarmEvent) { int sidx,eidx; sidx = stringcmp((char*)buff,"",15); eidx = stringcmp((char*)buff,"",16); if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->channelId,&buff[sidx+15],eidx-sidx-15); sidx = stringcmp((char*)buff,"",13); eidx = stringcmp((char*)buff,"",14); if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->eventId,&buff[sidx+13],eidx-sidx-13); sidx = stringcmp((char*)buff,"=0 && eidx>=0 && sidx < eidx){ memcpy(tmp,&buff[sidx+15],eidx-sidx-14); sidx=stringcmp((char*)tmp,"",10); eidx = stringcmp((char*)tmp,"",11); if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->startTime,&tmp[sidx+10],eidx-sidx-10); sidx=stringcmp((char*)tmp,"",12); eidx = stringcmp((char*)tmp,"",13); if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->soffset,&tmp[sidx+12],eidx-sidx-12); } sidx = stringcmp((char*)buff,"=0){ int ssidx=stringcmp((char*)buff,"",10); eidx = stringcmp((char*)buff,"",11); if(ssidx>=0 && eidx>=0 && ssidx < eidx) memcpy(RealAlarmEvent->endTime,&buff[ssidx+10],eidx-ssidx-10); } sidx = stringcmp((char*)buff,"",13); eidx = stringcmp((char*)buff,"",14); if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->clipUrl,&buff[sidx+13],eidx-sidx-13); sidx = stringcmp((char*)buff,"",12); eidx = stringcmp((char*)buff,"",13); if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->ruleId,&buff[sidx+12],eidx-sidx-12); sidx = stringcmp((char*)buff,"",14); eidx = stringcmp((char*)buff,"",15); if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->ruleName,&buff[sidx+14],eidx-sidx-14); sidx = stringcmp((char*)buff,"",11); eidx = stringcmp((char*)buff,"",12); if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->soiId,&buff[sidx+11],eidx-sidx-11); sidx = stringcmp((char*)buff,"",13); eidx = stringcmp((char*)buff,"",14); if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->soiName,&buff[sidx+13],eidx-sidx-13); sidx = stringcmp((char*)buff,"",14); eidx = stringcmp((char*)buff,"",15); if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->activity,&buff[sidx+14],eidx-sidx-14); sidx = stringcmp((char*)buff,"",16); eidx = stringcmp((char*)buff,"",17); if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->objectType,&buff[sidx+16],eidx-sidx-16); sidx = stringcmp((char*)buff,"",13); eidx = stringcmp((char*)buff,"",14); if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->aborted,&buff[sidx+13],eidx-sidx-13); sidx = stringcmp((char*)buff,"",18); eidx = stringcmp((char*)buff,"",19); if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->acknowledged,&buff[sidx+18],eidx-sidx-18); sidx = stringcmp((char*)buff,"",18); eidx = stringcmp((char*)buff,"",19); if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->debugMessage,&buff[sidx+18],eidx-sidx-18); return 0; } //判断是否为目录 bool is_dir(const char *path) { struct stat statbuf; if(lstat(path, &statbuf) ==0)//lstat返回文件的信息,文件信息存放在stat结构中 { return S_ISDIR(statbuf.st_mode) != 0;//S_ISDIR宏,判断文件类型是否为目录 } return false; } //判断是否为常规文件 bool is_file(const char *path) { struct stat statbuf; if(lstat(path, &statbuf) ==0) return S_ISREG(statbuf.st_mode) != 0;//判断文件是否为常规文件 return false; } //判断是否是特殊目录 bool is_special_dir(const char *path) { return strcmp(path, ".") == 0 || strcmp(path, "..") == 0; } //生成完整的文件路径 void get_file_path(const char *path, const char *file_name, char *file_path) { strcpy(file_path, path); if(file_path[strlen(path) - 1] != '/') strcat(file_path, "/"); strcat(file_path, file_name); } void delete_file(const char *path) { char cmd[30]; memset(cmd,0,30); sprintf(cmd,"rm -f %s",path); int ret = system(cmd); #ifdef DBG_LOG syslog(LOG_USER | LOG_INFO, "delete_file, ret=%d, %s\n", ret, path); #endif } void delete_folder(const char *path) { char cmd[30]; memset(cmd,0,30); sprintf(cmd,"rm -r %s",path); int ret = system(cmd); #ifdef DBG_LOG syslog(LOG_USER | LOG_INFO, "delete_folder, ret=%d, %s\n", ret, path); #endif } int doesFileExist(const char *filename) { struct stat st; int result=stat(filename,&st); if (result==0) return 1; else return 0; } int GetFileNameInFolder(char* dirname,lpfilenames lpfilename) { int num=0; DIR *p_dir; struct dirent *p_dirent; if((p_dir = opendir(dirname)) == NULL){ printf("---->can\'t open %s\n",dirname); return 0; } while((p_dirent = readdir(p_dir))){ strcpy(lpfilename[num].name ,p_dirent->d_name); num++; } return num; } int net_test(char* serverIP,char* port) { struct sockaddr_in servaddr; int strlen=sizeof(servaddr); int sockfdd; if((sockfdd=socket(PF_INET,SOCK_STREAM,0))<0){ perror("socket fail"); close(sockfdd); return -1; } memset(&servaddr,0,strlen); servaddr.sin_family=AF_INET; inet_pton(AF_INET,serverIP,&servaddr.sin_addr); servaddr.sin_port=htons(atoi(port)); if(connect(sockfdd,(struct sockaddr*)&servaddr,strlen)<0){ // perror("connect fail-3"); close(sockfdd); return -2; } close(sockfdd); return 0; } void GPIOinit(void) { int retVal = -1; int PortNum = 0xA06; unsigned char wVal = 0x15; retVal = GPIO_OPEN(PortNum); printf("GPIO OPEN RES = %d \n",retVal); GPIO_WRITE(PortNum,wVal); printf("GPIO WRITE VALUE = 0x%X \n", wVal); retVal = GPIO_READ(PortNum); printf("GPIO READ VALUE 02 = 0x%X \n",retVal); GPIO_CLOSE(PortNum); } int GPIOoutput(int no) { int PortNum = 0xA06; switch(no){ case 0: GPIO_WRITE(PortNum,0x15); return 0; case 1: GPIO_WRITE(PortNum,0x57); return 0; case 2: GPIO_WRITE(PortNum,0x5D); return 0; case 3: GPIO_WRITE(PortNum,0x5F); return 0; case 4: GPIO_WRITE(PortNum,0x75); return 0; case 5: GPIO_WRITE(PortNum,0x77); return 0; case 6: GPIO_WRITE(PortNum,0x7D); return 0; case 7: GPIO_WRITE(PortNum,0x7F); return 0; case 8: GPIO_WRITE(PortNum,0xD5); return 0; case 9: GPIO_WRITE(PortNum,0xD7); return 0; case 10: GPIO_WRITE(PortNum,0xDD); return 0; case 11: GPIO_WRITE(PortNum,0xDF); return 0; case 12: GPIO_WRITE(PortNum,0xF5); return 0; case 13: GPIO_WRITE(PortNum,0xF7); return 0; case 14: GPIO_WRITE(PortNum,0xFD); return 0; case 15: GPIO_WRITE(PortNum,0xFF); return 0; } return -1; } int GPIO_OPEN(int PortNum) { return ioperm(PortNum, 0x01, 0x01); } void GPIO_CLOSE(int PortNum) { ioperm(PortNum, 0x01, 0x00); } int GPIO_READ(int PortNum) { return inb(PortNum); } void GPIO_WRITE(int PortNum,unsigned char DATA) { 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 */ { context->count[0] = context->count[1] = 0; context->state[0] = 0x67452301; /* Load magic initialization constants.*/ context->state[1] = 0xefcdab89; context->state[2] = 0x98badcfe; context->state[3] = 0x10325476; } /* ----------------------------------------------------------------------------------- MD5 block update operation. Continues an MD5 message-digest operation, processing another message block, and updating the context. -------------------------------------------------------------------------------------*/ /* context */ /* input block */ /* length of input block */ void MD5Update (MD5_CTX *context, unsigned char *input,unsigned int inputLen ) { unsigned int i, index, partLen; index = (unsigned int)((context->count[0] >> 3) & 0x3F); /* Compute number of bytes mod 64 */ if ( (context->count[0] += ( (UINT4)inputLen << 3) ) < ( (UINT4)inputLen << 3 ) ) context->count[1]++; context->count[1] += ((UINT4)inputLen >> 29); partLen = 64 - index; /* Transform as many times as possible.*/ if (inputLen >= partLen) { MD5_memcpy( (POINTER)&context->buffer[index], (POINTER)input, partLen); MD5Transform (context->state, context->buffer); for (i = partLen; i + 63 < inputLen; i += 64) MD5Transform (context->state, &input[i]); index = 0; } else i = 0; /* Buffer remaining input */ MD5_memcpy( (POINTER)&context->buffer[index], (POINTER)&input[i],inputLen-i ); } /* MD5 finalization. Ends an MD5 message-digest operation, writing the the message digest and zeroizing the context. */ void MD5Final (unsigned char digest[16], MD5_CTX *context) /* message digest */ /* context */ { unsigned char bits[8]; unsigned int index, padLen; Encode (bits, context->count, 8); /* Save number of bits */ /* Pad out to 56 mod 64.*/ index = (unsigned int)((context->count[0] >> 3) & 0x3f); padLen = (index < 56) ? (56 - index) : (120 - index); MD5Update (context,(unsigned char*) PADDING, padLen); MD5Update (context, bits, 8); /* Append length (before padding) */ Encode (digest, context->state, 16); /* Store state in digest */ /* Zeroize sensitive information.*/ MD5_memset ((POINTER)context, 0, sizeof (*context)); } /* MD5 basic transformation. Transforms state based on block. */ void MD5Transform (UINT4 state[4],unsigned char block[64]) { UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; Decode (x, block, 64); /* Round 1 */ FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ /* Round 2 */ GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */ GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ /* Round 3 */ HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ /* Round 4 */ II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ state[0] += a; state[1] += b; state[2] += c; state[3] += d; /* Zeroize sensitive information.*/ MD5_memset ((POINTER)x, 0, sizeof (x)); } /* Encodes input (UINT4) into output (unsigned char). Assumes len is a multiple of 4. */ void Encode (unsigned char *output,UINT4 *input,unsigned int len) { unsigned int i, j; for (i = 0, j = 0; j < len; i++, j += 4) { output[j] = (unsigned char)(input[i] & 0xff); output[j+1] = (unsigned char)((input[i] >> 8) & 0xff); output[j+2] = (unsigned char)((input[i] >> 16) & 0xff); output[j+3] = (unsigned char)((input[i] >> 24) & 0xff); } } /* Decodes input (unsigned char) into output (UINT4). Assumes len is a multiple of 4. */ void Decode (UINT4 *output,unsigned char *input,unsigned int len) { unsigned int i, j; for (i = 0, j = 0; j < len; i++, j += 4) output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) | (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24); } /* Note: Replace "for loop" with standard memcpy if possible. */ void MD5_memcpy (POINTER output,POINTER input,unsigned int len) { unsigned int i; for (i = 0; i < len; i++) output[i] = input[i]; } /* Note: Replace "for loop" with standard memset if possible. */ void MD5_memset (POINTER output,int value,unsigned int len) { unsigned int i; for (i = 0; i < len; i++) ((char *)output)[i] = (char)value; } /* Digests a string and prints the result. */ char* MDString (char *string) { MD5_CTX context; unsigned char digest[16]; char output1[33]; static char output[33]={"\0"}; unsigned int len = strlen (string); int i; MD5Init (&context); MD5Update (&context, (unsigned char*)string, len); MD5Final (digest, &context); for (i = 0; i < 16; i++) { sprintf(&(output1[2*i]),"%02x",(unsigned char)digest[i]); //sprintf(&(output1[2*i+1]),"%02x",(unsigned char)(digest[i]<<4)); } for(i=0;i<32;i++) output[i]=output1[i]; return output; } void zclock_sleep (int msecs) { struct timespec t; t.tv_sec = msecs / 1000; t.tv_nsec = (msecs % 1000) * 1000000; nanosleep (&t, NULL); }