From 109ffe9a777658936a38d0c146579a67c60a0d17 Mon Sep 17 00:00:00 2001
From: xuxiuxi <xuxiuxi@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期四, 11 五月 2017 17:48:48 +0800
Subject: [PATCH] 

---
 ProxyConsole/proxyconsole-hc.cpp |  504 ++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 417 insertions(+), 87 deletions(-)

diff --git a/ProxyConsole/proxyconsole-hc.cpp b/ProxyConsole/proxyconsole-hc.cpp
index a0bfacd..b29f2b0 100644
--- a/ProxyConsole/proxyconsole-hc.cpp
+++ b/ProxyConsole/proxyconsole-hc.cpp
@@ -29,17 +29,19 @@
 
 #include <unistd.h>
 
-#include <jsoncpp/json/json.h>
+#include <json/json.h>
 
 #include "MD5Linux.h"
 
-#include "HCNetSDK/incCn/HCNetSDK.h"
+#include "HCNetSDK64/incCn/HCNetSDK.h"
 #define  HPR_OK 0
 #define  HPR_ERROR -1
 
-#define MAX_NUM 16
+#define MAX_NUM 32
 #define MAX 1024
 #define fileread_buf 128
+
+volatile time_t last_alarmout;
 
 typedef std::map<std::string, int> hcnetsdk_user_t; // decoder_ip, userid
 hcnetsdk_user_t g_hcnetsdk_user;
@@ -49,12 +51,23 @@
 	ET__FIRST,
 	ET_PC_SERVER,
 	ET_HCNET_DECODER__FIRST,
-	ET_HCNET_DECODER_POPWIN,
-	ET_HCNET_DECODER_LOGO,
-	ET_HCNET_DECODER_ALARMOUT,
+	ET_HCNET_DECODER_POPWIN, // 3
+	ET_HCNET_DECODER_LOGO, // 4
+	ET_HCNET_DECODER_ALARMOUT, // 5
+	ET_HCNET_DECODER_LOGO_ALARMOUT, // 6
 	ET_HCNET_DECODER__LAST,
 	ET__LAST
 };
+
+struct HCNetSDKConfig
+{
+	std::string serverIP;
+	int serverport;
+	std::string username;
+	std::string passwd;
+};
+
+HCNetSDKConfig g_hcnetsdkconfig;
 
 struct HCNetCameraConfig
 {
@@ -66,7 +79,7 @@
 	int channel;
 	uint16_t byWallNo;
 	uint16_t dwSubWinNo;
-	uint16_t dwWinNo;
+	std::vector<uint16_t> dwWinNo;
 	uint16_t lAlarmOutPort;
 };
 
@@ -85,14 +98,14 @@
 pthread_t thread_no[MAX_NUM];
 pthread_t thread_noEQ[MAX_NUM];
 pthread_t thread_Real[MAX_NUM];
-sockinfo equipments[16];
-int sock_upper[16],sock_down[16];
-int rsock_down[16];
+sockinfo equipments[MAX_NUM];
+int sock_upper[MAX_NUM],sock_down[MAX_NUM];
+int rsock_down[MAX_NUM];
 char byte_array[2600];
 int bbbbb=0;
 int CommandEquipIdx=0;
-int CommandKind[16];
-char sessionIDs[16][5];
+int CommandKind[MAX_NUM];
+char sessionIDs[MAX_NUM][5];
 
 char linkequip_ip[32];
 char linkequip_port[10];
@@ -101,8 +114,8 @@
 
 int NUM=0,equip_num=0;
 
-int SupperConnectedflag[16]={0,},EquipConnectedflag[16]={0,},serverflag=0,GPIO_flag=0;
-int EquipRealAlarmConnectedflag[16];
+int SupperConnectedflag[MAX_NUM]={0,},EquipConnectedflag[MAX_NUM]={0,},serverflag=0,GPIO_flag=0;
+int EquipRealAlarmConnectedflag[MAX_NUM];
 timer_t* timerID;
 
 std::vector<std::string> SupperConnectedIP;
@@ -127,12 +140,12 @@
 int GPIO_READ(int PortNum);
 void GPIO_WRITE(int PortNum,unsigned char DATA);
 int RealEventStart(int Idx);
-int gCapturing[16];
-char sessions[16][10];
+int gCapturing[MAX_NUM];
+char sessions[MAX_NUM][10];
 
 int n=0,m=0,k=0;
