From c88f653a08d0006fafa9c7b08c43888df2c46b8c Mon Sep 17 00:00:00 2001 From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674> Date: 星期四, 08 十二月 2016 10:10:11 +0800 Subject: [PATCH] merge my fix --- ProxyServer/proxyserver.c | 4701 +++++++++++++++++++++++++++++++--------------------------- 1 files changed, 2,507 insertions(+), 2,194 deletions(-) diff --git a/ProxyServer/proxyserver.c b/ProxyServer/proxyserver.c index ee599c3..bf2718f 100644 --- a/ProxyServer/proxyserver.c +++ b/ProxyServer/proxyserver.c @@ -1,2194 +1,2507 @@ -/* - * proxyserver.c - * - * Created on: Oct 9, 2016 - * Author: JKM - */ - -#include <dirent.h> -#include "proxyserver.h" -int RequestChannel; -char* gAnalyzerIP; -char* gUser; -char* gPass; -int GSocket; -int gMySock[16]; -int threadIdx=0; -char byte_array[2600]; -char buff[102400]; -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[100000]; -EVENT_LOG myEventLogs[200]; -int EventCount=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]; - -///////////////////////////////////////////////// -char* strnncat(char*s1,char*s2,int n) -{ - int len = strlen(s1); - - for(int i=0;i<n;i++) - { - s1[len+i]=s2[i]; - } - return s1; -} -void SearchAppendString(char *buff,char* token1,char* token2,char* dispName) -{ - int len = strlen(token1); - int sidx = stringcmp((char*)buff,token1,len); - int eidx = stringcmp((char*)buff,token2,len+1); - if(sidx >=0 && eidx>=0 && eidx>sidx+len) { - strcat(EventString,dispName);strnncat(EventString,&buff[sidx+len],eidx-sidx-len); - strcat(EventString,"\n"); - } -} -char* GetDeviceInfo(char* AnalyserIP) -{ - memset(EventString,0,100000); - 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,100000); - while(1){ - memset(buff,0,sizeof(buff)); - length=read(GSocket,&buff,sizeof(buff)); - if(length<=0) - { - close(GSocket); - break; - } - if(stringcmp((char*)buff,"<urn:DeviceInfo",15)>=0){ - SearchAppendString((char*)buff,"<urn:deviceName>","</urn:deviceName>","deviceName:"); - SearchAppendString((char*)buff,"<urn:deviceID>","</urn:deviceID>","deviceID:"); - SearchAppendString((char*)buff,"<urn:deviceDescription>","</urn:deviceDescription>","deviceDescription:"); - SearchAppendString((char*)buff,"<urn:model>","</urn:model>","model:"); - SearchAppendString((char*)buff,"<urn:serialNumber>","</urn:serialNumber>","serialNumber:"); - SearchAppendString((char*)buff,"<urn:macAddress>","</urn:macAddress>","macAddress:"); - SearchAppendString((char*)buff,"<urn:firmwareVersion>","</urn:firmwareVersion>","firmwareVersion:"); - SearchAppendString((char*)buff,"<urn:bootVersion>","</urn:bootVersion>","bootVersion:"); - SearchAppendString((char*)buff,"<urn1:httpPort>","</urn1:httpPort>","httpPort:"); - SearchAppendString((char*)buff,"<urn1:httpsPort>","</urn1:httpsPort>","httpsPort:"); - SearchAppendString((char*)buff,"<urn1:rtspPort>","</urn1:rtspPort>","rtspPort:"); - SearchAppendString((char*)buff,"<urn1:httpsEnabled>","</urn1:httpsEnabled>","httpsEnabled:"); - SearchAppendString((char*)buff,"<urn1:webAuthenticationType>","</urn1:webAuthenticationType>","webAuthenticationType:"); - SearchAppendString((char*)buff,"<urn1:rtspAuthenticationEnabled>","</urn1:rtspAuthenticationEnabled>","rtspAuthenticationEnabled:"); - close(GSocket); - return EventString; - } - } - return EventString; -} - - -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) -{ - 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,"<urn:id>",8); - if(sidx >=0){//<urn:ViqDateTimeInterval urn:version="1.0" xmlns:urn="urn:videoiq-com"><urn:startTime urn:version="1.0"><urn:date>2016-08-18T01:07:20.749</urn:date><urn:offset>0</urn:offset></urn:startTime><urn:endTime urn:version="1.0"><urn:date>2016-08-29T08:33:48.231</urn:date><urn:offset>0</urn:offset></urn:endTime></urn:ViqDateTimeInterval> - int eidx = stringcmp((char*)buff,"</urn:id>",9); - if(eidx>=0 && sidx+8<eidx){ - int Idx=FindIdx(gAnalyzerIP); - if(Idx==-1){ - Idx = FindEmpty(); - strcpy(sessions[Idx].IP,gAnalyzerIP); - memcpy(sessions[Idx].ID,&buff[sidx+8],eidx-sidx-8); - } - memcpy(sessions[Idx].ID,&buff[sidx+8],eidx-sidx-8); - bbbb=2; -// printf("SessionID =======> %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; - - 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" - - <urn:ViqEventNotificationAlert urn:version="1.0" xmlns:urn="urn:videoiq-com"> - <urn:channelId>3</urn:channelId> - <urn:eventId>6478</urn:eventId> - <urn:startTime urn:version="1.0"> - <urn:date>2016-11-07T08:50:54.063</urn:date><urn:offset>28800000</urn:offset> - </urn:startTime> - <urn:clipUrl>/media/clips/3/2016/11/7/8/3/2016_11_07-08_50_48.mp4</urn:clipUrl> - <urn:ruleId>17</urn:ruleId> - <urn:ruleName>Video Lost Rule</urn:ruleName> - <urn:soiId>-1</urn:soiId> - <urn:soiName>Reserved SOI</urn:soiName> - <urn:activity>Video Lost</urn:activity> - <urn:objectType>Unknown</urn:objectType> - <urn:aborted>false</urn:aborted> - <urn:acknowledged>false</urn:acknowledged> - <urn:ackNotes xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><urn:falseAlarm>false</urn:falseAlarm> - <urn:debugMessage>2016/11/07 08:50:54.63: Video lost detected: 101. Event (id=6478) started.</urn:debugMessage> - </urn:ViqEventNotificationAlert> - */ - -//// 鍔熻兘锛氳幏鍙栧疄鏃剁洃鎺ф姤璀� -//// 杈撳叆锛氬垎鏋愬櫒IP -//// 杈撳嚭锛氱粨鏋� -char* GetRealEvent(char* AnalyserIP) //3.鏌ョ湅瀹炴椂鐩戞帶 鍙傛暟锛氬垎鏋愬櫒IP銆傝繑鍥烇細淇¢亾鍙峰強鍏跺搴旂殑瑙嗛娴佸湴鍧� -{ - int Idx=FindIdx(AnalyserIP); - memset(EventString,0,100000); - if(Idx>=0 && Idx<16 && RealAlarmEventNum[Idx]>0){ - for (int i=0;i<RealAlarmEventNum[Idx];i++) - { - strcat(EventString,RealAlarmEvent[Idx][i].channelId); - strcat(EventString,"\n"); - strcat(EventString,RealAlarmEvent[Idx][i].eventId); - strcat(EventString,"\n"); - strcat(EventString,RealAlarmEvent[Idx][i].startTime); - strcat(EventString,"\n"); - strcat(EventString,RealAlarmEvent[Idx][i].endTime); - strcat(EventString,"\n"); - strcat(EventString,RealAlarmEvent[Idx][i].clipUrl); - strcat(EventString,"\n"); - strcat(EventString,RealAlarmEvent[Idx][i].ruleId); - strcat(EventString,"\n"); - strcat(EventString,RealAlarmEvent[Idx][i].ruleName); - strcat(EventString,"\n"); - strcat(EventString,RealAlarmEvent[Idx][i].soiId); - strcat(EventString,"\n"); - strcat(EventString,RealAlarmEvent[Idx][i].soiName); - strcat(EventString,"\n"); - strcat(EventString,RealAlarmEvent[Idx][i].activity); - strcat(EventString,"\n"); - strcat(EventString,RealAlarmEvent[Idx][i].objectType); - strcat(EventString,"\n"); - strcat(EventString,RealAlarmEvent[Idx][i].aborted); - strcat(EventString,"\n"); - strcat(EventString,RealAlarmEvent[Idx][i].acknowledged); - strcat(EventString,"\n"); - strcat(EventString,RealAlarmEvent[Idx][i].debugMessage); - strcat(EventString,"\n"); - } - } - return EventString; -} -//// 鏌ヨ鎶ヨ璁板綍 -//// 杈撳叆锛氬垎鏋愬櫒IP锛屽紑濮嬫椂闂达紝缁撴潫鏃堕棿锛屼俊閬撳彿,鐢ㄦ埛锛屽瘑鐮� -//// 杈撳嚭锛氭煡璇㈢粨鏋溿�傦紙鍖呮嫭淇¢亾鍙凤紝鎶ヨ鏃堕棿锛屾挱鏀惧湴鍧�锛岀瓑銆傦級 -char* GetPHPSearchMetaInfo(char* AnalyserIP,char* user,char* pass,int Channel,int s_year,int s_month,int s_day,int s_hour,int s_minute,int s_sec,int e_year,int e_month,int e_day,int e_hour,int e_minute,int e_sec) -{ - char* result; - MyTime mstart_time; - mstart_time.Year=s_year; - mstart_time.Month=s_month; - mstart_time.Day=s_day; - mstart_time.Hour=s_hour; - mstart_time.Min=s_minute; - mstart_time.Sec=s_sec; - MyTime mEnd_time; - mEnd_time.Year=e_year; - mEnd_time.Month=e_month; - mEnd_time.Day=e_day; - mEnd_time.Hour=e_hour; - mEnd_time.Min=e_minute; - mEnd_time.Sec=e_sec; - result=GetSearchMetaInfo(AnalyserIP,user,pass,Channel,&mstart_time,&mEnd_time); - return result; - -} -char* GetMp4Info(char* AnalyserIP,char* user,char* pass,int Channel,char* path) -{ - char Pathbuffer[100] = {0}; - - RequestChannel = Channel; - gAnalyzerIP = AnalyserIP; - gUser = user; - gPass = pass; - bMetadataSaving = 0; - if(AnalyserIP==NULL || AnalyserIP[0]==0) return "-1"; - int length; - int bMp4FileSaving=0; - int Mp4FileAppendingSiz=0; - int Mp4FileSiz; - int file; - char* result; - - char* httpUri = path; - 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],"Pragma: no-cache\r\n"); iidx+=llen; - // llen = sprintf(&byte_array[iidx],"Host: %s\r\n",Equipments[EquipIdx].ip); iidx+=llen; - llen = sprintf(&byte_array[iidx],"Host: %s:80\r\n",gAnalyzerIP); iidx+=llen; - llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n\r\n"); iidx+=llen; - - struct sockaddr_in servaddr; - int strlen1=sizeof(servaddr); - if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){ - perror("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){ - printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80); - close(GSocket); - return "-4"; - } - //printf("byte_array==%s",byte_array); - write(GSocket,byte_array,iidx); - - while(1){ - memset(buff,0,sizeof(buff)); - length=read(GSocket,&buff,sizeof(buff)); - //printf("buff==%s",buff); - if(length<=0) - { - close(GSocket); - break; - } - if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0) - { - // 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<strlen(httpUri);i++){ - if(httpUri[i]=='/') { - count++; - if(count>=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"; -} - - - - - - -//// 鏌ヨ鎶ヨ璁板綍 -//// 杈撳叆锛氬垎鏋愬櫒IP锛屽紑濮嬫椂闂达紝缁撴潫鏃堕棿锛屼俊閬撳彿,鐢ㄦ埛锛屽瘑鐮� -//// 杈撳嚭锛氭煡璇㈢粨鏋溿�傦紙鍖呮嫭淇¢亾鍙凤紝鎶ヨ鏃堕棿锛屾挱鏀惧湴鍧�锛岀瓑銆傦級 -char* GetSearchMetaInfo(char* AnalyserIP,char* user,char* pass,int Channel,lpMyTime StartTm,lpMyTime EndTm) -{ - RequestChannel = Channel; - gAnalyzerIP = AnalyserIP; - gUser = user; - gPass = pass; - bMetadataSaving = 0; - if(AnalyserIP==NULL || AnalyserIP[0]==0) return "-1"; -// if(gGettingStep>0) return -2; - - struct tm ttm; - time_t StepTm; - int length; - char* httpUri; - char sss[24],eee[24]; - chmod("/home",0777); - const char* folderr; - const char* filename1; - folderr="/home/tmpZip"; - filename1="/home/tmp.zip"; - struct stat sb; - if(stat(folderr,&sb)==0 && S_ISDIR(sb.st_mode)) - { - delete_folder("/home/tmpZip"); - } - if (doesFileExist(filename1)) - { - delete_file("/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;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; - 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; - time_t SearchEndTm = mktime(&ttm); - - printf("stm=%d,etm=%d\n",(int)SearchStartTm,(int)SearchEndTm); - - for (StepTm=SearchEndTm;StepTm>SearchStartTm;StepTm-=2*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){ - perror("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){ - printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80); - close(GSocket); - return "-4"; - } - time_t ttt=StepTm-2*3600; - struct tm *t; - 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"; - 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"; - eee[23]=0; - RequestMetaFiles(gAnalyzerIP,httpUri,sss,eee); - write(GSocket,byte_array,strlen(byte_array)); - - //鐢ㄤ互涓嬫柟娉曞皢socket璁剧疆涓洪潪闃诲鏂瑰紡 -// int flags = fcntl(GSocket, F_GETFL, 0); -// fcntl(GSocket, F_SETFL, flags | O_NONBLOCK); - 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) - { - // analyse reception - MakeAuthorizedPacketSimp111(buff,length,"GET",httpUri,sss,eee); - write(GSocket,byte_array,strlen(byte_array)); - continue; - } - if(bMetadataSaving==1){ - memoryband[bandCount] = (unsigned char*)malloc(length); - memcpy(memoryband[bandCount], buff, length); - bandsize[bandCount] = length; - if(bandCount<99) bandCount++; - int eidx = stringcmp((char*)buff,"</urn:strings></urn:ViqStrings></urn:ViqStringsList>",52); - if(eidx >=0){ - bMetadataSaving = 0; - int SSize=0; - for (int i=0;i<bandCount;i++) SSize+=bandsize[i]; - char *tmpp = (char*)malloc(SSize); - int xx=0; - for (int i=0;i<bandCount;i++) - { - memcpy(&tmpp[xx],memoryband[i],bandsize[i]); - xx=bandsize[i]; - free(memoryband[i]); - } - memcpy(buff,tmpp,SSize); - free(tmpp); - goto lpp123; - printf("**********Special*******************************ZipSerFileNum = %d",ZipSerFileNum); - } - } - else{ - int sidx = stringcmp((char*)buff,"<urn:ViqStringsList urn:version=",32); - if(sidx >=0){ - bMetadataSaving = 1; - bandCount = 0; - memoryband[bandCount] = (unsigned char*)malloc(length-sidx); - memcpy(memoryband[bandCount], &buff[sidx], length-sidx); - bandsize[bandCount] = length-sidx; - if(bandCount<99) bandCount++; - int eidx = stringcmp((char*)buff,"</urn:strings></urn:ViqStrings></urn:ViqStringsList>",52); - if(eidx >=0 && sidx<eidx){ - free(memoryband[0]); - bandCount = 0; - bMetadataSaving = 0; - buff[eidx]=0; - int ptr=0; - ////// analyze buffer -lpp123: sidx = stringcmp((char*)&buff[ptr],"http://changeit:80/media",24); - if(sidx >=0){//http://changeit:80/media/metadata/0/2016/8/25/1/2/s_5b4103706a6411e6855e574ec330e01d_20160825_013633_93003.zip - int zipidx =-1;zipidx = stringcmp((char*)&buff[ptr],".zip",4); - int seridx =-1;seridx = stringcmp((char*)&buff[ptr],".ser",4); - int kkk=-1; - if(zipidx>=0){ - if(seridx>=0){ - if(zipidx<seridx) kkk = zipidx; - else kkk = seridx; - } - else kkk = zipidx; - } - else{ - if(seridx>=0) kkk = seridx; - } - if(kkk>=0 && kkk>sidx+18) - { - //涓嬭浇metadata - char pathbuf[250] ; - strncpy(pathbuf,(char*)&buff[ptr+sidx+18],kkk-sidx-18+4); - pathbuf[kkk-sidx-18+4]=0; - int i; - for (i=0;i<ZipSerFileNum;i++) - { - if(strcmp(pathbuf,ZipSerFileName[i])==0) break; - } - if(i>=ZipSerFileNum){ - strcpy(ZipSerFileName[ZipSerFileNum],pathbuf); - if(ZipSerFileNum<1000-1) ZipSerFileNum++; - } - ptr=ptr+kkk+4; - goto lpp123; - } - } - } - } - } - }// while end - }//for - //////// get - for(ZipCountidx = 0; ZipCountidx<ZipSerFileNum; ZipCountidx++) - { - if(stringcmp((char*)ZipSerFileName[ZipCountidx],".ser",4)>=0) 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){ - perror("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){ - printf("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("/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 - system("unzip -o /home/tmp.zip -d /home/tmpZip"); - } - } - else{ - int sidx = stringcmp((char*)buff,"PK",2); - if(sidx >=0){//涓嬭浇Zip filesave - delete_file("/home/tmp.zip"); - //涓嬭浇Zip filesave - bZipFileSaving = 1; - int file; - if((file = open("/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 - system("unzip -o /home/tmp.zip -d /home/tmpZip"); - } - } - } - }//while - }//for - int i,res=0,num=0; //寰楅暱搴� - filenames filename[100]; - num = GetFileNameInFolder("/home/tmpZip",filename); - char stringpath[1024]; - unsigned char p_save_buf[6144000]; - - for(i=0;i<num;i++) - { - if(filename[i].name[0]=='.') continue; - memset(stringpath,0,1024); - memcpy(stringpath,"/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); - } - memset(EventString,0,100000); - //for(i=0;i<1000;i++) - printf("EventCount===========================%d\n",EventCount); - for (int i=0;i<EventCount;i++) - { - 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"); - } - return EventString; - //return "333333333333333333333333333333333333333333333333333333333333333333789"; -} -//// 鍔熻兘锛氶噸鍚垎鏋愬櫒锛堝崗璁級 -//// 杈撳叆锛氬垎鏋愬櫒IP,鐢ㄦ埛锛屽瘑鐮� -//// 杈撳嚭锛�0锛堟垚鍔燂級, -1(鍒濆鍖栧け璐�),-2(杩炴帴澶辫触) -int RestartCommand(char* AnalyserIP,char* user,char* pass) -{ - 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,"PUT /PSIA/System/reboot 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) - { - break; - } - if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0) - { - // 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) return -1; -// zclock_sleep(200); - 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; - } - 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) -{ - char byte_arrayxxx[1600]; - int lengthxxx = 0; - memset(byte_array,0,1600); - - 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) -{ - memset(byte_array,0,1600); - - 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,"<urn:ViqDateTimeInterval urn:version="); - byte_array_out[idx++]=0x22;//'"' - byte_array_out[idx++]=0x31;//'1' - byte_array_out[idx++]=0x2e;//'.' - byte_array_out[idx++]=0x30;//'0' - byte_array_out[idx++]=0x22;//'"' - len = sprintf(&byte_array_out[idx]," xmlns:urn=");idx+=len; - byte_array_out[idx++]=0x22;//'"' - len = sprintf(&byte_array_out[idx],"urn:videoiq-com");idx+=len; - byte_array_out[idx++]=0x22;//'"' - len = sprintf(&byte_array_out[idx],"><urn:startTime urn:version=");idx+=len; - byte_array_out[idx++]=0x22;//'"' - byte_array_out[idx++]=0x31;//'1' - byte_array_out[idx++]=0x2e;//'.' - byte_array_out[idx++]=0x30;//'0' - byte_array_out[idx++]=0x22;//'"' - len = sprintf(&byte_array_out[idx],"><urn:date>%s</urn:date><urn:offset>0</urn:offset></urn:startTime><urn:endTime urn:version=",StartTim);idx+=len; - byte_array_out[idx++]=0x22;//'"' - byte_array_out[idx++]=0x31;//'1' - byte_array_out[idx++]=0x2e;//'.' - byte_array_out[idx++]=0x30;//'0' - byte_array_out[idx++]=0x22;//'"' - len = sprintf(&byte_array_out[idx],"><urn:date>%s</urn:date><urn:offset>0</urn:offset></urn:endTime></urn:ViqDateTimeInterval>",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 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); - } - 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<EventCount;i++) - { - int j,llen = strlen(myEventLogs[i].DebugMessageS); - for (j=0;j<llen;j++) - { - if(myEventLogs[i].DebugMessageS[j] != tmpdeg[j]) break; - } - if(j>=llen) break; - } - if(i<EventCount)// Started message Matched OK - { - sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "activity",8); - if(sidx>=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-2000+100;ttm.tm_mon=mm;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; - time_t EndTm = mktime(&ttm); - - int dur = EndTm-StartTm; - sprintf(myEventLogs[i].Duration,"%d 绉�",dur); - memcpy(myEventLogs[i].DebugMessageE,tmpdeg,msglen); - } - } - } - } - } - } - - 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<200-1){///repair - sprintf(myEventLogs[EventCount].Camera,"%d",RequestChannel+1); - int i; - for (i=0;i<EventCount;i++) - { - if(strcmp(myEventLogs[i].clipUrl,myEventLogs[EventCount].clipUrl)==0) break; - } - if(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;i++) if(src[i]==token[0]) break; - if (i>=slen) return -1; - k=i; - for(i=0;i<klen;i++) - { - if(src[k+i]!=token[i]) - { - start=k+i; - goto lp1; - } - } - if(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;i++) if(src[i]==token[0]) break; - if (i>=slen) return -1; - k=i; - for(i=0;i<len;i++) - { - if(src[k+i]!=token[i]) - { - start=k+i; - goto lp; - } - } - if(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" - - <urn:ViqEventNotificationAlert urn:version="1.0" xmlns:urn="urn:videoiq-com"> - <urn:channelId>3</urn:channelId> - <urn:eventId>6478</urn:eventId> - <urn:startTime urn:version="1.0"> - <urn:date>2016-11-07T08:50:54.063</urn:date><urn:offset>28800000</urn:offset> - </urn:startTime> - <urn:clipUrl>/media/clips/3/2016/11/7/8/3/2016_11_07-08_50_48.mp4</urn:clipUrl> - <urn:ruleId>17</urn:ruleId> - <urn:ruleName>Video Lost Rule</urn:ruleName> - <urn:soiId>-1</urn:soiId> - <urn:soiName>Reserved SOI</urn:soiName> - <urn:activity>Video Lost</urn:activity> - <urn:objectType>Unknown</urn:objectType> - <urn:aborted>false</urn:aborted> - <urn:acknowledged>false</urn:acknowledged> - <urn:ackNotes xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><urn:falseAlarm>false</urn:falseAlarm> - <urn:debugMessage>2016/11/07 08:50:54.63: Video lost detected: 101. Event (id=6478) started.</urn:debugMessage> - </urn:ViqEventNotificationAlert> - */ - -int AnalyXMLUrnEVENT(char* buff,int length,AlarmInfo* RealAlarmEvent) -{ - int sidx,eidx; - sidx = stringcmp((char*)buff,"<urn:channelId>",15); - eidx = stringcmp((char*)buff,"</urn:channelId>",16); - if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->channelId,&buff[sidx+15],eidx-sidx-15); - sidx = stringcmp((char*)buff,"<urn:eventId>",13); - eidx = stringcmp((char*)buff,"</urn:eventId>",14); - if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->eventId,&buff[sidx+13],eidx-sidx-13); - - sidx = stringcmp((char*)buff,"<urn:startTime",14); - eidx = stringcmp((char*)buff,"</urn:startTime",15); - char tmp[200]; - memset(tmp,0,200); - if(sidx>=0 && eidx>=0 && sidx < eidx){ - memcpy(tmp,&buff[sidx+15],eidx-sidx-14); - sidx=stringcmp((char*)tmp,"<urn:date>",10); - eidx = stringcmp((char*)tmp,"</urn:date>",11); - if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->startTime,&tmp[sidx+10],eidx-sidx-10); - sidx=stringcmp((char*)tmp,"<urn:offset>",12); - eidx = stringcmp((char*)tmp,"</urn:offset>",13); - if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->soffset,&tmp[sidx+12],eidx-sidx-12); - } - sidx = stringcmp((char*)buff,"<urn:endTime",12); - if(sidx>=0){ - int ssidx=stringcmp((char*)buff,"<urn:date>",10); - eidx = stringcmp((char*)buff,"</urn:date>",11); - if(ssidx>=0 && eidx>=0 && ssidx < eidx) memcpy(RealAlarmEvent->endTime,&buff[ssidx+10],eidx-ssidx-10); - } - sidx = stringcmp((char*)buff,"<urn:clipUrl>",13); - eidx = stringcmp((char*)buff,"</urn:clipUrl>",14); - if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->clipUrl,&buff[sidx+13],eidx-sidx-13); - sidx = stringcmp((char*)buff,"<urn:ruleId>",12); - eidx = stringcmp((char*)buff,"</urn:ruleId>",13); - if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->ruleId,&buff[sidx+12],eidx-sidx-12); - sidx = stringcmp((char*)buff,"<urn:ruleName>",14); - eidx = stringcmp((char*)buff,"</urn:ruleName>",15); - if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->ruleName,&buff[sidx+14],eidx-sidx-14); - sidx = stringcmp((char*)buff,"<urn:soiId>",11); - eidx = stringcmp((char*)buff,"</urn:soiId>",12); - if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->soiId,&buff[sidx+11],eidx-sidx-11); - sidx = stringcmp((char*)buff,"<urn:soiName>",13); - eidx = stringcmp((char*)buff,"</urn:soiName>",14); - if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->soiName,&buff[sidx+13],eidx-sidx-13); - sidx = stringcmp((char*)buff,"<urn:activity>",14); - eidx = stringcmp((char*)buff,"</urn:activity>",15); - if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->activity,&buff[sidx+14],eidx-sidx-14); - sidx = stringcmp((char*)buff,"<urn:objectType>",16); - eidx = stringcmp((char*)buff,"</urn:objectType>",17); - if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->objectType,&buff[sidx+16],eidx-sidx-16); - sidx = stringcmp((char*)buff,"<urn:aborted>",13); - eidx = stringcmp((char*)buff,"</urn:aborted>",14); - if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->aborted,&buff[sidx+13],eidx-sidx-13); - sidx = stringcmp((char*)buff,"<urn:acknowledged>",18); - eidx = stringcmp((char*)buff,"</urn:acknowledged>",19); - if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->acknowledged,&buff[sidx+18],eidx-sidx-18); - sidx = stringcmp((char*)buff,"<urn:debugMessage>",18); - eidx = stringcmp((char*)buff,"</urn:debugMessage>",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杩斿洖鏂囦欢鐨勪俊鎭紝鏂囦欢淇℃伅瀛樻斁鍦╯tat缁撴瀯涓� - { - 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); - system(cmd); -} -void delete_folder(const char *path) -{ - char cmd[30]; - memset(cmd,0,30); - sprintf(cmd,"rm -r %s",path); - system(cmd); -} -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); -} - - - -//=====================================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; -} - - - - +/* + * proxyserver.c + * + * Created on: Oct 9, 2016 + * Author: JKM + */ + +#include<dirent.h> +#include"proxyserver.h" +int RequestChannel; +char* gAnalyzerIP; +char* gUser; +char* gPass; +int GSocket; +int gMySock[16]; +int threadIdx=0; +char byte_array[2600]; +char buff[102400]; +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[5000 * 1024]; +EVENT_LOG myEventLogs[1000 * 1024]; +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<n;i++) + { + s1[len+i]=s2[i]; + } + return s1; +} +void SearchAppendString(char *buff,char* token1,char* token2,char* dispName) +{ + int len = strlen(token1); + int sidx = stringcmp((char*)buff,token1,len); + int eidx = stringcmp((char*)buff,token2,len+1); + if(sidx >=0 && eidx>=0 && eidx>sidx+len) { + strcat(EventString,dispName);strnncat(EventString,&buff[sidx+len],eidx-sidx-len); + strcat(EventString,"\n"); + } +} +char* GetDeviceInfo(char* AnalyserIP) +{ + memset(EventString,0,100000); + 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,100000); + while(1){ + memset(buff,0,sizeof(buff)); + length=read(GSocket,&buff,sizeof(buff)); + if(length<=0) + { + close(GSocket); + break; + } + if(stringcmp((char*)buff,"<urn:DeviceInfo",15)>=0){ + SearchAppendString((char*)buff,"<urn:deviceName>","</urn:deviceName>","deviceName:"); + SearchAppendString((char*)buff,"<urn:deviceID>","</urn:deviceID>","deviceID:"); + SearchAppendString((char*)buff,"<urn:deviceDescription>","</urn:deviceDescription>","deviceDescription:"); + SearchAppendString((char*)buff,"<urn:model>","</urn:model>","model:"); + SearchAppendString((char*)buff,"<urn:serialNumber>","</urn:serialNumber>","serialNumber:"); + SearchAppendString((char*)buff,"<urn:macAddress>","</urn:macAddress>","macAddress:"); + SearchAppendString((char*)buff,"<urn:firmwareVersion>","</urn:firmwareVersion>","firmwareVersion:"); + SearchAppendString((char*)buff,"<urn:bootVersion>","</urn:bootVersion>","bootVersion:"); + SearchAppendString((char*)buff,"<urn1:httpPort>","</urn1:httpPort>","httpPort:"); + SearchAppendString((char*)buff,"<urn1:httpsPort>","</urn1:httpsPort>","httpsPort:"); + SearchAppendString((char*)buff,"<urn1:rtspPort>","</urn1:rtspPort>","rtspPort:"); + SearchAppendString((char*)buff,"<urn1:httpsEnabled>","</urn1:httpsEnabled>","httpsEnabled:"); + SearchAppendString((char*)buff,"<urn1:webAuthenticationType>","</urn1:webAuthenticationType>","webAuthenticationType:"); + SearchAppendString((char*)buff,"<urn1:rtspAuthenticationEnabled>","</urn1:rtspAuthenticationEnabled>","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.鍒犻櫎璁惧 鍙傛暟锛氳澶噄p 杩斿洖锛氭垚鍔熸垨澶辫触鐨勬彁绀恒�� +{ + 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 鍙傛暟锛氭棤銆傝繑鍥烇細褰撳墠鐨刬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) +{ + 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,"<urn:id>",8); + if(sidx >=0){//<urn:ViqDateTimeInterval urn:version="1.0" xmlns:urn="urn:videoiq-com"><urn:startTime urn:version="1.0"><urn:date>2016-08-18T01:07:20.749</urn:date><urn:offset>0</urn:offset></urn:startTime><urn:endTime urn:version="1.0"><urn:date>2016-08-29T08:33:48.231</urn:date><urn:offset>0</urn:offset></urn:endTime></urn:ViqDateTimeInterval> + int eidx = stringcmp((char*)buff,"</urn:id>",9); + if(eidx>=0 && sidx+8<eidx){ + int Idx=FindIdx(gAnalyzerIP); + if(Idx==-1){ + Idx = FindEmpty(); + strcpy(sessions[Idx].IP,gAnalyzerIP); + memcpy(sessions[Idx].ID,&buff[sidx+8],eidx-sidx-8); + } + memcpy(sessions[Idx].ID,&buff[sidx+8],eidx-sidx-8); + bbbb=2; +// printf("SessionID =======> %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; + + 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" + + <urn:ViqEventNotificationAlert urn:version="1.0" xmlns:urn="urn:videoiq-com"> + <urn:channelId>3</urn:channelId> + <urn:eventId>6478</urn:eventId> + <urn:startTime urn:version="1.0"> + <urn:date>2016-11-07T08:50:54.063</urn:date><urn:offset>28800000</urn:offset> + </urn:startTime> + <urn:clipUrl>/media/clips/3/2016/11/7/8/3/2016_11_07-08_50_48.mp4</urn:clipUrl> + <urn:ruleId>17</urn:ruleId> + <urn:ruleName>Video Lost Rule</urn:ruleName> + <urn:soiId>-1</urn:soiId> + <urn:soiName>Reserved SOI</urn:soiName> + <urn:activity>Video Lost</urn:activity> + <urn:objectType>Unknown</urn:objectType> + <urn:aborted>false</urn:aborted> + <urn:acknowledged>false</urn:acknowledged> + <urn:ackNotes xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><urn:falseAlarm>false</urn:falseAlarm> + <urn:debugMessage>2016/11/07 08:50:54.63: Video lost detected: 101. Event (id=6478) started.</urn:debugMessage> + </urn:ViqEventNotificationAlert> + */ + +//// 鍔熻兘锛氳幏鍙栧疄鏃剁洃鎺ф姤璀� +//// 杈撳叆锛氬垎鏋愬櫒IP +//// 杈撳嚭锛氱粨鏋� +char* GetRealEvent(char* AnalyserIP) //3.鏌ョ湅瀹炴椂鐩戞帶 鍙傛暟锛氬垎鏋愬櫒IP銆傝繑鍥烇細淇¢亾鍙峰強鍏跺搴旂殑瑙嗛娴佸湴鍧� +{ + int Idx=FindIdx(AnalyserIP); + memset(EventString,0,100000); + if(Idx>=0 && Idx<16 && RealAlarmEventNum[Idx]>0){ + for (int i=0;i<RealAlarmEventNum[Idx];i++) + { + strcat(EventString,RealAlarmEvent[Idx][i].channelId); + strcat(EventString,"\n"); + strcat(EventString,RealAlarmEvent[Idx][i].eventId); + strcat(EventString,"\n"); + strcat(EventString,RealAlarmEvent[Idx][i].startTime); + strcat(EventString,"\n"); + strcat(EventString,RealAlarmEvent[Idx][i].endTime); + strcat(EventString,"\n"); + strcat(EventString,RealAlarmEvent[Idx][i].clipUrl); + strcat(EventString,"\n"); + strcat(EventString,RealAlarmEvent[Idx][i].ruleId); + strcat(EventString,"\n"); + strcat(EventString,RealAlarmEvent[Idx][i].ruleName); + strcat(EventString,"\n"); + strcat(EventString,RealAlarmEvent[Idx][i].soiId); + strcat(EventString,"\n"); + strcat(EventString,RealAlarmEvent[Idx][i].soiName); + strcat(EventString,"\n"); + strcat(EventString,RealAlarmEvent[Idx][i].activity); + strcat(EventString,"\n"); + strcat(EventString,RealAlarmEvent[Idx][i].objectType); + strcat(EventString,"\n"); + strcat(EventString,RealAlarmEvent[Idx][i].aborted); + strcat(EventString,"\n"); + strcat(EventString,RealAlarmEvent[Idx][i].acknowledged); + strcat(EventString,"\n"); + strcat(EventString,RealAlarmEvent[Idx][i].debugMessage); + strcat(EventString,"\n"); + } + } + return EventString; +} +//// 鏌ヨ鎶ヨ璁板綍 +//// 杈撳叆锛氬垎鏋愬櫒IP锛屽紑濮嬫椂闂达紝缁撴潫鏃堕棿锛屼俊閬撳彿,鐢ㄦ埛锛屽瘑鐮� +//// 杈撳嚭锛氭煡璇㈢粨鏋溿�傦紙鍖呮嫭淇¢亾鍙凤紝鎶ヨ鏃堕棿锛屾挱鏀惧湴鍧�锛岀瓑銆傦級 +char* GetPHPSearchMetaInfo(char* AnalyserIP,char* user,char* pass,int Channel,int s_year,int s_month,int s_day,int s_hour,int s_minute,int s_sec,int e_year,int e_month,int e_day,int e_hour,int e_minute,int e_sec) +{ + char* result; + MyTime mstart_time; + mstart_time.Year=s_year; + mstart_time.Month=s_month; + mstart_time.Day=s_day; + mstart_time.Hour=s_hour; + mstart_time.Min=s_minute; + mstart_time.Sec=s_sec; + MyTime mEnd_time; + mEnd_time.Year=e_year; + mEnd_time.Month=e_month; + mEnd_time.Day=e_day; + mEnd_time.Hour=e_hour; + mEnd_time.Min=e_minute; + mEnd_time.Sec=e_sec; + result=GetSearchMetaInfo(AnalyserIP,user,pass,Channel,&mstart_time,&mEnd_time); + return result; + +} +char* GetMp4Info(char* AnalyserIP,char* user,char* pass,int Channel,char* path) +{ + char Pathbuffer[100] = {0}; + + RequestChannel = Channel; + gAnalyzerIP = AnalyserIP; + gUser = user; + gPass = pass; + bMetadataSaving = 0; + if(AnalyserIP==NULL || AnalyserIP[0]==0) return "-1"; + int length; + int bMp4FileSaving=0; + int Mp4FileAppendingSiz=0; + int Mp4FileSiz; + int file; + char* result; + + char* httpUri = path; + 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],"Pragma: no-cache\r\n"); iidx+=llen; + // llen = sprintf(&byte_array[iidx],"Host: %s\r\n",Equipments[EquipIdx].ip); iidx+=llen; + llen = sprintf(&byte_array[iidx],"Host: %s:80\r\n",gAnalyzerIP); iidx+=llen; + llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n\r\n"); iidx+=llen; + + struct sockaddr_in servaddr; + int strlen1=sizeof(servaddr); + if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){ + perror("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){ + printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80); + close(GSocket); + return "-4"; + } + //printf("byte_array==%s",byte_array); + write(GSocket,byte_array,iidx); + + while(1){ + memset(buff,0,sizeof(buff)); + length=read(GSocket,&buff,sizeof(buff)); + //printf("buff==%s",buff); + if(length<=0) + { + close(GSocket); + break; + } + if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0) + { + // 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<strlen(httpUri);i++){ + if(httpUri[i]=='/') { + count++; + if(count>=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"; +} + + + + + +//// 鏌ヨ鎶ヨ璁板綍 +//// 杈撳叆锛氬垎鏋愬櫒IP锛屽紑濮嬫椂闂达紝缁撴潫鏃堕棿锛屼俊閬撳彿,鐢ㄦ埛锛屽瘑鐮� +//// 杈撳嚭锛氭煡璇㈢粨鏋溿�傦紙鍖呮嫭淇¢亾鍙凤紝鎶ヨ鏃堕棿锛屾挱鏀惧湴鍧�锛岀瓑銆傦級 +char* GetSearchMetaInfo(char* AnalyserIP,char* user,char* pass,int Channel,lpMyTime StartTm,lpMyTime EndTm) +{ + 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/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);//#todo ZIP_HOME + const char* folderr; + const char* filename1; + folderr="/home/tmpZip"; + filename1="/home/tmp.zip"; + struct stat sb; + if(stat(folderr,&sb)==0 && S_ISDIR(sb.st_mode)) + { + delete_folder("/home/tmpZip"); + } + if (doesFileExist(filename1)) + { + delete_file("/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 + printf("stm=%d,etm=%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){ + perror("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){ + printf("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 + printf("sss=%s, eee=%s\n", sss, eee); +#endif + RequestMetaFiles(gAnalyzerIP,httpUri,sss,eee); + write(GSocket,byte_array,strlen(byte_array)); + + //鐢ㄤ互涓嬫柟娉曞皢socket璁剧疆涓洪潪闃诲鏂瑰紡 +// int flags = fcntl(GSocket, F_GETFL, 0); +// fcntl(GSocket, F_SETFL, flags | O_NONBLOCK); + 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) + { + // analyse reception + MakeAuthorizedPacketSimp111(buff,length,"GET",httpUri,sss,eee); + write(GSocket,byte_array,strlen(byte_array)); + continue; + } + if(bMetadataSaving==1){ + memoryband[bandCount] = (unsigned char*)malloc(length); + memcpy(memoryband[bandCount], buff, length); + bandsize[bandCount] = length; + if(bandCount<99) bandCount++; + int eidx = stringcmp((char*)buff,"</urn:strings></urn:ViqStrings></urn:ViqStringsList>",52); + if(eidx >=0){ + bMetadataSaving = 0; + int SSize=0; + for (int i=0;i<bandCount;i++) SSize+=bandsize[i]; + char *tmpp = (char*)malloc(SSize); + int xx=0; + for (int i=0;i<bandCount;i++) + { + memcpy(&tmpp[xx],memoryband[i],bandsize[i]); + xx=bandsize[i]; + free(memoryband[i]); + } + memcpy(buff,tmpp,SSize); + free(tmpp); + goto lpp123; + printf("**********Special*******************************ZipSerFileNum = %d",ZipSerFileNum); + } + } + else{ + int sidx = stringcmp((char*)buff,"<urn:ViqStringsList urn:version=",32); + if(sidx >=0){ + bMetadataSaving = 1; + bandCount = 0; + memoryband[bandCount] = (unsigned char*)malloc(length-sidx); + memcpy(memoryband[bandCount], &buff[sidx], length-sidx); + bandsize[bandCount] = length-sidx; + if(bandCount<99) bandCount++; + int eidx = stringcmp((char*)buff,"</urn:strings></urn:ViqStrings></urn:ViqStringsList>",52); + if(eidx >=0 && sidx<eidx){ + free(memoryband[0]); + bandCount = 0; + bMetadataSaving = 0; + buff[eidx]=0; + int ptr=0; + ////// analyze buffer +lpp123: sidx = stringcmp((char*)&buff[ptr],"http://changeit:80/media",24); + if(sidx >=0){//http://changeit:80/media/metadata/0/2016/8/25/1/2/s_5b4103706a6411e6855e574ec330e01d_20160825_013633_93003.zip + int zipidx =-1;zipidx = stringcmp((char*)&buff[ptr],".zip",4); + int seridx =-1;seridx = stringcmp((char*)&buff[ptr],".ser",4); + int kkk=-1; + if(zipidx>=0){ + if(seridx>=0){ + if(zipidx<seridx) kkk = zipidx; + else kkk = seridx; + } + else kkk = zipidx; + } + else{ + if(seridx>=0) kkk = seridx; + } + if(kkk>=0 && kkk>sidx+18) + { + //涓嬭浇metadata + char pathbuf[250] ; + strncpy(pathbuf,(char*)&buff[ptr+sidx+18],kkk-sidx-18+4); + pathbuf[kkk-sidx-18+4]=0; + int i; + for (i=0;i<ZipSerFileNum;i++) + { + if(strcmp(pathbuf,ZipSerFileName[i])==0) break; + } + if(i>=ZipSerFileNum){ + strcpy(ZipSerFileName[ZipSerFileNum],pathbuf); + if(ZipSerFileNum<1000-1) ZipSerFileNum++; + } + ptr=ptr+kkk+4; + goto lpp123; + } + } + } + } + } + }// while end + }//for + + //////// get + for(ZipCountidx = 0; ZipCountidx<ZipSerFileNum; ZipCountidx++) + { + if(stringcmp((char*)ZipSerFileName[ZipCountidx],".ser",4)>=0) 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){ + perror("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){ + printf("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 + 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(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 + system("unzip -o " ZIP_HOME "/tmp.zip -d " ZIP_HOME "/tmpZip"); + } + } + } + }//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(i=0;i<num;i++) + { + if(filename[i].name[0]=='.') continue; + memset(stringpath,0,1024); + 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,SearchStartTm,SearchEndTm); + } + memset(EventString,0,sizeof(EventString)); + //for(i=0;i<1000;i++) +#ifdef DBG_LOG + printf("EventCount===========================%d\n",EventCount); + 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," "); + strcat(EventString,myEventLogs[i].Time); + strcat(EventString,"\",\"path\":\""); + strcat(EventString,myEventLogs[i].clipUrl); + 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"; +} +//// 鍔熻兘锛氶噸鍚垎鏋愬櫒锛堝崗璁級 +//// 杈撳叆锛氬垎鏋愬櫒IP,鐢ㄦ埛锛屽瘑鐮� +//// 杈撳嚭锛�0锛堟垚鍔燂級, -1(鍒濆鍖栧け璐�),-2(杩炴帴澶辫触) +int RestartCommand(char* AnalyserIP,char* user,char* pass) +{ + 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,"PUT /PSIA/System/reboot 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) + { + break; + } + if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0) + { + // 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) return -1; +// zclock_sleep(200); + 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; + } + 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) +{ + char byte_arrayxxx[1600]; + int lengthxxx = 0; + memset(byte_array,0,1600); + + 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) +{ + memset(byte_array,0,1600); + + 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,"<urn:ViqDateTimeInterval urn:version="); + byte_array_out[idx++]=0x22;//'"' + byte_array_out[idx++]=0x31;//'1' + byte_array_out[idx++]=0x2e;//'.' + byte_array_out[idx++]=0x30;//'0' + byte_array_out[idx++]=0x22;//'"' + len = sprintf(&byte_array_out[idx]," xmlns:urn=");idx+=len; + byte_array_out[idx++]=0x22;//'"' + len = sprintf(&byte_array_out[idx],"urn:videoiq-com");idx+=len; + byte_array_out[idx++]=0x22;//'"' + len = sprintf(&byte_array_out[idx],"><urn:startTime urn:version=");idx+=len; + byte_array_out[idx++]=0x22;//'"' + byte_array_out[idx++]=0x31;//'1' + byte_array_out[idx++]=0x2e;//'.' + byte_array_out[idx++]=0x30;//'0' + byte_array_out[idx++]=0x22;//'"' + len = sprintf(&byte_array_out[idx],"><urn:date>%s</urn:date><urn:offset>0</urn:offset></urn:startTime><urn:endTime urn:version=",StartTim);idx+=len; + byte_array_out[idx++]=0x22;//'"' + byte_array_out[idx++]=0x31;//'1' + byte_array_out[idx++]=0x2e;//'.' + byte_array_out[idx++]=0x30;//'0' + byte_array_out[idx++]=0x22;//'"' + len = sprintf(&byte_array_out[idx],"><urn:date>%s</urn:date><urn:offset>0</urn:offset></urn:endTime></urn:ViqDateTimeInterval>",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(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){ + 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<EventCount;i++) + { + int j,llen = strlen(myEventLogs[i].DebugMessageS); + for (j=0;j<llen;j++) + { + if(myEventLogs[i].DebugMessageS[j] != tmpdeg[j]) break; + } + if(j>=llen) break; + } + if(i<EventCount)// Started message Matched OK + { + sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "activity",8); + if(sidx>=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<200-1){///repair //#todo 12.7 + sprintf(myEventLogs[EventCount].Camera,"%d",RequestChannel+1); + int i; + for (i=0;i<EventCount;i++) + { + if(strcmp(myEventLogs[i].clipUrl,myEventLogs[EventCount].clipUrl)==0) break; + } + if(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;i++) if(src[i]==token[0]) break; + if (i>=slen) return -1; + k=i; + for(i=0;i<klen;i++) + { + if(src[k+i]!=token[i]) + { + start=k+i; + goto lp1; + } + } + if(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;i++) if(src[i]==token[0]) break; + if (i>=slen) return -1; + k=i; + for(i=0;i<len;i++) + { + if(src[k+i]!=token[i]) + { + start=k+i; + goto lp; + } + } + if(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" + + <urn:ViqEventNotificationAlert urn:version="1.0" xmlns:urn="urn:videoiq-com"> + <urn:channelId>3</urn:channelId> + <urn:eventId>6478</urn:eventId> + <urn:startTime urn:version="1.0"> + <urn:date>2016-11-07T08:50:54.063</urn:date><urn:offset>28800000</urn:offset> + </urn:startTime> + <urn:clipUrl>/media/clips/3/2016/11/7/8/3/2016_11_07-08_50_48.mp4</urn:clipUrl> + <urn:ruleId>17</urn:ruleId> + <urn:ruleName>Video Lost Rule</urn:ruleName> + <urn:soiId>-1</urn:soiId> + <urn:soiName>Reserved SOI</urn:soiName> + <urn:activity>Video Lost</urn:activity> + <urn:objectType>Unknown</urn:objectType> + <urn:aborted>false</urn:aborted> + <urn:acknowledged>false</urn:acknowledged> + <urn:ackNotes xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><urn:falseAlarm>false</urn:falseAlarm> + <urn:debugMessage>2016/11/07 08:50:54.63: Video lost detected: 101. Event (id=6478) started.</urn:debugMessage> + </urn:ViqEventNotificationAlert> + */ + +int AnalyXMLUrnEVENT(char* buff,int length,AlarmInfo* RealAlarmEvent) +{ + int sidx,eidx; + sidx = stringcmp((char*)buff,"<urn:channelId>",15); + eidx = stringcmp((char*)buff,"</urn:channelId>",16); + if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->channelId,&buff[sidx+15],eidx-sidx-15); + sidx = stringcmp((char*)buff,"<urn:eventId>",13); + eidx = stringcmp((char*)buff,"</urn:eventId>",14); + if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->eventId,&buff[sidx+13],eidx-sidx-13); + + sidx = stringcmp((char*)buff,"<urn:startTime",14); + eidx = stringcmp((char*)buff,"</urn:startTime",15); + char tmp[200]; + memset(tmp,0,200); + if(sidx>=0 && eidx>=0 && sidx < eidx){ + memcpy(tmp,&buff[sidx+15],eidx-sidx-14); + sidx=stringcmp((char*)tmp,"<urn:date>",10); + eidx = stringcmp((char*)tmp,"</urn:date>",11); + if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->startTime,&tmp[sidx+10],eidx-sidx-10); + sidx=stringcmp((char*)tmp,"<urn:offset>",12); + eidx = stringcmp((char*)tmp,"</urn:offset>",13); + if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->soffset,&tmp[sidx+12],eidx-sidx-12); + } + sidx = stringcmp((char*)buff,"<urn:endTime",12); + if(sidx>=0){ + int ssidx=stringcmp((char*)buff,"<urn:date>",10); + eidx = stringcmp((char*)buff,"</urn:date>",11); + if(ssidx>=0 && eidx>=0 && ssidx < eidx) memcpy(RealAlarmEvent->endTime,&buff[ssidx+10],eidx-ssidx-10); + } + sidx = stringcmp((char*)buff,"<urn:clipUrl>",13); + eidx = stringcmp((char*)buff,"</urn:clipUrl>",14); + if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->clipUrl,&buff[sidx+13],eidx-sidx-13); + sidx = stringcmp((char*)buff,"<urn:ruleId>",12); + eidx = stringcmp((char*)buff,"</urn:ruleId>",13); + if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->ruleId,&buff[sidx+12],eidx-sidx-12); + sidx = stringcmp((char*)buff,"<urn:ruleName>",14); + eidx = stringcmp((char*)buff,"</urn:ruleName>",15); + if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->ruleName,&buff[sidx+14],eidx-sidx-14); + sidx = stringcmp((char*)buff,"<urn:soiId>",11); + eidx = stringcmp((char*)buff,"</urn:soiId>",12); + if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->soiId,&buff[sidx+11],eidx-sidx-11); + sidx = stringcmp((char*)buff,"<urn:soiName>",13); + eidx = stringcmp((char*)buff,"</urn:soiName>",14); + if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->soiName,&buff[sidx+13],eidx-sidx-13); + sidx = stringcmp((char*)buff,"<urn:activity>",14); + eidx = stringcmp((char*)buff,"</urn:activity>",15); + if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->activity,&buff[sidx+14],eidx-sidx-14); + sidx = stringcmp((char*)buff,"<urn:objectType>",16); + eidx = stringcmp((char*)buff,"</urn:objectType>",17); + if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->objectType,&buff[sidx+16],eidx-sidx-16); + sidx = stringcmp((char*)buff,"<urn:aborted>",13); + eidx = stringcmp((char*)buff,"</urn:aborted>",14); + if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->aborted,&buff[sidx+13],eidx-sidx-13); + sidx = stringcmp((char*)buff,"<urn:acknowledged>",18); + eidx = stringcmp((char*)buff,"</urn:acknowledged>",19); + if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->acknowledged,&buff[sidx+18],eidx-sidx-18); + sidx = stringcmp((char*)buff,"<urn:debugMessage>",18); + eidx = stringcmp((char*)buff,"</urn:debugMessage>",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杩斿洖鏂囦欢鐨勪俊鎭紝鏂囦欢淇℃伅瀛樻斁鍦╯tat缁撴瀯涓� + { + 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); + system(cmd); +} +void delete_folder(const char *path) +{ + char cmd[30]; + memset(cmd,0,30); + sprintf(cmd,"rm -r %s",path); + system(cmd); +} +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; +} + + + + -- Gitblit v1.8.0