From c88f653a08d0006fafa9c7b08c43888df2c46b8c Mon Sep 17 00:00:00 2001
From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期四, 08 十二月 2016 10:10:11 +0800
Subject: [PATCH] merge my fix

---
 ProxyServer/proxyserver.h |   53 
 ProxyServer/make.sh       |   14 
 ProxyServer/proxyserver.c | 4701 +++++++++++++++++++++++++++++++---------------------------
 3 files changed, 2,549 insertions(+), 2,219 deletions(-)

diff --git a/ProxyServer/make.sh b/ProxyServer/make.sh
new file mode 100644
index 0000000..69ab9db
--- /dev/null
+++ b/ProxyServer/make.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+rm /tmp/tmp.zip
+rm /tmp/tmpZip -r
+
+rm demo *.o *.so
+
+gcc -g -c -fPIC -o proxy.o proxyserver.c
+gcc -shared -pthread -o libproxy.so proxy.o -lmysqlclient
+cp libproxy.so /usr/local/lib
+/sbin/ldconfig
+gcc -g -o demo main.c -lproxy
+
+service apache2 restart
diff --git a/ProxyServer/proxyserver.c b/ProxyServer/proxyserver.c
index ee599c3..bf2718f 100644
--- a/ProxyServer/proxyserver.c
+++ b/ProxyServer/proxyserver.c
@@ -1,2194 +1,2507 @@
-/*
- * proxyserver.c
- *
- *  Created on: Oct 9, 2016
- *      Author: JKM
- */
-
-#include <dirent.h>  
-#include "proxyserver.h"
-int RequestChannel;
-char* gAnalyzerIP;
-char* gUser;
-char* gPass;
-int GSocket;
-int gMySock[16];
-int threadIdx=0;
-char byte_array[2600];
-char buff[102400];
-int gGettingStep=0;
-char uri[300];
-time_t StartTm,EndTm; 
-int bMetadataSaving=0;
-int bZipFileSaving=0;
-unsigned char *memoryband[100];
-int bandsize[100];
-int bandCount = 0;
-char ZipSerFileName[1000][300];
-int ZipSerFileNum=0;
-int ZipCountidx;
-char NetInfo[128];
-char EventString[100000];
-EVENT_LOG myEventLogs[200];
-int EventCount=0;
-
-int FindIdx(char* IP);
-int FindEmpty();
-void* MyEquipmentthread(void* arg);
-pthread_t thread_noEQ[16];
-int gCapturing[16];
-SESSION sessions[16];
-#define MAX_NUM 16
-#define MAX 1024
-#define fileread_buf 128
-AlarmInfo RealAlarmEvent[16][1000];
-
-/////////////////////////////////////////////////
-char* strnncat(char*s1,char*s2,int n)
-{
-	int len = strlen(s1);
-
-	for(int i=0;i<n;i++)
-	{
-		s1[len+i]=s2[i];
-	}
-	return s1;
-}
-void SearchAppendString(char *buff,char* token1,char* token2,char* dispName)
-{
-	int len = strlen(token1);
-	int sidx = stringcmp((char*)buff,token1,len);
-	int eidx = stringcmp((char*)buff,token2,len+1);
-	if(sidx >=0 && eidx>=0 && eidx>sidx+len)	{
-		strcat(EventString,dispName);strnncat(EventString,&buff[sidx+len],eidx-sidx-len);
-		strcat(EventString,"\n");
-	}
-}
-char* GetDeviceInfo(char* AnalyserIP)
-{
-	memset(EventString,0,100000);
-	gAnalyzerIP = AnalyserIP;
-
-	if(AnalyserIP==NULL || AnalyserIP[0]==0) return "Param Error";
-
-	struct sockaddr_in servaddr;
-	int strlen1=sizeof(servaddr);
-	if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){
-		return "socket fail2";
-	}
-	memset(&servaddr,0,strlen1);
-	servaddr.sin_family=AF_INET;
-	inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr);
-	servaddr.sin_port=htons(80);
-
-	if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){
-		close(GSocket);
-		return "Equipment connect fail";
-	}
-	int length = 0;//GET /PSIA/System/deviceInfo HTTP/1.1
-
-	length = sprintf(byte_array,"GET /PSIA/System/deviceInfo HTTP/1.1\r\nContent-Type: text/xml\r\nHost: %s\r\nContent-Length: 0\r\nConnection: Keep-Alive\r\n\r\n",AnalyserIP);		 
-	write(GSocket,byte_array,length);
-	//	printf("%s",byte_array);
-	memset(EventString,0,100000);
-	while(1){
-		memset(buff,0,sizeof(buff));
-		length=read(GSocket,&buff,sizeof(buff));	   
-		if(length<=0)
-		{
-			close(GSocket);
-			break;
-		}
-		if(stringcmp((char*)buff,"<urn:DeviceInfo",15)>=0){
-			SearchAppendString((char*)buff,"<urn:deviceName>","</urn:deviceName>","deviceName:");
-			SearchAppendString((char*)buff,"<urn:deviceID>","</urn:deviceID>","deviceID:");
-			SearchAppendString((char*)buff,"<urn:deviceDescription>","</urn:deviceDescription>","deviceDescription:");
-			SearchAppendString((char*)buff,"<urn:model>","</urn:model>","model:");
-			SearchAppendString((char*)buff,"<urn:serialNumber>","</urn:serialNumber>","serialNumber:");
-			SearchAppendString((char*)buff,"<urn:macAddress>","</urn:macAddress>","macAddress:");
-			SearchAppendString((char*)buff,"<urn:firmwareVersion>","</urn:firmwareVersion>","firmwareVersion:");
-			SearchAppendString((char*)buff,"<urn:bootVersion>","</urn:bootVersion>","bootVersion:");
-			SearchAppendString((char*)buff,"<urn1:httpPort>","</urn1:httpPort>","httpPort:");
-			SearchAppendString((char*)buff,"<urn1:httpsPort>","</urn1:httpsPort>","httpsPort:");
-			SearchAppendString((char*)buff,"<urn1:rtspPort>","</urn1:rtspPort>","rtspPort:");
-			SearchAppendString((char*)buff,"<urn1:httpsEnabled>","</urn1:httpsEnabled>","httpsEnabled:");
-			SearchAppendString((char*)buff,"<urn1:webAuthenticationType>","</urn1:webAuthenticationType>","webAuthenticationType:");
-			SearchAppendString((char*)buff,"<urn1:rtspAuthenticationEnabled>","</urn1:rtspAuthenticationEnabled>","rtspAuthenticationEnabled:");
-			close(GSocket);
-			return EventString;
-		}
-	}
-	return EventString;
-}
-
-
-char* GetAnalyserNet(void)																												//5.鑾峰彇褰撳墠杞彂鍣ㄧ殑ip		鍙傛暟锛氭棤銆傝繑鍥烇細褰撳墠鐨刬p鍦板潃瀛愮綉鎺╃爜鍜岀綉鍏�
-{
-	memset(NetInfo,0,128);
-	/// function
-	return NetInfo;
-}
-
-int SetAnalyserNet(char* NetInfo)																										//6.鎵嬪姩璁剧疆杞彂鍣ㄧ殑ip		鍙傛暟锛歩p锛屽瓙缃戞帺鐮侊紝榛樿缃戝叧	銆�	杩斿洖锛氫慨鏀圭姸鎬�(鎴愬姛鎴栬�呭け璐�)
-{
-	int ret=0;
-	/// function
-	return ret;
-}
-//// 鍔熻兘锛氭煡鐪嬪垎鏋愬櫒杩炴帴鐘舵��
-//// 杈撳叆锛氬垎鏋愬櫒IP
-//// 杈撳嚭锛�0锛堟垚鍔燂級, -1(鍒濆鍖栧け璐�),-2(杩炴帴澶辫触)
-int GetConnectState(char* AnalyserIP)																									
-{
-	return net_test(AnalyserIP,"80");
-}
-//// 鍔熻兘锛氶噸鍚垎鏋愬櫒
-//// 杈撳叆锛氬垎鏋愬櫒IP,鐢ㄦ埛锛屽瘑鐮侊紝RestartKind=0(GPIO out),RestartKind=1(Protocol Mode), no(GPIO Pin no=>0~15)
-//// 杈撳嚭锛�0锛堟垚鍔燂級, -1(鍒濆鍖栧け璐�),-2(杩炴帴澶辫触)
-int RestartAnalyser(char* AnalyserIP,char* user,char* pass,int RestartKind,int no)														
-{
-	switch(RestartKind){
-	case 0:
-		if(no<0 || no>15) return -1;
-		GPIOinit();
-		GPIOoutput(no);
-		printf("GPIO output no=%d",no);
-		return 0;
-	case 1:
-		return RestartCommand(AnalyserIP,user,pass);
-	default:
-		return -1;
-	}
-	return 0;
-}
-//// 鍔熻兘锛氬紑濮嬫煡鐪嬪疄鏃剁洃鎺�
-//// 杈撳叆锛氬垎鏋愬櫒IP,鐢ㄦ埛,瀵嗙爜
-//// 杈撳嚭锛�0锛堟垚鍔燂級, -1(鍒濆鍖栧け璐�),-2(杩炴帴澶辫触)
-int RealEventStart(char* AnalyserIP,char* user,char* pass)
-{
-	gAnalyzerIP = AnalyserIP;
-	gUser = user;
-	gPass = pass;
-	int bbbb=0;
-
-	if(AnalyserIP==NULL || AnalyserIP[0]==0) return -1;
-
-	struct sockaddr_in servaddr;
-	int strlen1=sizeof(servaddr);
-	if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){
-		perror("socket fail2");
-		return -1;
-	}
-	memset(&servaddr,0,strlen1);
-	servaddr.sin_family=AF_INET;
-	inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr);
-	servaddr.sin_port=htons(80);
-
-	if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){
-		printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80);
-		close(GSocket);
-		return -2;
-	}
-	int length = 0;
-	length = sprintf(byte_array,"POST /PSIA/VIQ/System/sessions/permanent HTTP/1.1\r\nContent-Type: text/xml\r\nHost: %s\r\nContent-Length: 0\r\nConnection: Keep-Alive\r\n\r\n",AnalyserIP);		 
-	write(GSocket,byte_array,length);
-//	printf("%s",byte_array);
-	while(1){
-		memset(buff,0,sizeof(buff));
-		length=read(GSocket,&buff,sizeof(buff));	   
-		if(length<=0)
-		{
-			close(GSocket);
-			break;
-		}
-		if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0 && bbbb==0)
-		{
-			// analyse reception
-			MakeAuthorizedPacketReal(buff,length,"POST","/PSIA/VIQ/System/sessions/permanent");
-			zclock_sleep(100);
-			write(GSocket,byte_array,strlen(byte_array));
-//			printf("%s\n",(char*)byte_array);					
-			bbbb=1;
-			continue;
-		}
-		if(bbbb==1){
-			int sidx = stringcmp((char*)buff,"<urn:id>",8);
-			if(sidx >=0){//<urn:ViqDateTimeInterval urn:version="1.0" xmlns:urn="urn:videoiq-com"><urn:startTime urn:version="1.0"><urn:date>2016-08-18T01:07:20.749</urn:date><urn:offset>0</urn:offset></urn:startTime><urn:endTime urn:version="1.0"><urn:date>2016-08-29T08:33:48.231</urn:date><urn:offset>0</urn:offset></urn:endTime></urn:ViqDateTimeInterval>
-				int eidx = stringcmp((char*)buff,"</urn:id>",9);
-				if(eidx>=0 && sidx+8<eidx){
-					int Idx=FindIdx(gAnalyzerIP);
-					if(Idx==-1){
-						Idx = FindEmpty();
-						strcpy(sessions[Idx].IP,gAnalyzerIP);
-						memcpy(sessions[Idx].ID,&buff[sidx+8],eidx-sidx-8);
-					}
-					memcpy(sessions[Idx].ID,&buff[sidx+8],eidx-sidx-8);
-					bbbb=2;
-//					printf("SessionID =======> %s\n",(char*)sessions[Idx].ID);		
-					break;
-				}
-			}
-		}
-	}
-	close(GSocket);
-
-	int Idx=FindIdx(gAnalyzerIP);
-	if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){
-		perror("socket fail2");
-		return -1;
-	}
-	memset(&servaddr,0,strlen1);
-	servaddr.sin_family=AF_INET;
-	inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr);
-	servaddr.sin_port=htons(80);
-
-	if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){
-		printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80);
-		close(GSocket);
-		return -2;
-	}
-	char uri[200];
-	sprintf(uri,"/PSIA/Custom/Event/notification/notificationStream?sessionId=%s",sessions[Idx].ID);
-	length = sprintf(byte_array,"GET %s HTTP/1.1\r\nContent-Type: text/xml\r\nHost: %s\r\nContent-Length: 0\r\nConnection: Keep-Alive\r\n\r\n",uri,gAnalyzerIP);		 
-	write(GSocket,byte_array,strlen(byte_array));
-	while(1){
-		memset(buff,0,sizeof(buff));
-		length=read(GSocket,&buff,sizeof(buff));	   
-		if(length<=0)
-		{
-			close(GSocket);
-			break;
-		}
-		if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0 && bbbb==2)
-		{
-			char uri[200];
-			sprintf(uri,"/PSIA/Custom/Event/notification/notificationStream?sessionId=%s",sessions[Idx].ID);
-			MakeAuthorizedPacketReal(buff,length,"GET",uri);
-			write(GSocket,byte_array,strlen(byte_array));
-//			printf("%s\n",(char*)byte_array);	
-			bbbb=3;			
-			continue;
-		}
-
-		/*if(memorycmp((unsigned char*)buff,length, "ViqEventNotificationAlert",25)>0 && bbbb==3 )
-		{
-			if(RealAlarmEventNum[Idx]<1000-1)	{
-				memset(&RealAlarmEvent[Idx][RealAlarmEventNum[Idx]],0,sizeof(AlarmInfo));
-				AnalyXMLUrnEVENT(buff,length,&RealAlarmEvent[Idx][RealAlarmEventNum[Idx]++]);
-			}
-			continue;
-		}
-*/
-		if(stringcmp(buff,"multipart/text; boundary=VIQeventEVENTeventVIQ",46)>0 && bbbb==3) 
-///		if(stringcmp(buff,"HTTP/1.1 200 OK",15)>0 && bbbb==3) 
-		{
-			gMySock[Idx]=GSocket;
-			pthread_create(&thread_noEQ[Idx],NULL,&MyEquipmentthread,(void*)Idx);//super(void*)(&equipments[0])
-			gCapturing[Idx]=1;
-			return 0;
-		}
-	}
-	return -2;
-}
-//// 鍔熻兘锛氬仠姝㈡煡鐪嬪疄鏃剁洃鎺�
-//// 杈撳叆锛氬垎鏋愬櫒IP
-//// 杈撳嚭锛�0锛堟垚鍔燂級, -1(鍒濆鍖栧け璐�)
-int RealEventStop(char* AnalyserIP)
-{
-	int Idx=FindIdx(AnalyserIP);
-	if(Idx>=0 && Idx<16){
-		gCapturing[Idx]=0;
-		sessions[Idx].IP[0]=0;
-	}
-	else return -1;
-	return 0;
-}
-//// 鍔熻兘锛氭煡鐪嬪疄鏃剁洃鎺х嚎绋�
-//// 杈撳叆锛氬垎鏋愬櫒缂栧彿
-void* MyEquipmentthread(void* arg)
-{
-	int eidx = (int)arg;   
-	int length;
-
-	puts("Step.2 ========>Equipment Thread is strarted......");
-
-	while(gCapturing[eidx]==1)
-	{
-		length=read(gMySock[eidx],&buff,sizeof(buff)-1);	   
-		if(length<=0)
-		{
-			printf("\n \\\\\\ Read error \n");
-			break;
-		}
-		else if(length>0){
-			if(memorycmp((unsigned char*)buff,length, "ViqEventNotificationAlert",25)>0 )
-			{
-				if(RealAlarmEventNum[eidx]<1000-1)	{
-					memset(&RealAlarmEvent[eidx][RealAlarmEventNum[eidx]],0,sizeof(AlarmInfo));
-					AnalyXMLUrnEVENT(buff,length,&RealAlarmEvent[eidx][RealAlarmEventNum[eidx]++]);
-				}
-//				printf("%s=============================%d\n",(char*)buff,RealAlarmEventNum[eidx]);
-//				printf("%s\n",RealAlarmEvent[eidx][1].channelId);
-				continue;
-			}
-		}
-	}
-	close(gMySock[eidx]);
-	puts("Equipment Thread is stoped..");
-	pthread_exit((void*)thread_noEQ[eidx]);
-}
-				   /*
-				   --VIQeventEVENTeventVIQ
-					   Content-type: application/xml; charset="UTF-8"
-
-					   <urn:ViqEventNotificationAlert urn:version="1.0" xmlns:urn="urn:videoiq-com">
-					   <urn:channelId>3</urn:channelId>
-					   <urn:eventId>6478</urn:eventId>
-					   <urn:startTime urn:version="1.0">
-					   <urn:date>2016-11-07T08:50:54.063</urn:date><urn:offset>28800000</urn:offset>
-					   </urn:startTime>
-					   <urn:clipUrl>/media/clips/3/2016/11/7/8/3/2016_11_07-08_50_48.mp4</urn:clipUrl>
-					   <urn:ruleId>17</urn:ruleId>
-					   <urn:ruleName>Video Lost Rule</urn:ruleName>
-					   <urn:soiId>-1</urn:soiId>
-					   <urn:soiName>Reserved SOI</urn:soiName>
-					   <urn:activity>Video Lost</urn:activity>
-					   <urn:objectType>Unknown</urn:objectType>
-					   <urn:aborted>false</urn:aborted>
-					   <urn:acknowledged>false</urn:acknowledged>
-					   <urn:ackNotes xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><urn:falseAlarm>false</urn:falseAlarm>
-					   <urn:debugMessage>2016/11/07 08:50:54.63: Video lost detected: 101. Event (id=6478) started.</urn:debugMessage>
-					   </urn:ViqEventNotificationAlert>
-					   */
-
-//// 鍔熻兘锛氳幏鍙栧疄鏃剁洃鎺ф姤璀�
-//// 杈撳叆锛氬垎鏋愬櫒IP
-//// 杈撳嚭锛氱粨鏋�
-char* GetRealEvent(char* AnalyserIP)															//3.鏌ョ湅瀹炴椂鐩戞帶			鍙傛暟锛氬垎鏋愬櫒IP銆傝繑鍥烇細淇¢亾鍙峰強鍏跺搴旂殑瑙嗛娴佸湴鍧�
-{
-	int Idx=FindIdx(AnalyserIP);
-	memset(EventString,0,100000);
-	if(Idx>=0 && Idx<16 && RealAlarmEventNum[Idx]>0){		
-		for (int i=0;i<RealAlarmEventNum[Idx];i++)
-		{
-			strcat(EventString,RealAlarmEvent[Idx][i].channelId);
-			strcat(EventString,"\n");
-			strcat(EventString,RealAlarmEvent[Idx][i].eventId);
-			strcat(EventString,"\n");
-			strcat(EventString,RealAlarmEvent[Idx][i].startTime);
-			strcat(EventString,"\n");
-			strcat(EventString,RealAlarmEvent[Idx][i].endTime);
-			strcat(EventString,"\n");
-			strcat(EventString,RealAlarmEvent[Idx][i].clipUrl);
-			strcat(EventString,"\n");
-			strcat(EventString,RealAlarmEvent[Idx][i].ruleId);
-			strcat(EventString,"\n");
-			strcat(EventString,RealAlarmEvent[Idx][i].ruleName);
-			strcat(EventString,"\n");
-			strcat(EventString,RealAlarmEvent[Idx][i].soiId);
-			strcat(EventString,"\n");
-			strcat(EventString,RealAlarmEvent[Idx][i].soiName);
-			strcat(EventString,"\n");
-			strcat(EventString,RealAlarmEvent[Idx][i].activity);
-			strcat(EventString,"\n");
-			strcat(EventString,RealAlarmEvent[Idx][i].objectType);
-			strcat(EventString,"\n");
-			strcat(EventString,RealAlarmEvent[Idx][i].aborted);
-			strcat(EventString,"\n");
-			strcat(EventString,RealAlarmEvent[Idx][i].acknowledged);
-			strcat(EventString,"\n");
-			strcat(EventString,RealAlarmEvent[Idx][i].debugMessage);
-			strcat(EventString,"\n");
-		}
-	}
-	return EventString;
-}
-//// 鏌ヨ鎶ヨ璁板綍
-//// 杈撳叆锛氬垎鏋愬櫒IP锛屽紑濮嬫椂闂达紝缁撴潫鏃堕棿锛屼俊閬撳彿,鐢ㄦ埛锛屽瘑鐮�
-//// 杈撳嚭锛氭煡璇㈢粨鏋溿�傦紙鍖呮嫭淇¢亾鍙凤紝鎶ヨ鏃堕棿锛屾挱鏀惧湴鍧�锛岀瓑銆傦級
-char* GetPHPSearchMetaInfo(char* AnalyserIP,char* user,char* pass,int Channel,int s_year,int s_month,int s_day,int s_hour,int s_minute,int s_sec,int e_year,int e_month,int e_day,int e_hour,int e_minute,int e_sec)
-{
-	char* result;
-	MyTime mstart_time;		
-	mstart_time.Year=s_year;
-	mstart_time.Month=s_month;
-	mstart_time.Day=s_day;
-	mstart_time.Hour=s_hour;
-	mstart_time.Min=s_minute;
-	mstart_time.Sec=s_sec;	
-	MyTime mEnd_time;
-	mEnd_time.Year=e_year;
-	mEnd_time.Month=e_month;
-	mEnd_time.Day=e_day;
-	mEnd_time.Hour=e_hour;
-	mEnd_time.Min=e_minute;
-	mEnd_time.Sec=e_sec;
-	result=GetSearchMetaInfo(AnalyserIP,user,pass,Channel,&mstart_time,&mEnd_time);	
-	return result;
-	
-}
-char* GetMp4Info(char* AnalyserIP,char* user,char* pass,int Channel,char* path)	
-{
-	char Pathbuffer[100] = {0};
-	
-	RequestChannel = Channel;
-	gAnalyzerIP = AnalyserIP;
-	gUser = user;
-	gPass = pass;
-	bMetadataSaving = 0;
-	if(AnalyserIP==NULL || AnalyserIP[0]==0) return "-1";
-	int length;
-	int bMp4FileSaving=0;	
-	int Mp4FileAppendingSiz=0;
-	int Mp4FileSiz;
-	int file;
-	char* result;
-	
-	char* httpUri = path;	
-	int iidx =0,llen=0;
-	llen = sprintf(byte_array,"GET %s %s",httpUri,"HTTP/1.1\r\n"); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"Pragma: no-cache\r\n"); iidx+=llen;
-	//	llen = sprintf(&byte_array[iidx],"Host: %s\r\n",Equipments[EquipIdx].ip); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"Host: %s:80\r\n",gAnalyzerIP); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n\r\n"); iidx+=llen;
-
-	struct sockaddr_in servaddr;
-	int strlen1=sizeof(servaddr);
-	if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){
-		perror("socket fail2");
-		return "-3";
-	}
-	memset(&servaddr,0,strlen1);
-	servaddr.sin_family=AF_INET;
-	inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr);
-	servaddr.sin_port=htons(80);
-
-	if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){
-		printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80);
-		close(GSocket);
-		return "-4";
-	}
-	//printf("byte_array==%s",byte_array);
-	write(GSocket,byte_array,iidx);
-	
-	while(1){
-		memset(buff,0,sizeof(buff));
-		length=read(GSocket,&buff,sizeof(buff));
-		//printf("buff==%s",buff);	 
-		if(length<=0)
-		{
-			close(GSocket);
-			break;
-		}
-		if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0)
-		{
-			// analyse reception
-			//printf("===================================");
-			MakeAuthorizedPacketSimp(buff,length,"GET",httpUri);
-			write(GSocket,byte_array,strlen(byte_array));
-			continue;
-		}	
-		if(httpUri[0]!=0){			
-			printf("**************************************flag======%d\n",bMp4FileSaving);	
-			if(bMp4FileSaving==1){
-                
-				if((file = open(Pathbuffer, O_RDWR, S_IREAD|S_IWRITE)) <0){
-					printf("open file fail===2!\n");
-					result="File open error(2)!";
-					close(GSocket);
-					return result;
-				}
-				lseek(file,0,SEEK_END);
-				write(file,&buff[0], length);//CString m_data				
-				Mp4FileAppendingSiz += length;
-				if (Mp4FileAppendingSiz>=Mp4FileSiz+8)
-				{
-					int sidx = memorycmp((unsigned char*)buff,length, "moov",4);
-					Mp4FileSiz+=buff[sidx-4]*256*256*256+buff[sidx-3]*256*256+buff[sidx-2]*256+buff[sidx-1]; //movie box size
-					printf("**************************************Mp4FileSiz======%d\n",Mp4FileSiz);	
-
-				}
-				if (Mp4FileAppendingSiz>=Mp4FileSiz)
-				{
-					close(file);
-					bMp4FileSaving = false;
-					break;
-				}
-				
-			}
-			else
-			{
-				int sidx = memorycmp((unsigned char*)buff,length, "ftypmp42",8);
-					
-				if(sidx>=0){
-					bMp4FileSaving= 1;
-					Mp4FileAppendingSiz = length-sidx+4;
-			printf("**************************************Mp4FileAppendingSiz======%d\n",Mp4FileAppendingSiz);	
-							
-					if(length>36){
-						//printf("****************************************");		
-						
-						Mp4FileSiz = 24 + buff[sidx+20]*256*256*256+buff[sidx+21]*256*256+buff[sidx+22]*256+buff[sidx+23];// file_type box size + Media databox size
-			printf("**************************************Mp4FileSiz======%d\n",Mp4FileSiz);	
-						int count=0,i;
-						for(i=0;i<strlen(httpUri);i++){
-							if(httpUri[i]=='/') {
-								count++;
-								if(count>=9) break;
-							}
-						}	
-						
-						sprintf(Pathbuffer,"/tmp/%s",/*RequestChannel*/&httpUri[i+1]); iidx+=llen;
-
-						if((file = open(Pathbuffer,O_CREAT|O_RDWR,S_IREAD|S_IWRITE)) <0){
-							printf("open file fail===1!\n");
-							result="File open error(1)!";
-							close(GSocket);
-							return result;
-						}
-						write(file,&buff[sidx-4], length-sidx+4);
-					}
-				}
-			}
-		}
-		
-	}
-	close(GSocket);
-	return "ok";
-}
-
-
-
-
-
-
-//// 鏌ヨ鎶ヨ璁板綍
-//// 杈撳叆锛氬垎鏋愬櫒IP锛屽紑濮嬫椂闂达紝缁撴潫鏃堕棿锛屼俊閬撳彿,鐢ㄦ埛锛屽瘑鐮�
-//// 杈撳嚭锛氭煡璇㈢粨鏋溿�傦紙鍖呮嫭淇¢亾鍙凤紝鎶ヨ鏃堕棿锛屾挱鏀惧湴鍧�锛岀瓑銆傦級
-char* GetSearchMetaInfo(char* AnalyserIP,char* user,char* pass,int Channel,lpMyTime StartTm,lpMyTime EndTm)	
-{
-	RequestChannel = Channel;
-	gAnalyzerIP = AnalyserIP;
-	gUser = user;
-	gPass = pass;
-	bMetadataSaving = 0;
-	if(AnalyserIP==NULL || AnalyserIP[0]==0) return "-1";
-//	if(gGettingStep>0) return -2;
-    
-	struct tm ttm;
-	time_t StepTm;
-	int length;
-	char* httpUri;
-	char sss[24],eee[24];
-	chmod("/home",0777);
-	const char* folderr;
-	const char* filename1;
-	folderr="/home/tmpZip";
-	filename1="/home/tmp.zip";
-	struct stat sb;
-	if(stat(folderr,&sb)==0 && S_ISDIR(sb.st_mode))	
-		{
-			delete_folder("/home/tmpZip");
-		}
-	if (doesFileExist(filename1))
-		{
-			delete_file("/home/tmp.zip");	
-		}	
-	if(RequestChannel==0) httpUri= "/PSIA/VIQ/Event/metadata/0/files";
-	if(RequestChannel==1) httpUri= "/PSIA/VIQ/Event/metadata/1/files";
-	if(RequestChannel==2) httpUri= "/PSIA/VIQ/Event/metadata/2/files";
-	if(RequestChannel==3) httpUri= "/PSIA/VIQ/Event/metadata/3/files";
-	ttm.tm_year=StartTm->Year;ttm.tm_mon=StartTm->Month;ttm.tm_mday=StartTm->Day;ttm.tm_hour=StartTm->Hour;ttm.tm_min=StartTm->Min;ttm.tm_sec=StartTm->Sec;
-	time_t SearchStartTm = mktime(&ttm);
-	ttm.tm_year=EndTm->Year;ttm.tm_mon=EndTm->Month;ttm.tm_mday=EndTm->Day;ttm.tm_hour=EndTm->Hour;ttm.tm_min=EndTm->Min;ttm.tm_sec=EndTm->Sec;
-	time_t SearchEndTm = mktime(&ttm);
-	
-	printf("stm=%d,etm=%d\n",(int)SearchStartTm,(int)SearchEndTm);
-
-	for (StepTm=SearchEndTm;StepTm>SearchStartTm;StepTm-=2*3600)
-	{
-		zclock_sleep(200);
-//		printf(" ==== Search loop function execution  =================%d,%d \n",(int)StepTm,(int)SearchStartTm);
-		struct sockaddr_in servaddr;
-		int strlen1=sizeof(servaddr);
-		if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){
-				perror("socket fail2");
-				return "-3";
-		}
-		memset(&servaddr,0,strlen1);
-		servaddr.sin_family=AF_INET;
-		inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr);
-		servaddr.sin_port=htons(80);
-
-		if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){
-			printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80);
-			close(GSocket);
-			return "-4";
-		}
-		time_t ttt=StepTm-2*3600;
-		struct tm *t;
-		t = localtime(&ttt);
-		sprintf(sss,"%d-%02d-%02dT%02d:%02d:%02d.000",t->tm_year+2000-100,t->tm_mon,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);// = "2016-08-26T07:31:00.000";
-		sss[23]=0;
-		t = localtime(&StepTm);
-		sprintf(eee,"%d-%02d-%02dT%02d:%02d:%02d.000",t->tm_year+2000-100,t->tm_mon,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);// = "2016-08-26T07:31:00.000";
-		eee[23]=0;
-		RequestMetaFiles(gAnalyzerIP,httpUri,sss,eee);
-		write(GSocket,byte_array,strlen(byte_array));
-		
-		//鐢ㄤ互涓嬫柟娉曞皢socket璁剧疆涓洪潪闃诲鏂瑰紡
-//		int flags = fcntl(GSocket, F_GETFL, 0);
-//		fcntl(GSocket, F_SETFL, flags | O_NONBLOCK);
-		while(1){
-			memset(buff,0,sizeof(buff));
-			length=read(GSocket,&buff,sizeof(buff));	   
-			if(length<=0)
-			{
-				close(GSocket);
-				break;
-			}
-			if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0)
-			{
-				// analyse reception
-				MakeAuthorizedPacketSimp111(buff,length,"GET",httpUri,sss,eee);
-				write(GSocket,byte_array,strlen(byte_array));
-				continue;
-			}
-			if(bMetadataSaving==1){
-				memoryband[bandCount] = (unsigned char*)malloc(length);
-				memcpy(memoryband[bandCount], buff, length);
-				bandsize[bandCount] = length;
-				if(bandCount<99) bandCount++;
-				int eidx = stringcmp((char*)buff,"</urn:strings></urn:ViqStrings></urn:ViqStringsList>",52);
-				if(eidx >=0){
-					bMetadataSaving = 0;
-					int SSize=0;
-					for (int i=0;i<bandCount;i++) SSize+=bandsize[i];
-					char *tmpp = (char*)malloc(SSize);
-					int xx=0;
-					for (int i=0;i<bandCount;i++)
-					{
-						memcpy(&tmpp[xx],memoryband[i],bandsize[i]);
-						xx=bandsize[i];
-						free(memoryband[i]);
-					}
-					memcpy(buff,tmpp,SSize);
-					free(tmpp);
-					goto lpp123;
-					printf("**********Special*******************************ZipSerFileNum = %d",ZipSerFileNum);
-				}
-			}
-			else{
-				int sidx = stringcmp((char*)buff,"<urn:ViqStringsList urn:version=",32);
-				if(sidx >=0){
-					bMetadataSaving = 1;
-					bandCount = 0;
-					memoryband[bandCount] = (unsigned char*)malloc(length-sidx);
-					memcpy(memoryband[bandCount], &buff[sidx], length-sidx);
-					bandsize[bandCount] = length-sidx;
-					if(bandCount<99) bandCount++;
-					int eidx = stringcmp((char*)buff,"</urn:strings></urn:ViqStrings></urn:ViqStringsList>",52);
-					if(eidx >=0 && sidx<eidx){
-						free(memoryband[0]);
-						bandCount = 0;
-						bMetadataSaving = 0;
-						buff[eidx]=0;
-						int ptr=0;
-						////// analyze buffer 
-lpp123:					sidx = stringcmp((char*)&buff[ptr],"http://changeit:80/media",24);
-						if(sidx >=0){//http://changeit:80/media/metadata/0/2016/8/25/1/2/s_5b4103706a6411e6855e574ec330e01d_20160825_013633_93003.zip
-							int zipidx =-1;zipidx =  stringcmp((char*)&buff[ptr],".zip",4);
-							int seridx =-1;seridx =  stringcmp((char*)&buff[ptr],".ser",4);
-							int kkk=-1;
-							if(zipidx>=0){
-								 if(seridx>=0){
-								   if(zipidx<seridx) kkk = zipidx;
-								   else kkk = seridx;
-							     }
-							     else kkk = zipidx;
-							 }
-							 else{
-								 if(seridx>=0) kkk = seridx;
-							 }
-							if(kkk>=0 && kkk>sidx+18)
-							{
-								//涓嬭浇metadata
-								char pathbuf[250] ;
-								strncpy(pathbuf,(char*)&buff[ptr+sidx+18],kkk-sidx-18+4);
-								pathbuf[kkk-sidx-18+4]=0;
-								int i;
-								for (i=0;i<ZipSerFileNum;i++)
-								{
-									if(strcmp(pathbuf,ZipSerFileName[i])==0) break;
-								}
-								if(i>=ZipSerFileNum){
-									strcpy(ZipSerFileName[ZipSerFileNum],pathbuf);
-									if(ZipSerFileNum<1000-1) ZipSerFileNum++;
-								}
-								ptr=ptr+kkk+4;
-								goto lpp123;
-							}
-						}
-					}
-				}
-			}
- 		}// while end
-	}//for 
-	//////// get
-	for(ZipCountidx = 0; ZipCountidx<ZipSerFileNum; ZipCountidx++)
-	{
-		if(stringcmp((char*)ZipSerFileName[ZipCountidx],".ser",4)>=0) continue;
-		zclock_sleep(200);
-//		printf(" ==== Search loop function execution  =================%d,%d \n",(int)StepTm,(int)SearchStartTm);
-		struct sockaddr_in servaddr;
-		int strlen1=sizeof(servaddr);
-		if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){
-				perror("socket fail2");
-				return "-3";
-		}
-		memset(&servaddr,0,strlen1);
-		servaddr.sin_family=AF_INET;
-		inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr);
-		servaddr.sin_port=htons(80);
-
-		if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){
-			printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80);
-			close(GSocket);
-			return "-4";
-		}
-
-		httpUri = ZipSerFileName[ZipCountidx];//"/media/metadata/0/2016/8/25/1/2/s_5b4103706a6411e6855e574ec330e01d_20160825_013633_93003.zip";
-		RequestZipSerFiles(gAnalyzerIP,httpUri);
-		write(GSocket,byte_array,strlen(byte_array));
-//		printf("==========================================================================================================================>>>>>>>>\n");
-//		printf("%s",byte_array);
-		
-		
-		while(1){
-			length=read(GSocket,&buff,sizeof(buff)-1);	   
-			if(length<=0)
-			{
-				close(GSocket);
-				break;
-			}
-			if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0)
-			{
-				// analyse reception
-				MakeAuthorizedPacketSimp(buff,length,"GET",httpUri);
-				write(GSocket,byte_array,strlen(byte_array));
-//				printf("%s",byte_array);	
-				continue;
-			}
-			if(memorycmp((unsigned char*)buff,length, "Error 404 NOT_FOUND",19)>0)
-			{
-				break;
-			}			
-			
-			if(bZipFileSaving==1){
-				//涓嬭浇Zip filesave
-				int file;
-				if((file = open("/home/tmp.zip", O_RDWR, S_IREAD|S_IWRITE)) <0)
-					printf("open file fail!\n");
-				lseek(file,0,SEEK_END);
-				write(file,&buff[0], length);//CString m_data
-				close(file);
-				//mp4Save(_T("tmp.zip"),(unsigned char*)buffer, size,CFile::modeWrite| CFile::typeBinary);
-				char tmppattern[8]; tmppattern[0]='P';tmppattern[1]='K';tmppattern[2]=0x05;tmppattern[3]=0x06;tmppattern[4]=0x00;tmppattern[5]=0x00;
-				if(memorycmp((unsigned char*)&buff[0],length, tmppattern,8)>=0) {
-					bZipFileSaving = 0;
-					close(GSocket);
-					//Convert Zip file to Ser file
-					system("unzip -o /home/tmp.zip -d /home/tmpZip");
-				}
-			}
-			else{
-				int sidx = stringcmp((char*)buff,"PK",2);
-				if(sidx >=0){//涓嬭浇Zip filesave
-					delete_file("/home/tmp.zip");				
-					//涓嬭浇Zip filesave
-					bZipFileSaving = 1;
-					int file;
-					if((file = open("/home/tmp.zip",O_CREAT|O_RDWR,S_IREAD|S_IWRITE)) <0)
-						printf("open file fail!\n");
-					write(file,&buff[sidx], length-sidx);//CString m_data
-					close(file);
-
-					char tmppattern[8]; tmppattern[0]='P';tmppattern[1]='K';tmppattern[2]=0x05;tmppattern[3]=0x06;tmppattern[4]=0x00;tmppattern[5]=0x00;
-					if(memorycmp((unsigned char*)&buff[sidx],length-sidx, tmppattern,8)>=0)
-					 {
-						bZipFileSaving = 0;
-						close(GSocket);
-						//Convert Zip file to Ser file
-						system("unzip -o /home/tmp.zip -d /home/tmpZip");
-					}
-				}
-			}
-		}//while
-	}//for
-	int   i,res=0,num=0; //寰楅暱搴�  
-	filenames filename[100];
-	num = GetFileNameInFolder("/home/tmpZip",filename);
-	char stringpath[1024];
-	unsigned char p_save_buf[6144000];
-	
-	for(i=0;i<num;i++)   
-	{   
-		if(filename[i].name[0]=='.') continue;
-		memset(stringpath,0,1024);
-		memcpy(stringpath,"/home/tmpZip/",13);
-		strcat(stringpath,filename[i].name);
-		int handle;
-		if((handle = open(stringpath, O_RDWR, S_IREAD|S_IWRITE)) <0)
-			printf("open file fail!\n");
-		res = read(handle,p_save_buf,6144000);//CString m_data
-		close(handle);
-		AnalySerFile((char*)p_save_buf,res);
-	}   
-	memset(EventString,0,100000);
-	//for(i=0;i<1000;i++)
-	printf("EventCount===========================%d\n",EventCount);	
-	for (int i=0;i<EventCount;i++)
-	{
-		strcat(EventString,myEventLogs[i].Date);
-		strcat(EventString,"\n");
-		strcat(EventString,myEventLogs[i].Time);
-		strcat(EventString,"\n");
-		strcat(EventString,myEventLogs[i].Duration);
-		strcat(EventString,"\n");
-		strcat(EventString,myEventLogs[i].clipUrl);
-		strcat(EventString,"\n");
-		strcat(EventString,myEventLogs[i].Region);
-		strcat(EventString,"\n");
-		strcat(EventString,myEventLogs[i].Rule);
-		strcat(EventString,"\n");
-		strcat(EventString,myEventLogs[i].DebugMessageS);
-		strcat(EventString,"\n");
-		strcat(EventString,myEventLogs[i].DebugMessageE);
-		strcat(EventString,"\n");
-	}
-	return EventString;
-	//return "333333333333333333333333333333333333333333333333333333333333333333789";
-}
-//// 鍔熻兘锛氶噸鍚垎鏋愬櫒锛堝崗璁級
-//// 杈撳叆锛氬垎鏋愬櫒IP,鐢ㄦ埛锛屽瘑鐮�
-//// 杈撳嚭锛�0锛堟垚鍔燂級, -1(鍒濆鍖栧け璐�),-2(杩炴帴澶辫触)
-int RestartCommand(char* AnalyserIP,char* user,char* pass)
-{
-	gAnalyzerIP = AnalyserIP;
-	gUser = user;
-	gPass = pass;
-	
-	int bbbb=0;
-
-	if(AnalyserIP==NULL || AnalyserIP[0]==0) return -1;
-
-	struct sockaddr_in servaddr;
-	int strlen1=sizeof(servaddr);
-	if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){
-		perror("socket fail2");
-		return -1;
-	}
-	memset(&servaddr,0,strlen1);
-	servaddr.sin_family=AF_INET;
-	inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr);
-	servaddr.sin_port=htons(80);
-
-	if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){
-		printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80);
-		close(GSocket);
-		return -2;
-	}
-	int length = 0;
-	length = sprintf(byte_array,"PUT /PSIA/System/reboot HTTP/1.1\r\nContent-Type: text/xml\r\nHost: %s\r\nContent-Length: 0\r\nConnection: Keep-Alive\r\n\r\n",AnalyserIP);		 
-	write(GSocket,byte_array,length);
-//	printf("%s",byte_array);
-
-
-	while(1){
-		memset(buff,0,sizeof(buff));
-		length=read(GSocket,&buff,sizeof(buff));	   
-		if(length<=0)
-		{
-			break;
-		}
-		if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0)
-		{
-			// analyse reception
-			MakeAuthorizedPacketRestart(buff,length,"PUT","/PSIA/System/reboot");//////????????
-			bbbb=1;
-			break;
-		}
-		if(memorycmp((unsigned char*)buff,length, "HTTP/1.1 200 OK",15)>0) break;
-		
-
-	}
-	close(GSocket);
-	if (bbbb==0) return -1;
-//	zclock_sleep(200);
-	if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){
-		perror("socket fail2");
-		return -1;
-	}
-	memset(&servaddr,0,strlen1);
-	servaddr.sin_family=AF_INET;
-	inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr);
-	servaddr.sin_port=htons(80);
-
-	if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){
-		printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80);
-		close(GSocket);
-		return -2;
-	}
-	write(GSocket,byte_array,strlen(byte_array));
-	while(1){
-		memset(buff,0,sizeof(buff));
-		length=read(GSocket,&buff,sizeof(buff));	   
-		if(length<=0)
-		{
-			close(GSocket);
-			return -3;
-		}
-		if(memorycmp((unsigned char*)buff,length, "HTTP/1.1 200 OK",15)>0) break;
-
-	}
-	close(GSocket);
-	return 0;
-}
-
-void RequestMetaFiles(char* AnaylyIP,char* httpUri,char* Tm1,char* Tm2)
-{
-	char byte_arrayxxx[1600];
-	int lengthxxx = 0;
-	memset(byte_array,0,1600);
-
-	UrnStringToBytes(byte_arrayxxx,&lengthxxx,Tm1,Tm2);// xml  
-	int iidx =0,llen=0;;
-	llen = sprintf(byte_array,"GET %s %s",httpUri,"HTTP/1.1\r\n"); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"Content-Length: %d\r\n",lengthxxx); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"%s","Content-Type: text/xml\r\n"); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"Host: %s:%d\r\n",AnaylyIP,80); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n\r\n"); iidx+=llen;
-	strncpy(&byte_array[iidx],byte_arrayxxx,lengthxxx); iidx+=lengthxxx;
-
-}
-void RequestZipSerFiles(char* AnaylyIP,char* httpUri)
-{
-	memset(byte_array,0,1600);
-
-	int iidx =0,llen=0;;
-	llen = sprintf(byte_array,"GET %s %s",httpUri,"HTTP/1.1\r\n"); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"User-Agent: Java/1.6.0_05\r\n"); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"Host: %s:%d\r\n",AnaylyIP,80); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"%s","Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n"); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n\r\n"); iidx+=llen;
-}
-void UrnStringToBytes(char* byte_array_out,int * byte_array_length_out,char* StartTim,char* EndTime)
-{
-	int idx=0,len;
-	idx = sprintf(byte_array_out,"<urn:ViqDateTimeInterval urn:version="); 
-	byte_array_out[idx++]=0x22;//'"'
-	byte_array_out[idx++]=0x31;//'1'
-	byte_array_out[idx++]=0x2e;//'.'
-	byte_array_out[idx++]=0x30;//'0'
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx]," xmlns:urn=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"urn:videoiq-com");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"><urn:startTime urn:version=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	byte_array_out[idx++]=0x31;//'1'
-	byte_array_out[idx++]=0x2e;//'.'
-	byte_array_out[idx++]=0x30;//'0'
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"><urn:date>%s</urn:date><urn:offset>0</urn:offset></urn:startTime><urn:endTime urn:version=",StartTim);idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	byte_array_out[idx++]=0x31;//'1'
-	byte_array_out[idx++]=0x2e;//'.'
-	byte_array_out[idx++]=0x30;//'0'
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"><urn:date>%s</urn:date><urn:offset>0</urn:offset></urn:endTime></urn:ViqDateTimeInterval>",EndTime);idx+=len;//2016-08-26T09:31:00.000
-	*byte_array_length_out = idx;
-}
-///// for Restart
-void MakeAuthorizedPacketRestart(char* buff,int length, char* Method,char* uri)
-{
-	char Device[150] ;
-	char Realm_buf1[512] ;
-	char nonce_buf2[512] ;
-	char auth_buf3[512] ;
-	char domain_buf4[512] ;
-	unsigned char len[4];
-
-	memset(Device,0,150);
-	memset(domain_buf4,0,512);
-
-	CharToByte((char*)buff, Device, length,Realm_buf1,nonce_buf2,auth_buf3,domain_buf4,len);
-//	printf("%s,%s,%s,%s\n",Realm_buf1,nonce_buf2,auth_buf3,domain_buf4);
-//	printf("%d,%d,%d,%d\n",len[0],len[1],len[2],len[3]);
-	char* cnonce_buf="08a9d86c1b5e45963cf82f43dca59c51";
-	//Authorization: Digest username="supervisor",realm="VideoIQ",nonce="IcTFMVgBAAAHmywcsJspvAlyBqpQy",uri="/PSIA/System/reboot",algorithm="MD5",cnonce="08a9d86c1b5e45963cf82f43dca59c51",nc=00000001,qop="auth",response="0c31efdd27017412cd0b6aaf550da084"
-
-	
-	Realm_buf1[len[0]]=0;
-	nonce_buf2[len[1]]=0;
-	auth_buf3[len[2]]=0;
-	char* nc="00000001";
-	//CString qop;qop=auth_buf3;/////////////////////////////
-	char User[200];
-	memset(User,0,200);
-	sprintf(User,"%s:%s:%s",gUser,Realm_buf1,gPass);
-
-	char urii[200];
-	int kk=sprintf(urii,"%s:%s",Method,uri);//PUT:/PSIA/System/reboot";
-	urii[kk]=0;
-	char* A1 = MDString(User);
-	char AA1[33];
-	memset(AA1,0,33);
-	memcpy(AA1,A1,strlen(A1));
-	char* A2 = MDString(urii);
-
-	char AA2[33];
-	memset(AA2,0,33);
-	memcpy(AA2,A2,strlen(A2));
-	char rrr[200];
-	memset(rrr,0,200);
-	sprintf(rrr,"%s:%s:%s:%s:auth:%s",AA1,nonce_buf2,nc,cnonce_buf,AA2);
-	char* response = MDString(rrr);
-	char res[33];
-	memset(res,0,33);
-	memcpy(res,response,strlen(response));
-
-	//// 绗簩娆� 鍙戦��
-	char byte_arrayxxx[2600];
-	int lengthxxx = 0;
-	int iidx = 0;
-	AurhorizationResponseBytesReatart(byte_arrayxxx,&lengthxxx,uri,nonce_buf2,cnonce_buf,res);
-
-	int llen = sprintf(byte_array,"%s %s HTTP/1.1\r\n",Method,uri); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"Content-Type: text/xml\r\n"); iidx+=llen;
-	strncpy(&byte_array[iidx],byte_arrayxxx,lengthxxx); iidx+=lengthxxx;
-	byte_array[iidx]=0x0d; iidx+=1;
-	byte_array[iidx]=0x0a; iidx+=1;
-	llen = sprintf(&byte_array[iidx],"Host: %s\r\n",gAnalyzerIP); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"Content-Length: 0\r\n"); iidx+=llen;
-	//					llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n"); iidx+=llen;
-	byte_array[iidx]=0x0d; iidx+=1;
-	byte_array[iidx]=0x0a; iidx+=1;					
-	byte_array[iidx]=0;
-}
-//for real event
-void MakeAuthorizedPacketReal(char* buff,int length, char* Method,char* uri)
-{
-	char Device[150] ;
-	char Realm_buf1[512] ;
-	char nonce_buf2[512] ;
-	char auth_buf3[512] ;
-	char domain_buf4[512] ;
-	unsigned char len[4];
-
-	memset(Device,0,150);
-	memset(domain_buf4,0,512);
-
-	CharToByte((char*)buff, Device, length,Realm_buf1,nonce_buf2,auth_buf3,domain_buf4, len);
-	char* cnonce_buf="163acd0e58793a190f29ee879d4b224f";//"08a9d86c1b5e45963cf82f43dca59c51";
-	Realm_buf1[len[0]]=0;
-	nonce_buf2[len[1]]=0;
-	auth_buf3[len[2]]=0;
-	char* nc="00000001";
-	//CString qop;qop=auth_buf3;/////////////////////////////
-	char User[200];
-	memset(User,0,200);
-	sprintf(User,"%s:%s:%s",gUser,Realm_buf1,gPass);
-	
-	char urii[200];
-	int kk=sprintf(urii,"%s:%s",Method,uri);//PUT:/PSIA/System/reboot";
-	urii[kk]=0;
-	char* A1 = MDString(User);
-	char AA1[33];
-	memset(AA1,0,33);
-	memcpy(AA1,A1,strlen(A1));
-	char* A2 = MDString(urii);
-	char AA2[33];
-	memset(AA2,0,33);
-	memcpy(AA2,A2,strlen(A2));
-	char rrr[200];
-	memset(rrr,0,200);
-	sprintf(rrr,"%s:%s:%s:%s:auth:%s",AA1,nonce_buf2,nc,cnonce_buf,AA2);
-//	printf("%s:%s:%s:%s:auth:%s\n",AA1,nonce_buf2,nc,cnonce_buf,AA2);
-	char* response = MDString(rrr);
-	char res[33];
-	memset(res,0,33);
-	memcpy(res,response,strlen(response));
-
-	//// 绗簩娆� 鍙戦��
-	char byte_arrayxxx[2600];
-	int lengthxxx = 0;
-	int iidx = 0;
-	AurhorizationResponseBytesReal(byte_arrayxxx,&lengthxxx,uri,nonce_buf2,cnonce_buf,res);
-
-	int llen = sprintf(byte_array,"%s %s HTTP/1.1\r\n",Method,uri); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"Content-Type: text/xml\r\n"); iidx+=llen;
-	strncpy(&byte_array[iidx],byte_arrayxxx,lengthxxx); iidx+=lengthxxx;
-	byte_array[iidx]=0x0d; iidx+=1;
-	byte_array[iidx]=0x0a; iidx+=1;
-	llen = sprintf(&byte_array[iidx],"Host: %s\r\n",gAnalyzerIP); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"Content-Length: 0\r\n"); iidx+=llen;
-	//					llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n"); iidx+=llen;
-	byte_array[iidx]=0x0d; iidx+=1;
-	byte_array[iidx]=0x0a; iidx+=1;					
-	byte_array[iidx]=0;
-
-}
-
-//RequestZipSerFileDownload..
-void MakeAuthorizedPacketSimp(char* buff,int length, char* Method,char* uri)
-{
-	char Device[150] ;
-	char Realm_buf1[512] ;
-	char nonce_buf2[512] ;
-	char auth_buf3[512] ;
-	char domain_buf4[512] ;
-	unsigned char len[4];
-
-	memset(Device,0,150);
-	memset(domain_buf4,0,512);
-
-	CharToByte((char*)buff, Device, length,Realm_buf1,domain_buf4,nonce_buf2,auth_buf3, len);
-	char* cnonce_buf="7e4c63bd7cb20c49ceafd1bd812428da";
-	Realm_buf1[len[0]]=0;
-	nonce_buf2[len[2]]=0;
-	auth_buf3[len[3]]=0;
-	char* nc="00000001";
-	//CString qop;qop=auth_buf3;/////////////////////////////
-	char User[200];
-	memset(User,0,200);
-	sprintf(User,"%s:%s:%s",gUser,Realm_buf1,gPass);
-
-	char urii[200];
-	int kk=sprintf(urii,"%s:%s",Method,uri);//PUT:/PSIA/System/reboot";
-	urii[kk]=0;
-	char* A1 = MDString(User);
-	char AA1[33];
-	memset(AA1,0,33);
-	memcpy(AA1,A1,strlen(A1));
-	char* A2 = MDString(urii);
-
-	char AA2[33];
-	memset(AA2,0,33);
-	memcpy(AA2,A2,strlen(A2));
-	char rrr[200];
-	memset(rrr,0,200);
-	sprintf(rrr,"%s:%s:%s:%s:auth:%s",AA1,nonce_buf2,nc,cnonce_buf,AA2);
-	char* response = MDString(rrr);
-	char res[33];
-	memset(res,0,33);
-	memcpy(res,response,strlen(response));
-
-	//// 绗簩娆� 鍙戦��
-	char byte_arrayxxx[2600];
-	int lengthxxx = 0;
-	int iidx = 0;
-	AurhorizationResponseBytes(byte_arrayxxx,&lengthxxx,uri,nonce_buf2,cnonce_buf,res);
-
-	int llen = sprintf(byte_array,"%s %s HTTP/1.1\r\n",Method,uri); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"Content-Type: text/xml\r\n"); iidx+=llen;
-	strncpy(&byte_array[iidx],byte_arrayxxx,lengthxxx); iidx+=lengthxxx;
-	byte_array[iidx]=0x0d; iidx+=1;
-	byte_array[iidx]=0x0a; iidx+=1;
-	llen = sprintf(&byte_array[iidx],"Host: %s\r\n",gAnalyzerIP); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"Content-Length: 0\r\n"); iidx+=llen;
-	//					llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n"); iidx+=llen;
-	byte_array[iidx]=0x0d; iidx+=1;
-	byte_array[iidx]=0x0a; iidx+=1;					
-	byte_array[iidx]=0;
-}
-void MakeAuthorizedPacketSimp111(char* buff,int length, char* Method,char* uri,char* Tm1,char* Tm2)
-{
-	char Device[150] ;
-	char Realm_buf1[512] ;
-	char nonce_buf2[512] ;
-	char auth_buf3[512] ;
-	char domain_buf4[512] ;
-	unsigned char len[4];
-
-	memset(Device,0,150);
-	memset(domain_buf4,0,512);
-
-	CharToByte((char*)buff, Device, length,Realm_buf1,nonce_buf2,auth_buf3,domain_buf4, len);
-	char* cnonce_buf="7e4c63bd7cb20c49ceafd1bd812428da";
-	Realm_buf1[len[0]]=0;
-	nonce_buf2[len[1]]=0;
-	auth_buf3[len[2]]=0;
-	char* nc="00000001";
-	//CString qop;qop=auth_buf3;/////////////////////////////
-	char User[200];
-	memset(User,0,200);
-	sprintf(User,"%s:%s:%s",gUser,Realm_buf1,gPass);
-
-	char urii[200];
-	int kk=sprintf(urii,"%s:%s",Method,uri);//PUT:/PSIA/System/reboot";
-	urii[kk]=0;
-	char* A1 = MDString(User);
-	char AA1[33];
-	memset(AA1,0,33);
-	memcpy(AA1,A1,strlen(A1));
-	char* A2 = MDString(urii);
-
-	char AA2[33];
-	memset(AA2,0,33);
-	memcpy(AA2,A2,strlen(A2));
-	char rrr[200];
-	memset(rrr,0,200);
-	sprintf(rrr,"%s:%s:%s:%s:auth:%s",AA1,nonce_buf2,nc,cnonce_buf,AA2);
-	char* response = MDString(rrr);
-	char res[33];
-	memset(res,0,33);
-	memcpy(res,response,strlen(response));
-
-	//// 绗簩娆� 鍙戦��
-	char byte_arrayxxx[2600];
-	char xmlbyte_array[512];
-	int lengthxxx = 0;
-	int iidx = 0;
-	int llen11=0;
-	AurhorizationResponseBytes(byte_arrayxxx,&lengthxxx,uri,nonce_buf2,cnonce_buf,res);
-	UrnStringToBytes(xmlbyte_array,&llen11,Tm1,Tm2);//xml calculation
-	int llen = sprintf(byte_array,"GET %s %s",uri,"HTTP/1.1\r\n"); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"Content-Length: %d\r\n",llen11); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"%s","Content-Type: text/xml\r\n"); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"Host: %s:%d\r\n",gAnalyzerIP,80); iidx+=llen;
-	llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n"); iidx+=llen;
-	strncpy(&byte_array[iidx],byte_arrayxxx,lengthxxx); iidx+=lengthxxx;
-	byte_array[iidx]=0x0d; iidx+=1;
-	byte_array[iidx]=0x0a; iidx+=1;
-	byte_array[iidx]=0x0d; iidx+=1;
-	byte_array[iidx]=0x0a; iidx+=1;
-	strncpy(&byte_array[iidx],xmlbyte_array,length); iidx+=length;
-	byte_array[iidx]=0;
-}
-int FindIdx(char* IP)
-{
-	for (int i=0;i<16;i++)
-	{
-		if(strcmp(sessions[i].IP,IP)==0) return i;
-	}
-	return -1;
-}
-int FindEmpty()
-{
-	for (int i=0;i<16;i++)
-	{
-		if(sessions[i].IP[0]==0) return i;
-	}
-	return -1;
-}
-
-int DivideTimeToYMDHMS(char* DateTimeStr,int* year,int* month,int* day, int* hour,int* min,int* sec)
-{
-	int yy,mm,dd,hh,Mm,ss;
-	//DivideTime(DateTimeStr,DateStr,TimeStr);
-	sscanf(DateTimeStr,"%d-%d-%dT%d:%d:%d",&yy,&mm,&dd,&hh,&Mm,&ss);
-	*year = yy;
-	*month = mm;
-	*day = dd;
-	*hour = hh;
-	*min = Mm;
-	*sec = ss;
-	return 0;
-
-}
-int CharToByte(char* chars, char* bytes, unsigned int count,char* ptr1,char* ptr2,char* ptr3,char* ptr4,unsigned char* number){	
-	int p=0;
-	int n=0;
-	int i=0;
-	unsigned char temp;
-	for(i = 0; i < count; i++)
-	{
-		temp = (unsigned char)chars[i];
-		if (p==1)
-		{
-			if (temp!=0x22)
-			{
-				bytes[n++]=(unsigned char)chars[i];
-			}			
-		}
-		if (temp==0x22)
-		{
-			p=p+1;
-		}
-		if (p==2)
-		{
-			bytes[n++]=0x2C;
-			p=0;			
-		}
-
-	}
-	char* token=NULL;
-	char s[]=",";
-	token=strtok(bytes,s);	
-	number[0]=strlen(token);	
-	memcpy(ptr1,token,strlen(token));
-	int nn=0;
-	while(token!=NULL)
-	{
-		token=strtok(NULL,s);		
-		nn=nn+1;		
-		if (nn==1)
-		{
-			number[1]=strlen(token);
-			memcpy(ptr2,token,strlen(token));
-		}
-		if (nn==2)
-		{
-			//ptr3=new char[strlen(token)];
-			number[2]=strlen(token);
-			memcpy(ptr3,token,strlen(token));
-		}
-		if (nn==3)
-		{
-			if(token!=NULL)
-			{
-				number[3]=strlen(token);
-				memcpy(ptr4,token,strlen(token));
-			}//ptr3=new char[strlen(token)];
-
-		}
-	}
-	return n;
-}
-void AnalySerFile(char* p_save_buf,int res)
-{
-	int ParagraphIdx;
-	bool somewhat;
-first:
-	somewhat=false;
-	memset(myEventLogs[EventCount].DebugMessageS,0,200);
-	memset(myEventLogs[EventCount].DebugMessageE,0,200);
-	memset(myEventLogs[EventCount].Rule,0,20);
-	memset(myEventLogs[EventCount].Region,0,30);
-	memset(myEventLogs[EventCount].clipUrl,0,200);
-	memset(myEventLogs[EventCount].Date,0,15);
-	memset(myEventLogs[EventCount].Time,0,15);
-	memset(myEventLogs[EventCount].Duration,0,20);
-
-	ParagraphIdx = memorycmp((unsigned char*)p_save_buf,res, "com.videoiq.fusion.cameraapi.metadata.Incident",46);
-	if(ParagraphIdx<0) ParagraphIdx = res;
-	int tmpSidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "started.",8);
-	int tmpEidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "Event ended.",12);
-	if(tmpSidx<0 && tmpEidx<0) goto last;
-	if(tmpSidx>=0 && tmpEidx<0){// Started paragraph
-		int sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "ruleName",8);
-		if(sidx>=0 && p_save_buf[sidx+8]==0x08){
-			int flen = p_save_buf[sidx+8+1]*256+p_save_buf[sidx+8+2];
-			memcpy(myEventLogs[EventCount].Rule,&p_save_buf[sidx+8+3],flen);
-		}
-		sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "soiName",7);
-		if(sidx>=0 && p_save_buf[sidx+7]==0x08){
-			int flen = p_save_buf[sidx+7+1]*256+p_save_buf[sidx+7+2];
-			memcpy(myEventLogs[EventCount].Region,&p_save_buf[sidx+7+3],flen);
-		}
-		sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "activity",8);
-		if(sidx>=0){
-			myEventLogs[EventCount].ActivityNum[0]=p_save_buf[sidx+8];
-			myEventLogs[EventCount].ActivityNum[1]=p_save_buf[sidx+8+1];
-			myEventLogs[EventCount].ActivityNum[2]=p_save_buf[sidx+8+2];
-			myEventLogs[EventCount].ActivityNum[3]=p_save_buf[sidx+8+3];
-			myEventLogs[EventCount].ActivityNum[4]=p_save_buf[sidx+8+4];
-		}
-
-		sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "clipUrl",7);
-		if(sidx>=0 && p_save_buf[sidx+7]==0x08){
-			int flen = (unsigned char)p_save_buf[sidx+7+1]*256+(unsigned char)p_save_buf[sidx+7+2];
-			memcpy(myEventLogs[EventCount].clipUrl,&p_save_buf[sidx+7+3],flen);
-		}
-		sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "debugMessage",12);
-		if(sidx>=0 && p_save_buf[sidx+12]==0x08){
-			int flen = (unsigned char)p_save_buf[sidx+12+1]*256+(unsigned char)p_save_buf[sidx+12+2];
-			memcpy(myEventLogs[EventCount].DebugMessageS,&p_save_buf[sidx+12+3],flen);
-		}
-		char tmp[200];
-		int tlen=0;
-		memset(tmp,0,200);
-		tlen = strlen(myEventLogs[EventCount].DebugMessageS);
-		memcpy(tmp,myEventLogs[EventCount].DebugMessageS,tlen);
-		if(myEventLogs[EventCount].DebugMessageS[0]!=0) somewhat = true;
-		// Get Vide lost
-		int eidx = memorycmp((unsigned char*)tmp,tlen, "Video lost detected",19);
-		if(eidx>=0){
-			strcpy(myEventLogs[EventCount].Rule,"Video Lost Rule");
-		}
-		// Get System Event
-		eidx = memorycmp((unsigned char*)tmp,tlen, "System activity detected",24);
-		if(eidx>=0){
-			strcpy(myEventLogs[EventCount].Rule,"System Event Rule");
-		}
-		// Get Start Time 
-		eidx = memorycmp((unsigned char*)tmp,tlen, " ",1);
-		if (eidx>=0){
-			memcpy(myEventLogs[EventCount].Date,tmp,eidx);
-			memcpy(tmp,&tmp[eidx+1],tlen-eidx);
-			eidx = memorycmp((unsigned char*)tmp,tlen-eidx, " ",1);
-			if (eidx>=0){
-				memcpy(myEventLogs[EventCount].Time,tmp,eidx-1);
-				memcpy(tmp,&tmp[eidx+1],tlen-eidx);
-				somewhat = true;
-			}
-		}
-	}
-	if(tmpSidx>=0 && tmpEidx>=0){// Started. Event Ended paragraph
-		int sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "debugMessage",12);
-		if(sidx>=0 && p_save_buf[sidx+12]==0x08)
-		{
-			int flen = (unsigned char)p_save_buf[sidx+12+1]*256+(unsigned char)p_save_buf[sidx+12+2];
-			char tmpdeg[200];
-			memset(tmpdeg,0,200);
-			memcpy(tmpdeg,&p_save_buf[sidx+12+3],flen);
-			// find owner record
-			int i;
-			for (i=0;i<EventCount;i++)
-			{
-				int j,llen = strlen(myEventLogs[i].DebugMessageS);
-				for (j=0;j<llen;j++)
-				{
-					if(myEventLogs[i].DebugMessageS[j] != tmpdeg[j]) break;
-				}
-				if(j>=llen) break;
-			}
-			if(i<EventCount)// Started message Matched OK
-			{
-				sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "activity",8);
-				if(sidx>=0){
-					myEventLogs[i].ActivityNum[0]=p_save_buf[sidx+8];
-					myEventLogs[i].ActivityNum[1]=p_save_buf[sidx+8+1];
-					myEventLogs[i].ActivityNum[2]=p_save_buf[sidx+8+2];
-					myEventLogs[i].ActivityNum[3]=p_save_buf[sidx+8+3];
-					myEventLogs[i].ActivityNum[4]=p_save_buf[sidx+8+4];
-				}
-				//				goto last;
-				//				strcpy(myEventLogs[i].DebugMessageE,tmpdeg);
-				//				goto last;
-
-				// get End time
-				char tmp[200];
-				memset(tmp,0,200);
-				memcpy(tmp,tmpdeg,flen);
-				int msglen = flen;
-				//				goto last;
-
-				int eeidx = memorycmp((unsigned char*)tmp,flen, "started.",8);
-				if (eeidx>=0){
-					memcpy(tmp,&tmp[eeidx+8+1],flen-eeidx-8-1);
-					flen = flen-eeidx-8-1 ;
-					tmp[flen]=0;
-					char tmpDate[15];
-					char tmpTime[15];
-					int eidx = memorycmp((unsigned char*)tmp,flen, " ",1);
-					if (eidx>=0){
-						memcpy(tmpDate,tmp,eidx);
-						tmpDate[eidx]=0;
-						memcpy(tmp,&tmp[eidx+1],flen-eidx);
-						eidx = memorycmp((unsigned char*)tmp,flen-eidx, " ",1);
-						if (eidx>=0){
-							memcpy(tmpTime,tmp,eidx-1);
-							tmpTime[eidx-1]=0;
-							//// Calculation duration
-							int yy2,mm2,dd2,hh2,Mm2,ss2;
-							int yy,mm,dd,hh,Mm,ss;
-							sscanf(myEventLogs[i].Date,"%d/%d/%d",&yy,&mm,&dd);
-							sscanf(myEventLogs[i].Time,"%d:%d:%d",&hh,&Mm,&ss);
-							sscanf(tmpDate,"%d/%d/%d",&yy2,&mm2,&dd2);
-							sscanf(tmpTime,"%d:%d:%d",&hh2,&Mm2,&ss2);
-
-							struct tm ttm;
-							ttm.tm_year = yy-2000+100;ttm.tm_mon=mm;ttm.tm_mday = dd;ttm.tm_hour=hh;ttm.tm_min=Mm;ttm.tm_sec=ss;
-							time_t StartTm = mktime(&ttm);
-							ttm.tm_year = yy2-2000+100;ttm.tm_mon=mm2;ttm.tm_mday = dd2;ttm.tm_hour=hh2;ttm.tm_min=Mm2;ttm.tm_sec=ss2;
-							time_t EndTm = mktime(&ttm);
-
-							int dur = EndTm-StartTm;
-							sprintf(myEventLogs[i].Duration,"%d 绉�",dur);
-							memcpy(myEventLogs[i].DebugMessageE,tmpdeg,msglen);
-						}
-					}
-				}
-			}
-		}
-	}
-
-	char ttmp[5000];
-	if((myEventLogs[EventCount].DebugMessageE[0]!=0|| myEventLogs[EventCount].DebugMessageS[0]!=0) && myEventLogs[EventCount].Rule[0]==0 && myEventLogs[EventCount].Region[0]==0){
-		memcpy(ttmp,(unsigned char*)p_save_buf,5000);
-	}
-	if(somewhat && EventCount<200-1){///repair
-		sprintf(myEventLogs[EventCount].Camera,"%d",RequestChannel+1);
-		int i;
-		for (i=0;i<EventCount;i++)
-		{
-			if(strcmp(myEventLogs[i].clipUrl,myEventLogs[EventCount].clipUrl)==0) break;
-		}
-		if(i>=EventCount)	{
-			EventCount++;
-		}
-	}
-last:
-	res = res - ParagraphIdx - 46 ;
-	if (res<=0) 
-		return;
-
-	memcpy((unsigned char*)p_save_buf,&p_save_buf[ParagraphIdx + 46],res);
-	goto first;
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-int memorycmp(unsigned char* src ,int slen, char* token, int len)
-{
-	int start=0,k,i,klen=strlen(token);
-lp1:
-	for(i=start;i<slen;i++) if(src[i]==token[0]) break;
-	if (i>=slen) return -1;
-	k=i;
-	for(i=0;i<klen;i++) 
-	{
-		if(src[k+i]!=token[i])
-		{
-			start=k+i;
-			goto lp1;
-		}
-	}
-	if(i>=klen) return k;
-	return -1;
-}
-int stringcmp(char* src ,char* token, int len)
-{
-	int start=0,k,i,slen=strlen(src);
-lp:
-	for(i=start;i<slen;i++) if(src[i]==token[0]) break;
-	if (i>=slen) return -1;
-	k=i;
-	for(i=0;i<len;i++) 
-	{
-		if(src[k+i]!=token[i])
-		{
-			start=k+i;
-			goto lp;
-		}
-	}
-	if(i>=len) return k;
-	return -1;
-}
-
-void AurhorizationResponseBytes(char* byte_array_out,int * byte_array_length_out,char *Myuri, char *nonce,char *cnonce,char *response)
-{
-	//	Authorization: Digest username="supervisor", realm="VideoIQ", nonce="n99u1VYBAABAf0HT+h92EO4hT2CzmfxG", uri="/PSIA/VIQ/Event/metadata/0/files", response="7d8d929e39655ad9f3e6e94e9004792e", qop=auth, nc=00000001, cnonce="0d2175d8cdb63f84f18894200e129ace", algorithm="MD5"
-	int idx=0,len;
-	idx = sprintf(byte_array_out,"%s","Authorization: Digest username="); 
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s","supervisor");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",realm=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s","VideoIQ");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",nonce=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx], "%s",nonce);idx+=len;//"n99u1VYBAABAf0HT+h92EO4hT2CzmfxG"
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",uri=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",Myuri);idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",algorithm=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s","MD5");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",response=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",response);idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",qop=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s","auth");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",nc=00000001,cnonce=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",cnonce);idx+=len;//cnonce
-	byte_array_out[idx++]=0x22;//'"'
-	*byte_array_length_out = idx;
-}
-void AurhorizationResponseBytesReal(char* byte_array_out,int * byte_array_length_out,char *Myuri, char *nonce,char *cnonce,char *response)
-{
-	//	Authorization: Digest username="supervisor", realm="VideoIQ", nonce="n99u1VYBAABAf0HT+h92EO4hT2CzmfxG", uri="/PSIA/VIQ/Event/metadata/0/files", response="7d8d929e39655ad9f3e6e94e9004792e", qop=auth, nc=00000001, cnonce="0d2175d8cdb63f84f18894200e129ace", algorithm="MD5"
-	int idx=0,len;
-	idx = sprintf(byte_array_out,"%s","Authorization: Digest username="); 
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s","supervisor");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",realm=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s","VideoIQ");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",nonce=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx], "%s",nonce);idx+=len;//"n99u1VYBAABAf0HT+h92EO4hT2CzmfxG"
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",uri=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",Myuri);idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",algorithm=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s","MD5");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",cnonce=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",cnonce);idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",nc=00000001,qop=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s","auth");idx+=len;//cnonce
-	byte_array_out[idx++]=0x22;//'"'
-	
-	len = sprintf(&byte_array_out[idx],"%s",",response=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",response);idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	*byte_array_length_out = idx;
-}
-void AurhorizationResponseBytesReatart(char* byte_array_out,int * byte_array_length_out,char *Myuri, char *nonce,char *cnonce,char *response)
-{
-	int idx=0,len;
-	idx = sprintf(byte_array_out,"%s","Authorization: Digest username="); 
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s","supervisor");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",realm=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s","VideoIQ");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",nonce=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx], "%s",nonce);idx+=len;//"n99u1VYBAABAf0HT+h92EO4hT2CzmfxG"
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",uri=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",Myuri);idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",algorithm=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s","MD5");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",cnonce=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",cnonce);idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",nc=00000001");idx+=len;
-
-	len = sprintf(&byte_array_out[idx],"%s",",qop=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s","auth");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",",response=");idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	len = sprintf(&byte_array_out[idx],"%s",response);idx+=len;
-	byte_array_out[idx++]=0x22;//'"'
-	*byte_array_length_out = idx;
-
-}
-				   /*
-				   --VIQeventEVENTeventVIQ
-					   Content-type: application/xml; charset="UTF-8"
-
-					   <urn:ViqEventNotificationAlert urn:version="1.0" xmlns:urn="urn:videoiq-com">
-					   <urn:channelId>3</urn:channelId>
-					   <urn:eventId>6478</urn:eventId>
-					   <urn:startTime urn:version="1.0">
-					   <urn:date>2016-11-07T08:50:54.063</urn:date><urn:offset>28800000</urn:offset>
-					   </urn:startTime>
-					   <urn:clipUrl>/media/clips/3/2016/11/7/8/3/2016_11_07-08_50_48.mp4</urn:clipUrl>
-					   <urn:ruleId>17</urn:ruleId>
-					   <urn:ruleName>Video Lost Rule</urn:ruleName>
-					   <urn:soiId>-1</urn:soiId>
-					   <urn:soiName>Reserved SOI</urn:soiName>
-					   <urn:activity>Video Lost</urn:activity>
-					   <urn:objectType>Unknown</urn:objectType>
-					   <urn:aborted>false</urn:aborted>
-					   <urn:acknowledged>false</urn:acknowledged>
-					   <urn:ackNotes xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><urn:falseAlarm>false</urn:falseAlarm>
-					   <urn:debugMessage>2016/11/07 08:50:54.63: Video lost detected: 101. Event (id=6478) started.</urn:debugMessage>
-					   </urn:ViqEventNotificationAlert>
-					   */
-
-int AnalyXMLUrnEVENT(char* buff,int length,AlarmInfo* RealAlarmEvent)
-{
-	int sidx,eidx;
-	sidx = stringcmp((char*)buff,"<urn:channelId>",15);
-	eidx = stringcmp((char*)buff,"</urn:channelId>",16);
-	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->channelId,&buff[sidx+15],eidx-sidx-15);
-	sidx = stringcmp((char*)buff,"<urn:eventId>",13);
-	eidx = stringcmp((char*)buff,"</urn:eventId>",14);
-	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->eventId,&buff[sidx+13],eidx-sidx-13);
-
-	sidx = stringcmp((char*)buff,"<urn:startTime",14);
-	eidx = stringcmp((char*)buff,"</urn:startTime",15);
-	char tmp[200];
-	memset(tmp,0,200);
-	if(sidx>=0 && eidx>=0 && sidx < eidx){
-		memcpy(tmp,&buff[sidx+15],eidx-sidx-14);
-		sidx=stringcmp((char*)tmp,"<urn:date>",10);
-		eidx = stringcmp((char*)tmp,"</urn:date>",11);
-		if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->startTime,&tmp[sidx+10],eidx-sidx-10);
-		sidx=stringcmp((char*)tmp,"<urn:offset>",12);
-		eidx = stringcmp((char*)tmp,"</urn:offset>",13);
-		if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->soffset,&tmp[sidx+12],eidx-sidx-12);
-	}
-	sidx = stringcmp((char*)buff,"<urn:endTime",12);
-	if(sidx>=0){
-		int ssidx=stringcmp((char*)buff,"<urn:date>",10);
-		eidx = stringcmp((char*)buff,"</urn:date>",11);
-		if(ssidx>=0 && eidx>=0 && ssidx < eidx) memcpy(RealAlarmEvent->endTime,&buff[ssidx+10],eidx-ssidx-10);
-	}
-	sidx = stringcmp((char*)buff,"<urn:clipUrl>",13);
-	eidx = stringcmp((char*)buff,"</urn:clipUrl>",14);
-	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->clipUrl,&buff[sidx+13],eidx-sidx-13);
-	sidx = stringcmp((char*)buff,"<urn:ruleId>",12);
-	eidx = stringcmp((char*)buff,"</urn:ruleId>",13);
-	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->ruleId,&buff[sidx+12],eidx-sidx-12);
-	sidx = stringcmp((char*)buff,"<urn:ruleName>",14);
-	eidx = stringcmp((char*)buff,"</urn:ruleName>",15);
-	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->ruleName,&buff[sidx+14],eidx-sidx-14);
-	sidx = stringcmp((char*)buff,"<urn:soiId>",11);
-	eidx = stringcmp((char*)buff,"</urn:soiId>",12);
-	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->soiId,&buff[sidx+11],eidx-sidx-11);
-	sidx = stringcmp((char*)buff,"<urn:soiName>",13);
-	eidx = stringcmp((char*)buff,"</urn:soiName>",14);
-	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->soiName,&buff[sidx+13],eidx-sidx-13);
-	sidx = stringcmp((char*)buff,"<urn:activity>",14);
-	eidx = stringcmp((char*)buff,"</urn:activity>",15);
-	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->activity,&buff[sidx+14],eidx-sidx-14);
-	sidx = stringcmp((char*)buff,"<urn:objectType>",16);
-	eidx = stringcmp((char*)buff,"</urn:objectType>",17);
-	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->objectType,&buff[sidx+16],eidx-sidx-16);
-	sidx = stringcmp((char*)buff,"<urn:aborted>",13);
-	eidx = stringcmp((char*)buff,"</urn:aborted>",14);
-	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->aborted,&buff[sidx+13],eidx-sidx-13);
-	sidx = stringcmp((char*)buff,"<urn:acknowledged>",18);
-	eidx = stringcmp((char*)buff,"</urn:acknowledged>",19);
-	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->acknowledged,&buff[sidx+18],eidx-sidx-18);
-	sidx = stringcmp((char*)buff,"<urn:debugMessage>",18);
-	eidx = stringcmp((char*)buff,"</urn:debugMessage>",19);
-	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->debugMessage,&buff[sidx+18],eidx-sidx-18);
-
-	return 0;
-}
-
-//鍒ゆ柇鏄惁涓虹洰褰�
-bool is_dir(const char *path)
-{
-    struct stat statbuf;
-    if(lstat(path, &statbuf) ==0)//lstat杩斿洖鏂囦欢鐨勪俊鎭紝鏂囦欢淇℃伅瀛樻斁鍦╯tat缁撴瀯涓�
-    {
-        return S_ISDIR(statbuf.st_mode) != 0;//S_ISDIR瀹忥紝鍒ゆ柇鏂囦欢绫诲瀷鏄惁涓虹洰褰�
-    }
-    return false;
-}
-
-//鍒ゆ柇鏄惁涓哄父瑙勬枃浠�
-bool is_file(const char *path)
-{
-    struct stat statbuf;
-    if(lstat(path, &statbuf) ==0)
-        return S_ISREG(statbuf.st_mode) != 0;//鍒ゆ柇鏂囦欢鏄惁涓哄父瑙勬枃浠�
-    return false;
-}
-//鍒ゆ柇鏄惁鏄壒娈婄洰褰�
-bool is_special_dir(const char *path)
-{
-    return strcmp(path, ".") == 0 || strcmp(path, "..") == 0;
-}
-
-//鐢熸垚瀹屾暣鐨勬枃浠惰矾寰�
-void get_file_path(const char *path, const char *file_name,  char *file_path)
-{
-    strcpy(file_path, path);
-    if(file_path[strlen(path) - 1] != '/')
-        strcat(file_path, "/");
-    strcat(file_path, file_name);
-}
-
-void delete_file(const char *path)
-{
-	char cmd[30];
-	memset(cmd,0,30);
-	sprintf(cmd,"rm -f %s",path);
-	system(cmd);
-}
-void delete_folder(const char *path)
-{
-	char cmd[30];
-	memset(cmd,0,30);
-	sprintf(cmd,"rm -r %s",path);
-	system(cmd);	
-}
-int doesFileExist(const char *filename)
-{
-	struct stat st;
-	int result=stat(filename,&st);
-	if (result==0)
-	 return 1;
-	 else return 0;
- }  
-int GetFileNameInFolder(char* dirname,lpfilenames lpfilename)
-{  
-	int num=0;
-    DIR *p_dir;   
-    struct dirent *p_dirent;  
-    if((p_dir = opendir(dirname)) == NULL){  
-        printf("---->can\'t open %s\n",dirname);  
-        return 0;  
-    }  
-    while((p_dirent = readdir(p_dir))){  
-        strcpy(lpfilename[num].name ,p_dirent->d_name);  
-		num++;
-    }  
-    return num;  
-}  
-int net_test(char* serverIP,char* port)
-{
-	struct sockaddr_in servaddr;
-	int strlen=sizeof(servaddr);
-	int sockfdd;
-	if((sockfdd=socket(PF_INET,SOCK_STREAM,0))<0){
-		perror("socket fail");
-		close(sockfdd);
-		return -1;
-	}
-	memset(&servaddr,0,strlen);
-	servaddr.sin_family=AF_INET;
-	inet_pton(AF_INET,serverIP,&servaddr.sin_addr);
-	servaddr.sin_port=htons(atoi(port));
-	if(connect(sockfdd,(struct sockaddr*)&servaddr,strlen)<0){
-		//		perror("connect fail-3");
-		close(sockfdd);
-		return -2;
-	}
-	close(sockfdd);
-	return 0;
-}
-void GPIOinit(void)
-{
-	int retVal = -1;
-	int PortNum = 0xA06;
-	unsigned char wVal = 0x15;
-	retVal = GPIO_OPEN(PortNum);
-	printf("GPIO OPEN RES = %d  \n",retVal);
-	GPIO_WRITE(PortNum,wVal);
-	printf("GPIO WRITE VALUE = 0x%X \n", wVal);
-
-	retVal = GPIO_READ(PortNum);
-	printf("GPIO READ VALUE 02 = 0x%X  \n",retVal);
-
-	GPIO_CLOSE(PortNum);
-}
-int GPIOoutput(int no)
-{
-	int PortNum = 0xA06;
-	switch(no){
-	case 0: 
-		GPIO_WRITE(PortNum,0x15);
-		return 0;
-	case 1: 
-		GPIO_WRITE(PortNum,0x57);
-		return 0;
-	case 2: 
-		GPIO_WRITE(PortNum,0x5D);
-		return 0;
-	case 3: 
-		GPIO_WRITE(PortNum,0x5F);
-		return 0;
-	case 4: 
-		GPIO_WRITE(PortNum,0x75);
-		return 0;
-	case 5:  
-		GPIO_WRITE(PortNum,0x77);
-		return 0;
-	case 6: 
-		GPIO_WRITE(PortNum,0x7D);
-		return 0;
-	case 7: 
-		GPIO_WRITE(PortNum,0x7F);
-		return 0;
-	case 8: 
-		GPIO_WRITE(PortNum,0xD5);
-		return 0;		
-	case 9:  
-		GPIO_WRITE(PortNum,0xD7);
-		return 0;
-	case 10: 
-		GPIO_WRITE(PortNum,0xDD);
-		return 0;
-	case 11: 
-		GPIO_WRITE(PortNum,0xDF);
-		return 0;
-	case 12: 
-		GPIO_WRITE(PortNum,0xF5);
-		return 0;
-	case 13: 
-		GPIO_WRITE(PortNum,0xF7);
-		return 0;
-	case 14: 
-		GPIO_WRITE(PortNum,0xFD);
-		return 0;
-	case 15: 
-		GPIO_WRITE(PortNum,0xFF);
-		return 0;
-	}
-	return -1;
-}
-int GPIO_OPEN(int PortNum)
-{
-   return ioperm(PortNum, 0x01, 0x01);
-}
-
-void GPIO_CLOSE(int PortNum)
-{
-   ioperm(PortNum, 0x01, 0x00);
-}
-
-int GPIO_READ(int PortNum)
-{
-  return inb(PortNum);
-}
-
-void GPIO_WRITE(int PortNum,unsigned char DATA)
-{
-  outb(DATA,PortNum);
-}
-
-
-
-//=====================================MD5 Function Definition============================================
-void MD5Init (MD5_CTX *context)    /* context */
-{
-  context->count[0] = context->count[1] = 0;
-  context->state[0] = 0x67452301;    /* Load magic initialization constants.*/
-  context->state[1] = 0xefcdab89;
-  context->state[2] = 0x98badcfe;
-  context->state[3] = 0x10325476;
-}
-
-/* -----------------------------------------------------------------------------------
-   MD5 block update operation. Continues an MD5 message-digest
-   operation, processing another message block, and updating the  context.
--------------------------------------------------------------------------------------*/
-                /* context */     /* input block */  /* length of input block */
-void MD5Update (MD5_CTX *context, unsigned char *input,unsigned int inputLen  )
-{
-  unsigned int i, index, partLen;
-  index = (unsigned int)((context->count[0] >> 3) & 0x3F);   /* Compute number of bytes mod 64 */
-
-  if ( (context->count[0] += ( (UINT4)inputLen << 3) ) < ( (UINT4)inputLen << 3 ) )
-		context->count[1]++;
-  
-  context->count[1] += ((UINT4)inputLen >> 29);
-  partLen = 64 - index;
-
-  /* Transform as many times as possible.*/
-  if (inputLen >= partLen) 
-  {
-	MD5_memcpy( (POINTER)&context->buffer[index], (POINTER)input, partLen);
-	MD5Transform (context->state, context->buffer);
-
-	for (i = partLen; i + 63 < inputLen; i += 64)
-			MD5Transform (context->state, &input[i]);
-
-	index = 0;
-  }
-  else
-		i = 0;
-  /* Buffer remaining input */
-  MD5_memcpy( (POINTER)&context->buffer[index], (POINTER)&input[i],inputLen-i );
-}
-
-/* 
-  MD5 finalization. Ends an MD5 message-digest operation, writing the
-  the message digest and zeroizing the context.
-*/
-void MD5Final (unsigned char digest[16], MD5_CTX *context)
-                /* message digest */      /* context */
-{
-  unsigned char bits[8];
-  unsigned int index, padLen;
-  
-  Encode (bits, context->count, 8); /* Save number of bits */
-
-  /* Pad out to 56 mod 64.*/
-  index = (unsigned int)((context->count[0] >> 3) & 0x3f);
-  padLen = (index < 56) ? (56 - index) : (120 - index);
-  MD5Update (context,(unsigned char*) PADDING, padLen);
-
-  MD5Update (context, bits, 8);   /* Append length (before padding) */
-  Encode (digest, context->state, 16); /* Store state in digest */
-
-  /* Zeroize sensitive information.*/
-  MD5_memset ((POINTER)context, 0, sizeof (*context));
-}
-
-/* MD5 basic transformation. Transforms state based on block.
- */
-void MD5Transform (UINT4 state[4],unsigned char block[64])
-{
-	
-	UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
-
-	Decode (x, block, 64);
-  /* Round 1 */
-  FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
-  FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
-  FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
-  FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
-  FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
-  FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
-  FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
-  FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
-  FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
-  FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
-  FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
-  FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
-  FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
-  FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
-  FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
-  FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
-  /* Round 2 */
-  GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
-  GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
-  GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
-  GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
-  GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
-  GG (d, a, b, c, x[10], S22,  0x2441453); /* 22 */
-  GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
-  GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
-  GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
-  GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
-  GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
-  GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
-  GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
-  GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
-  GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
-  GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
-  /* Round 3 */
-  HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
-  HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
-  HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
-  HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
-  HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
-  HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
-  HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
-  HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
-  HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
-  HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
-  HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
-  HH (b, c, d, a, x[ 6], S34,  0x4881d05); /* 44 */
-  HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
-  HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
-  HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
-  HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
-  /* Round 4 */
-  II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
-  II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
-  II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
-  II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
-  II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
-  II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
-  II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
-  II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
-  II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
-  II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
-  II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
-  II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
-  II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
-  II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
-  II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
-  II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
-
-  state[0] += a;
-  state[1] += b;
-  state[2] += c;
-  state[3] += d;
-
-  /* Zeroize sensitive information.*/
-  MD5_memset ((POINTER)x, 0, sizeof (x));
-}
-
-/* Encodes input (UINT4) into output (unsigned char). Assumes len is
-  a multiple of 4.
- */
-void Encode (unsigned char *output,UINT4 *input,unsigned int len)
-{
-  unsigned int i, j;
-
-  for (i = 0, j = 0; j < len; i++, j += 4) 
-  {
-	output[j] = (unsigned char)(input[i] & 0xff);
-	output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
-	output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
-	output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
-  }
-}
-
-/* Decodes input (unsigned char) into output (UINT4). Assumes len is
-  a multiple of 4.
- */
-void Decode (UINT4 *output,unsigned char *input,unsigned int len)
-{
-  unsigned int i, j;
-
-  for (i = 0, j = 0; j < len; i++, j += 4)
-	output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) | (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
-}
-
-/* Note: Replace "for loop" with standard memcpy if possible. */
-void MD5_memcpy (POINTER output,POINTER input,unsigned int len)
-{
-  unsigned int i;
-
-  for (i = 0; i < len; i++)
-	  output[i] = input[i];
-}
-
-/* Note: Replace "for loop" with standard memset if possible. */
-void MD5_memset (POINTER output,int value,unsigned int len)
-{
-  unsigned int i;
-
-  for (i = 0; i < len; i++)
-	 ((char *)output)[i] = (char)value;
-}
-
-/* Digests a string and prints the result. */
-char* MDString (char *string)
-{
-  MD5_CTX context;
-  unsigned char digest[16];
-  char output1[33];
-  static  char output[33]={"\0"};
-  unsigned int len = strlen (string);
-  int i;
-  MD5Init (&context);
-  MD5Update (&context, (unsigned char*)string, len);
-  MD5Final (digest, &context);
-  for (i = 0; i < 16; i++)
-  {
-	  sprintf(&(output1[2*i]),"%02x",(unsigned char)digest[i]);
-	  //sprintf(&(output1[2*i+1]),"%02x",(unsigned char)(digest[i]<<4));
-  }
-  for(i=0;i<32;i++)
-  output[i]=output1[i];
-  return output;
-}
-
-
-
-
+/*
+ * proxyserver.c
+ *
+ *  Created on: Oct 9, 2016
+ *      Author: JKM
+ */
+
+#include<dirent.h>  
+#include"proxyserver.h"
+int RequestChannel;
+char* gAnalyzerIP;
+char* gUser;
+char* gPass;
+int GSocket;
+int gMySock[16];
+int threadIdx=0;
+char byte_array[2600];
+char buff[102400];
+int gGettingStep=0;
+char uri[300];
+time_t StartTm,EndTm; 
+int bMetadataSaving=0;
+int bZipFileSaving=0;
+unsigned char *memoryband[100];
+int bandsize[100];
+int bandCount = 0;
+char ZipSerFileName[1000][300];
+int ZipSerFileNum=0;
+int ZipCountidx;
+char NetInfo[128];
+char EventString[5000 * 1024];
+EVENT_LOG myEventLogs[1000 * 1024];
+int EventCount=0;
+int EventCountInSearchRange=0;
+
+int FindIdx(char* IP);
+int FindEmpty();
+void* MyEquipmentthread(void* arg);
+pthread_t thread_noEQ[16];
+int gCapturing[16];
+SESSION sessions[16];
+#define MAX_NUM 16
+#define MAX 1024
+#define fileread_buf 128
+AlarmInfo RealAlarmEvent[16][1000];
+
+//#define DBG_LOG
+#define ZIP_HOME "/tmp"
+
+/////////////////////////////////////////////////
+char* strnncat(char*s1,char*s2,int n)
+{
+	int len = strlen(s1);
+
+	for(int i=0;i<n;i++)
+	{
+		s1[len+i]=s2[i];
+	}
+	return s1;
+}
+void SearchAppendString(char *buff,char* token1,char* token2,char* dispName)
+{
+	int len = strlen(token1);
+	int sidx = stringcmp((char*)buff,token1,len);
+	int eidx = stringcmp((char*)buff,token2,len+1);
+	if(sidx >=0 && eidx>=0 && eidx>sidx+len)	{
+		strcat(EventString,dispName);strnncat(EventString,&buff[sidx+len],eidx-sidx-len);
+		strcat(EventString,"\n");
+	}
+}
+char* GetDeviceInfo(char* AnalyserIP)
+{
+	memset(EventString,0,100000);
+	gAnalyzerIP = AnalyserIP;
+
+	if(AnalyserIP==NULL || AnalyserIP[0]==0) return "Param Error";
+
+	struct sockaddr_in servaddr;
+	int strlen1=sizeof(servaddr);
+	if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){
+		return "socket fail2";
+	}
+	memset(&servaddr,0,strlen1);
+	servaddr.sin_family=AF_INET;
+	inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr);
+	servaddr.sin_port=htons(80);
+
+	if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){
+		close(GSocket);
+		return "Equipment connect fail";
+	}
+	int length = 0;//GET /PSIA/System/deviceInfo HTTP/1.1
+
+	length = sprintf(byte_array,"GET /PSIA/System/deviceInfo HTTP/1.1\r\nContent-Type: text/xml\r\nHost: %s\r\nContent-Length: 0\r\nConnection: Keep-Alive\r\n\r\n",AnalyserIP);		 
+	write(GSocket,byte_array,length);
+	//	printf("%s",byte_array);
+	memset(EventString,0,100000);
+	while(1){
+		memset(buff,0,sizeof(buff));
+		length=read(GSocket,&buff,sizeof(buff));	   
+		if(length<=0)
+		{
+			close(GSocket);
+			break;
+		}
+		if(stringcmp((char*)buff,"<urn:DeviceInfo",15)>=0){
+			SearchAppendString((char*)buff,"<urn:deviceName>","</urn:deviceName>","deviceName:");
+			SearchAppendString((char*)buff,"<urn:deviceID>","</urn:deviceID>","deviceID:");
+			SearchAppendString((char*)buff,"<urn:deviceDescription>","</urn:deviceDescription>","deviceDescription:");
+			SearchAppendString((char*)buff,"<urn:model>","</urn:model>","model:");
+			SearchAppendString((char*)buff,"<urn:serialNumber>","</urn:serialNumber>","serialNumber:");
+			SearchAppendString((char*)buff,"<urn:macAddress>","</urn:macAddress>","macAddress:");
+			SearchAppendString((char*)buff,"<urn:firmwareVersion>","</urn:firmwareVersion>","firmwareVersion:");
+			SearchAppendString((char*)buff,"<urn:bootVersion>","</urn:bootVersion>","bootVersion:");
+			SearchAppendString((char*)buff,"<urn1:httpPort>","</urn1:httpPort>","httpPort:");
+			SearchAppendString((char*)buff,"<urn1:httpsPort>","</urn1:httpsPort>","httpsPort:");
+			SearchAppendString((char*)buff,"<urn1:rtspPort>","</urn1:rtspPort>","rtspPort:");
+			SearchAppendString((char*)buff,"<urn1:httpsEnabled>","</urn1:httpsEnabled>","httpsEnabled:");
+			SearchAppendString((char*)buff,"<urn1:webAuthenticationType>","</urn1:webAuthenticationType>","webAuthenticationType:");
+			SearchAppendString((char*)buff,"<urn1:rtspAuthenticationEnabled>","</urn1:rtspAuthenticationEnabled>","rtspAuthenticationEnabled:");
+			close(GSocket);
+			return EventString;
+		}
+	}
+	return EventString;
+}
+int InsertAnalyser(char *AnalyserName,char* AnalyserIP,char* AnalyserPort,char* ServerIP,char* ServerPort,char* user,char* pass,char* resol,char* commType)
+{
+	int ret=0;
+	ret=Check_MysqlData(AnalyserName,AnalyserIP,AnalyserPort,ServerIP,ServerPort,user, pass, resol, commType);	
+	if(ret !=9)
+	   return InsertMysqlData(AnalyserName,AnalyserIP,AnalyserPort,ServerIP,ServerPort,user, pass, resol, commType);	
+	else
+	  return 0;
+}
+int DeleteAnalyser(char* AnalyserIP)																									//8.鍒犻櫎璁惧   鍙傛暟锛氳澶噄p	杩斿洖锛氭垚鍔熸垨澶辫触鐨勬彁绀恒��
+{
+	int ret=0;
+	MYSQL *conn;	
+	char *server="localhost";
+	char *user="root";
+	char *password="123";
+	char *database="opentutorials";
+	char query[255];
+	if(!(conn=mysql_init((MYSQL*)NULL))){
+		printf("init fail\n");
+		return -1;
+	}
+	if(!mysql_real_connect(conn,server,user,password,NULL,3306,NULL,0)){
+		printf("connect error.\n");
+		return -1;
+	}
+	if(mysql_select_db(conn,database)!=0){
+		mysql_close(conn);
+		printf("select_db_fail.\n");
+		return -1;
+	}
+	sprintf(query, "delete from tbl_deviceinfo where equipmentip='%s';",AnalyserIP);
+	if(mysql_query(conn,query)){
+		printf("query fail\n");
+		return -1;
+	}	
+	mysql_close(conn);
+	return ret;
+ 
+}
+char* GetAnalyserAll()																												//9.鏌ヨ璁惧   鍙傛暟锛氭棤		杩斿洖锛氬垎鏋愬櫒鐨勫悕绉板拰ip
+{
+	memset(EventString,0,100000);
+	int ret = Read_MysqlData();
+	if(ret==0)	return 	EventString;
+	else  return "fail";	
+}
+char* GetAnalyserNet(void)																												//5.鑾峰彇褰撳墠杞彂鍣ㄧ殑ip		鍙傛暟锛氭棤銆傝繑鍥烇細褰撳墠鐨刬p鍦板潃瀛愮綉鎺╃爜鍜岀綉鍏�
+{
+	memset(NetInfo,0,128);
+	/// function
+	return NetInfo;
+}
+
+int SetAnalyserNet(char* NetInfo)																										//6.鎵嬪姩璁剧疆杞彂鍣ㄧ殑ip		鍙傛暟锛歩p锛屽瓙缃戞帺鐮侊紝榛樿缃戝叧	銆�	杩斿洖锛氫慨鏀圭姸鎬�(鎴愬姛鎴栬�呭け璐�)
+{
+	int ret=0;
+	/// function
+	return ret;
+}
+//// 鍔熻兘锛氭煡鐪嬪垎鏋愬櫒杩炴帴鐘舵��
+//// 杈撳叆锛氬垎鏋愬櫒IP
+//// 杈撳嚭锛�0锛堟垚鍔燂級, -1(鍒濆鍖栧け璐�),-2(杩炴帴澶辫触)
+int GetConnectState(char* AnalyserIP)																									
+{
+	return net_test(AnalyserIP,"80");
+}
+//// 鍔熻兘锛氶噸鍚垎鏋愬櫒
+//// 杈撳叆锛氬垎鏋愬櫒IP,鐢ㄦ埛锛屽瘑鐮侊紝RestartKind=0(GPIO out),RestartKind=1(Protocol Mode), no(GPIO Pin no=>0~15)
+//// 杈撳嚭锛�0锛堟垚鍔燂級, -1(鍒濆鍖栧け璐�),-2(杩炴帴澶辫触)
+int RestartAnalyser(char* AnalyserIP,char* user,char* pass,int RestartKind,int no)														
+{
+	switch(RestartKind){
+	case 0:
+		if(no<0 || no>15) return -1;
+		GPIOinit();
+		GPIOoutput(no);
+		printf("GPIO output no=%d",no);
+		return 0;
+	case 1:
+		return RestartCommand(AnalyserIP,user,pass);
+	default:
+		return -1;
+	}
+	return 0;
+}
+//// 鍔熻兘锛氬紑濮嬫煡鐪嬪疄鏃剁洃鎺�
+//// 杈撳叆锛氬垎鏋愬櫒IP,鐢ㄦ埛,瀵嗙爜
+//// 杈撳嚭锛�0锛堟垚鍔燂級, -1(鍒濆鍖栧け璐�),-2(杩炴帴澶辫触)
+int RealEventStart(char* AnalyserIP,char* user,char* pass)
+{
+	gAnalyzerIP = AnalyserIP;
+	gUser = user;
+	gPass = pass;
+	int bbbb=0;
+
+	if(AnalyserIP==NULL || AnalyserIP[0]==0) return -1;
+
+	struct sockaddr_in servaddr;
+	int strlen1=sizeof(servaddr);
+	if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){
+		perror("socket fail2");
+		return -1;
+	}
+	memset(&servaddr,0,strlen1);
+	servaddr.sin_family=AF_INET;
+	inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr);
+	servaddr.sin_port=htons(80);
+
+	if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){
+		printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80);
+		close(GSocket);
+		return -2;
+	}
+	int length = 0;
+	length = sprintf(byte_array,"POST /PSIA/VIQ/System/sessions/permanent HTTP/1.1\r\nContent-Type: text/xml\r\nHost: %s\r\nContent-Length: 0\r\nConnection: Keep-Alive\r\n\r\n",AnalyserIP);		 
+	write(GSocket,byte_array,length);
+//	printf("%s",byte_array);
+	while(1){
+		memset(buff,0,sizeof(buff));
+		length=read(GSocket,&buff,sizeof(buff));	   
+		if(length<=0)
+		{
+			close(GSocket);
+			break;
+		}
+		if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0 && bbbb==0)
+		{
+			// analyse reception
+			MakeAuthorizedPacketReal(buff,length,"POST","/PSIA/VIQ/System/sessions/permanent");
+			zclock_sleep(100);
+			write(GSocket,byte_array,strlen(byte_array));
+//			printf("%s\n",(char*)byte_array);					
+			bbbb=1;
+			continue;
+		}
+		if(bbbb==1){
+			int sidx = stringcmp((char*)buff,"<urn:id>",8);
+			if(sidx >=0){//<urn:ViqDateTimeInterval urn:version="1.0" xmlns:urn="urn:videoiq-com"><urn:startTime urn:version="1.0"><urn:date>2016-08-18T01:07:20.749</urn:date><urn:offset>0</urn:offset></urn:startTime><urn:endTime urn:version="1.0"><urn:date>2016-08-29T08:33:48.231</urn:date><urn:offset>0</urn:offset></urn:endTime></urn:ViqDateTimeInterval>
+				int eidx = stringcmp((char*)buff,"</urn:id>",9);
+				if(eidx>=0 && sidx+8<eidx){
+					int Idx=FindIdx(gAnalyzerIP);
+					if(Idx==-1){
+						Idx = FindEmpty();
+						strcpy(sessions[Idx].IP,gAnalyzerIP);
+						memcpy(sessions[Idx].ID,&buff[sidx+8],eidx-sidx-8);
+					}
+					memcpy(sessions[Idx].ID,&buff[sidx+8],eidx-sidx-8);
+					bbbb=2;
+//					printf("SessionID =======> %s\n",(char*)sessions[Idx].ID);		
+					break;
+				}
+			}
+		}
+	}
+	close(GSocket);
+
+	int Idx=FindIdx(gAnalyzerIP);
+	if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){
+		perror("socket fail2");
+		return -1;
+	}
+	memset(&servaddr,0,strlen1);
+	servaddr.sin_family=AF_INET;
+	inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr);
+	servaddr.sin_port=htons(80);
+
+	if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){
+		printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80);
+		close(GSocket);
+		return -2;
+	}
+	char uri[200];
+	sprintf(uri,"/PSIA/Custom/Event/notification/notificationStream?sessionId=%s",sessions[Idx].ID);
+	length = sprintf(byte_array,"GET %s HTTP/1.1\r\nContent-Type: text/xml\r\nHost: %s\r\nContent-Length: 0\r\nConnection: Keep-Alive\r\n\r\n",uri,gAnalyzerIP);		 
+	write(GSocket,byte_array,strlen(byte_array));
+	while(1){
+		memset(buff,0,sizeof(buff));
+		length=read(GSocket,&buff,sizeof(buff));	   
+		if(length<=0)
+		{
+			close(GSocket);
+			break;
+		}
+		if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0 && bbbb==2)
+		{
+			char uri[200];
+			sprintf(uri,"/PSIA/Custom/Event/notification/notificationStream?sessionId=%s",sessions[Idx].ID);
+			MakeAuthorizedPacketReal(buff,length,"GET",uri);
+			write(GSocket,byte_array,strlen(byte_array));
+//			printf("%s\n",(char*)byte_array);	
+			bbbb=3;			
+			continue;
+		}
+
+		/*if(memorycmp((unsigned char*)buff,length, "ViqEventNotificationAlert",25)>0 && bbbb==3 )
+		{
+			if(RealAlarmEventNum[Idx]<1000-1)	{
+				memset(&RealAlarmEvent[Idx][RealAlarmEventNum[Idx]],0,sizeof(AlarmInfo));
+				AnalyXMLUrnEVENT(buff,length,&RealAlarmEvent[Idx][RealAlarmEventNum[Idx]++]);
+			}
+			continue;
+		}
+*/
+		if(stringcmp(buff,"multipart/text; boundary=VIQeventEVENTeventVIQ",46)>0 && bbbb==3) 
+///		if(stringcmp(buff,"HTTP/1.1 200 OK",15)>0 && bbbb==3) 
+		{
+			gMySock[Idx]=GSocket;
+			pthread_create(&thread_noEQ[Idx],NULL,&MyEquipmentthread,(void*)Idx);//super(void*)(&equipments[0])
+			gCapturing[Idx]=1;
+			return 0;
+		}
+	}
+	return -2;
+}
+//// 鍔熻兘锛氬仠姝㈡煡鐪嬪疄鏃剁洃鎺�
+//// 杈撳叆锛氬垎鏋愬櫒IP
+//// 杈撳嚭锛�0锛堟垚鍔燂級, -1(鍒濆鍖栧け璐�)
+int RealEventStop(char* AnalyserIP)
+{
+	int Idx=FindIdx(AnalyserIP);
+	if(Idx>=0 && Idx<16){
+		gCapturing[Idx]=0;
+		sessions[Idx].IP[0]=0;
+	}
+	else return -1;
+	return 0;
+}
+//// 鍔熻兘锛氭煡鐪嬪疄鏃剁洃鎺х嚎绋�
+//// 杈撳叆锛氬垎鏋愬櫒缂栧彿
+void* MyEquipmentthread(void* arg)
+{
+	int eidx = (int)arg;   
+	int length;
+
+	puts("Step.2 ========>Equipment Thread is strarted......");
+
+	while(gCapturing[eidx]==1)
+	{
+		length=read(gMySock[eidx],&buff,sizeof(buff)-1);	   
+		if(length<=0)
+		{
+			printf("\n \\\\\\ Read error \n");
+			break;
+		}
+		else if(length>0){
+			if(memorycmp((unsigned char*)buff,length, "ViqEventNotificationAlert",25)>0 )
+			{
+				if(RealAlarmEventNum[eidx]<1000-1)	{
+					memset(&RealAlarmEvent[eidx][RealAlarmEventNum[eidx]],0,sizeof(AlarmInfo));
+					AnalyXMLUrnEVENT(buff,length,&RealAlarmEvent[eidx][RealAlarmEventNum[eidx]++]);
+				}
+//				printf("%s=============================%d\n",(char*)buff,RealAlarmEventNum[eidx]);
+//				printf("%s\n",RealAlarmEvent[eidx][1].channelId);
+				continue;
+			}
+		}
+	}
+	close(gMySock[eidx]);
+	puts("Equipment Thread is stoped..");
+	pthread_exit((void*)thread_noEQ[eidx]);
+}
+				   /*
+				   --VIQeventEVENTeventVIQ
+					   Content-type: application/xml; charset="UTF-8"
+
+					   <urn:ViqEventNotificationAlert urn:version="1.0" xmlns:urn="urn:videoiq-com">
+					   <urn:channelId>3</urn:channelId>
+					   <urn:eventId>6478</urn:eventId>
+					   <urn:startTime urn:version="1.0">
+					   <urn:date>2016-11-07T08:50:54.063</urn:date><urn:offset>28800000</urn:offset>
+					   </urn:startTime>
+					   <urn:clipUrl>/media/clips/3/2016/11/7/8/3/2016_11_07-08_50_48.mp4</urn:clipUrl>
+					   <urn:ruleId>17</urn:ruleId>
+					   <urn:ruleName>Video Lost Rule</urn:ruleName>
+					   <urn:soiId>-1</urn:soiId>
+					   <urn:soiName>Reserved SOI</urn:soiName>
+					   <urn:activity>Video Lost</urn:activity>
+					   <urn:objectType>Unknown</urn:objectType>
+					   <urn:aborted>false</urn:aborted>
+					   <urn:acknowledged>false</urn:acknowledged>
+					   <urn:ackNotes xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><urn:falseAlarm>false</urn:falseAlarm>
+					   <urn:debugMessage>2016/11/07 08:50:54.63: Video lost detected: 101. Event (id=6478) started.</urn:debugMessage>
+					   </urn:ViqEventNotificationAlert>
+					   */
+
+//// 鍔熻兘锛氳幏鍙栧疄鏃剁洃鎺ф姤璀�
+//// 杈撳叆锛氬垎鏋愬櫒IP
+//// 杈撳嚭锛氱粨鏋�
+char* GetRealEvent(char* AnalyserIP)															//3.鏌ョ湅瀹炴椂鐩戞帶			鍙傛暟锛氬垎鏋愬櫒IP銆傝繑鍥烇細淇¢亾鍙峰強鍏跺搴旂殑瑙嗛娴佸湴鍧�
+{
+	int Idx=FindIdx(AnalyserIP);
+	memset(EventString,0,100000);
+	if(Idx>=0 && Idx<16 && RealAlarmEventNum[Idx]>0){		
+		for (int i=0;i<RealAlarmEventNum[Idx];i++)
+		{
+			strcat(EventString,RealAlarmEvent[Idx][i].channelId);
+			strcat(EventString,"\n");
+			strcat(EventString,RealAlarmEvent[Idx][i].eventId);
+			strcat(EventString,"\n");
+			strcat(EventString,RealAlarmEvent[Idx][i].startTime);
+			strcat(EventString,"\n");
+			strcat(EventString,RealAlarmEvent[Idx][i].endTime);
+			strcat(EventString,"\n");
+			strcat(EventString,RealAlarmEvent[Idx][i].clipUrl);
+			strcat(EventString,"\n");
+			strcat(EventString,RealAlarmEvent[Idx][i].ruleId);
+			strcat(EventString,"\n");
+			strcat(EventString,RealAlarmEvent[Idx][i].ruleName);
+			strcat(EventString,"\n");
+			strcat(EventString,RealAlarmEvent[Idx][i].soiId);
+			strcat(EventString,"\n");
+			strcat(EventString,RealAlarmEvent[Idx][i].soiName);
+			strcat(EventString,"\n");
+			strcat(EventString,RealAlarmEvent[Idx][i].activity);
+			strcat(EventString,"\n");
+			strcat(EventString,RealAlarmEvent[Idx][i].objectType);
+			strcat(EventString,"\n");
+			strcat(EventString,RealAlarmEvent[Idx][i].aborted);
+			strcat(EventString,"\n");
+			strcat(EventString,RealAlarmEvent[Idx][i].acknowledged);
+			strcat(EventString,"\n");
+			strcat(EventString,RealAlarmEvent[Idx][i].debugMessage);
+			strcat(EventString,"\n");
+		}
+	}
+	return EventString;
+}
+//// 鏌ヨ鎶ヨ璁板綍
+//// 杈撳叆锛氬垎鏋愬櫒IP锛屽紑濮嬫椂闂达紝缁撴潫鏃堕棿锛屼俊閬撳彿,鐢ㄦ埛锛屽瘑鐮�
+//// 杈撳嚭锛氭煡璇㈢粨鏋溿�傦紙鍖呮嫭淇¢亾鍙凤紝鎶ヨ鏃堕棿锛屾挱鏀惧湴鍧�锛岀瓑銆傦級
+char* GetPHPSearchMetaInfo(char* AnalyserIP,char* user,char* pass,int Channel,int s_year,int s_month,int s_day,int s_hour,int s_minute,int s_sec,int e_year,int e_month,int e_day,int e_hour,int e_minute,int e_sec)
+{
+	char* result;
+	MyTime mstart_time;		
+	mstart_time.Year=s_year;
+	mstart_time.Month=s_month;
+	mstart_time.Day=s_day;
+	mstart_time.Hour=s_hour;
+	mstart_time.Min=s_minute;
+	mstart_time.Sec=s_sec;	
+	MyTime mEnd_time;
+	mEnd_time.Year=e_year;
+	mEnd_time.Month=e_month;
+	mEnd_time.Day=e_day;
+	mEnd_time.Hour=e_hour;
+	mEnd_time.Min=e_minute;
+	mEnd_time.Sec=e_sec;
+	result=GetSearchMetaInfo(AnalyserIP,user,pass,Channel,&mstart_time,&mEnd_time);	
+	return result;
+	
+}
+char* GetMp4Info(char* AnalyserIP,char* user,char* pass,int Channel,char* path)	
+{
+	char Pathbuffer[100] = {0};
+	
+	RequestChannel = Channel;
+	gAnalyzerIP = AnalyserIP;
+	gUser = user;
+	gPass = pass;
+	bMetadataSaving = 0;
+	if(AnalyserIP==NULL || AnalyserIP[0]==0) return "-1";
+	int length;
+	int bMp4FileSaving=0;	
+	int Mp4FileAppendingSiz=0;
+	int Mp4FileSiz;
+	int file;
+	char* result;
+	
+	char* httpUri = path;	
+	int iidx =0,llen=0;
+	llen = sprintf(byte_array,"GET %s %s",httpUri,"HTTP/1.1\r\n"); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"Pragma: no-cache\r\n"); iidx+=llen;
+	//	llen = sprintf(&byte_array[iidx],"Host: %s\r\n",Equipments[EquipIdx].ip); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"Host: %s:80\r\n",gAnalyzerIP); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n\r\n"); iidx+=llen;
+
+	struct sockaddr_in servaddr;
+	int strlen1=sizeof(servaddr);
+	if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){
+		perror("socket fail2");
+		return "-3";
+	}
+	memset(&servaddr,0,strlen1);
+	servaddr.sin_family=AF_INET;
+	inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr);
+	servaddr.sin_port=htons(80);
+
+	if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){
+		printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80);
+		close(GSocket);
+		return "-4";
+	}
+	//printf("byte_array==%s",byte_array);
+	write(GSocket,byte_array,iidx);
+	
+	while(1){
+		memset(buff,0,sizeof(buff));
+		length=read(GSocket,&buff,sizeof(buff));
+		//printf("buff==%s",buff);	 
+		if(length<=0)
+		{
+			close(GSocket);
+			break;
+		}
+		if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0)
+		{
+			// analyse reception
+			//printf("===================================");
+			MakeAuthorizedPacketSimp(buff,length,"GET",httpUri);
+			write(GSocket,byte_array,strlen(byte_array));
+			continue;
+		}	
+		if(httpUri[0]!=0){			
+			printf("**************************************flag======%d\n",bMp4FileSaving);	
+			if(bMp4FileSaving==1){
+                
+				if((file = open(Pathbuffer, O_RDWR, S_IREAD|S_IWRITE)) <0){
+					printf("open file fail===2!\n");
+					result="File open error(2)!";
+					close(GSocket);
+					return result;
+				}
+				lseek(file,0,SEEK_END);
+				write(file,&buff[0], length);//CString m_data				
+				Mp4FileAppendingSiz += length;
+				if (Mp4FileAppendingSiz>=Mp4FileSiz+8)
+				{
+					int sidx = memorycmp((unsigned char*)buff,length, "moov",4);
+					Mp4FileSiz+=buff[sidx-4]*256*256*256+buff[sidx-3]*256*256+buff[sidx-2]*256+buff[sidx-1]; //movie box size
+					printf("**************************************Mp4FileSiz======%d\n",Mp4FileSiz);	
+
+				}
+				if (Mp4FileAppendingSiz>=Mp4FileSiz)
+				{
+					close(file);
+					bMp4FileSaving = false;
+					break;
+				}
+				
+			}
+			else
+			{
+				int sidx = memorycmp((unsigned char*)buff,length, "ftypmp42",8);
+					
+				if(sidx>=0){
+					bMp4FileSaving= 1;
+					Mp4FileAppendingSiz = length-sidx+4;
+			printf("**************************************Mp4FileAppendingSiz======%d\n",Mp4FileAppendingSiz);	
+							
+					if(length>36){
+						//printf("****************************************");		
+						
+						Mp4FileSiz = 24 + buff[sidx+20]*256*256*256+buff[sidx+21]*256*256+buff[sidx+22]*256+buff[sidx+23];// file_type box size + Media databox size
+			printf("**************************************Mp4FileSiz======%d\n",Mp4FileSiz);	
+						int count=0,i;
+						for(i=0;i<strlen(httpUri);i++){
+							if(httpUri[i]=='/') {
+								count++;
+								if(count>=9) break;
+							}
+						}	
+						
+						sprintf(Pathbuffer,"/tmp/%s",/*RequestChannel*/&httpUri[i+1]); iidx+=llen;
+
+						if((file = open(Pathbuffer,O_CREAT|O_RDWR,S_IREAD|S_IWRITE)) <0){
+							printf("open file fail===1!\n");
+							result="File open error(1)!";
+							close(GSocket);
+							return result;
+						}
+						write(file,&buff[sidx-4], length-sidx+4);
+					}
+				}
+			}
+		}
+		
+	}
+	close(GSocket);
+	return "ok";
+}
+
+
+
+
+
+//// 鏌ヨ鎶ヨ璁板綍
+//// 杈撳叆锛氬垎鏋愬櫒IP锛屽紑濮嬫椂闂达紝缁撴潫鏃堕棿锛屼俊閬撳彿,鐢ㄦ埛锛屽瘑鐮�
+//// 杈撳嚭锛氭煡璇㈢粨鏋溿�傦紙鍖呮嫭淇¢亾鍙凤紝鎶ヨ鏃堕棿锛屾挱鏀惧湴鍧�锛岀瓑銆傦級
+char* GetSearchMetaInfo(char* AnalyserIP,char* user,char* pass,int Channel,lpMyTime StartTm,lpMyTime EndTm)	
+{
+	RequestChannel = Channel;
+	gAnalyzerIP = AnalyserIP;
+	gUser = user;
+	gPass = pass;
+	bMetadataSaving = 0;
+	if(AnalyserIP==NULL || AnalyserIP[0]==0) return "-1";
+//	if(gGettingStep>0) return -2;
+
+	chmod(ZIP_HOME,0777);
+	//delete_file(ZIP_HOME "/tmp/tmp.zip");
+	//delete_file(ZIP_HOME "/tmpZip/*");
+    
+	struct tm ttm;
+	time_t StepTm;
+	int length;
+	char* httpUri;
+	char sss[24],eee[24];
+	chmod("/home",0777);//#todo ZIP_HOME
+	const char* folderr;
+	const char* filename1;
+	folderr="/home/tmpZip";
+	filename1="/home/tmp.zip";
+	struct stat sb;
+	if(stat(folderr,&sb)==0 && S_ISDIR(sb.st_mode))	
+		{
+			delete_folder("/home/tmpZip");
+		}
+	if (doesFileExist(filename1))
+		{
+			delete_file("/home/tmp.zip");	
+		}	
+	if(RequestChannel==0) httpUri= "/PSIA/VIQ/Event/metadata/0/files";
+	if(RequestChannel==1) httpUri= "/PSIA/VIQ/Event/metadata/1/files";
+	if(RequestChannel==2) httpUri= "/PSIA/VIQ/Event/metadata/2/files";
+	if(RequestChannel==3) httpUri= "/PSIA/VIQ/Event/metadata/3/files";
+	
+	ttm.tm_year=StartTm->Year - 1900;
+	ttm.tm_mon=StartTm->Month - 1;
+	ttm.tm_mday=StartTm->Day;
+	ttm.tm_hour=StartTm->Hour;
+	ttm.tm_min=StartTm->Min;
+	ttm.tm_sec=StartTm->Sec;
+	time_t SearchStartTm = mktime(&ttm);
+	SearchStartTm -= 8 * 60 * 60;
+	
+	ttm.tm_year=EndTm->Year - 1900;
+	ttm.tm_mon=EndTm->Month - 1;
+	ttm.tm_mday=EndTm->Day;
+	ttm.tm_hour=EndTm->Hour;
+	ttm.tm_min=EndTm->Min;
+	ttm.tm_sec=EndTm->Sec;
+	time_t SearchEndTm = mktime(&ttm);
+	SearchEndTm -= 8 * 60 * 60;
+	
+#ifdef DBG_LOG
+	printf("stm=%d,etm=%d\n",(int)SearchStartTm,(int)SearchEndTm);
+#endif
+
+	//for (StepTm=SearchEndTm; StepTm>SearchStartTm; StepTm-=1*3600)
+	{
+		zclock_sleep(200);
+//		printf(" ==== Search loop function execution  =================%d,%d \n",(int)StepTm,(int)SearchStartTm);
+		struct sockaddr_in servaddr;
+		int strlen1=sizeof(servaddr);
+		if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){
+				perror("socket fail2");
+				return "-3";
+		}
+		memset(&servaddr,0,strlen1);
+		servaddr.sin_family=AF_INET;
+		inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr);
+		servaddr.sin_port=htons(80);
+
+		if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){
+			printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80);
+			close(GSocket);
+			return "-4";
+		}
+		time_t ttt=SearchStartTm;
+		struct tm *t;
+		//ttt-=4*60*60;
+		t = localtime(&ttt);
+		sprintf(sss,"%d-%02d-%02dT%02d:%02d:%02d.000",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);// = "2016-08-26T07:31:00.000";
+		sss[23]=0;
+		
+		ttt=SearchEndTm;
+		//ttt+=4*60*60;
+		t = localtime(&ttt);
+		sprintf(eee,"%d-%02d-%02dT%02d:%02d:%02d.000",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);// = "2016-08-26T07:31:00.000";
+		eee[23]=0;
+#ifdef DBG_LOG
+		printf("sss=%s, eee=%s\n", sss, eee);
+#endif
+		RequestMetaFiles(gAnalyzerIP,httpUri,sss,eee);
+		write(GSocket,byte_array,strlen(byte_array));
+		
+		//鐢ㄤ互涓嬫柟娉曞皢socket璁剧疆涓洪潪闃诲鏂瑰紡
+//		int flags = fcntl(GSocket, F_GETFL, 0);
+//		fcntl(GSocket, F_SETFL, flags | O_NONBLOCK);
+		while(1){
+			memset(buff,0,sizeof(buff));
+			length=read(GSocket,&buff,sizeof(buff));	   
+			if(length<=0)
+			{
+				close(GSocket);
+				break;
+			}
+			if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0)
+			{
+				// analyse reception
+				MakeAuthorizedPacketSimp111(buff,length,"GET",httpUri,sss,eee);
+				write(GSocket,byte_array,strlen(byte_array));
+				continue;
+			}
+			if(bMetadataSaving==1){
+				memoryband[bandCount] = (unsigned char*)malloc(length);
+				memcpy(memoryband[bandCount], buff, length);
+				bandsize[bandCount] = length;
+				if(bandCount<99) bandCount++;
+				int eidx = stringcmp((char*)buff,"</urn:strings></urn:ViqStrings></urn:ViqStringsList>",52);
+				if(eidx >=0){
+					bMetadataSaving = 0;
+					int SSize=0;
+					for (int i=0;i<bandCount;i++) SSize+=bandsize[i];
+					char *tmpp = (char*)malloc(SSize);
+					int xx=0;
+					for (int i=0;i<bandCount;i++)
+					{
+						memcpy(&tmpp[xx],memoryband[i],bandsize[i]);
+						xx=bandsize[i];
+						free(memoryband[i]);
+					}
+					memcpy(buff,tmpp,SSize);
+					free(tmpp);
+					goto lpp123;
+					printf("**********Special*******************************ZipSerFileNum = %d",ZipSerFileNum);
+				}
+			}
+			else{
+				int sidx = stringcmp((char*)buff,"<urn:ViqStringsList urn:version=",32);
+				if(sidx >=0){
+					bMetadataSaving = 1;
+					bandCount = 0;
+					memoryband[bandCount] = (unsigned char*)malloc(length-sidx);
+					memcpy(memoryband[bandCount], &buff[sidx], length-sidx);
+					bandsize[bandCount] = length-sidx;
+					if(bandCount<99) bandCount++;
+					int eidx = stringcmp((char*)buff,"</urn:strings></urn:ViqStrings></urn:ViqStringsList>",52);
+					if(eidx >=0 && sidx<eidx){
+						free(memoryband[0]);
+						bandCount = 0;
+						bMetadataSaving = 0;
+						buff[eidx]=0;
+						int ptr=0;
+						////// analyze buffer 
+lpp123:					sidx = stringcmp((char*)&buff[ptr],"http://changeit:80/media",24);
+						if(sidx >=0){//http://changeit:80/media/metadata/0/2016/8/25/1/2/s_5b4103706a6411e6855e574ec330e01d_20160825_013633_93003.zip
+							int zipidx =-1;zipidx =  stringcmp((char*)&buff[ptr],".zip",4);
+							int seridx =-1;seridx =  stringcmp((char*)&buff[ptr],".ser",4);
+							int kkk=-1;
+							if(zipidx>=0){
+								 if(seridx>=0){
+								   if(zipidx<seridx) kkk = zipidx;
+								   else kkk = seridx;
+							     }
+							     else kkk = zipidx;
+							 }
+							 else{
+								 if(seridx>=0) kkk = seridx;
+							 }
+							if(kkk>=0 && kkk>sidx+18)
+							{
+								//涓嬭浇metadata
+								char pathbuf[250] ;
+								strncpy(pathbuf,(char*)&buff[ptr+sidx+18],kkk-sidx-18+4);
+								pathbuf[kkk-sidx-18+4]=0;
+								int i;
+								for (i=0;i<ZipSerFileNum;i++)
+								{
+									if(strcmp(pathbuf,ZipSerFileName[i])==0) break;
+								}
+								if(i>=ZipSerFileNum){
+									strcpy(ZipSerFileName[ZipSerFileNum],pathbuf);
+									if(ZipSerFileNum<1000-1) ZipSerFileNum++;
+								}
+								ptr=ptr+kkk+4;
+								goto lpp123;
+							}
+						}
+					}
+				}
+			}
+ 		}// while end
+	}//for 
+
+	//////// get
+	for(ZipCountidx = 0; ZipCountidx<ZipSerFileNum; ZipCountidx++)
+	{
+		if(stringcmp((char*)ZipSerFileName[ZipCountidx],".ser",4)>=0) continue;
+		zclock_sleep(200);
+//		printf(" ==== Search loop function execution  =================%d,%d \n",(int)StepTm,(int)SearchStartTm);
+		struct sockaddr_in servaddr;
+		int strlen1=sizeof(servaddr);
+		if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){
+				perror("socket fail2");
+				return "-3";
+		}
+		memset(&servaddr,0,strlen1);
+		servaddr.sin_family=AF_INET;
+		inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr);
+		servaddr.sin_port=htons(80);
+
+		if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){
+			printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80);
+			close(GSocket);
+			return "-4";
+		}
+
+		httpUri = ZipSerFileName[ZipCountidx];//"/media/metadata/0/2016/8/25/1/2/s_5b4103706a6411e6855e574ec330e01d_20160825_013633_93003.zip";
+		RequestZipSerFiles(gAnalyzerIP,httpUri);
+		write(GSocket,byte_array,strlen(byte_array));
+//		printf("==========================================================================================================================>>>>>>>>\n");
+//		printf("%s",byte_array);
+		while(1){
+			length=read(GSocket,&buff,sizeof(buff)-1);	   
+			if(length<=0)
+			{
+				close(GSocket);
+				break;
+			}
+			if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0)
+			{
+				// analyse reception
+				MakeAuthorizedPacketSimp(buff,length,"GET",httpUri);
+				write(GSocket,byte_array,strlen(byte_array));
+//				printf("%s",byte_array);	
+				continue;
+			}
+			if(memorycmp((unsigned char*)buff,length, "Error 404 NOT_FOUND",19)>0)
+			{
+				break;
+			}			
+			
+			if(bZipFileSaving==1){
+				//涓嬭浇Zip filesave
+				int file;
+				if((file = open(ZIP_HOME "/tmp.zip", O_RDWR, S_IREAD|S_IWRITE)) <0)
+					printf("open file fail!\n");
+				lseek(file,0,SEEK_END);
+				write(file,&buff[0], length);//CString m_data
+				close(file);
+				//mp4Save(_T("tmp.zip"),(unsigned char*)buffer, size,CFile::modeWrite| CFile::typeBinary);
+				char tmppattern[8]; tmppattern[0]='P';tmppattern[1]='K';tmppattern[2]=0x05;tmppattern[3]=0x06;tmppattern[4]=0x00;tmppattern[5]=0x00;
+				if(memorycmp((unsigned char*)&buff[0],length, tmppattern,8)>=0) {
+					bZipFileSaving = 0;
+					close(GSocket);
+					//Convert Zip file to Ser file
+					system("unzip -o " ZIP_HOME "/tmp.zip -d " ZIP_HOME "/tmpZip");
+				}
+			}
+			else{
+				int sidx = stringcmp((char*)buff,"PK",2);
+				if(sidx >=0){//涓嬭浇Zip filesave
+					delete_file(ZIP_HOME "/tmp.zip");
+					//delete_file(ZIP_HOME "/tmpZip/*");
+					//涓嬭浇Zip filesave
+					bZipFileSaving = 1;
+					int file;
+					if((file = open(ZIP_HOME "/tmp.zip",O_CREAT|O_RDWR,S_IREAD|S_IWRITE)) <0)
+						printf("open file fail!\n");
+					write(file,&buff[sidx], length-sidx);//CString m_data
+					close(file);
+
+					char tmppattern[8]; tmppattern[0]='P';tmppattern[1]='K';tmppattern[2]=0x05;tmppattern[3]=0x06;tmppattern[4]=0x00;tmppattern[5]=0x00;
+					if(memorycmp((unsigned char*)&buff[sidx],length-sidx, tmppattern,8)>=0)
+					 {
+						bZipFileSaving = 0;
+						close(GSocket);
+						//Convert Zip file to Ser file
+						system("unzip -o " ZIP_HOME "/tmp.zip -d " ZIP_HOME "/tmpZip");
+					}
+				}
+			}
+		}//while
+	}//for
+	int res=0,num=0; //寰楅暱搴�  
+	filenames filename[100];
+	num = GetFileNameInFolder(ZIP_HOME "/tmpZip",filename);
+	char stringpath[1024];
+	unsigned char p_save_buf[6144000];
+	
+	for(i=0;i<num;i++)   
+	{   
+		if(filename[i].name[0]=='.') continue;
+		memset(stringpath,0,1024);
+		memcpy(stringpath, ZIP_HOME "/tmpZip/",13);
+		strcat(stringpath,filename[i].name);
+		int handle;
+		if((handle = open(stringpath, O_RDWR, S_IREAD|S_IWRITE)) <0)
+			printf("open file fail!\n");
+		res = read(handle,p_save_buf,6144000);//CString m_data
+		close(handle);
+		AnalySerFile((char*)p_save_buf,res,SearchStartTm,SearchEndTm);
+	}   
+	memset(EventString,0,sizeof(EventString));
+	//for(i=0;i<1000;i++)
+#ifdef DBG_LOG
+	printf("EventCount===========================%d\n",EventCount);
+	printf("EventCountInSearchRange==============%d\n",EventCountInSearchRange);
+#endif
+	
+	strcat(EventString,"[");
+	
+	for (i=0;i<EventCount;i++)
+	{
+#ifndef DBG_LOG
+		if (! myEventLogs[i].InSearchRange)
+			continue;
+#endif
+		
+		strcat(EventString,"{");
+		strcat(EventString,"\"datetime\":\"");
+		strcat(EventString,myEventLogs[i].Date);
+		strcat(EventString," ");
+		strcat(EventString,myEventLogs[i].Time);
+		strcat(EventString,"\",\"path\":\"");
+		strcat(EventString,myEventLogs[i].clipUrl);
+		strcat(EventString,"\"}");
+		if (i < EventCount - 1)
+			strcat(EventString,",");
+		
+		//strcat(EventString,myEventLogs[i].Date);
+		//strcat(EventString,"\n");
+		//strcat(EventString,myEventLogs[i].Time);
+		//strcat(EventString,"\n");
+		//strcat(EventString,myEventLogs[i].Duration);
+		//strcat(EventString,"\n");
+		//strcat(EventString,myEventLogs[i].clipUrl);
+		//strcat(EventString,"\n");
+		//strcat(EventString,myEventLogs[i].Region);
+		//strcat(EventString,"\n");
+		//strcat(EventString,myEventLogs[i].Rule);
+		//strcat(EventString,"\n");
+		//strcat(EventString,myEventLogs[i].DebugMessageS);
+		//strcat(EventString,"\n");
+		//strcat(EventString,myEventLogs[i].DebugMessageE);
+		//strcat(EventString,"\n");
+	}
+	
+	strcat(EventString,"]");
+	
+	//reset
+	//EventCount = 0;//#todo
+	//EventCountInSearchRange = 0;
+	//RequestChannel = -1;
+	//memset(&myEventLogs, 0, sizeof(myEventLogs));
+
+	return EventString;
+	//return "333333333333333333333333333333333333333333333333333333333333333333789";
+}
+//// 鍔熻兘锛氶噸鍚垎鏋愬櫒锛堝崗璁級
+//// 杈撳叆锛氬垎鏋愬櫒IP,鐢ㄦ埛锛屽瘑鐮�
+//// 杈撳嚭锛�0锛堟垚鍔燂級, -1(鍒濆鍖栧け璐�),-2(杩炴帴澶辫触)
+int RestartCommand(char* AnalyserIP,char* user,char* pass)
+{
+	gAnalyzerIP = AnalyserIP;
+	gUser = user;
+	gPass = pass;
+	
+	int bbbb=0;
+
+	if(AnalyserIP==NULL || AnalyserIP[0]==0) return -1;
+
+	struct sockaddr_in servaddr;
+	int strlen1=sizeof(servaddr);
+	if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){
+		perror("socket fail2");
+		return -1;
+	}
+	memset(&servaddr,0,strlen1);
+	servaddr.sin_family=AF_INET;
+	inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr);
+	servaddr.sin_port=htons(80);
+
+	if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){
+		printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80);
+		close(GSocket);
+		return -2;
+	}
+	int length = 0;
+	length = sprintf(byte_array,"PUT /PSIA/System/reboot HTTP/1.1\r\nContent-Type: text/xml\r\nHost: %s\r\nContent-Length: 0\r\nConnection: Keep-Alive\r\n\r\n",AnalyserIP);		 
+	write(GSocket,byte_array,length);
+//	printf("%s",byte_array);
+
+
+	while(1){
+		memset(buff,0,sizeof(buff));
+		length=read(GSocket,&buff,sizeof(buff));	   
+		if(length<=0)
+		{
+			break;
+		}
+		if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0)
+		{
+			// analyse reception
+			MakeAuthorizedPacketRestart(buff,length,"PUT","/PSIA/System/reboot");//////????????
+			bbbb=1;
+			break;
+		}
+		if(memorycmp((unsigned char*)buff,length, "HTTP/1.1 200 OK",15)>0) break;
+		
+
+	}
+	close(GSocket);
+	if (bbbb==0) return -1;
+//	zclock_sleep(200);
+	if((GSocket=socket(PF_INET,SOCK_STREAM,0))<0){
+		perror("socket fail2");
+		return -1;
+	}
+	memset(&servaddr,0,strlen1);
+	servaddr.sin_family=AF_INET;
+	inet_pton(AF_INET,gAnalyzerIP,&servaddr.sin_addr);
+	servaddr.sin_port=htons(80);
+
+	if(connect(GSocket,(struct sockaddr*)&servaddr,strlen1)<0){
+		printf("Equipment connect fail-%s:%d\n",gAnalyzerIP,80);
+		close(GSocket);
+		return -2;
+	}
+	write(GSocket,byte_array,strlen(byte_array));
+	while(1){
+		memset(buff,0,sizeof(buff));
+		length=read(GSocket,&buff,sizeof(buff));	   
+		if(length<=0)
+		{
+			close(GSocket);
+			return -3;
+		}
+		if(memorycmp((unsigned char*)buff,length, "HTTP/1.1 200 OK",15)>0) break;
+
+	}
+	close(GSocket);
+	return 0;
+}
+
+void RequestMetaFiles(char* AnaylyIP,char* httpUri,char* Tm1,char* Tm2)
+{
+	char byte_arrayxxx[1600];
+	int lengthxxx = 0;
+	memset(byte_array,0,1600);
+
+	UrnStringToBytes(byte_arrayxxx,&lengthxxx,Tm1,Tm2);// xml  
+	int iidx =0,llen=0;;
+	llen = sprintf(byte_array,"GET %s %s",httpUri,"HTTP/1.1\r\n"); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"Content-Length: %d\r\n",lengthxxx); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"%s","Content-Type: text/xml\r\n"); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"Host: %s:%d\r\n",AnaylyIP,80); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n\r\n"); iidx+=llen;
+	strncpy(&byte_array[iidx],byte_arrayxxx,lengthxxx); iidx+=lengthxxx;
+
+}
+void RequestZipSerFiles(char* AnaylyIP,char* httpUri)
+{
+	memset(byte_array,0,1600);
+
+	int iidx =0,llen=0;;
+	llen = sprintf(byte_array,"GET %s %s",httpUri,"HTTP/1.1\r\n"); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"User-Agent: Java/1.6.0_05\r\n"); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"Host: %s:%d\r\n",AnaylyIP,80); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"%s","Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n"); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n\r\n"); iidx+=llen;
+}
+void UrnStringToBytes(char* byte_array_out,int * byte_array_length_out,char* StartTim,char* EndTime)
+{
+	int idx=0,len;
+	idx = sprintf(byte_array_out,"<urn:ViqDateTimeInterval urn:version="); 
+	byte_array_out[idx++]=0x22;//'"'
+	byte_array_out[idx++]=0x31;//'1'
+	byte_array_out[idx++]=0x2e;//'.'
+	byte_array_out[idx++]=0x30;//'0'
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx]," xmlns:urn=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"urn:videoiq-com");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"><urn:startTime urn:version=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	byte_array_out[idx++]=0x31;//'1'
+	byte_array_out[idx++]=0x2e;//'.'
+	byte_array_out[idx++]=0x30;//'0'
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"><urn:date>%s</urn:date><urn:offset>0</urn:offset></urn:startTime><urn:endTime urn:version=",StartTim);idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	byte_array_out[idx++]=0x31;//'1'
+	byte_array_out[idx++]=0x2e;//'.'
+	byte_array_out[idx++]=0x30;//'0'
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"><urn:date>%s</urn:date><urn:offset>0</urn:offset></urn:endTime></urn:ViqDateTimeInterval>",EndTime);idx+=len;//2016-08-26T09:31:00.000
+	*byte_array_length_out = idx;
+}
+///// for Restart
+void MakeAuthorizedPacketRestart(char* buff,int length, char* Method,char* uri)
+{
+	char Device[150] ;
+	char Realm_buf1[512] ;
+	char nonce_buf2[512] ;
+	char auth_buf3[512] ;
+	char domain_buf4[512] ;
+	unsigned char len[4];
+
+	memset(Device,0,150);
+	memset(domain_buf4,0,512);
+
+	CharToByte((char*)buff, Device, length,Realm_buf1,nonce_buf2,auth_buf3,domain_buf4,len);
+//	printf("%s,%s,%s,%s\n",Realm_buf1,nonce_buf2,auth_buf3,domain_buf4);
+//	printf("%d,%d,%d,%d\n",len[0],len[1],len[2],len[3]);
+	char* cnonce_buf="08a9d86c1b5e45963cf82f43dca59c51";
+	//Authorization: Digest username="supervisor",realm="VideoIQ",nonce="IcTFMVgBAAAHmywcsJspvAlyBqpQy",uri="/PSIA/System/reboot",algorithm="MD5",cnonce="08a9d86c1b5e45963cf82f43dca59c51",nc=00000001,qop="auth",response="0c31efdd27017412cd0b6aaf550da084"
+
+	
+	Realm_buf1[len[0]]=0;
+	nonce_buf2[len[1]]=0;
+	auth_buf3[len[2]]=0;
+	char* nc="00000001";
+	//CString qop;qop=auth_buf3;/////////////////////////////
+	char User[200];
+	memset(User,0,200);
+	sprintf(User,"%s:%s:%s",gUser,Realm_buf1,gPass);
+
+	char urii[200];
+	int kk=sprintf(urii,"%s:%s",Method,uri);//PUT:/PSIA/System/reboot";
+	urii[kk]=0;
+	char* A1 = MDString(User);
+	char AA1[33];
+	memset(AA1,0,33);
+	memcpy(AA1,A1,strlen(A1));
+	char* A2 = MDString(urii);
+
+	char AA2[33];
+	memset(AA2,0,33);
+	memcpy(AA2,A2,strlen(A2));
+	char rrr[200];
+	memset(rrr,0,200);
+	sprintf(rrr,"%s:%s:%s:%s:auth:%s",AA1,nonce_buf2,nc,cnonce_buf,AA2);
+	char* response = MDString(rrr);
+	char res[33];
+	memset(res,0,33);
+	memcpy(res,response,strlen(response));
+
+	//// 绗簩娆� 鍙戦��
+	char byte_arrayxxx[2600];
+	int lengthxxx = 0;
+	int iidx = 0;
+	AurhorizationResponseBytesReatart(byte_arrayxxx,&lengthxxx,uri,nonce_buf2,cnonce_buf,res);
+
+	int llen = sprintf(byte_array,"%s %s HTTP/1.1\r\n",Method,uri); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"Content-Type: text/xml\r\n"); iidx+=llen;
+	strncpy(&byte_array[iidx],byte_arrayxxx,lengthxxx); iidx+=lengthxxx;
+	byte_array[iidx]=0x0d; iidx+=1;
+	byte_array[iidx]=0x0a; iidx+=1;
+	llen = sprintf(&byte_array[iidx],"Host: %s\r\n",gAnalyzerIP); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"Content-Length: 0\r\n"); iidx+=llen;
+	//					llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n"); iidx+=llen;
+	byte_array[iidx]=0x0d; iidx+=1;
+	byte_array[iidx]=0x0a; iidx+=1;					
+	byte_array[iidx]=0;
+}
+//for real event
+void MakeAuthorizedPacketReal(char* buff,int length, char* Method,char* uri)
+{
+	char Device[150] ;
+	char Realm_buf1[512] ;
+	char nonce_buf2[512] ;
+	char auth_buf3[512] ;
+	char domain_buf4[512] ;
+	unsigned char len[4];
+
+	memset(Device,0,150);
+	memset(domain_buf4,0,512);
+
+	CharToByte((char*)buff, Device, length,Realm_buf1,nonce_buf2,auth_buf3,domain_buf4, len);
+	char* cnonce_buf="163acd0e58793a190f29ee879d4b224f";//"08a9d86c1b5e45963cf82f43dca59c51";
+	Realm_buf1[len[0]]=0;
+	nonce_buf2[len[1]]=0;
+	auth_buf3[len[2]]=0;
+	char* nc="00000001";
+	//CString qop;qop=auth_buf3;/////////////////////////////
+	char User[200];
+	memset(User,0,200);
+	sprintf(User,"%s:%s:%s",gUser,Realm_buf1,gPass);
+	
+	char urii[200];
+	int kk=sprintf(urii,"%s:%s",Method,uri);//PUT:/PSIA/System/reboot";
+	urii[kk]=0;
+	char* A1 = MDString(User);
+	char AA1[33];
+	memset(AA1,0,33);
+	memcpy(AA1,A1,strlen(A1));
+	char* A2 = MDString(urii);
+	char AA2[33];
+	memset(AA2,0,33);
+	memcpy(AA2,A2,strlen(A2));
+	char rrr[200];
+	memset(rrr,0,200);
+	sprintf(rrr,"%s:%s:%s:%s:auth:%s",AA1,nonce_buf2,nc,cnonce_buf,AA2);
+//	printf("%s:%s:%s:%s:auth:%s\n",AA1,nonce_buf2,nc,cnonce_buf,AA2);
+	char* response = MDString(rrr);
+	char res[33];
+	memset(res,0,33);
+	memcpy(res,response,strlen(response));
+
+	//// 绗簩娆� 鍙戦��
+	char byte_arrayxxx[2600];
+	int lengthxxx = 0;
+	int iidx = 0;
+	AurhorizationResponseBytesReal(byte_arrayxxx,&lengthxxx,uri,nonce_buf2,cnonce_buf,res);
+
+	int llen = sprintf(byte_array,"%s %s HTTP/1.1\r\n",Method,uri); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"Content-Type: text/xml\r\n"); iidx+=llen;
+	strncpy(&byte_array[iidx],byte_arrayxxx,lengthxxx); iidx+=lengthxxx;
+	byte_array[iidx]=0x0d; iidx+=1;
+	byte_array[iidx]=0x0a; iidx+=1;
+	llen = sprintf(&byte_array[iidx],"Host: %s\r\n",gAnalyzerIP); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"Content-Length: 0\r\n"); iidx+=llen;
+	//					llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n"); iidx+=llen;
+	byte_array[iidx]=0x0d; iidx+=1;
+	byte_array[iidx]=0x0a; iidx+=1;					
+	byte_array[iidx]=0;
+
+}
+
+//RequestZipSerFileDownload..
+void MakeAuthorizedPacketSimp(char* buff,int length, char* Method,char* uri)
+{
+	char Device[150] ;
+	char Realm_buf1[512] ;
+	char nonce_buf2[512] ;
+	char auth_buf3[512] ;
+	char domain_buf4[512] ;
+	unsigned char len[4];
+
+	memset(Device,0,150);
+	memset(domain_buf4,0,512);
+
+	CharToByte((char*)buff, Device, length,Realm_buf1,domain_buf4,nonce_buf2,auth_buf3, len);
+	char* cnonce_buf="7e4c63bd7cb20c49ceafd1bd812428da";
+	Realm_buf1[len[0]]=0;
+	nonce_buf2[len[2]]=0;
+	auth_buf3[len[3]]=0;
+	char* nc="00000001";
+	//CString qop;qop=auth_buf3;/////////////////////////////
+	char User[200];
+	memset(User,0,200);
+	sprintf(User,"%s:%s:%s",gUser,Realm_buf1,gPass);
+
+	char urii[200];
+	int kk=sprintf(urii,"%s:%s",Method,uri);//PUT:/PSIA/System/reboot";
+	urii[kk]=0;
+	char* A1 = MDString(User);
+	char AA1[33];
+	memset(AA1,0,33);
+	memcpy(AA1,A1,strlen(A1));
+	char* A2 = MDString(urii);
+
+	char AA2[33];
+	memset(AA2,0,33);
+	memcpy(AA2,A2,strlen(A2));
+	char rrr[200];
+	memset(rrr,0,200);
+	sprintf(rrr,"%s:%s:%s:%s:auth:%s",AA1,nonce_buf2,nc,cnonce_buf,AA2);
+	char* response = MDString(rrr);
+	char res[33];
+	memset(res,0,33);
+	memcpy(res,response,strlen(response));
+
+	//// 绗簩娆� 鍙戦��
+	char byte_arrayxxx[2600];
+	int lengthxxx = 0;
+	int iidx = 0;
+	AurhorizationResponseBytes(byte_arrayxxx,&lengthxxx,uri,nonce_buf2,cnonce_buf,res);
+
+	int llen = sprintf(byte_array,"%s %s HTTP/1.1\r\n",Method,uri); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"Content-Type: text/xml\r\n"); iidx+=llen;
+	strncpy(&byte_array[iidx],byte_arrayxxx,lengthxxx); iidx+=lengthxxx;
+	byte_array[iidx]=0x0d; iidx+=1;
+	byte_array[iidx]=0x0a; iidx+=1;
+	llen = sprintf(&byte_array[iidx],"Host: %s\r\n",gAnalyzerIP); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"Content-Length: 0\r\n"); iidx+=llen;
+	//					llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n"); iidx+=llen;
+	byte_array[iidx]=0x0d; iidx+=1;
+	byte_array[iidx]=0x0a; iidx+=1;					
+	byte_array[iidx]=0;
+}
+void MakeAuthorizedPacketSimp111(char* buff,int length, char* Method,char* uri,char* Tm1,char* Tm2)
+{
+	char Device[150] ;
+	char Realm_buf1[512] ;
+	char nonce_buf2[512] ;
+	char auth_buf3[512] ;
+	char domain_buf4[512] ;
+	unsigned char len[4];
+
+	memset(Device,0,150);
+	memset(domain_buf4,0,512);
+
+	CharToByte((char*)buff, Device, length,Realm_buf1,nonce_buf2,auth_buf3,domain_buf4, len);
+	char* cnonce_buf="7e4c63bd7cb20c49ceafd1bd812428da";
+	Realm_buf1[len[0]]=0;
+	nonce_buf2[len[1]]=0;
+	auth_buf3[len[2]]=0;
+	char* nc="00000001";
+	//CString qop;qop=auth_buf3;/////////////////////////////
+	char User[200];
+	memset(User,0,200);
+	sprintf(User,"%s:%s:%s",gUser,Realm_buf1,gPass);
+
+	char urii[200];
+	int kk=sprintf(urii,"%s:%s",Method,uri);//PUT:/PSIA/System/reboot";
+	urii[kk]=0;
+	char* A1 = MDString(User);
+	char AA1[33];
+	memset(AA1,0,33);
+	memcpy(AA1,A1,strlen(A1));
+	char* A2 = MDString(urii);
+
+	char AA2[33];
+	memset(AA2,0,33);
+	memcpy(AA2,A2,strlen(A2));
+	char rrr[200];
+	memset(rrr,0,200);
+	sprintf(rrr,"%s:%s:%s:%s:auth:%s",AA1,nonce_buf2,nc,cnonce_buf,AA2);
+	char* response = MDString(rrr);
+	char res[33];
+	memset(res,0,33);
+	memcpy(res,response,strlen(response));
+
+	//// 绗簩娆� 鍙戦��
+	char byte_arrayxxx[2600];
+	char xmlbyte_array[512];
+	int lengthxxx = 0;
+	int iidx = 0;
+	int llen11=0;
+	AurhorizationResponseBytes(byte_arrayxxx,&lengthxxx,uri,nonce_buf2,cnonce_buf,res);
+	UrnStringToBytes(xmlbyte_array,&llen11,Tm1,Tm2);//xml calculation
+	int llen = sprintf(byte_array,"GET %s %s",uri,"HTTP/1.1\r\n"); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"Content-Length: %d\r\n",llen11); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"%s","Content-Type: text/xml\r\n"); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"Host: %s:%d\r\n",gAnalyzerIP,80); iidx+=llen;
+	llen = sprintf(&byte_array[iidx],"%s","Connection: Keep_Alive\r\n"); iidx+=llen;
+	strncpy(&byte_array[iidx],byte_arrayxxx,lengthxxx); iidx+=lengthxxx;
+	byte_array[iidx]=0x0d; iidx+=1;
+	byte_array[iidx]=0x0a; iidx+=1;
+	byte_array[iidx]=0x0d; iidx+=1;
+	byte_array[iidx]=0x0a; iidx+=1;
+	strncpy(&byte_array[iidx],xmlbyte_array,length); iidx+=length;
+	byte_array[iidx]=0;
+}
+int FindIdx(char* IP)
+{
+	for (int i=0;i<16;i++)
+	{
+		if(strcmp(sessions[i].IP,IP)==0) return i;
+	}
+	return -1;
+}
+int FindEmpty()
+{
+	for (int i=0;i<16;i++)
+	{
+		if(sessions[i].IP[0]==0) return i;
+	}
+	return -1;
+}
+
+int DivideTimeToYMDHMS(char* DateTimeStr,int* year,int* month,int* day, int* hour,int* min,int* sec)
+{
+	int yy,mm,dd,hh,Mm,ss;
+	//DivideTime(DateTimeStr,DateStr,TimeStr);
+	sscanf(DateTimeStr,"%d-%d-%dT%d:%d:%d",&yy,&mm,&dd,&hh,&Mm,&ss);
+	*year = yy;
+	*month = mm;
+	*day = dd;
+	*hour = hh;
+	*min = Mm;
+	*sec = ss;
+	return 0;
+
+}
+int CharToByte(char* chars, char* bytes, unsigned int count,char* ptr1,char* ptr2,char* ptr3,char* ptr4,unsigned char* number){	
+	int p=0;
+	int n=0;
+	int i=0;
+	unsigned char temp;
+	for(i = 0; i < count; i++)
+	{
+		temp = (unsigned char)chars[i];
+		if (p==1)
+		{
+			if (temp!=0x22)
+			{
+				bytes[n++]=(unsigned char)chars[i];
+			}			
+		}
+		if (temp==0x22)
+		{
+			p=p+1;
+		}
+		if (p==2)
+		{
+			bytes[n++]=0x2C;
+			p=0;			
+		}
+
+	}
+	char* token=NULL;
+	char s[]=",";
+	token=strtok(bytes,s);	
+	number[0]=strlen(token);	
+	memcpy(ptr1,token,strlen(token));
+	int nn=0;
+	while(token!=NULL)
+	{
+		token=strtok(NULL,s);		
+		nn=nn+1;		
+		if (nn==1)
+		{
+			number[1]=strlen(token);
+			memcpy(ptr2,token,strlen(token));
+		}
+		if (nn==2)
+		{
+			//ptr3=new char[strlen(token)];
+			number[2]=strlen(token);
+			memcpy(ptr3,token,strlen(token));
+		}
+		if (nn==3)
+		{
+			if(token!=NULL)
+			{
+				number[3]=strlen(token);
+				memcpy(ptr4,token,strlen(token));
+			}//ptr3=new char[strlen(token)];
+
+		}
+	}
+	return n;
+}
+void AnalySerFile(char* p_save_buf,int res, int SearchStartTm, int SearchEndTm)
+{
+	int ParagraphIdx;
+	bool somewhat;
+first:
+
+	somewhat=false;
+	memset(myEventLogs[EventCount].DebugMessageS,0,200);
+	memset(myEventLogs[EventCount].DebugMessageE,0,200);
+	memset(myEventLogs[EventCount].Rule,0,20);
+	memset(myEventLogs[EventCount].Region,0,30);
+	memset(myEventLogs[EventCount].clipUrl,0,200);
+	memset(myEventLogs[EventCount].Date,0,15);
+	memset(myEventLogs[EventCount].Time,0,15);
+	memset(myEventLogs[EventCount].Duration,0,20);
+
+	ParagraphIdx = memorycmp((unsigned char*)p_save_buf,res, "com.videoiq.fusion.cameraapi.metadata.Incident",46);
+	if(ParagraphIdx<0) ParagraphIdx = res;
+	int tmpSidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "started.",8);
+	int tmpEidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "Event ended.",12);
+	if(tmpSidx<0 && tmpEidx<0) goto last;
+	if(tmpSidx>=0 && tmpEidx<0){// Started paragraph
+		int sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "ruleName",8);
+		if(sidx>=0 && p_save_buf[sidx+8]==0x08){
+			int flen = p_save_buf[sidx+8+1]*256+p_save_buf[sidx+8+2];
+			memcpy(myEventLogs[EventCount].Rule,&p_save_buf[sidx+8+3],flen);
+		}
+		sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "soiName",7);
+		if(sidx>=0 && p_save_buf[sidx+7]==0x08){
+			int flen = p_save_buf[sidx+7+1]*256+p_save_buf[sidx+7+2];
+			memcpy(myEventLogs[EventCount].Region,&p_save_buf[sidx+7+3],flen);
+		}
+		sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "activity",8);
+		if(sidx>=0){
+			myEventLogs[EventCount].ActivityNum[0]=p_save_buf[sidx+8];
+			myEventLogs[EventCount].ActivityNum[1]=p_save_buf[sidx+8+1];
+			myEventLogs[EventCount].ActivityNum[2]=p_save_buf[sidx+8+2];
+			myEventLogs[EventCount].ActivityNum[3]=p_save_buf[sidx+8+3];
+			myEventLogs[EventCount].ActivityNum[4]=p_save_buf[sidx+8+4];
+		}
+
+		sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "clipUrl",7);
+		if(sidx>=0 && p_save_buf[sidx+7]==0x08){
+			int flen = (unsigned char)p_save_buf[sidx+7+1]*256+(unsigned char)p_save_buf[sidx+7+2];
+			memcpy(myEventLogs[EventCount].clipUrl,&p_save_buf[sidx+7+3],flen);
+			
+			// ensure accurate range
+			
+			{
+				const char* dtInUrlPos = strrchr(myEventLogs[EventCount].clipUrl, '/');
+				//printf("%s\n", dtInUrlPos);
+				struct tm dtInUrl;
+				memset(&dtInUrl, 0, sizeof(dtInUrl));
+				sscanf(dtInUrlPos, "/%d_%d_%d-%d_%d_%d.", 
+					&dtInUrl.tm_year, &dtInUrl.tm_mon, &dtInUrl.tm_mday, &dtInUrl.tm_hour, &dtInUrl.tm_min, &dtInUrl.tm_sec);
+				dtInUrl.tm_year-=1900;
+				dtInUrl.tm_mon--;
+				time_t tt = mktime(&dtInUrl);
+				
+				if(tt<SearchStartTm||tt>SearchEndTm)
+				{
+					myEventLogs[EventCount].InSearchRange = 0;
+#ifdef DBG_LOG
+					sprintf(myEventLogs[EventCount].clipUrl,"%s ER %d",myEventLogs[EventCount].clipUrl, tt);
+#endif
+				}
+				else
+				{
+					myEventLogs[EventCount].InSearchRange = 1;
+#ifdef DBG_LOG
+					sprintf(myEventLogs[EventCount].clipUrl,"%s OK %d",myEventLogs[EventCount].clipUrl, tt);
+#endif
+					EventCountInSearchRange++;
+				}
+			}
+			
+		}
+		sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "debugMessage",12);
+		if(sidx>=0 && p_save_buf[sidx+12]==0x08){
+			int flen = (unsigned char)p_save_buf[sidx+12+1]*256+(unsigned char)p_save_buf[sidx+12+2];
+			memcpy(myEventLogs[EventCount].DebugMessageS,&p_save_buf[sidx+12+3],flen);
+		}
+		char tmp[200];
+		int tlen=0;
+		memset(tmp,0,200);
+		tlen = strlen(myEventLogs[EventCount].DebugMessageS);
+		memcpy(tmp,myEventLogs[EventCount].DebugMessageS,tlen);
+		if(myEventLogs[EventCount].DebugMessageS[0]!=0) somewhat = true;
+		// Get Vide lost
+		int eidx = memorycmp((unsigned char*)tmp,tlen, "Video lost detected",19);
+		if(eidx>=0){
+			strcpy(myEventLogs[EventCount].Rule,"Video Lost Rule");
+		}
+		// Get System Event
+		eidx = memorycmp((unsigned char*)tmp,tlen, "System activity detected",24);
+		if(eidx>=0){
+			strcpy(myEventLogs[EventCount].Rule,"System Event Rule");
+		}
+		// Get Start Time 
+		eidx = memorycmp((unsigned char*)tmp,tlen, " ",1);
+		if (eidx>=0){
+			memcpy(myEventLogs[EventCount].Date,tmp,eidx);
+			memcpy(tmp,&tmp[eidx+1],tlen-eidx);
+			eidx = memorycmp((unsigned char*)tmp,tlen-eidx, " ",1);
+			if (eidx>=0){
+				memcpy(myEventLogs[EventCount].Time,tmp,eidx-1);
+				memcpy(tmp,&tmp[eidx+1],tlen-eidx);
+				somewhat = true;
+			}
+		}
+	}
+	if(tmpSidx>=0 && tmpEidx>=0){// Started. Event Ended paragraph
+		int sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "debugMessage",12);
+		if(sidx>=0 && p_save_buf[sidx+12]==0x08)
+		{
+			int flen = (unsigned char)p_save_buf[sidx+12+1]*256+(unsigned char)p_save_buf[sidx+12+2];
+			char tmpdeg[200];
+			memset(tmpdeg,0,200);
+			memcpy(tmpdeg,&p_save_buf[sidx+12+3],flen);
+			// find owner record
+			int i;
+			for (i=0;i<EventCount;i++)
+			{
+				int j,llen = strlen(myEventLogs[i].DebugMessageS);
+				for (j=0;j<llen;j++)
+				{
+					if(myEventLogs[i].DebugMessageS[j] != tmpdeg[j]) break;
+				}
+				if(j>=llen) break;
+			}
+			if(i<EventCount)// Started message Matched OK
+			{
+				sidx = memorycmp((unsigned char*)p_save_buf,ParagraphIdx, "activity",8);
+				if(sidx>=0){
+					myEventLogs[i].ActivityNum[0]=p_save_buf[sidx+8];
+					myEventLogs[i].ActivityNum[1]=p_save_buf[sidx+8+1];
+					myEventLogs[i].ActivityNum[2]=p_save_buf[sidx+8+2];
+					myEventLogs[i].ActivityNum[3]=p_save_buf[sidx+8+3];
+					myEventLogs[i].ActivityNum[4]=p_save_buf[sidx+8+4];
+				}
+				//				goto last;
+				//				strcpy(myEventLogs[i].DebugMessageE,tmpdeg);
+				//				goto last;
+
+				// get End time
+				char tmp[200];
+				memset(tmp,0,200);
+				memcpy(tmp,tmpdeg,flen);
+				int msglen = flen;
+				//				goto last;
+
+				int eeidx = memorycmp((unsigned char*)tmp,flen, "started.",8);
+				if (eeidx>=0){
+					memcpy(tmp,&tmp[eeidx+8+1],flen-eeidx-8-1);
+					flen = flen-eeidx-8-1 ;
+					tmp[flen]=0;
+					char tmpDate[15];
+					char tmpTime[15];
+					int eidx = memorycmp((unsigned char*)tmp,flen, " ",1);
+					if (eidx>=0){
+						memcpy(tmpDate,tmp,eidx);
+						tmpDate[eidx]=0;
+						memcpy(tmp,&tmp[eidx+1],flen-eidx);
+						eidx = memorycmp((unsigned char*)tmp,flen-eidx, " ",1);
+						if (eidx>=0){
+							memcpy(tmpTime,tmp,eidx-1);
+							tmpTime[eidx-1]=0;
+							//// Calculation duration
+							int yy2,mm2,dd2,hh2,Mm2,ss2;
+							int yy,mm,dd,hh,Mm,ss;
+							sscanf(myEventLogs[i].Date,"%d/%d/%d",&yy,&mm,&dd);
+							sscanf(myEventLogs[i].Time,"%d:%d:%d",&hh,&Mm,&ss);
+							sscanf(tmpDate,"%d/%d/%d",&yy2,&mm2,&dd2);
+							sscanf(tmpTime,"%d:%d:%d",&hh2,&Mm2,&ss2);
+
+							struct tm ttm;
+							ttm.tm_year = yy-1900;
+							ttm.tm_mon=mm - 1;
+							ttm.tm_mday = dd;
+							ttm.tm_hour=hh;
+							ttm.tm_min=Mm;
+							ttm.tm_sec=ss;
+							time_t StartTm = mktime(&ttm);
+
+							ttm.tm_year = yy2-1900;
+							ttm.tm_mon=mm2 - 1;
+							ttm.tm_mday = dd2;
+							ttm.tm_hour=hh2;
+							ttm.tm_min=Mm2;
+							ttm.tm_sec=ss2;
+							time_t EndTm = mktime(&ttm);
+
+							int dur = EndTm-StartTm;
+							sprintf(myEventLogs[i].Duration,"%d 绉�",dur);
+							memcpy(myEventLogs[i].DebugMessageE,tmpdeg,msglen);
+							
+							//calc offset datetime
+							StartTm+=8*60*60;
+							struct tm* toffset = localtime(&StartTm);
+							sprintf(myEventLogs[i].Date, "%d/%d/%d", toffset->tm_year+1900, toffset->tm_mon+1, toffset->tm_mday);
+							sprintf(myEventLogs[i].Time, "%d:%d:%d", toffset->tm_hour, toffset->tm_min, toffset->tm_sec);
+						}
+					}
+				}
+			}
+		}
+	}
+
+	char ttmp[5000];
+	if((myEventLogs[EventCount].DebugMessageE[0]!=0|| myEventLogs[EventCount].DebugMessageS[0]!=0) && myEventLogs[EventCount].Rule[0]==0 && myEventLogs[EventCount].Region[0]==0){
+		memcpy(ttmp,(unsigned char*)p_save_buf,5000);
+	}
+	if(somewhat && EventCount<200-1){///repair //#todo 12.7
+		sprintf(myEventLogs[EventCount].Camera,"%d",RequestChannel+1);
+		int i;
+		for (i=0;i<EventCount;i++)
+		{
+			if(strcmp(myEventLogs[i].clipUrl,myEventLogs[EventCount].clipUrl)==0) break;
+		}
+		if(i>=EventCount)	{
+			EventCount++;
+		}
+	}
+last:
+	res = res - ParagraphIdx - 46 ;
+	if (res<=0) 
+		return;
+
+	memcpy((unsigned char*)p_save_buf,&p_save_buf[ParagraphIdx + 46],res);
+	goto first;
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+int memorycmp(unsigned char* src ,int slen, char* token, int len)
+{
+	int start=0,k,i,klen=strlen(token);
+lp1:
+	for(i=start;i<slen;i++) if(src[i]==token[0]) break;
+	if (i>=slen) return -1;
+	k=i;
+	for(i=0;i<klen;i++) 
+	{
+		if(src[k+i]!=token[i])
+		{
+			start=k+i;
+			goto lp1;
+		}
+	}
+	if(i>=klen) return k;
+	return -1;
+}
+int stringcmp(char* src ,char* token, int len)
+{
+	int start=0,k,i,slen=strlen(src);
+lp:
+	for(i=start;i<slen;i++) if(src[i]==token[0]) break;
+	if (i>=slen) return -1;
+	k=i;
+	for(i=0;i<len;i++) 
+	{
+		if(src[k+i]!=token[i])
+		{
+			start=k+i;
+			goto lp;
+		}
+	}
+	if(i>=len) return k;
+	return -1;
+}
+
+void AurhorizationResponseBytes(char* byte_array_out,int * byte_array_length_out,char *Myuri, char *nonce,char *cnonce,char *response)
+{
+	//	Authorization: Digest username="supervisor", realm="VideoIQ", nonce="n99u1VYBAABAf0HT+h92EO4hT2CzmfxG", uri="/PSIA/VIQ/Event/metadata/0/files", response="7d8d929e39655ad9f3e6e94e9004792e", qop=auth, nc=00000001, cnonce="0d2175d8cdb63f84f18894200e129ace", algorithm="MD5"
+	int idx=0,len;
+	idx = sprintf(byte_array_out,"%s","Authorization: Digest username="); 
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s","supervisor");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",realm=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s","VideoIQ");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",nonce=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx], "%s",nonce);idx+=len;//"n99u1VYBAABAf0HT+h92EO4hT2CzmfxG"
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",uri=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",Myuri);idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",algorithm=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s","MD5");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",response=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",response);idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",qop=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s","auth");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",nc=00000001,cnonce=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",cnonce);idx+=len;//cnonce
+	byte_array_out[idx++]=0x22;//'"'
+	*byte_array_length_out = idx;
+}
+void AurhorizationResponseBytesReal(char* byte_array_out,int * byte_array_length_out,char *Myuri, char *nonce,char *cnonce,char *response)
+{
+	//	Authorization: Digest username="supervisor", realm="VideoIQ", nonce="n99u1VYBAABAf0HT+h92EO4hT2CzmfxG", uri="/PSIA/VIQ/Event/metadata/0/files", response="7d8d929e39655ad9f3e6e94e9004792e", qop=auth, nc=00000001, cnonce="0d2175d8cdb63f84f18894200e129ace", algorithm="MD5"
+	int idx=0,len;
+	idx = sprintf(byte_array_out,"%s","Authorization: Digest username="); 
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s","supervisor");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",realm=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s","VideoIQ");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",nonce=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx], "%s",nonce);idx+=len;//"n99u1VYBAABAf0HT+h92EO4hT2CzmfxG"
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",uri=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",Myuri);idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",algorithm=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s","MD5");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",cnonce=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",cnonce);idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",nc=00000001,qop=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s","auth");idx+=len;//cnonce
+	byte_array_out[idx++]=0x22;//'"'
+	
+	len = sprintf(&byte_array_out[idx],"%s",",response=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",response);idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	*byte_array_length_out = idx;
+}
+void AurhorizationResponseBytesReatart(char* byte_array_out,int * byte_array_length_out,char *Myuri, char *nonce,char *cnonce,char *response)
+{
+	int idx=0,len;
+	idx = sprintf(byte_array_out,"%s","Authorization: Digest username="); 
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s","supervisor");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",realm=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s","VideoIQ");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",nonce=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx], "%s",nonce);idx+=len;//"n99u1VYBAABAf0HT+h92EO4hT2CzmfxG"
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",uri=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",Myuri);idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",algorithm=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s","MD5");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",cnonce=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",cnonce);idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",nc=00000001");idx+=len;
+
+	len = sprintf(&byte_array_out[idx],"%s",",qop=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s","auth");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",",response=");idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	len = sprintf(&byte_array_out[idx],"%s",response);idx+=len;
+	byte_array_out[idx++]=0x22;//'"'
+	*byte_array_length_out = idx;
+
+}
+				   /*
+				   --VIQeventEVENTeventVIQ
+					   Content-type: application/xml; charset="UTF-8"
+
+					   <urn:ViqEventNotificationAlert urn:version="1.0" xmlns:urn="urn:videoiq-com">
+					   <urn:channelId>3</urn:channelId>
+					   <urn:eventId>6478</urn:eventId>
+					   <urn:startTime urn:version="1.0">
+					   <urn:date>2016-11-07T08:50:54.063</urn:date><urn:offset>28800000</urn:offset>
+					   </urn:startTime>
+					   <urn:clipUrl>/media/clips/3/2016/11/7/8/3/2016_11_07-08_50_48.mp4</urn:clipUrl>
+					   <urn:ruleId>17</urn:ruleId>
+					   <urn:ruleName>Video Lost Rule</urn:ruleName>
+					   <urn:soiId>-1</urn:soiId>
+					   <urn:soiName>Reserved SOI</urn:soiName>
+					   <urn:activity>Video Lost</urn:activity>
+					   <urn:objectType>Unknown</urn:objectType>
+					   <urn:aborted>false</urn:aborted>
+					   <urn:acknowledged>false</urn:acknowledged>
+					   <urn:ackNotes xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/><urn:falseAlarm>false</urn:falseAlarm>
+					   <urn:debugMessage>2016/11/07 08:50:54.63: Video lost detected: 101. Event (id=6478) started.</urn:debugMessage>
+					   </urn:ViqEventNotificationAlert>
+					   */
+
+int AnalyXMLUrnEVENT(char* buff,int length,AlarmInfo* RealAlarmEvent)
+{
+	int sidx,eidx;
+	sidx = stringcmp((char*)buff,"<urn:channelId>",15);
+	eidx = stringcmp((char*)buff,"</urn:channelId>",16);
+	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->channelId,&buff[sidx+15],eidx-sidx-15);
+	sidx = stringcmp((char*)buff,"<urn:eventId>",13);
+	eidx = stringcmp((char*)buff,"</urn:eventId>",14);
+	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->eventId,&buff[sidx+13],eidx-sidx-13);
+
+	sidx = stringcmp((char*)buff,"<urn:startTime",14);
+	eidx = stringcmp((char*)buff,"</urn:startTime",15);
+	char tmp[200];
+	memset(tmp,0,200);
+	if(sidx>=0 && eidx>=0 && sidx < eidx){
+		memcpy(tmp,&buff[sidx+15],eidx-sidx-14);
+		sidx=stringcmp((char*)tmp,"<urn:date>",10);
+		eidx = stringcmp((char*)tmp,"</urn:date>",11);
+		if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->startTime,&tmp[sidx+10],eidx-sidx-10);
+		sidx=stringcmp((char*)tmp,"<urn:offset>",12);
+		eidx = stringcmp((char*)tmp,"</urn:offset>",13);
+		if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->soffset,&tmp[sidx+12],eidx-sidx-12);
+	}
+	sidx = stringcmp((char*)buff,"<urn:endTime",12);
+	if(sidx>=0){
+		int ssidx=stringcmp((char*)buff,"<urn:date>",10);
+		eidx = stringcmp((char*)buff,"</urn:date>",11);
+		if(ssidx>=0 && eidx>=0 && ssidx < eidx) memcpy(RealAlarmEvent->endTime,&buff[ssidx+10],eidx-ssidx-10);
+	}
+	sidx = stringcmp((char*)buff,"<urn:clipUrl>",13);
+	eidx = stringcmp((char*)buff,"</urn:clipUrl>",14);
+	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->clipUrl,&buff[sidx+13],eidx-sidx-13);
+	sidx = stringcmp((char*)buff,"<urn:ruleId>",12);
+	eidx = stringcmp((char*)buff,"</urn:ruleId>",13);
+	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->ruleId,&buff[sidx+12],eidx-sidx-12);
+	sidx = stringcmp((char*)buff,"<urn:ruleName>",14);
+	eidx = stringcmp((char*)buff,"</urn:ruleName>",15);
+	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->ruleName,&buff[sidx+14],eidx-sidx-14);
+	sidx = stringcmp((char*)buff,"<urn:soiId>",11);
+	eidx = stringcmp((char*)buff,"</urn:soiId>",12);
+	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->soiId,&buff[sidx+11],eidx-sidx-11);
+	sidx = stringcmp((char*)buff,"<urn:soiName>",13);
+	eidx = stringcmp((char*)buff,"</urn:soiName>",14);
+	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->soiName,&buff[sidx+13],eidx-sidx-13);
+	sidx = stringcmp((char*)buff,"<urn:activity>",14);
+	eidx = stringcmp((char*)buff,"</urn:activity>",15);
+	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->activity,&buff[sidx+14],eidx-sidx-14);
+	sidx = stringcmp((char*)buff,"<urn:objectType>",16);
+	eidx = stringcmp((char*)buff,"</urn:objectType>",17);
+	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->objectType,&buff[sidx+16],eidx-sidx-16);
+	sidx = stringcmp((char*)buff,"<urn:aborted>",13);
+	eidx = stringcmp((char*)buff,"</urn:aborted>",14);
+	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->aborted,&buff[sidx+13],eidx-sidx-13);
+	sidx = stringcmp((char*)buff,"<urn:acknowledged>",18);
+	eidx = stringcmp((char*)buff,"</urn:acknowledged>",19);
+	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->acknowledged,&buff[sidx+18],eidx-sidx-18);
+	sidx = stringcmp((char*)buff,"<urn:debugMessage>",18);
+	eidx = stringcmp((char*)buff,"</urn:debugMessage>",19);
+	if(sidx>=0 && eidx>=0 && sidx < eidx) memcpy(RealAlarmEvent->debugMessage,&buff[sidx+18],eidx-sidx-18);
+
+	return 0;
+}
+
+//鍒ゆ柇鏄惁涓虹洰褰�
+bool is_dir(const char *path)
+{
+    struct stat statbuf;
+    if(lstat(path, &statbuf) ==0)//lstat杩斿洖鏂囦欢鐨勪俊鎭紝鏂囦欢淇℃伅瀛樻斁鍦╯tat缁撴瀯涓�
+    {
+        return S_ISDIR(statbuf.st_mode) != 0;//S_ISDIR瀹忥紝鍒ゆ柇鏂囦欢绫诲瀷鏄惁涓虹洰褰�
+    }
+    return false;
+}
+
+//鍒ゆ柇鏄惁涓哄父瑙勬枃浠�
+bool is_file(const char *path)
+{
+    struct stat statbuf;
+    if(lstat(path, &statbuf) ==0)
+        return S_ISREG(statbuf.st_mode) != 0;//鍒ゆ柇鏂囦欢鏄惁涓哄父瑙勬枃浠�
+    return false;
+}
+//鍒ゆ柇鏄惁鏄壒娈婄洰褰�
+bool is_special_dir(const char *path)
+{
+    return strcmp(path, ".") == 0 || strcmp(path, "..") == 0;
+}
+
+//鐢熸垚瀹屾暣鐨勬枃浠惰矾寰�
+void get_file_path(const char *path, const char *file_name,  char *file_path)
+{
+    strcpy(file_path, path);
+    if(file_path[strlen(path) - 1] != '/')
+        strcat(file_path, "/");
+    strcat(file_path, file_name);
+}
+
+void delete_file(const char *path)
+{
+	char cmd[30];
+	memset(cmd,0,30);
+	sprintf(cmd,"rm -f %s",path);
+	system(cmd);
+}
+void delete_folder(const char *path)
+{
+	char cmd[30];
+	memset(cmd,0,30);
+	sprintf(cmd,"rm -r %s",path);
+	system(cmd);	
+}
+int doesFileExist(const char *filename)
+{
+	struct stat st;
+	int result=stat(filename,&st);
+	if (result==0)
+	 return 1;
+	 else return 0;
+ }  
+int GetFileNameInFolder(char* dirname,lpfilenames lpfilename)
+{  
+	int num=0;
+    DIR *p_dir;   
+    struct dirent *p_dirent;  
+    if((p_dir = opendir(dirname)) == NULL){  
+        printf("---->can\'t open %s\n",dirname);  
+        return 0;  
+    }  
+    while((p_dirent = readdir(p_dir))){  
+        strcpy(lpfilename[num].name ,p_dirent->d_name);  
+		num++;
+    }  
+    return num;  
+}  
+int net_test(char* serverIP,char* port)
+{
+	struct sockaddr_in servaddr;
+	int strlen=sizeof(servaddr);
+	int sockfdd;
+	if((sockfdd=socket(PF_INET,SOCK_STREAM,0))<0){
+		perror("socket fail");
+		close(sockfdd);
+		return -1;
+	}
+	memset(&servaddr,0,strlen);
+	servaddr.sin_family=AF_INET;
+	inet_pton(AF_INET,serverIP,&servaddr.sin_addr);
+	servaddr.sin_port=htons(atoi(port));
+	if(connect(sockfdd,(struct sockaddr*)&servaddr,strlen)<0){
+		//		perror("connect fail-3");
+		close(sockfdd);
+		return -2;
+	}
+	close(sockfdd);
+	return 0;
+}
+void GPIOinit(void)
+{
+	int retVal = -1;
+	int PortNum = 0xA06;
+	unsigned char wVal = 0x15;
+	retVal = GPIO_OPEN(PortNum);
+	printf("GPIO OPEN RES = %d  \n",retVal);
+	GPIO_WRITE(PortNum,wVal);
+	printf("GPIO WRITE VALUE = 0x%X \n", wVal);
+
+	retVal = GPIO_READ(PortNum);
+	printf("GPIO READ VALUE 02 = 0x%X  \n",retVal);
+
+	GPIO_CLOSE(PortNum);
+}
+int GPIOoutput(int no)
+{
+	int PortNum = 0xA06;
+	switch(no){
+	case 0: 
+		GPIO_WRITE(PortNum,0x15);
+		return 0;
+	case 1: 
+		GPIO_WRITE(PortNum,0x57);
+		return 0;
+	case 2: 
+		GPIO_WRITE(PortNum,0x5D);
+		return 0;
+	case 3: 
+		GPIO_WRITE(PortNum,0x5F);
+		return 0;
+	case 4: 
+		GPIO_WRITE(PortNum,0x75);
+		return 0;
+	case 5:  
+		GPIO_WRITE(PortNum,0x77);
+		return 0;
+	case 6: 
+		GPIO_WRITE(PortNum,0x7D);
+		return 0;
+	case 7: 
+		GPIO_WRITE(PortNum,0x7F);
+		return 0;
+	case 8: 
+		GPIO_WRITE(PortNum,0xD5);
+		return 0;		
+	case 9:  
+		GPIO_WRITE(PortNum,0xD7);
+		return 0;
+	case 10: 
+		GPIO_WRITE(PortNum,0xDD);
+		return 0;
+	case 11: 
+		GPIO_WRITE(PortNum,0xDF);
+		return 0;
+	case 12: 
+		GPIO_WRITE(PortNum,0xF5);
+		return 0;
+	case 13: 
+		GPIO_WRITE(PortNum,0xF7);
+		return 0;
+	case 14: 
+		GPIO_WRITE(PortNum,0xFD);
+		return 0;
+	case 15: 
+		GPIO_WRITE(PortNum,0xFF);
+		return 0;
+	}
+	return -1;
+}
+int GPIO_OPEN(int PortNum)
+{
+   return ioperm(PortNum, 0x01, 0x01);
+}
+
+void GPIO_CLOSE(int PortNum)
+{
+   ioperm(PortNum, 0x01, 0x00);
+}
+
+int GPIO_READ(int PortNum)
+{
+  return inb(PortNum);
+}
+
+void GPIO_WRITE(int PortNum,unsigned char DATA)
+{
+  outb(DATA,PortNum);
+}
+
+int Read_MysqlData(){
+	int ret=0;
+	MYSQL *conn;
+	MYSQL_RES *res;
+	MYSQL_ROW row;
+	char *server="localhost";
+	char *user="root";
+	char *password="123";
+	char *database="opentutorials";
+	puts("Step.0 ========>MySQL is getting......");
+	if(!(conn=mysql_init((MYSQL*)NULL))){
+		printf("init fail\n");
+		return -1;
+	}
+	if(!mysql_real_connect(conn,server,user,password,NULL,3306,NULL,0)){
+		printf("connect error.\n");
+		return -1;
+	}
+	if(mysql_select_db(conn,database)!=0){
+		mysql_close(conn);
+		printf("select_db_fail.\n");
+		return -1;
+	}
+	if(mysql_query(conn,"select * from tbl_deviceinfo")){
+		printf("query fail\n");
+		return -1;
+	}
+	res=mysql_store_result(conn);	
+	while((row=mysql_fetch_row(res))!=NULL){
+		strcat(EventString,row[1]);	strcat(EventString,":");
+		strcat(EventString,row[2]); strcat(EventString,":");
+		strcat(EventString,row[3]);	strcat(EventString,":");
+		strcat(EventString,row[4]);	strcat(EventString,":");
+		strcat(EventString,row[5]);	strcat(EventString,":");
+		strcat(EventString,row[6]);	strcat(EventString,":");
+		strcat(EventString,row[7]);	strcat(EventString,":");
+		strcat(EventString,row[8]);	strcat(EventString,":");
+		strcat(EventString,row[9]);	strcat(EventString,":");
+		strcat(EventString,row[10]);strcat(EventString,"\n");
+	}
+	mysql_close(conn);
+	return ret;
+
+}
+int UpdateMysqData(int key)
+{
+	int ret=0;
+	MYSQL *conn;	
+	char *server="localhost";
+	char *user="root";
+	char *password="123";
+	char *database="opentutorials";
+	char query[255];
+	puts("Step.0 ========>MySQL is getting......");
+	if(!(conn=mysql_init((MYSQL*)NULL))){
+		printf("init fail\n");
+		exit(1);
+	}
+	if(!mysql_real_connect(conn,server,user,password,NULL,3306,NULL,0)){
+		printf("connect error.\n");
+		exit(1);
+	}
+	if(mysql_select_db(conn,database)!=0){
+		mysql_close(conn);
+		printf("select_db_fail.\n");
+		exit(1);
+	}
+	sprintf(query,"UPDATE tbl_deviceinfo SET reboot=0 where id=%d",key);	
+	if(mysql_query(conn,query)){
+		printf("query fail\n");
+		exit(1);
+	}	
+	mysql_close(conn);
+	return ret;
+
+}
+int Check_MysqlData(char *AnalyserName,char* AnalyserIP,char* AnalyserPort,char* ServerIP,char* ServerPort,char* user,char* pass,char* resol,char* commType){
+	int ret=0;
+	MYSQL *conn;
+	MYSQL_RES *res;
+	MYSQL_ROW row;
+	char *server="localhost";
+	char *user1="root";
+	char *password="123";
+	char *database="opentutorials";
+    puts("Step.0 ========>MySQL is getting......");
+	if(!(conn=mysql_init((MYSQL*)NULL))){
+		printf("init fail\n");
+		exit(1);
+	}
+	if(!mysql_real_connect(conn,server,user1,password,NULL,3306,NULL,0)){
+		printf("connect error.\n");
+		exit(1);
+	}
+	if(mysql_select_db(conn,database)!=0){
+		mysql_close(conn);
+		printf("select_db_fail.\n");
+		exit(1);
+	}
+	if(mysql_query(conn,"select * from tbl_deviceinfo")){
+		printf("query fail\n");
+		exit(1);
+	}
+	res=mysql_store_result(conn);   
+	while((row=mysql_fetch_row(res))!=NULL){
+		ret=0;	
+//	   printf("====%s:%s",row[0],row[11]);	   //sprintf(equipments[NUM].m_id,"%d",row[0]);
+	   if(strcmp(AnalyserName,row[10]) ==0) ret = 1; 
+	   if(strcmp(AnalyserIP,row[1]) ==0) ret =ret+1; 
+	   if(strcmp(AnalyserPort,row[2]) ==0) ret =ret+1; 
+	   if(strcmp(ServerIP,row[3]) ==0) ret =ret+1; 
+	   if(strcmp(ServerPort,row[4]) ==0) ret =ret+1; 
+	   if(strcmp(user,row[6]) ==0) ret =ret+1; 	 
+	   if(strcmp(pass,row[5]) ==0) ret =ret+1; 	 
+	   if(strcmp(resol,row[7]) ==0) ret =ret+1;
+	   if(strcmp(commType,row[8]) ==0) ret =ret+1;
+	   if(ret==9) break;	
+	}
+	mysql_close(conn);
+	return ret;	
+}
+int InsertMysqlData(char *AnalyserName,char* AnalyserIP,char* AnalyserPort,char* ServerIP,char* ServerPort,char* username,char* pass,char* resol,char* commType)
+{
+	int ret=0;
+	MYSQL *conn;	
+	char *server="localhost";
+	char *user="root";
+	char *password="123";
+	char *database="opentutorials";
+	char query[255];
+	struct tm *t;
+	char time_info[20]={0,};
+	time_t timer;
+	timer=time(NULL);
+	t=localtime(&timer);
+	sprintf(time_info, "%d-%d-%d %d:%d:%d",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
+	
+	if(!(conn=mysql_init((MYSQL*)NULL))){
+		printf("init fail\n");
+		return -1;
+	}
+	if(!mysql_real_connect(conn,server,user,password,NULL,3306,NULL,0)){
+		printf("connect error.\n");
+		return -1;
+	}
+	if(mysql_select_db(conn,database)!=0){
+		mysql_close(conn);
+		printf("select_db_fail.\n");
+		return -1;
+	}	
+	sprintf(query, "INSERT INTO tbl_deviceinfo(equipmentip,equipmentport,serverip,serverport,password,username,analysis,comtype,redate,comment,reboot)VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s','%s','%s',0);",AnalyserIP, AnalyserPort, ServerIP, ServerPort,pass,username, resol, commType,time_info,AnalyserName);//?????????????
+	printf("query=%s",query);
+	if(mysql_query(conn,query)){
+		printf("query fail\n");
+		return -1;
+	}	
+	mysql_close(conn);
+	return ret;
+
+}
+//=====================================MD5 Function Definition============================================
+void MD5Init (MD5_CTX *context)    /* context */
+{
+  context->count[0] = context->count[1] = 0;
+  context->state[0] = 0x67452301;    /* Load magic initialization constants.*/
+  context->state[1] = 0xefcdab89;
+  context->state[2] = 0x98badcfe;
+  context->state[3] = 0x10325476;
+}
+
+/* -----------------------------------------------------------------------------------
+   MD5 block update operation. Continues an MD5 message-digest
+   operation, processing another message block, and updating the  context.
+-------------------------------------------------------------------------------------*/
+                /* context */     /* input block */  /* length of input block */
+void MD5Update (MD5_CTX *context, unsigned char *input,unsigned int inputLen  )
+{
+  unsigned int i, index, partLen;
+  index = (unsigned int)((context->count[0] >> 3) & 0x3F);   /* Compute number of bytes mod 64 */
+
+  if ( (context->count[0] += ( (UINT4)inputLen << 3) ) < ( (UINT4)inputLen << 3 ) )
+		context->count[1]++;
+  
+  context->count[1] += ((UINT4)inputLen >> 29);
+  partLen = 64 - index;
+
+  /* Transform as many times as possible.*/
+  if (inputLen >= partLen) 
+  {
+	MD5_memcpy( (POINTER)&context->buffer[index], (POINTER)input, partLen);
+	MD5Transform (context->state, context->buffer);
+
+	for (i = partLen; i + 63 < inputLen; i += 64)
+			MD5Transform (context->state, &input[i]);
+
+	index = 0;
+  }
+  else
+		i = 0;
+  /* Buffer remaining input */
+  MD5_memcpy( (POINTER)&context->buffer[index], (POINTER)&input[i],inputLen-i );
+}
+
+/* 
+  MD5 finalization. Ends an MD5 message-digest operation, writing the
+  the message digest and zeroizing the context.
+*/
+void MD5Final (unsigned char digest[16], MD5_CTX *context)
+                /* message digest */      /* context */
+{
+  unsigned char bits[8];
+  unsigned int index, padLen;
+  
+  Encode (bits, context->count, 8); /* Save number of bits */
+
+  /* Pad out to 56 mod 64.*/
+  index = (unsigned int)((context->count[0] >> 3) & 0x3f);
+  padLen = (index < 56) ? (56 - index) : (120 - index);
+  MD5Update (context,(unsigned char*) PADDING, padLen);
+
+  MD5Update (context, bits, 8);   /* Append length (before padding) */
+  Encode (digest, context->state, 16); /* Store state in digest */
+
+  /* Zeroize sensitive information.*/
+  MD5_memset ((POINTER)context, 0, sizeof (*context));
+}
+
+/* MD5 basic transformation. Transforms state based on block.
+ */
+void MD5Transform (UINT4 state[4],unsigned char block[64])
+{
+	
+	UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
+
+	Decode (x, block, 64);
+  /* Round 1 */
+  FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
+  FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
+  FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
+  FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
+  FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
+  FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
+  FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
+  FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
+  FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
+  FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
+  FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
+  FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
+  FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
+  FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
+  FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
+  FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
+  /* Round 2 */
+  GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
+  GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
+  GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
+  GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
+  GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
+  GG (d, a, b, c, x[10], S22,  0x2441453); /* 22 */
+  GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
+  GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
+  GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
+  GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
+  GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
+  GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
+  GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
+  GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
+  GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
+  GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
+  /* Round 3 */
+  HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
+  HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
+  HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
+  HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
+  HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
+  HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
+  HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
+  HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
+  HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
+  HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
+  HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
+  HH (b, c, d, a, x[ 6], S34,  0x4881d05); /* 44 */
+  HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
+  HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
+  HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
+  HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
+  /* Round 4 */
+  II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
+  II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
+  II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
+  II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
+  II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
+  II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
+  II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
+  II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
+  II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
+  II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
+  II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
+  II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
+  II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
+  II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
+  II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
+  II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
+
+  state[0] += a;
+  state[1] += b;
+  state[2] += c;
+  state[3] += d;
+
+  /* Zeroize sensitive information.*/
+  MD5_memset ((POINTER)x, 0, sizeof (x));
+}
+
+/* Encodes input (UINT4) into output (unsigned char). Assumes len is
+  a multiple of 4.
+ */
+void Encode (unsigned char *output,UINT4 *input,unsigned int len)
+{
+  unsigned int i, j;
+
+  for (i = 0, j = 0; j < len; i++, j += 4) 
+  {
+	output[j] = (unsigned char)(input[i] & 0xff);
+	output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
+	output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
+	output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
+  }
+}
+
+/* Decodes input (unsigned char) into output (UINT4). Assumes len is
+  a multiple of 4.
+ */
+void Decode (UINT4 *output,unsigned char *input,unsigned int len)
+{
+  unsigned int i, j;
+
+  for (i = 0, j = 0; j < len; i++, j += 4)
+	output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) | (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
+}
+
+/* Note: Replace "for loop" with standard memcpy if possible. */
+void MD5_memcpy (POINTER output,POINTER input,unsigned int len)
+{
+  unsigned int i;
+
+  for (i = 0; i < len; i++)
+	  output[i] = input[i];
+}
+
+/* Note: Replace "for loop" with standard memset if possible. */
+void MD5_memset (POINTER output,int value,unsigned int len)
+{
+  unsigned int i;
+
+  for (i = 0; i < len; i++)
+	 ((char *)output)[i] = (char)value;
+}
+
+/* Digests a string and prints the result. */
+char* MDString (char *string)
+{
+  MD5_CTX context;
+  unsigned char digest[16];
+  char output1[33];
+  static  char output[33]={"\0"};
+  unsigned int len = strlen (string);
+  int i;
+  MD5Init (&context);
+  MD5Update (&context, (unsigned char*)string, len);
+  MD5Final (digest, &context);
+  for (i = 0; i < 16; i++)
+  {
+	  sprintf(&(output1[2*i]),"%02x",(unsigned char)digest[i]);
+	  //sprintf(&(output1[2*i+1]),"%02x",(unsigned char)(digest[i]<<4));
+  }
+  for(i=0;i<32;i++)
+  output[i]=output1[i];
+  return output;
+}
+
+
+
+
diff --git a/ProxyServer/proxyserver.h b/ProxyServer/proxyserver.h
index 0799edf..82fddec 100644
--- a/ProxyServer/proxyserver.h
+++ b/ProxyServer/proxyserver.h
@@ -1,25 +1,25 @@
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-#include <arpa/inet.h>
-#include <time.h>
-#include <signal.h>
-#include <pthread.h>
-#include <sys/time.h>
-#include <stdbool.h>
-#include <fcntl.h>
-#include <sys/stat.h>
+#include<sys/socket.h>
+#include<sys/types.h>
+#include<netinet/in.h>
+#include<netdb.h>
+#include<stdio.h>
+#include<string.h>
+#include<stdlib.h>
+#include<unistd.h>
+#include<errno.h>
+#include<arpa/inet.h>
+#include<time.h>
+#include<signal.h>
+#include<pthread.h>
+#include<sys/time.h>
+#include<stdbool.h>
+#include<fcntl.h>
+#include<sys/stat.h>
 #define _DELETE_FILE
-#include <dirent.h>
-#include <limits.h>
-#include <sys/io.h>
-#include <signal.h>
+#include<dirent.h>
+#include<limits.h>
+#include<sys/io.h>
+#include<signal.h>
 int RealAlarmEventNum[16];
 typedef struct{
 	int Year;
@@ -61,6 +61,7 @@
 {
 	bool mp4downed;
 	bool Ack;
+	bool InSearchRange;
 	char Date[15];
 	char Time[15];
 	char Rule[20];
@@ -112,7 +113,7 @@
 int doesFileExist(const char *filename);
 void delete_file(const char *path);
 void delete_folder(const char *path);
-void AnalySerFile(char* p_save_buf,int res);
+void AnalySerFile(char* p_save_buf,int res, int SearchStartTm, int SearchEndTm);
 int GetFileNameInFolder(char* dirname,lpfilenames lpfilename);
 int net_test(char* serverIP,char* port);
 void GPIOinit(void);
@@ -127,7 +128,7 @@
 void AurhorizationResponseBytesReatart(char* byte_array_out,int * byte_array_length_out,char *Myuri, char *nonce,char *cnonce,char *response);
 int Read_MysqlData();
 int UpdateMysqData(int key);
-
+int InsertMysqlData(char *AnalyserName,char* AnalyserIP,char* AnalyserPort,char* ServerIP,char* ServerPort,char* username,char* pass,char* resol,char* commType);
 
 
 
@@ -140,9 +141,11 @@
 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);	//potection function
 char* GetSearchMetaInfo(char* AnalyserIP,char* user,char* pass,int Channel,lpMyTime StartTm,lpMyTime EndTm);	//4.鏌ヨ璁板綍				鍙傛暟锛氬垎鏋愬櫒IP锛屽紑濮嬫椂闂达紝缁撴潫鏃堕棿锛屼俊閬撳彿銆傝繑鍥烇細鏌ヨ缁撴灉銆傦紙鍖呮嫭淇¢亾鍙凤紝鎶ヨ鏃堕棿锛屾挱鏀惧湴鍧�锛岀瓑銆傦級
 char* GetAnalyserNet(void);																												//5.鑾峰彇褰撳墠杞彂鍣ㄧ殑ip		鍙傛暟锛氭棤銆傝繑鍥烇細褰撳墠鐨刬p鍦板潃瀛愮綉鎺╃爜鍜岀綉鍏�
-int SetAnalyserNet(char* NetInfo);
+int SetAnalyserNet(char* NetInfo);	
 char* GetMp4Info(char* AnalyserIP,char* user,char* pass,int Channel,char* path)	;	
-
+char* GetAnalyserAll();																													//9.鏌ヨ璁惧   鍙傛暟锛氭棤		杩斿洖锛氬垎鏋愬櫒鐨勫悕绉板拰ip
+int DeleteAnalyser(char* AnalyserIP);																									//8.鍒犻櫎璁惧   鍙傛暟锛氳澶噄p	杩斿洖锛氭垚鍔熸垨澶辫触鐨勬彁绀恒��
+int InsertAnalyser(char *AnalyserName,char* AnalyserIP,char* AnalyserPort,char* ServerIP,char* ServerPort,char* user,char* pass,char* resol,char* commType);//																	7.娣诲姞璁惧   鍙傛暟锛氳澶囧睘鎬с�傝繑鍥烇細鎴愬姛杩斿洖瀵瑰簲鐨勮棰戞祦鍦板潃锛屽け璐ヨ繑鍥炰竴涓彁绀恒��
 char* GetDeviceInfo(char* AnalyserIP);
 int Check_MysqlData(char *AnalyserName,char* AnalyserIP,char* AnalyserPort,char* ServerIP,char* ServerPort,char* user,char* pass,char* resol,char* commType);
 //

--
Gitblit v1.8.0