-unsigned char DownBuffer[16][614000];
-int DownCount[16];
+unsigned char DownBuffer[MAX_NUM][614000];
+int DownCount[MAX_NUM];
 int gCount=0;
 int gCount30s=0;
 int gCount2s=0;
@@ -158,10 +171,10 @@
 	gCount2s++;
 	if(gCount2s>=8){
 		gCount2s=0;
-		for(;CommandEquipIdx<16;CommandEquipIdx++){//connected
+		for(;CommandEquipIdx<MAX_NUM;CommandEquipIdx++){//connected
 			if(EquipConnectedflag[CommandEquipIdx]>0) break;
 		}
-		if(CommandEquipIdx>=16){
+		if(CommandEquipIdx>=MAX_NUM){
 			CommandEquipIdx = 0;
 		}
 	}
@@ -219,7 +232,7 @@
 				}
 				SupperConnectedflag[i]=1;
 				SupperConnectedIP[i] = equipments[i].serverIP;
-				printf("server connect Success=:%s:%s\n",equipments[i].serverIP,equipments[i].serverport);
+				//printf("server connect Success=:%s:%s\n",equipments[i].serverIP,equipments[i].serverport);
 				pthread_create(&thread_no[i],NULL,&createServerthread,(void*)i);//super
 			}
 		}
@@ -275,11 +288,12 @@
 
 int hcnetsdk_get_userid(const std::string& decode_ip)
 {
-	hcnetsdk_user_t::const_iterator iter = g_hcnetsdk_user.find(decode_ip);
-	if(iter == g_hcnetsdk_user.end())
-		return -1;
-	else
-		return iter->second;
+	return hcnetsdk_user;
+	//hcnetsdk_user_t::const_iterator iter = g_hcnetsdk_user.find(decode_ip);
+	//if(iter == g_hcnetsdk_user.end())
+	//	return -1;
+	//else
+	//	return iter->second;
 }
 
 void CALLBACK hcnetsdk_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser)
@@ -287,7 +301,7 @@
 	printf("hcnetsdk_ExceptionCallBack: %d\n", int(dwType));
 }
 
-int hcnetsdk_alarm_alarmout(LONG lUserID, const HCNetCameraConfig& camConfig)
+int hcnetsdk_alarm_alarmout(LONG lUserID, const HCNetCameraConfig& camConfig, bool isDisalarm)
 {
 	//鎶ヨ鏃堕棿娈�
 	NET_DVR_SCHEDTIME net_dvr_schedtime = {0};
@@ -308,14 +322,29 @@
 	}
 		
 	//寮�鍚鎶�
-	if(NET_DVR_SetAlarmOut(lUserID,camConfig.lAlarmOutPort,1) == FALSE){
-		printf("NET_DVR_SetAlarmOut failed, err: %d\n", NET_DVR_GetLastError());
+	//if(NET_DVR_SetAlarmOut(lUserID,camConfig.lAlarmOutPort,1) == FALSE){
+	//	printf("NET_DVR_SetAlarmOut failed, err: %d\n", NET_DVR_GetLastError());
+	//}
+	last_alarmout = time(NULL);
+	
+	//sleep(2);
+	
+	if (isDisalarm)
+	{
+		//if (time(NULL) - last_alarmout >= 2)
+		//{
+			//瑙i櫎璀︽姤
+			NET_DVR_SetAlarmOut(lUserID,camConfig.lAlarmOutPort,0);
+		//}
 	}
-	
-	sleep(3);
-	
-	//瑙i櫎璀︽姤
-	NET_DVR_SetAlarmOut(lUserID,camConfig.lAlarmOutPort,0);
+	else
+	{
+		//寮�鍚鎶�
+		if(NET_DVR_SetAlarmOut(lUserID,camConfig.lAlarmOutPort,1) == FALSE){
+			printf("NET_DVR_SetAlarmOut failed, err: %d\n", NET_DVR_GetLastError());
+		}
+		last_alarmout = time(NULL);
+	}
 }
 
 int hcnetsdk_alarm_popwin(LONG lUserID, const HCNetCameraConfig& camConfig)
@@ -406,14 +435,51 @@
 	std::cout << "hcnetsdk_alarm_popwin" << std::endl;
 }
 
