| | |
| | | /*
|
| | | * 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 参数:无。返回:当前的ip地址子网掩码和网关
|
| | | {
|
| | | memset(NetInfo,0,128);
|
| | | /// function
|
| | | return NetInfo;
|
| | | }
|
| | |
|
| | | int SetAnalyserNet(char* NetInfo) //6.手动设置转发器的ip 参数:ip,子网掩码,默认网关 。 返回:修改状态(成功或者失败)
|
| | | {
|
| | | 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返回文件的信息,文件信息存放在stat结构中
|
| | | {
|
| | | return S_ISDIR(statbuf.st_mode) != 0;//S_ISDIR宏,判断文件类型是否为目录
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | //判断是否为常规文件
|
| | | bool is_file(const char *path)
|
| | | {
|
| | | struct stat statbuf;
|
| | | if(lstat(path, &statbuf) ==0)
|
| | | return S_ISREG(statbuf.st_mode) != 0;//判断文件是否为常规文件
|
| | | return false;
|
| | | }
|
| | | //判断是否是特殊目录
|
| | | bool is_special_dir(const char *path)
|
| | | {
|
| | | return strcmp(path, ".") == 0 || strcmp(path, "..") == 0;
|
| | | }
|
| | |
|
| | | //生成完整的文件路径
|
| | | void get_file_path(const char *path, const char *file_name, char *file_path)
|
| | | {
|
| | | strcpy(file_path, path);
|
| | | if(file_path[strlen(path) - 1] != '/')
|
| | | strcat(file_path, "/");
|
| | | strcat(file_path, file_name);
|
| | | }
|
| | |
|
| | | void delete_file(const char *path)
|
| | | {
|
| | | char cmd[30];
|
| | | memset(cmd,0,30);
|
| | | sprintf(cmd,"rm -f %s",path);
|
| | | 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" |
| | | #include <syslog.h> |
| | | |
| | | |
| | | #include <libxml/parser.h> |
| | | #include <libxml/tree.h> |
| | | #include <libxml/xpath.h> |
| | | #include <libxml/xpathInternals.h> |
| | | |
| | | int RequestChannel; |
| | | char* gAnalyzerIP; |
| | | char* gUser; |
| | | char* gPass; |
| | | int GSocket; |
| | | int gMySock[16]; |
| | | int threadIdx=0; |
| | | char byte_array[2600]; |
| | | int gGettingStep=0; |
| | | char uri[300]; |
| | | time_t StartTm,EndTm; |
| | | int bMetadataSaving=0; |
| | | int bZipFileSaving=0; |
| | | unsigned char *memoryband[100]; |
| | | int bandsize[100]; |
| | | int bandCount = 0; |
| | | char ZipSerFileName[1000][300]; |
| | | int ZipSerFileNum=0; |
| | | int ZipCountidx; |
| | | char NetInfo[128]; |
| | | char EventString[1 * 1024 * 1024]; |
| | | EVENT_LOG myEventLogs[2000]; |
| | | int EventCount=0; |
| | | int EventCountInSearchRange=0; |
| | | |
| | | int FindIdx(char* IP); |
| | | int FindEmpty(); |
| | | void* MyEquipmentthread(void* arg); |
| | | pthread_t thread_noEQ[16]; |
| | | int gCapturing[16]; |
| | | SESSION sessions[16]; |
| | | #define MAX_NUM 16 |
| | | #define MAX 1024 |
| | | #define fileread_buf 128 |
| | | AlarmInfo RealAlarmEvent[16][1000]; |
| | | |
| | | //#define DBG_LOG |
| | | #define ZIP_HOME "/tmp" |
| | | |
| | | ///////////////////////////////////////////////// |
| | | char* strnncat(char*s1,char*s2,int n) |
| | | { |
| | | int len = strlen(s1); |
| | | |
| | | for(int i=0;i<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) |
| | | { |
| | | char buff[102400]; |
| | | memset(EventString,0,sizeof(EventString)); |
| | | gAnalyzerIP = AnalyserIP; |
| | | |
| | | if(AnalyserIP==NULL || AnalyserIP[0]==0) return "Param Error"; |
| | | |
| | | struct sockaddr_in servaddr; |
| | | int strlen1=sizeof(servaddr); |
| | | if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){ |
| | | return "socket fail2"; |
| | | } |
| | | memset(&servaddr,0,strlen1); |
| | | servaddr.sin_family=AF_INET; |
| | | inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr); |
| | | servaddr.sin_port=htons(80); |
| | | |
| | | if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){ |
| | | close(GSocket); |
| | | return "Equipment connect fail"; |
| | | } |
| | | int length = 0;//GET /PSIA/System/deviceInfo HTTP/1.1 |
| | | |
| | | length = sprintf(byte_array,"GET /PSIA/System/deviceInfo HTTP/1.1\r\nContent-Type: text/xml\r\nHost: %s\r\nContent-Length: 0\r\nConnection: Keep-Alive\r\n\r\n",AnalyserIP); |
| | | write(GSocket,byte_array,length); |
| | | // printf("%s",byte_array); |
| | | memset(EventString,0,sizeof(EventString)); |
| | | while(1){ |
| | | memset(buff,0,sizeof(buff)); |
| | | length=read(GSocket,&buff,sizeof(buff)); |
| | | if(length<=0) |
| | | { |
| | | close(GSocket); |
| | | break; |
| | | } |
| | | if(stringcmp((char*)buff,"<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.删除设备 参数:设备ip 返回:成功或失败的提示。 |
| | | { |
| | | int ret=0; |
| | | MYSQL *conn; |
| | | char *server="localhost"; |
| | | char *user="root"; |
| | | char *password="123"; |
| | | char *database="opentutorials"; |
| | | char query[255]; |
| | | if(!(conn=mysql_init((MYSQL*)NULL))){ |
| | | printf("init fail\n"); |
| | | return -1; |
| | | } |
| | | if(!mysql_real_connect(conn,server,user,password,NULL,3306,NULL,0)){ |
| | | printf("connect error.\n"); |
| | | return -1; |
| | | } |
| | | if(mysql_select_db(conn,database)!=0){ |
| | | mysql_close(conn); |
| | | printf("select_db_fail.\n"); |
| | | return -1; |
| | | } |
| | | sprintf(query, "delete from tbl_deviceinfo where equipmentip='%s';",AnalyserIP); |
| | | if(mysql_query(conn,query)){ |
| | | printf("query fail\n"); |
| | | return -1; |
| | | } |
| | | mysql_close(conn); |
| | | return ret; |
| | | |
| | | } |
| | | char* GetAnalyserAll() //9.鏌ヨ璁惧 鍙傛暟锛氭棤 杩斿洖锛氬垎鏋愬櫒鐨勫悕绉板拰ip |
| | | { |
| | | memset(EventString,0,sizeof(EventString)); |
| | | int ret = Read_MysqlData(); |
| | | if(ret==0) return EventString; |
| | | else return "fail"; |
| | | } |
| | | char* GetAnalyserNet(void) //5.鑾峰彇褰撳墠杞彂鍣ㄧ殑ip 鍙傛暟锛氭棤銆傝繑鍥烇細褰撳墠鐨刬p鍦板潃瀛愮綉鎺╃爜鍜岀綉鍏? |
| | | { |
| | | memset(NetInfo,0,128); |
| | | /// function |
| | | return NetInfo; |
| | | } |
| | | |
| | | int SetAnalyserNet(char* NetInfo) //6.鎵嬪姩璁剧疆杞彂鍣ㄧ殑ip 鍙傛暟锛歩p锛屽瓙缃戞帺鐮侊紝榛樿缃戝叧 銆?杩斿洖锛氫慨鏀圭姸鎬?鎴愬姛鎴栬€呭け璐? |
| | | { |
| | | int ret=0; |
| | | /// function |
| | | return ret; |
| | | } |
| | | //// 功能:查看分析器连接状态 |
| | | //// 输入:分析器IP |
| | | //// 输出:0(成功), -1(初始化失败),-2(连接失败) |
| | | int GetConnectState(char* AnalyserIP) |
| | | { |
| | | return net_test(AnalyserIP,"80"); |
| | | } |
| | | //// 功能:重启分析器 |
| | | //// 输入:分析器IP,用户,密码,RestartKind=0(GPIO out),RestartKind=1(Protocol Mode), no(GPIO Pin no=>0~15) |
| | | //// 输出:0(成功), -1(初始化失败),-2(连接失败) |
| | | int RestartAnalyser(char* AnalyserIP,char* user,char* pass,int RestartKind,int no) |
| | | { |
| | | switch(RestartKind){ |
| | | case 0: |
| | | if(no<0 || no>15) return -1; |
| | | GPIOinit(); |
| | | GPIOoutput(no); |
| | | printf("GPIO output no=%d",no); |
| | | return 0; |
| | | case 1: |
| | | return RestartCommand(AnalyserIP,user,pass); |
| | | default: |
| | | return -1; |
| | | } |
| | | return 0; |
| | | } |
| | | //// 功能:开始查看实时监控 |
| | | //// 输入:分析器IP,用户,密码 |
| | | //// 输出:0(成功), -1(初始化失败),-2(连接失败) |
| | | int RealEventStart(char* AnalyserIP,char* user,char* pass) |
| | | { |
| | | char buff[10240]; |
| | | |
| | | gAnalyzerIP = AnalyserIP; |
| | | gUser = user; |
| | | gPass = pass; |
| | | int bbbb=0; |
| | | |
| | | if(AnalyserIP==NULL || AnalyserIP[0]==0) return -1; |
| | | |
| | | struct sockaddr_in servaddr; |
| | | int strlen1=sizeof(servaddr); |
| | | if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){ |
| | | perror("socket fail2"); |
| | | return -1; |
| | | } |
| | | memset(&servaddr,0,strlen1); |
| | | servaddr.sin_family=AF_INET; |
| | | inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr); |
| | | servaddr.sin_port=htons(80); |
| | | |
| | | if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){ |
| | | printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80); |
| | | close(GSocket); |
| | | return -2; |
| | | } |
| | | int length = 0; |
| | | length = sprintf(byte_array,"POST /PSIA/VIQ/System/sessions/permanent HTTP/1.1\r\nContent-Type: text/xml\r\nHost: %s\r\nContent-Length: 0\r\nConnection: Keep-Alive\r\n\r\n",AnalyserIP); |
| | | write(GSocket,byte_array,length); |
| | | // printf("%s",byte_array); |
| | | while(1){ |
| | | memset(buff,0,sizeof(buff)); |
| | | length=read(GSocket,&buff,sizeof(buff)); |
| | | if(length<=0) |
| | | { |
| | | close(GSocket); |
| | | break; |
| | | } |
| | | if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0 && bbbb==0) |
| | | { |
| | | // analyse reception |
| | | MakeAuthorizedPacketReal(buff,length,"POST","/PSIA/VIQ/System/sessions/permanent"); |
| | | zclock_sleep(100); |
| | | write(GSocket,byte_array,strlen(byte_array)); |
| | | // printf("%s\n",(char*)byte_array); |
| | | bbbb=1; |
| | | continue; |
| | | } |
| | | if(bbbb==1){ |
| | | int sidx = stringcmp((char*)buff,"<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; |
| | | char buff[10240]; |
| | | |
| | | puts("Step.2 ========>Equipment Thread is strarted......"); |
| | | |
| | | while(gCapturing[eidx]==1) |
| | | { |
| | | length=read(gMySock[eidx],&buff,sizeof(buff)-1); |
| | | if(length<=0) |
| | | { |
| | | printf("\n \\\\\\ Read error \n"); |
| | | break; |
| | | } |
| | | else if(length>0){ |
| | | if(memorycmp((unsigned char*)buff,length, "ViqEventNotificationAlert",25)>0 ) |
| | | { |
| | | if(RealAlarmEventNum[eidx]<1000-1) { |
| | | memset(&RealAlarmEvent[eidx][RealAlarmEventNum[eidx]],0,sizeof(AlarmInfo)); |
| | | AnalyXMLUrnEVENT(buff,length,&RealAlarmEvent[eidx][RealAlarmEventNum[eidx]++]); |
| | | } |
| | | // printf("%s=============================%d\n",(char*)buff,RealAlarmEventNum[eidx]); |
| | | // printf("%s\n",RealAlarmEvent[eidx][1].channelId); |
| | | continue; |
| | | } |
| | | } |
| | | } |
| | | close(gMySock[eidx]); |
| | | puts("Equipment Thread is stoped.."); |
| | | pthread_exit((void*)thread_noEQ[eidx]); |
| | | } |
| | | /* |
| | | --VIQeventEVENTeventVIQ |
| | | Content-type: application/xml; charset="UTF-8" |
| | | |
| | | <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,sizeof(EventString)); |
| | | 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) |
| | | { |
| | | openlog("proxyserver", LOG_CONS | LOG_PID, 0); |
| | | |
| | | 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}; |
| | | char buff[102400]; |
| | | |
| | | 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"; |
| | | } |
| | | |
| | | |
| | | void DownloadSerFile(const char* uri) |
| | | { |
| | | return; |
| | | char buff[1024]; |
| | | sprintf(buff, "cd " ZIP_HOME "/tmpZip/;" " curl -u supervisor:supervisor 'http://%s%s' -O" , gAnalyzerIP, uri); |
| | | int ret = system(buff); |
| | | printf("DownloadSerFile, ret=%d, %s\n", ret, buff); |
| | | |
| | | } |
| | | |
| | | |
| | | //// 查询报警记录 |
| | | //// 输入:分析器IP,开始时间,结束时间,信道号,用户,密码 |
| | | //// 输出:查询结果。(包括信道号,报警时间,播放地址,等。) |
| | | char* GetSearchMetaInfo(char* AnalyserIP,char* user,char* pass,int Channel,lpMyTime StartTm,lpMyTime EndTm) |
| | | { |
| | | char buff[102400]; |
| | | //reset |
| | | memset(ZipSerFileName, 0, sizeof(ZipSerFileName)); |
| | | ZipSerFileNum=0; |
| | | ZipCountidx; |
| | | EventCount = 0; |
| | | EventCountInSearchRange = 0; |
| | | RequestChannel = -1; |
| | | memset(myEventLogs, 0, sizeof(myEventLogs)); |
| | | memset(EventString, 0, sizeof(EventString)); |
| | | memset(byte_array, 0, sizeof(byte_array)); |
| | | |
| | | RequestChannel = Channel; |
| | | gAnalyzerIP = AnalyserIP; |
| | | gUser = user; |
| | | gPass = pass; |
| | | bMetadataSaving = 0; |
| | | if(AnalyserIP==NULL || AnalyserIP[0]==0) return "-1"; |
| | | // if(gGettingStep>0) return -2; |
| | | |
| | | //chmod(ZIP_HOME,0777); |
| | | //delete_file(ZIP_HOME "/tmp.zip"); |
| | | //delete_file(ZIP_HOME "/tmpZip/*"); |
| | | |
| | | struct tm ttm; |
| | | time_t StepTm; |
| | | int length; |
| | | char* httpUri; |
| | | char sss[24],eee[24]; |
| | | chmod(ZIP_HOME,0777); |
| | | const char* folderr; |
| | | const char* filename1; |
| | | folderr=ZIP_HOME "/tmpZip"; |
| | | filename1=ZIP_HOME "/tmp.zip"; |
| | | struct stat sb; |
| | | //if(stat(folderr,&sb)==0 && S_ISDIR(sb.st_mode)) |
| | | // { |
| | | delete_folder(ZIP_HOME "/tmpZip"); |
| | | // } |
| | | //if (doesFileExist(filename1)) |
| | | // { |
| | | delete_file(ZIP_HOME "/tmp.zip"); |
| | | // } |
| | | if(RequestChannel==0) httpUri= "/PSIA/VIQ/Event/metadata/0/files"; |
| | | if(RequestChannel==1) httpUri= "/PSIA/VIQ/Event/metadata/1/files"; |
| | | if(RequestChannel==2) httpUri= "/PSIA/VIQ/Event/metadata/2/files"; |
| | | if(RequestChannel==3) httpUri= "/PSIA/VIQ/Event/metadata/3/files"; |
| | | |
| | | ttm.tm_year=StartTm->Year - 1900; |
| | | ttm.tm_mon=StartTm->Month - 1; |
| | | ttm.tm_mday=StartTm->Day; |
| | | ttm.tm_hour=StartTm->Hour; |
| | | ttm.tm_min=StartTm->Min; |
| | | ttm.tm_sec=StartTm->Sec; |
| | | time_t SearchStartTm = mktime(&ttm); |
| | | SearchStartTm -= 8 * 60 * 60; |
| | | |
| | | ttm.tm_year=EndTm->Year - 1900; |
| | | ttm.tm_mon=EndTm->Month - 1; |
| | | ttm.tm_mday=EndTm->Day; |
| | | ttm.tm_hour=EndTm->Hour; |
| | | ttm.tm_min=EndTm->Min; |
| | | ttm.tm_sec=EndTm->Sec; |
| | | time_t SearchEndTm = mktime(&ttm); |
| | | SearchEndTm -= 8 * 60 * 60; |
| | | |
| | | #ifdef DBG_LOG |
| | | syslog(LOG_USER | LOG_INFO, "SearchStartTm=%d,SearchEndTm=%d\n",(int)SearchStartTm,(int)SearchEndTm); |
| | | #endif |
| | | |
| | | //for (StepTm=SearchEndTm; StepTm>SearchStartTm; StepTm-=1*3600) |
| | | { |
| | | zclock_sleep(200); |
| | | // printf(" ==== Search loop function execution =================%d,%d \n",(int)StepTm,(int)SearchStartTm); |
| | | struct sockaddr_in servaddr; |
| | | int strlen1=sizeof(servaddr); |
| | | if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){ |
| | | syslog(LOG_USER | LOG_INFO, "socket fail2"); |
| | | return "-3"; |
| | | } |
| | | memset(&servaddr,0,strlen1); |
| | | servaddr.sin_family=AF_INET; |
| | | inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr); |
| | | servaddr.sin_port=htons(80); |
| | | |
| | | if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){ |
| | | syslog(LOG_USER | LOG_INFO, "Equipment connect fail-%s:%d\n",gAnalyzerIP,80); |
| | | close(GSocket); |
| | | return "-4"; |
| | | } |
| | | time_t ttt=SearchStartTm; |
| | | struct tm *t; |
| | | //ttt-=4*60*60; |
| | | t = localtime(&ttt); |
| | | sprintf(sss,"%d-%02d-%02dT%02d:%02d:%02d.000",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);// = "2016-08-26T07:31:00.000"; |
| | | sss[23]=0; |
| | | |
| | | ttt=SearchEndTm; |
| | | //ttt+=4*60*60; |
| | | t = localtime(&ttt); |
| | | sprintf(eee,"%d-%02d-%02dT%02d:%02d:%02d.000",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);// = "2016-08-26T07:31:00.000"; |
| | | eee[23]=0; |
| | | #ifdef DBG_LOG |
| | | syslog(LOG_USER | LOG_INFO, "SearchStartTm=%s, SearchEndTm=%s\n", sss, eee); |
| | | #endif |
| | | RequestMetaFiles(gAnalyzerIP,httpUri,sss,eee); |
| | | write(GSocket,byte_array,strlen(byte_array)); |
| | | |
| | | |
| | | //#test |
| | | { |
| | | length=read(GSocket,&buff,sizeof(buff)); |
| | | |
| | | //#test |
| | | //{ |
| | | // FILE * pFile = fopen ("pro.txt","rb"); |
| | | // length = fread ( buff, 1, sizeof(buff), pFile ); |
| | | // fclose(pFile); |
| | | // bMetadataSaving = 0; |
| | | //} |
| | | |
| | | if(length<=0) |
| | | { |
| | | close(GSocket); |
| | | syslog(LOG_USER | LOG_INFO, "length<=0"); |
| | | } |
| | | if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0) |
| | | { |
| | | // analyse reception |
| | | MakeAuthorizedPacketSimp111(buff,length,"GET",httpUri,sss,eee); |
| | | write(GSocket,byte_array,strlen(byte_array)); |
| | | } |
| | | |
| | | //FILE * pFile = fopen ("pro.txt","rb"); |
| | | //length = fread ( buff, 1, sizeof(buff), pFile ); |
| | | |
| | | xmlParserCtxtPtr ctxt; |
| | | char chars[5000]; |
| | | xmlDocPtr doc; /* the resulting document tree */ |
| | | int res,totalres=0; |
| | | |
| | | char* pBuff = buff; |
| | | while ((res = read(GSocket,chars,sizeof(chars))) > 0) |
| | | { |
| | | memcpy(pBuff, chars, res); |
| | | pBuff+=res; |
| | | totalres+=res; |
| | | } |
| | | *pBuff='\0'; |
| | | |
| | | |
| | | //res = fread ( chars, 1, sizeof(chars), pFile ); |
| | | char* urnbegin=strstr(buff, "<urn:"); |
| | | |
| | | //ctxt = xmlCreatePushParserCtxt(NULL, NULL, urnbegin, totalres-(urnbegin-buff), NULL); |
| | | //if (ctxt == NULL) { |
| | | // fprintf(stderr, "Failed to create parser context !\n"); |
| | | //} |
| | | // |
| | | //xmlParseChunk(ctxt, urnbegin, totalres-(urnbegin-buff), 1); |
| | | |
| | | //while ((res = fread ( chars, 1, sizeof(chars), pFile )) > 0) { // fread(chars, 4) |
| | | //while ((res = read(GSocket,chars,sizeof(chars))) > 0) { |
| | | // xmlParseChunk(ctxt, chars, res, 0); |
| | | //} |
| | | |
| | | //doc = ctxt->myDoc; |
| | | doc = xmlParseDoc(urnbegin); |
| | | //res = ctxt->wellFormed; |
| | | //xmlFreeParserCtxt(ctxt); |
| | | |
| | | //if (!res) { |
| | | // fprintf(stderr, "Failed to parse %s\n", "pro.txt"); |
| | | //} |
| | | |
| | | /* Create xpath evaluation context */ |
| | | xmlXPathContextPtr xpathCtx = xmlXPathNewContext(doc); |
| | | if(xpathCtx == NULL) { |
| | | fprintf(stderr,"Error: unable to create new XPath context\n"); |
| | | xmlFreeDoc(doc); |
| | | return(-1); |
| | | } |
| | | |
| | | //xmlNode * root_element = xmlDocGetRootElement(doc); |
| | | //{ |
| | | // xmlNode *cur_node = NULL; |
| | | // |
| | | // for (cur_node = root_element; cur_node; cur_node = cur_node->next) { |
| | | // if (cur_node->type == XML_ELEMENT_NODE) { |
| | | // syslog(LOG_USER | LOG_INFO, "node type: Element, name: %s %s\n", cur_node->ns->prefix,cur_node->ns->href ); |
| | | // } |
| | | // } |
| | | //} |
| | | |
| | | if(xmlXPathRegisterNs(xpathCtx, "urn", "urn:videoiq-com") != 0) { |
| | | fprintf(stderr,"Error: unable to register NS with prefix=\"\" and href=\"\"\n"); |
| | | return(-1); |
| | | } |
| | | |
| | | xmlXPathObjectPtr xpathObj = xmlXPathEvalExpression("//urn:strings", xpathCtx); |
| | | if(xpathObj == NULL) { |
| | | fprintf(stderr,"Error: unable to evaluate xpath expression \"%s\"\n", "urn:strings"); |
| | | xmlXPathFreeContext(xpathCtx); |
| | | xmlFreeDoc(doc); |
| | | return(-1); |
| | | } |
| | | |
| | | ZipSerFileNum=0; |
| | | xmlNodeSetPtr nodes = xpathObj->nodesetval; |
| | | for(int i = 0; i<nodes->nodeNr; i++) |
| | | { |
| | | const char* uri=xmlNodeGetContent(nodes->nodeTab[i]); |
| | | strcpy(ZipSerFileName[ZipSerFileNum], uri+18); |
| | | ZipSerFileNum++; |
| | | syslog(LOG_USER | LOG_INFO, "%s\n", uri+18); |
| | | } |
| | | |
| | | syslog(LOG_USER | LOG_INFO, "ser parse finished\n"); |
| | | |
| | | |
| | | xmlFreeDoc(doc); |
| | | |
| | | |
| | | //fclose(pFile); |
| | | close(GSocket); |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | }//for |
| | | |
| | | //////// get |
| | | syslog(LOG_USER | LOG_INFO, "ZipSerFileNum=%d\n", ZipSerFileNum); |
| | | |
| | | for(ZipCountidx = 0; ZipCountidx<ZipSerFileNum; ZipCountidx++) |
| | | { |
| | | syslog(LOG_USER | LOG_INFO, "ZipSerFileName[%d]=%s\n", ZipCountidx, (char*)ZipSerFileName[ZipCountidx]); |
| | | |
| | | if(stringcmp((char*)ZipSerFileName[ZipCountidx],".ser",4)>=0) |
| | | { |
| | | DownloadSerFile(ZipSerFileName[ZipCountidx]); |
| | | continue; |
| | | } |
| | | |
| | | zclock_sleep(200); |
| | | // printf(" ==== Search loop function execution =================%d,%d \n",(int)StepTm,(int)SearchStartTm); |
| | | struct sockaddr_in servaddr; |
| | | int strlen1=sizeof(servaddr); |
| | | if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){ |
| | | syslog(LOG_USER | LOG_INFO, "socket fail2"); |
| | | return "-3"; |
| | | } |
| | | memset(&servaddr,0,strlen1); |
| | | servaddr.sin_family=AF_INET; |
| | | inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr); |
| | | servaddr.sin_port=htons(80); |
| | | |
| | | if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){ |
| | | syslog(LOG_USER | LOG_INFO, "Equipment connect fail-%s:%d\n",gAnalyzerIP,80); |
| | | close(GSocket); |
| | | return "-4"; |
| | | } |
| | | |
| | | httpUri = ZipSerFileName[ZipCountidx];//"/media/metadata/0/2016/8/25/1/2/s_5b4103706a6411e6855e574ec330e01d_20160825_013633_93003.zip"; |
| | | RequestZipSerFiles(gAnalyzerIP, httpUri); |
| | | write(GSocket,byte_array,strlen(byte_array)); |
| | | // printf("==========================================================================================================================>>>>>>>>\n"); |
| | | // printf("%s",byte_array); |
| | | while(1){ |
| | | length=read(GSocket,&buff,sizeof(buff)-1); |
| | | if(length<=0) |
| | | { |
| | | close(GSocket); |
| | | break; |
| | | } |
| | | if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0) |
| | | { |
| | | // analyse reception |
| | | MakeAuthorizedPacketSimp(buff,length,"GET",httpUri); |
| | | write(GSocket,byte_array,strlen(byte_array)); |
| | | // printf("%s",byte_array); |
| | | continue; |
| | | } |
| | | if(memorycmp((unsigned char*)buff,length, "Error 404 NOT_FOUND",19)>0) |
| | | { |
| | | break; |
| | | } |
| | | |
| | | if(bZipFileSaving==1){ |
| | | //下载Zip filesave |
| | | int file; |
| | | if((file = open(ZIP_HOME "/tmp.zip", O_RDWR, S_IREAD|S_IWRITE)) <0) |
| | | printf("open file fail!\n"); |
| | | lseek(file,0,SEEK_END); |
| | | write(file,&buff[0], length);//CString m_data |
| | | close(file); |
| | | //mp4Save(_T("tmp.zip"),(unsigned char*)buffer, size,CFile::modeWrite| CFile::typeBinary); |
| | | char tmppattern[8]; tmppattern[0]='P';tmppattern[1]='K';tmppattern[2]=0x05;tmppattern[3]=0x06;tmppattern[4]=0x00;tmppattern[5]=0x00; |
| | | if(memorycmp((unsigned char*)&buff[0],length, tmppattern,8)>=0) { |
| | | bZipFileSaving = 0; |
| | | close(GSocket); |
| | | //Convert Zip file to Ser file |
| | | int ret=system("unzip -o " ZIP_HOME "/tmp.zip -d " ZIP_HOME "/tmpZip"); |
| | | #ifdef DBG_LOG |
| | | syslog(LOG_USER | LOG_INFO, "unzip1 ret=%d\n", ret); |
| | | #endif |
| | | } |
| | | } |
| | | else{ |
| | | int sidx = stringcmp((char*)buff,"PK",2); |
| | | if(sidx >=0){//下载Zip filesave |
| | | delete_file(ZIP_HOME "/tmp.zip"); |
| | | //delete_file(ZIP_HOME "/tmpZip/*"); |
| | | //下载Zip filesave |
| | | bZipFileSaving = 1; |
| | | int file; |
| | | if((file = open(ZIP_HOME "/tmp.zip",O_CREAT|O_RDWR,S_IREAD|S_IWRITE)) <0) |
| | | printf("open file fail!\n"); |
| | | write(file,&buff[sidx], length-sidx);//CString m_data |
| | | close(file); |
| | | |
| | | char tmppattern[8]; tmppattern[0]='P';tmppattern[1]='K';tmppattern[2]=0x05;tmppattern[3]=0x06;tmppattern[4]=0x00;tmppattern[5]=0x00; |
| | | if(memorycmp((unsigned char*)&buff[sidx],length-sidx, tmppattern,8)>=0) |
| | | { |
| | | bZipFileSaving = 0; |
| | | close(GSocket); |
| | | //Convert Zip file to Ser file |
| | | int ret=system("unzip -o " ZIP_HOME "/tmp.zip -d " ZIP_HOME "/tmpZip"); |
| | | #ifdef DBG_LOG |
| | | syslog(LOG_USER | LOG_INFO, "unzip0 ret=%d\n", ret); |
| | | #endif |
| | | } |
| | | } |
| | | } |
| | | }//while |
| | | }//for |
| | | int res=0,num=0; //得长度 |
| | | filenames filename[100]; |
| | | num = GetFileNameInFolder(ZIP_HOME "/tmpZip",filename); |
| | | char stringpath[1024]; |
| | | unsigned char p_save_buf[6144000]; |
| | | |
| | | for(int i=0;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 |
| | | syslog(LOG_USER | LOG_INFO, "EventCount===========================%d\n",EventCount); |
| | | syslog(LOG_USER | LOG_INFO, "EventCountInSearchRange==============%d\n",EventCountInSearchRange); |
| | | #endif |
| | | |
| | | strcat(EventString,"["); |
| | | |
| | | for (int 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,"]"); |
| | | |
| | | return EventString; |
| | | //return "333333333333333333333333333333333333333333333333333333333333333333789"; |
| | | } |
| | | //// 功能:重启分析器(协议) |
| | | //// 输入:分析器IP,用户,密码 |
| | | //// 输出:0(成功), -1(初始化失败),-2(连接失败) |
| | | int RestartCommand(char* AnalyserIP,char* user,char* pass) |
| | | { |
| | | char buff[10240]; |
| | | gAnalyzerIP = AnalyserIP; |
| | | gUser = user; |
| | | gPass = pass; |
| | | |
| | | int bbbb=0; |
| | | |
| | | if(AnalyserIP==NULL || AnalyserIP[0]==0) return -1; |
| | | |
| | | struct sockaddr_in servaddr; |
| | | int strlen1=sizeof(servaddr); |
| | | if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){ |
| | | syslog(LOG_USER | LOG_INFO, "socket fail2"); |
| | | return -1; |
| | | } |
| | | memset(&servaddr,0,strlen1); |
| | | servaddr.sin_family=AF_INET; |
| | | inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr); |
| | | servaddr.sin_port=htons(80); |
| | | |
| | | if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){ |
| | | syslog(LOG_USER | LOG_INFO, "Equipment connect fail-%s:%d\n",gAnalyzerIP,80); |
| | | close(GSocket); |
| | | return -2; |
| | | } |
| | | 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) |
| | | { |
| | | syslog(LOG_USER | LOG_INFO, "bbbb==0"); |
| | | return -1; |
| | | } |
| | | // zclock_sleep(200); |
| | | if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){ |
| | | syslog(LOG_USER | LOG_INFO, "socket fail2"); |
| | | return -1; |
| | | } |
| | | memset(&servaddr,0,strlen1); |
| | | servaddr.sin_family=AF_INET; |
| | | inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr); |
| | | servaddr.sin_port=htons(80); |
| | | |
| | | if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){ |
| | | syslog(LOG_USER | LOG_INFO, "Equipment connect fail-%s:%d\n",gAnalyzerIP,80); |
| | | close(GSocket); |
| | | return -2; |
| | | } |
| | | write(GSocket,byte_array,strlen(byte_array)); |
| | | while(1){ |
| | | memset(buff,0,sizeof(buff)); |
| | | length=read(GSocket,&buff,sizeof(buff)); |
| | | if(length<=0) |
| | | { |
| | | close(GSocket); |
| | | return -3; |
| | | } |
| | | if(memorycmp((unsigned char*)buff,length, "HTTP/1.1 200 OK",15)>0) break; |
| | | |
| | | } |
| | | close(GSocket); |
| | | return 0; |
| | | } |
| | | |
| | | void RequestMetaFiles(char* AnaylyIP,char* httpUri,char* Tm1,char* Tm2) |
| | | { |
| | | #ifdef DBG_LOG |
| | | syslog(LOG_USER | LOG_INFO, "RequestMetaFiles, httpUri=%s\n", httpUri); |
| | | #endif |
| | | |
| | | char byte_arrayxxx[1600]; |
| | | int lengthxxx = 0; |
| | | memset(byte_array,0,sizeof(byte_array)); |
| | | |
| | | UrnStringToBytes(byte_arrayxxx,&lengthxxx,Tm1,Tm2);// xml |
| | | int iidx =0,llen=0;; |
| | | llen = sprintf(byte_array,"GET %s %s",httpUri,"HTTP/1.1\r\n"); iidx+=llen; |
| | | llen = sprintf(&byte_array[iidx],"Content-Length: %d\r\n",lengthxxx); iidx+=llen; |
| | | llen = sprintf(&byte_array[iidx],"%s","Content-Type: text/xml\r\n"); iidx+=llen; |
| | | llen = sprintf(&byte_array[iidx],"Host: %s:%d\r\n",AnaylyIP,80); iidx+=llen; |
| | | llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n\r\n"); iidx+=llen; |
| | | strncpy(&byte_array[iidx],byte_arrayxxx,lengthxxx); iidx+=lengthxxx; |
| | | } |
| | | void RequestZipSerFiles(char* AnaylyIP,char* httpUri) |
| | | { |
| | | #ifdef DBG_LOG |
| | | syslog(LOG_USER | LOG_INFO, "RequestZipSerFiles, httpUri=%s\n", httpUri); |
| | | #endif |
| | | |
| | | memset(byte_array,0,sizeof(byte_array)); |
| | | |
| | | int iidx =0,llen=0;; |
| | | llen = sprintf(byte_array,"GET %s %s",httpUri,"HTTP/1.1\r\n"); iidx+=llen; |
| | | llen = sprintf(&byte_array[iidx],"User-Agent: Java/1.6.0_05\r\n"); iidx+=llen; |
| | | llen = sprintf(&byte_array[iidx],"Host: %s:%d\r\n",AnaylyIP,80); iidx+=llen; |
| | | llen = sprintf(&byte_array[iidx],"%s","Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n"); iidx+=llen; |
| | | llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n\r\n"); iidx+=llen; |
| | | } |
| | | void UrnStringToBytes(char* byte_array_out,int * byte_array_length_out,char* StartTim,char* EndTime) |
| | | { |
| | | int idx=0,len; |
| | | idx = sprintf(byte_array_out,"<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<2000-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返回文件的信息,文件信息存放在stat结构中 |
| | | { |
| | | return S_ISDIR(statbuf.st_mode) != 0;//S_ISDIR宏,判断文件类型是否为目录 |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //判断是否为常规文件 |
| | | bool is_file(const char *path) |
| | | { |
| | | struct stat statbuf; |
| | | if(lstat(path, &statbuf) ==0) |
| | | return S_ISREG(statbuf.st_mode) != 0;//判断文件是否为常规文件 |
| | | return false; |
| | | } |
| | | //判断是否是特殊目录 |
| | | bool is_special_dir(const char *path) |
| | | { |
| | | return strcmp(path, ".") == 0 || strcmp(path, "..") == 0; |
| | | } |
| | | |
| | | //生成完整的文件路径 |
| | | void get_file_path(const char *path, const char *file_name, char *file_path) |
| | | { |
| | | strcpy(file_path, path); |
| | | if(file_path[strlen(path) - 1] != '/') |
| | | strcat(file_path, "/"); |
| | | strcat(file_path, file_name); |
| | | } |
| | | |
| | | void delete_file(const char *path) |
| | | { |
| | | char cmd[30]; |
| | | memset(cmd,0,30); |
| | | sprintf(cmd,"rm -f %s",path); |
| | | int ret = system(cmd); |
| | | #ifdef DBG_LOG |
| | | syslog(LOG_USER | LOG_INFO, "delete_file, ret=%d, %s\n", ret, path); |
| | | #endif |
| | | } |
| | | void delete_folder(const char *path) |
| | | { |
| | | char cmd[30]; |
| | | memset(cmd,0,30); |
| | | sprintf(cmd,"rm -r %s",path); |
| | | int ret = system(cmd); |
| | | #ifdef DBG_LOG |
| | | syslog(LOG_USER | LOG_INFO, "delete_folder, ret=%d, %s\n", ret, path); |
| | | #endif |
| | | } |
| | | int doesFileExist(const char *filename) |
| | | { |
| | | struct stat st; |
| | | int result=stat(filename,&st); |
| | | if (result==0) |
| | | return 1; |
| | | else return 0; |
| | | } |
| | | int GetFileNameInFolder(char* dirname,lpfilenames lpfilename) |
| | | { |
| | | int num=0; |
| | | DIR *p_dir; |
| | | struct dirent *p_dirent; |
| | | if((p_dir = opendir(dirname)) == NULL){ |
| | | printf("---->can\'t open %s\n",dirname); |
| | | return 0; |
| | | } |
| | | while((p_dirent = readdir(p_dir))){ |
| | | strcpy(lpfilename[num].name ,p_dirent->d_name); |
| | | num++; |
| | | } |
| | | return num; |
| | | } |
| | | int net_test(char* serverIP,char* port) |
| | | { |
| | | struct sockaddr_in servaddr; |
| | | int strlen=sizeof(servaddr); |
| | | int sockfdd; |
| | | if((sockfdd=socket(PF_INET,SOCK_STREAM,0))<0){ |
| | | perror("socket fail"); |
| | | close(sockfdd); |
| | | return -1; |
| | | } |
| | | memset(&servaddr,0,strlen); |
| | | servaddr.sin_family=AF_INET; |
| | | inet_pton(AF_INET,serverIP,&servaddr.sin_addr); |
| | | servaddr.sin_port=htons(atoi(port)); |
| | | if(connect(sockfdd,(struct sockaddr*)&servaddr,strlen)<0){ |
| | | // perror("connect fail-3"); |
| | | close(sockfdd); |
| | | return -2; |
| | | } |
| | | close(sockfdd); |
| | | return 0; |
| | | } |
| | | void GPIOinit(void) |
| | | { |
| | | int retVal = -1; |
| | | int PortNum = 0xA06; |
| | | unsigned char wVal = 0x15; |
| | | retVal = GPIO_OPEN(PortNum); |
| | | printf("GPIO OPEN RES = %d \n",retVal); |
| | | GPIO_WRITE(PortNum,wVal); |
| | | printf("GPIO WRITE VALUE = 0x%X \n", wVal); |
| | | |
| | | retVal = GPIO_READ(PortNum); |
| | | printf("GPIO READ VALUE 02 = 0x%X \n",retVal); |
| | | |
| | | GPIO_CLOSE(PortNum); |
| | | } |
| | | int GPIOoutput(int no) |
| | | { |
| | | int PortNum = 0xA06; |
| | | switch(no){ |
| | | case 0: |
| | | GPIO_WRITE(PortNum,0x15); |
| | | return 0; |
| | | case 1: |
| | | GPIO_WRITE(PortNum,0x57); |
| | | return 0; |
| | | case 2: |
| | | GPIO_WRITE(PortNum,0x5D); |
| | | return 0; |
| | | case 3: |
| | | GPIO_WRITE(PortNum,0x5F); |
| | | return 0; |
| | | case 4: |
| | | GPIO_WRITE(PortNum,0x75); |
| | | return 0; |
| | | case 5: |
| | | GPIO_WRITE(PortNum,0x77); |
| | | return 0; |
| | | case 6: |
| | | GPIO_WRITE(PortNum,0x7D); |
| | | return 0; |
| | | case 7: |
| | | GPIO_WRITE(PortNum,0x7F); |
| | | return 0; |
| | | case 8: |
| | | GPIO_WRITE(PortNum,0xD5); |
| | | return 0; |
| | | case 9: |
| | | GPIO_WRITE(PortNum,0xD7); |
| | | return 0; |
| | | case 10: |
| | | GPIO_WRITE(PortNum,0xDD); |
| | | return 0; |
| | | case 11: |
| | | GPIO_WRITE(PortNum,0xDF); |
| | | return 0; |
| | | case 12: |
| | | GPIO_WRITE(PortNum,0xF5); |
| | | return 0; |
| | | case 13: |
| | | GPIO_WRITE(PortNum,0xF7); |
| | | return 0; |
| | | case 14: |
| | | GPIO_WRITE(PortNum,0xFD); |
| | | return 0; |
| | | case 15: |
| | | GPIO_WRITE(PortNum,0xFF); |
| | | return 0; |
| | | } |
| | | return -1; |
| | | } |
| | | int GPIO_OPEN(int PortNum) |
| | | { |
| | | return ioperm(PortNum, 0x01, 0x01); |
| | | } |
| | | |
| | | void GPIO_CLOSE(int PortNum) |
| | | { |
| | | ioperm(PortNum, 0x01, 0x00); |
| | | } |
| | | |
| | | int GPIO_READ(int PortNum) |
| | | { |
| | | return inb(PortNum); |
| | | } |
| | | |
| | | void GPIO_WRITE(int PortNum,unsigned char DATA) |
| | | { |
| | | outb(DATA,PortNum); |
| | | } |
| | | |
| | | int Read_MysqlData(){ |
| | | int ret=0; |
| | | MYSQL *conn; |
| | | MYSQL_RES *res; |
| | | MYSQL_ROW row; |
| | | char *server="localhost"; |
| | | char *user="root"; |
| | | char *password="123"; |
| | | char *database="opentutorials"; |
| | | puts("Step.0 ========>MySQL is getting......"); |
| | | if(!(conn=mysql_init((MYSQL*)NULL))){ |
| | | printf("init fail\n"); |
| | | return -1; |
| | | } |
| | | if(!mysql_real_connect(conn,server,user,password,NULL,3306,NULL,0)){ |
| | | printf("connect error.\n"); |
| | | return -1; |
| | | } |
| | | if(mysql_select_db(conn,database)!=0){ |
| | | mysql_close(conn); |
| | | printf("select_db_fail.\n"); |
| | | return -1; |
| | | } |
| | | if(mysql_query(conn,"select * from tbl_deviceinfo")){ |
| | | printf("query fail\n"); |
| | | return -1; |
| | | } |
| | | res=mysql_store_result(conn); |
| | | while((row=mysql_fetch_row(res))!=NULL){ |
| | | strcat(EventString,row[1]); strcat(EventString,":"); |
| | | strcat(EventString,row[2]); strcat(EventString,":"); |
| | | strcat(EventString,row[3]); strcat(EventString,":"); |
| | | strcat(EventString,row[4]); strcat(EventString,":"); |
| | | strcat(EventString,row[5]); strcat(EventString,":"); |
| | | strcat(EventString,row[6]); strcat(EventString,":"); |
| | | strcat(EventString,row[7]); strcat(EventString,":"); |
| | | strcat(EventString,row[8]); strcat(EventString,":"); |
| | | strcat(EventString,row[9]); strcat(EventString,":"); |
| | | strcat(EventString,row[10]);strcat(EventString,"\n"); |
| | | } |
| | | mysql_close(conn); |
| | | return ret; |
| | | |
| | | } |
| | | int UpdateMysqData(int key) |
| | | { |
| | | int ret=0; |
| | | MYSQL *conn; |
| | | char *server="localhost"; |
| | | char *user="root"; |
| | | char *password="123"; |
| | | char *database="opentutorials"; |
| | | char query[255]; |
| | | puts("Step.0 ========>MySQL is getting......"); |
| | | if(!(conn=mysql_init((MYSQL*)NULL))){ |
| | | printf("init fail\n"); |
| | | exit(1); |
| | | } |
| | | if(!mysql_real_connect(conn,server,user,password,NULL,3306,NULL,0)){ |
| | | printf("connect error.\n"); |
| | | exit(1); |
| | | } |
| | | if(mysql_select_db(conn,database)!=0){ |
| | | mysql_close(conn); |
| | | printf("select_db_fail.\n"); |
| | | exit(1); |
| | | } |
| | | sprintf(query,"UPDATE tbl_deviceinfo SET reboot=0 where id=%d",key); |
| | | if(mysql_query(conn,query)){ |
| | | printf("query fail\n"); |
| | | exit(1); |
| | | } |
| | | mysql_close(conn); |
| | | return ret; |
| | | |
| | | } |
| | | int Check_MysqlData(char *AnalyserName,char* AnalyserIP,char* AnalyserPort,char* ServerIP,char* ServerPort,char* user,char* pass,char* resol,char* commType){ |
| | | int ret=0; |
| | | MYSQL *conn; |
| | | MYSQL_RES *res; |
| | | MYSQL_ROW row; |
| | | char *server="localhost"; |
| | | char *user1="root"; |
| | | char *password="123"; |
| | | char *database="opentutorials"; |
| | | puts("Step.0 ========>MySQL is getting......"); |
| | | if(!(conn=mysql_init((MYSQL*)NULL))){ |
| | | printf("init fail\n"); |
| | | exit(1); |
| | | } |
| | | if(!mysql_real_connect(conn,server,user1,password,NULL,3306,NULL,0)){ |
| | | printf("connect error.\n"); |
| | | exit(1); |
| | | } |
| | | if(mysql_select_db(conn,database)!=0){ |
| | | mysql_close(conn); |
| | | printf("select_db_fail.\n"); |
| | | exit(1); |
| | | } |
| | | if(mysql_query(conn,"select * from tbl_deviceinfo")){ |
| | | printf("query fail\n"); |
| | | exit(1); |
| | | } |
| | | res=mysql_store_result(conn); |
| | | while((row=mysql_fetch_row(res))!=NULL){ |
| | | ret=0; |
| | | // printf("====%s:%s",row[0],row[11]); //sprintf(equipments[NUM].m_id,"%d",row[0]); |
| | | if(strcmp(AnalyserName,row[10]) ==0) ret = 1; |
| | | if(strcmp(AnalyserIP,row[1]) ==0) ret =ret+1; |
| | | if(strcmp(AnalyserPort,row[2]) ==0) ret =ret+1; |
| | | if(strcmp(ServerIP,row[3]) ==0) ret =ret+1; |
| | | if(strcmp(ServerPort,row[4]) ==0) ret =ret+1; |
| | | if(strcmp(user,row[6]) ==0) ret =ret+1; |
| | | if(strcmp(pass,row[5]) ==0) ret =ret+1; |
| | | if(strcmp(resol,row[7]) ==0) ret =ret+1; |
| | | if(strcmp(commType,row[8]) ==0) ret =ret+1; |
| | | if(ret==9) break; |
| | | } |
| | | mysql_close(conn); |
| | | return ret; |
| | | } |
| | | int InsertMysqlData(char *AnalyserName,char* AnalyserIP,char* AnalyserPort,char* ServerIP,char* ServerPort,char* username,char* pass,char* resol,char* commType) |
| | | { |
| | | int ret=0; |
| | | MYSQL *conn; |
| | | char *server="localhost"; |
| | | char *user="root"; |
| | | char *password="123"; |
| | | char *database="opentutorials"; |
| | | char query[255]; |
| | | struct tm *t; |
| | | char time_info[20]={0,}; |
| | | time_t timer; |
| | | timer=time(NULL); |
| | | t=localtime(&timer); |
| | | sprintf(time_info, "%d-%d-%d %d:%d:%d",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec); |
| | | |
| | | if(!(conn=mysql_init((MYSQL*)NULL))){ |
| | | printf("init fail\n"); |
| | | return -1; |
| | | } |
| | | if(!mysql_real_connect(conn,server,user,password,NULL,3306,NULL,0)){ |
| | | printf("connect error.\n"); |
| | | return -1; |
| | | } |
| | | if(mysql_select_db(conn,database)!=0){ |
| | | mysql_close(conn); |
| | | printf("select_db_fail.\n"); |
| | | return -1; |
| | | } |
| | | sprintf(query, "INSERT INTO tbl_deviceinfo(equipmentip,equipmentport,serverip,serverport,password,username,analysis,comtype,redate,comment,reboot)VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s','%s','%s',0);",AnalyserIP, AnalyserPort, ServerIP, ServerPort,pass,username, resol, commType,time_info,AnalyserName);//????????????? |
| | | printf("query=%s",query); |
| | | if(mysql_query(conn,query)){ |
| | | printf("query fail\n"); |
| | | return -1; |
| | | } |
| | | mysql_close(conn); |
| | | return ret; |
| | | |
| | | } |
| | | //=====================================MD5 Function Definition============================================ |
| | | void MD5Init (MD5_CTX *context) /* context */ |
| | | { |
| | | context->count[0] = context->count[1] = 0; |
| | | context->state[0] = 0x67452301; /* Load magic initialization constants.*/ |
| | | context->state[1] = 0xefcdab89; |
| | | context->state[2] = 0x98badcfe; |
| | | context->state[3] = 0x10325476; |
| | | } |
| | | |
| | | /* ----------------------------------------------------------------------------------- |
| | | MD5 block update operation. Continues an MD5 message-digest |
| | | operation, processing another message block, and updating the context. |
| | | -------------------------------------------------------------------------------------*/ |
| | | /* context */ /* input block */ /* length of input block */ |
| | | void MD5Update (MD5_CTX *context, unsigned char *input,unsigned int inputLen ) |
| | | { |
| | | unsigned int i, index, partLen; |
| | | index = (unsigned int)((context->count[0] >> 3) & 0x3F); /* Compute number of bytes mod 64 */ |
| | | |
| | | if ( (context->count[0] += ( (UINT4)inputLen << 3) ) < ( (UINT4)inputLen << 3 ) ) |
| | | context->count[1]++; |
| | | |
| | | context->count[1] += ((UINT4)inputLen >> 29); |
| | | partLen = 64 - index; |
| | | |
| | | /* Transform as many times as possible.*/ |
| | | if (inputLen >= partLen) |
| | | { |
| | | MD5_memcpy( (POINTER)&context->buffer[index], (POINTER)input, partLen); |
| | | MD5Transform (context->state, context->buffer); |
| | | |
| | | for (i = partLen; i + 63 < inputLen; i += 64) |
| | | MD5Transform (context->state, &input[i]); |
| | | |
| | | index = 0; |
| | | } |
| | | else |
| | | i = 0; |
| | | /* Buffer remaining input */ |
| | | MD5_memcpy( (POINTER)&context->buffer[index], (POINTER)&input[i],inputLen-i ); |
| | | } |
| | | |
| | | /* |
| | | MD5 finalization. Ends an MD5 message-digest operation, writing the |
| | | the message digest and zeroizing the context. |
| | | */ |
| | | void MD5Final (unsigned char digest[16], MD5_CTX *context) |
| | | /* message digest */ /* context */ |
| | | { |
| | | unsigned char bits[8]; |
| | | unsigned int index, padLen; |
| | | |
| | | Encode (bits, context->count, 8); /* Save number of bits */ |
| | | |
| | | /* Pad out to 56 mod 64.*/ |
| | | index = (unsigned int)((context->count[0] >> 3) & 0x3f); |
| | | padLen = (index < 56) ? (56 - index) : (120 - index); |
| | | MD5Update (context,(unsigned char*) PADDING, padLen); |
| | | |
| | | MD5Update (context, bits, 8); /* Append length (before padding) */ |
| | | Encode (digest, context->state, 16); /* Store state in digest */ |
| | | |
| | | /* Zeroize sensitive information.*/ |
| | | MD5_memset ((POINTER)context, 0, sizeof (*context)); |
| | | } |
| | | |
| | | /* MD5 basic transformation. Transforms state based on block. |
| | | */ |
| | | void MD5Transform (UINT4 state[4],unsigned char block[64]) |
| | | { |
| | | |
| | | UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; |
| | | |
| | | Decode (x, block, 64); |
| | | /* Round 1 */ |
| | | FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ |
| | | FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ |
| | | FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ |
| | | FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ |
| | | FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ |
| | | FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ |
| | | FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ |
| | | FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ |
| | | FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ |
| | | FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ |
| | | FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ |
| | | FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ |
| | | FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ |
| | | FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ |
| | | FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ |
| | | FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ |
| | | /* Round 2 */ |
| | | GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ |
| | | GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ |
| | | GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ |
| | | GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ |
| | | GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ |
| | | GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */ |
| | | GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ |
| | | GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ |
| | | GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ |
| | | GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ |
| | | GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ |
| | | GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ |
| | | GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ |
| | | GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ |
| | | GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ |
| | | GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ |
| | | /* Round 3 */ |
| | | HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ |
| | | HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ |
| | | HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ |
| | | HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ |
| | | HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ |
| | | HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ |
| | | HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ |
| | | HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ |
| | | HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ |
| | | HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ |
| | | HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ |
| | | HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ |
| | | HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ |
| | | HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ |
| | | HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ |
| | | HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ |
| | | /* Round 4 */ |
| | | II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ |
| | | II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ |
| | | II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ |
| | | II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ |
| | | II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ |
| | | II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ |
| | | II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ |
| | | II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ |
| | | II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ |
| | | II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ |
| | | II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ |
| | | II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ |
| | | II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ |
| | | II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ |
| | | II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ |
| | | II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ |
| | | |
| | | state[0] += a; |
| | | state[1] += b; |
| | | state[2] += c; |
| | | state[3] += d; |
| | | |
| | | /* Zeroize sensitive information.*/ |
| | | MD5_memset ((POINTER)x, 0, sizeof (x)); |
| | | } |
| | | |
| | | /* Encodes input (UINT4) into output (unsigned char). Assumes len is |
| | | a multiple of 4. |
| | | */ |
| | | void Encode (unsigned char *output,UINT4 *input,unsigned int len) |
| | | { |
| | | unsigned int i, j; |
| | | |
| | | for (i = 0, j = 0; j < len; i++, j += 4) |
| | | { |
| | | output[j] = (unsigned char)(input[i] & 0xff); |
| | | output[j+1] = (unsigned char)((input[i] >> 8) & 0xff); |
| | | output[j+2] = (unsigned char)((input[i] >> 16) & 0xff); |
| | | output[j+3] = (unsigned char)((input[i] >> 24) & 0xff); |
| | | } |
| | | } |
| | | |
| | | /* Decodes input (unsigned char) into output (UINT4). Assumes len is |
| | | a multiple of 4. |
| | | */ |
| | | void Decode (UINT4 *output,unsigned char *input,unsigned int len) |
| | | { |
| | | unsigned int i, j; |
| | | |
| | | for (i = 0, j = 0; j < len; i++, j += 4) |
| | | output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) | (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24); |
| | | } |
| | | |
| | | /* Note: Replace "for loop" with standard memcpy if possible. */ |
| | | void MD5_memcpy (POINTER output,POINTER input,unsigned int len) |
| | | { |
| | | unsigned int i; |
| | | |
| | | for (i = 0; i < len; i++) |
| | | output[i] = input[i]; |
| | | } |
| | | |
| | | /* Note: Replace "for loop" with standard memset if possible. */ |
| | | void MD5_memset (POINTER output,int value,unsigned int len) |
| | | { |
| | | unsigned int i; |
| | | |
| | | for (i = 0; i < len; i++) |
| | | ((char *)output)[i] = (char)value; |
| | | } |
| | | |
| | | /* Digests a string and prints the result. */ |
| | | char* MDString (char *string) |
| | | { |
| | | MD5_CTX context; |
| | | unsigned char digest[16]; |
| | | char output1[33]; |
| | | static char output[33]={"\0"}; |
| | | unsigned int len = strlen (string); |
| | | int i; |
| | | MD5Init (&context); |
| | | MD5Update (&context, (unsigned char*)string, len); |
| | | MD5Final (digest, &context); |
| | | for (i = 0; i < 16; i++) |
| | | { |
| | | sprintf(&(output1[2*i]),"%02x",(unsigned char)digest[i]); |
| | | //sprintf(&(output1[2*i+1]),"%02x",(unsigned char)(digest[i]<<4)); |
| | | } |
| | | for(i=0;i<32;i++) |
| | | output[i]=output1[i]; |
| | | return output; |
| | | } |
| | | |
| | | void zclock_sleep (int msecs) |
| | | { |
| | | struct timespec t; |
| | | t.tv_sec = msecs / 1000; |
| | | t.tv_nsec = (msecs % 1000) * 1000000; |
| | | nanosleep (&t, NULL); |
| | | } |
| | | |
| | | |