-int hcnetsdk_alarm_logo()
-{
-}
-
 void hcnetsdk_finial()
 {
 	//NET_DVR_Logout(lUserID); //#todo
 	NET_DVR_Cleanup();
+}
+
+int hcnetsdk_init_logo(LONG lUserID)
+{
+	//logo淇℃伅
+	NET_DVR_MATRIX_LOGO_INFO net_dvr_matrix_logocfg1;
+	net_dvr_matrix_logocfg1.byRes[32]=0;
+	net_dvr_matrix_logocfg1.dwSize=0;
+	net_dvr_matrix_logocfg1.dwLogoSize=0;
+
+	char logobuf[5000];
+	{
+		FILE * pFile;
+		pFile = fopen("./ico.bmp","rb");
+		if (pFile!=NULL)
+		{
+			net_dvr_matrix_logocfg1.dwLogoSize = fread(logobuf, 1, sizeof(logobuf), pFile);
+			fclose (pFile);
+		}
+		else
+		{
+			perror ("Error opening file");
+			return -1;
+		}
+	}
+
+	net_dvr_matrix_logocfg1.dwSize= sizeof(net_dvr_matrix_logocfg1);
+
+	//涓婁紶logo
+	if (TRUE != NET_DVR_UploadLogo_NEW(lUserID, 1, &net_dvr_matrix_logocfg1 , logobuf))
+	{
+		printf("NET_DVR_UploadLogo_NEW error, err: %d\n", NET_DVR_GetLastError());
+		return -1;
+	}
+	else
+	{
+		printf("NET_DVR_UploadLogo_NEW done.\n");
+		return 0;
+	}
+	
+	return -1;
 }
 
 int hcnetsdk_init()
@@ -426,19 +492,22 @@
 	LONG lUserID;
 
 	NET_DVR_DEVICEINFO_V30 struDeviceInfo;
-	lUserID = NET_DVR_Login_V30("192.168.1.101", 8000, "admin", "a1234567", &struDeviceInfo);
+	hcnetsdk_user = lUserID = NET_DVR_Login_V30((char*)g_hcnetsdkconfig.serverIP.c_str(), g_hcnetsdkconfig.serverport, 
+		(char*)g_hcnetsdkconfig.username.c_str(), (char*)g_hcnetsdkconfig.passwd.c_str(), &struDeviceInfo);
 	if (lUserID < 0) {
 		printf("NET_DVR_Login_V30 failed, err: %d\n", NET_DVR_GetLastError());
 		NET_DVR_Cleanup();
 		return -1;
 	}
 	
-	g_hcnetsdk_user.insert(std::make_pair("192.168.1.101", int(lUserID)));
+	g_hcnetsdk_user.insert(std::make_pair(g_hcnetsdkconfig.serverIP, int(lUserID)));
+	
+	hcnetsdk_init_logo(lUserID);
 	
 	return lUserID;
 }
 
-HCNetCameraConfig* hcnetsdk_find_config(const std::string& decoder_ip)
+HCNetCameraConfig* hcnetsdk_find_config(const sockinfo& oldEquipConfig, int newChannel)
 {
 	for (size_t i = 0; i < NUM; i++)
 	{
@@ -446,13 +515,161 @@
 		if (equip->m_type > ET_HCNET_DECODER__FIRST || equip->m_type < ET_HCNET_DECODER__LAST)
 		{
 			HCNetCameraConfig* camConfig = (HCNetCameraConfig*)equip->user_config;
-			if (camConfig != NULL && equip->serverIP == decoder_ip)
-				return camConfig;
+			if (camConfig != NULL && strcmp(equip->ip, oldEquipConfig.ip) == 0)
+			{
+				if (camConfig->channel == newChannel)
+					return camConfig;
+			}
 		}
 	}
 	
 	return NULL;
 }
+
+sockinfo* hcnetsdk_find_equip(const std::string& decoder_ip)
+{
+	for (size_t i = 0; i < NUM; i++)
+	{
+		sockinfo* equip = &(equipments[i]);
+		if (equip->m_type > ET_HCNET_DECODER__FIRST || equip->m_type < ET_HCNET_DECODER__LAST)
+		{
+			if (equip->serverIP == decoder_ip)
+				return equip;
+		}
+	}
+	
+	return NULL;
+}
+
+sockinfo* hcnetsdk_find_equip(const std::string& decoder_ip, int channel)
+{
+	for (size_t i = 0; i < NUM; i++)
+	{
+		sockinfo* equip = &(equipments[i]);
+		if (equip->m_type > ET_HCNET_DECODER__FIRST || equip->m_type < ET_HCNET_DECODER__LAST)
+		{
+			HCNetCameraConfig* camConfig = (HCNetCameraConfig*)equip->user_config;
+			if (camConfig != NULL && camConfig->channel == channel && equip->serverIP == decoder_ip)
+				return equip;
+		}
+	}
+	
+	return NULL;
+}
+
+int hcnetsdk_alarm_logo(LONG lUserID, const HCNetCameraConfig& _camConfig, const std::string& ip, int channel, bool disalarm)
+{
+	HCNetCameraConfig camConfig(_camConfig);
+	//if (camConfig.channel != channel)
+	//{
+	//	camConfig.channel = -1;
+	//	sockinfo* equipConfig = hcnetsdk_find_equip(ip, channel);
+	//	if (equipConfig != NULL)
+	//		camConfig = *(HCNetCameraConfig*)(equipConfig->user_config);
+	//}
+	
+	printf("hcnetsdk_alarm_logo, channel=%d, matchc=%d\n", channel, camConfig.channel);
+	
+	if (camConfig.channel < 0)
+		return -1;
+	
+	//绐楀彛閰嶇疆淇℃伅
+	NET_DVR_WIN_LOGO_CFG net_dvr_win_logo_cfg;
+	net_dvr_win_logo_cfg.dwLogoNo = 1;
+	net_dvr_win_logo_cfg.byEnable = (disalarm ? 0 : 1);//0:hidden,1:visible
+	net_dvr_win_logo_cfg.byRes1[3] =0;
+	net_dvr_win_logo_cfg.dwCoordinateX = 5;
+	net_dvr_win_logo_cfg.dwCoordinateY =5;
+	net_dvr_win_logo_cfg.byFlash = 1;
+	net_dvr_win_logo_cfg.byTranslucent = 0;
+	net_dvr_win_logo_cfg.byRes2[34] = 0;
+
+	net_dvr_win_logo_cfg.dwSize = sizeof(net_dvr_win_logo_cfg);
+	//璁剧疆绐楀彛杈撳嚭logo
+	int byWallNo=1,dwSubWinNo=2,dwWinNo=1;
+	
+	for (int i= 0; i < camConfig.dwWinNo.size(); i++)
+	{
+		DWORD dwDecChanNum=(camConfig.byWallNo << 24) | (camConfig.dwSubWinNo << 16) | camConfig.dwWinNo[i];
+		if(!NET_DVR_SetDVRConfig(lUserID,NET_DVR_SET_WIN_LOGO_CFG,dwDecChanNum,&net_dvr_win_logo_cfg,net_dvr_win_logo_cfg.dwSize))
+		{
+			printf("NET_DVR_SetDVRConfig2 error, err: %d\n", NET_DVR_GetLastError());
+			//return -1;
+		}
+		else
+		{
+			printf("NET_DVR_SetDVRConfig2 done.\n");
+			//return 0;
+		}
+	}
+	
+	return 0;
+	
+	//sleep(3);
+	//net_dvr_win_logo_cfg.byEnable = 0;
+	//NET_DVR_SetDVRConfig(lUserID,NET_DVR_SET_WIN_LOGO_CFG,dwDecChanNum,&net_dvr_win_logo_cfg,net_dvr_win_logo_cfg.dwSize);
+}
+
+
+int hcnetsdk_alarm_logo_alarmout(LONG lUserID, const HCNetCameraConfig& _camConfig, const std::string& ip, int channel, bool disalarm)
+{
+	HCNetCameraConfig camConfig(_camConfig);
+	//if (camConfig.channel != channel)
+	//{
+	//	camConfig.channel = -1;
+	//	sockinfo* equipConfig = hcnetsdk_find_equip(ip, channel);
+	//	if (equipConfig != NULL)
+	//		camConfig = *(HCNetCameraConfig*)(equipConfig->user_config);
+	//}
+	
+	printf("hcnetsdk_alarm_logo, channel=%d, matchc=%d\n", channel, camConfig.channel);
+	
+	if (camConfig.channel < 0)
+		return -1;
+	
+	//绐楀彛閰嶇疆淇℃伅
+	NET_DVR_WIN_LOGO_CFG net_dvr_win_logo_cfg;
+	net_dvr_win_logo_cfg.dwLogoNo = 1;
+	net_dvr_win_logo_cfg.byEnable = (disalarm ? 0 : 1);//0:hidden,1:visible
+	net_dvr_win_logo_cfg.byRes1[3] =0;
+	net_dvr_win_logo_cfg.dwCoordinateX = 5;
+	net_dvr_win_logo_cfg.dwCoordinateY =5;
+	net_dvr_win_logo_cfg.byFlash = 1;
+	net_dvr_win_logo_cfg.byTranslucent = 0;
+	net_dvr_win_logo_cfg.byRes2[34] = 0;
+
+	net_dvr_win_logo_cfg.dwSize = sizeof(net_dvr_win_logo_cfg);
+	//璁剧疆绐楀彛杈撳嚭logo
+	int byWallNo=1,dwSubWinNo=2,dwWinNo=1;
+	
+	for (int i= 0; i < camConfig.dwWinNo.size(); i++)
+	{
+		DWORD dwDecChanNum=(camConfig.byWallNo << 24) | (camConfig.dwSubWinNo << 16) | camConfig.dwWinNo[i];
+		if(!NET_DVR_SetDVRConfig(lUserID,NET_DVR_SET_WIN_LOGO_CFG,dwDecChanNum,&net_dvr_win_logo_cfg,net_dvr_win_logo_cfg.dwSize))
+		{
+			printf("NET_DVR_SetDVRConfig2 error, err: %d\n", NET_DVR_GetLastError());
+			//return -1;
+		}
+		else
+		{
+			printf("NET_DVR_SetDVRConfig2 done.\n");
+			//return 0;
+		}
+	}
+	
+	//if (!disalarm)
+	//{
+		//int hcnetsdk_alarm_alarmout(LONG lUserID, const HCNetCameraConfig& camConfig)
+		hcnetsdk_alarm_alarmout(lUserID, camConfig, disalarm);
+	//}
+	
+	return 0;
+	
+	//sleep(3);
+	//net_dvr_win_logo_cfg.byEnable = 0;
+	//NET_DVR_SetDVRConfig(lUserID,NET_DVR_SET_WIN_LOGO_CFG,dwDecChanNum,&net_dvr_win_logo_cfg,net_dvr_win_logo_cfg.dwSize);
+}
+
 
 int main(int argc,char **argv)
 {
@@ -481,7 +698,7 @@
 	   if (hcnetsdk_user < 0)
 	   {
 		   printf("hcnetsdk_user < 0");
-		   exit(EXIT_FAILURE);
+		   exit(EXIT_FAILURE);//#todo if debug equipment(analizer), remove this
 	   }
 		
 	   /*Install timer_handler as th siganl handler for SIGVTALRM */
@@ -496,12 +713,16 @@
 	   timer.it_interval.tv_usec=250000;
 	   /*Start a virtual timer.It counts down whenever this process is executing.*/
 
-	   setitimer(ITIMER_VIRTUAL,&timer,NULL);
+	   //setitimer(ITIMER_VIRTUAL,&timer,NULL);
 	   
 	   
 	   
 	   
-	   while(1);
+		while ( 1 )
+		{
+			zclock_sleep(250);
+			timer_handler(0);
+		} 
 }
 
 void* createServerthread_hcnetsdk(void* arg)
@@ -534,16 +755,16 @@
   }
   data[idx++]=0x16;
   write(sock_upper[sidx],&data,idx);//send to equipment;
-  printf("Send equipment's info to Server OK! len=:%d\n",idx);
+  //printf("Send equipment's info to Server OK! len=:%d\n",idx);
   //=======================================data================================================
   while(1)
    {
 		int j;
 		length=read(sock_upper[sidx],&buff,sizeof(buff)-1);
-		printf("from Server received data===============:%d\n",length);
+		//printf("from Server received data===============:%d\n",length);
 	    if(length<=0)
 		{
-			printf(" Upper Socket closed \n");
+			//printf(" Upper Socket closed \n");
 			break;
 		}
 		else {            
@@ -555,7 +776,7 @@
 			//	length-=3;
 			//	if(length<=0) continue;
 			//}
-			
+
             if(buff[0]==0x68 && buff[1]==0x03 )
         	{
 
@@ -615,7 +836,7 @@
 			continue;
 		}
   }
-  puts("Server Thread is stoped..");
+  //puts("Server Thread is stoped..");
   close(sock_upper[sidx]);
   sock_upper[sidx] = -1;
   SupperConnectedflag[sidx]=0;//?//#todo
@@ -671,6 +892,7 @@
 void* MyEquipmentthread(void* arg)
  {
    int eidx = (int)arg;   
+   const sockinfo& equipConfig(equipments[eidx]);
    printf("Step.3 ===%d=====>RealTimeEvent Thread is strarted......\n",eidx);
 
    int length=0;
@@ -686,15 +908,54 @@
 		}
 	   else if(length>0)
 	   {
+		   std::cout << "buff:  " << buff<<std::endl;
+		   
+		   bool isDisalarm = false;
 			if (strstr(buff, "ViqEventNotificationAlert") == NULL) // <urn
 				continue;
 			if (strstr(buff, "startTime") == NULL) // <urn
-				continue;
-			//std::cout << buff<<std::endl;
+				isDisalarm = true;
+			
+			int channel = -1;
+			{
+				const char* strChannel = strstr(buff, "<urn:channelId>");
+				if (strChannel != NULL)
+				{
+					channel = strtol(strChannel + strlen("<urn:channelId>"), NULL, 10);
+				}
+			}
+			
+			if (channel==1)
+			{
+				int aa=1;//#todo break
+			}
+			
             if(gCapturing[eidx]==1)
 			{
+				//add 20170327
+				const std::string& ip(equipConfig.ip);
+				const HCNetCameraConfig* camConfig =  (HCNetCameraConfig*)equipConfig.user_config;
+				camConfig = hcnetsdk_find_config(equipConfig, channel);
+				int lUserData = hcnetsdk_get_userid(ip);
+				if (camConfig != NULL && hcnetsdk_user >= 0)
+				{
+					std::cout << "......alarm begin k=" << k << std::endl;
+					if (equipConfig.m_type == ET_HCNET_DECODER_ALARMOUT && !isDisalarm)
+						hcnetsdk_alarm_alarmout(lUserData, *camConfig, isDisalarm);
+					else if (equipConfig.m_type == ET_HCNET_DECODER_LOGO)
+						hcnetsdk_alarm_logo(lUserData, *camConfig, ip, channel, isDisalarm);
+					else if (equipConfig.m_type == ET_HCNET_DECODER_LOGO_ALARMOUT)
+						hcnetsdk_alarm_logo_alarmout(lUserData, *camConfig, ip, channel, isDisalarm);
+					std::cout << "......alarm end k=" << k << std::endl;
+				}
+				else
+				{
+					std::cout << "alarm lost k=" << k << std::endl;
+				}
+
+				
 				int k;
-				for(k=0;k<16;k++)
+				for(k=0;k<MAX_NUM;k++)
 				{
 					//if(SupperConnectedflag[k]==1)
 					//{
@@ -728,24 +989,28 @@
 						//printf("%s",buff);
 					//}
 					//else
-					{
-						if(SupperConnectedIP.size() > k)
-						{
-							const std::string& ip(SupperConnectedIP[k]);
-							HCNetCameraConfig* camConfig =  hcnetsdk_find_config(ip);
-							int lUserData = hcnetsdk_get_userid(ip);
-							if (camConfig != NULL && lUserData >= 0)
-							{
-								std::cout << "alarm begin k=" << k << std::endl;
-								hcnetsdk_alarm_alarmout(lUserData, *camConfig);
-								std::cout << "alarm end k=" << k << std::endl;
-							}
-							else
-							{
-								//std::cout << "alarm lost k=" << k << std::endl;
-							}
-						}
-					}
+					//{
+					//	if(SupperConnectedIP.size() > k)
+					//	{
+					//		const std::string& ip(SupperConnectedIP[k]);
+					//		sockinfo* equipConfig = hcnetsdk_find_equip(ip);
+					//		HCNetCameraConfig* camConfig =  hcnetsdk_find_config(ip);
+					//		int lUserData = hcnetsdk_get_userid(ip);
+					//		if (camConfig != NULL && equipConfig != NULL && lUserData >= 0)
+					//		{
+					//			std::cout << "......alarm begin k=" << k << std::endl;
+					//			if (equipConfig->m_type == ET_HCNET_DECODER_ALARMOUT && !isDisalarm)
+					//				hcnetsdk_alarm_alarmout(lUserData, *camConfig);
+					//			else if (equipConfig->m_type == ET_HCNET_DECODER_LOGO)
+					//				hcnetsdk_alarm_logo(lUserData, *camConfig, ip, channel, isDisalarm);
+					//			std::cout << "......alarm end k=" << k << std::endl;
+					//		}
+					//		else
+					//		{
+					//			std::cout << "alarm lost k=" << k << std::endl;
+					//		}
+					//	}
+					//}
 				}
 				continue;	
 			}
@@ -775,6 +1040,13 @@
 		std::cout << "open config.json error" << std::endl;
 		exit(EXIT_FAILURE);
 	}
+	
+	//HCNetSDKConfig
+	Json::Value jsonHcsdk = root["hcsdk"];
+	g_hcnetsdkconfig.serverIP = jsonHcsdk["serverIP"].asString();
+	g_hcnetsdkconfig.serverport = jsonHcsdk["serverport"].asInt();
+	g_hcnetsdkconfig.username = jsonHcsdk["username"].asString();
+	g_hcnetsdkconfig.passwd = jsonHcsdk["passwd"].asString();
 
 	Json::Value jsonEquipments = root["equipments"];
 	for (int i = 0; i < jsonEquipments.size() && i < sizeof(equipments) / sizeof(sockinfo); i++)
@@ -807,7 +1079,21 @@
 			camConfig->channel = jsonUserConfig["channel"].asInt();
 			camConfig->byWallNo = jsonUserConfig["byWallNo"].asInt();
 			camConfig->dwSubWinNo = jsonUserConfig["dwSubWinNo"].asInt();
-			camConfig->dwWinNo = jsonUserConfig["dwWinNo"].asInt();
+			
+			Json::Value dwWinNoArrays = jsonUserConfig["dwWinNo"];
+			if (dwWinNoArrays.isArray())
+			{
+				const int s = (int)(dwWinNoArrays.size());
+				for(int i = 0; i < s; i++)
+				{
+					camConfig->dwWinNo.push_back(dwWinNoArrays[i].asInt());
+				}
+			}
+			else
+			{
+				camConfig->dwWinNo.push_back(dwWinNoArrays.asInt());
+			}
+			
 			camConfig->lAlarmOutPort = jsonUserConfig["lAlarmOutPort"].asInt();
 		}
 		
@@ -1032,16 +1318,16 @@
    int i;
    int retVal;
    int result;
-   printf("Step.3 ========>GPIO manupulation===> AnalyEquipmentNum=%d \n",equip_num);
+   //printf("Step.3 ========>GPIO manupulation===> AnalyEquipmentNum=%d \n",equip_num);
    for(i=0;i<equip_num;i++)
    {
 	  retVal = -1;
 	  result=-1;
-	   printf("=============================:%d \n",equipments[i].reboot);
+	   //printf("=============================:%d \n",equipments[i].reboot);
 	   result=net_test(equipments[i].ip,equipments[i].port);
 	   if(result<0)
 	   {
-		    	 printf("Equipment(%d) check=%s:%s\n",i+1,equipments[i].ip,equipments[i].port);
+		    	 //printf("Equipment(%d) check=%s:%s\n",i+1,equipments[i].ip,equipments[i].port);
 						   retVal = GPIO_OPEN(PortNum);						 
 						   if(retVal == 0)
 						    {
@@ -1051,7 +1337,10 @@
 							 }
 						else printf("GPIO OPEN FAIL! \n");
 		}
-	   else printf("Equipment(%d) Check Success!=%s:%s\n",i+1,equipments[i].ip,equipments[i].port);
+	   else 
+	   {
+		   //printf("Equipment(%d) Check Success!=%s:%s\n",i+1,equipments[i].ip,equipments[i].port);
+		   }
 	}  
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1193,7 +1482,7 @@
 	return n;
 }
 //for real event
-void MakeAuthorizedPacketReal(char* buff,int length, char* Method,char* uri,int Idx)
+void MakeAuthorizedPacketReal_Digest(char* buff,int length, char* Method,char* uri,int Idx)
 {
 	char Device[150] ;
 	char Realm_buf1[512] ;
@@ -1206,7 +1495,7 @@
 	memset(domain_buf4,0,512);
 
 	CharToByte((char*)buff, Device, length,Realm_buf1,nonce_buf2,auth_buf3,domain_buf4, len);
-	const char* cnonce_buf="163acd0e58793a190f29ee879d4b224f";//"08a9d86c1b5e45963cf82f43dca59c51";
+	const char* cnonce_buf="1oBAAAqkwXP9q9MorVCzgw5LNPc";//"08a9d86c1b5e45963cf82f43dca59c51";
 	Realm_buf1[len[0]]=0;
 	nonce_buf2[len[1]]=0;
 	auth_buf3[len[2]]=0;
@@ -1255,7 +1544,32 @@
 	byte_array[iidx]=0;
 
 }
+
+void MakeAuthorizedPacketReal_Basic(char* buff,int length, char* Method,char* uri,int Idx)
+{
+	/*
+POST /PSIA/VIQ/System/sessions HTTP/1.1
+Content-Length: 0
+Host: 192.168.1.5:80
+Connection: Keep-Alive
+Authorization: Basic c3VwZXJ2aXNvcjpzdXBlcnZpc29y
+	*/
 	
+	int i = 0;
+	sprintf(byte_array, 
+		"%s %s HTTP/1.1\r\n"
+		"Content-Length: 0\r\n"
+		"Host: %s:80\r\n"
+		"Connection: Keep-Alive\r\n"
+		"Authorization: Basic %s\r\n"
+		"\r\n",
+		Method,
+		uri,
+		equipments[Idx].ip,
+		"c3VwZXJ2aXNvcjpzdXBlcnZpc29y" // base64(supervisor:supervisor)
+	);
+}
+
 //// 鍔熻兘锛氬紑濮嬫煡鐪嬪疄鏃剁洃鎺�
 //// 杈撳叆锛氬垎鏋愬櫒IP,鐢ㄦ埛,瀵嗙爜
 //// 杈撳嚭锛�0锛堟垚鍔燂級, -1(鍒濆鍖栧け璐�),-2(杩炴帴澶辫触)
@@ -1297,9 +1611,10 @@
 		sigset(SIGALRM, u_alarm_handler);//add 2016.11.22
 		alarm(2);
 		length=read(rsock_down[Idx],&buff,sizeof(buff));
+		//printf("RESPONSE: %s\n",&buff);	
 		alarm(0);
 		sigrelse(SIGALRM);	
-		printf("Myequipment connect ==================length =%d:\n",length);	
+		//printf("Myequipment connect ==================length =%d:\n",length);	
 		if(length<=0)
 		{
 			close(rsock_down[Idx]);
@@ -1308,14 +1623,23 @@
 		if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0 && bbbb==0)
 		{
 			// analyse reception
-			MakeAuthorizedPacketReal(buff,length,"POST","/PSIA/VIQ/System/sessions/permanent",Idx);
-			zclock_sleep(100);
-			write(rsock_down[Idx],byte_array,strlen(byte_array));
-//			printf("%s\n",(char*)byte_array);					
+			MakeAuthorizedPacketReal_Basic(buff,length,"POST","/PSIA/VIQ/System/sessions/permanent",Idx);
+			//for(int ii=0;ii<4;ii++)
+			//{
+				zclock_sleep(100);
+				write(rsock_down[Idx],byte_array,strlen(byte_array));
+			//}
+			printf("%s\n",(char*)byte_array);					
 			bbbb=1;
-			continue;
+			continue;//#todo 20170325
+			//break;
 		}
 		if(bbbb==1){
+			//if (strstr((char*)buff,"Unauthorized") != NULL)
+			//{
+			//	bbbb=0;
+			//}
+			
 			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);
@@ -1350,6 +1674,8 @@
 	}
 	char uri[200];
 	sprintf(uri,"/PSIA/Custom/Event/notification/notificationStream?sessionId=%s",sessions[Idx]);
+	//sprintf(uri,"/PSIA/Custom/Event/notification/notificationStream?sessionId=5");
+	printf("/PSIA/Custom/Event/notification/notificationStream?sessionId=%s\n",sessions[Idx]);
 	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,equipments[Idx].ip);		 
 	write(rsock_down[Idx],byte_array,strlen(byte_array));
 	while(1){
@@ -1368,9 +1694,13 @@
 		{
 			char uri[200];
 			sprintf(uri,"/PSIA/Custom/Event/notification/notificationStream?sessionId=%s",sessions[Idx]);
-			MakeAuthorizedPacketReal(buff,length,"GET",uri,Idx);
+			MakeAuthorizedPacketReal_Basic(buff,length,"GET",uri,Idx);
+			//for(int ii=0;ii<4;ii++)
+			//{
+			zclock_sleep(100);
 			write(rsock_down[Idx],byte_array,strlen(byte_array));
-//			printf("%s\n",(char*)byte_array);	
+			//}
+			printf("%s\n",(char*)byte_array);	
 			bbbb=3;			
 			continue;
 		}

--
Gitblit v1.8.0