Exemplo n.º 1
0
/* Disconnect on the TCP layer */
void
tcp_disconnect(rdpTcp * tcp)
{
	if (tcp->sock != -1)
	{
		TCP_CLOSE(tcp->sock);
		tcp->sock = -1;
	}
#ifdef _WIN32
	if (tcp->wsa_event)
	{
		WSACloseEvent(tcp->wsa_event);
		tcp->wsa_event = 0;
	}
#endif
}
Exemplo n.º 2
0
Arquivo: tcp.c Projeto: jeppeter/vbox
/* Disconnect on the TCP layer */
void
tcp_disconnect(void)
{
	if (g_ssl)
	{
		if (!g_network_error)
			(void) SSL_shutdown(g_ssl);
		SSL_free(g_ssl);
		g_ssl = NULL;
		SSL_CTX_free(g_ssl_ctx);
		g_ssl_ctx = NULL;
	}

	TCP_CLOSE(g_sock);
	g_sock = -1;
}
Exemplo n.º 3
0
bool IdentClient::CommandProc(unsigned char *buf, unsigned int cmd)
{
	switch(cmd)
	{
	case CMD_NUM_PTZ:
		{
			SendParaPtz();
		}
		break;
	case  CMD_NUM_VIDEO:
		{
			SendParaVideo();
		}
		break;
	case  CMD_NUM_ALG:
		{
			SendParaAlg();
		}
		break;
	case  CMD_NUM_ALG_CONF_00:
	case  CMD_NUM_ALG_CONF_01:
	case  CMD_NUM_ALG_CONF_02:
	case  CMD_NUM_ALG_CONF_03:
	case  CMD_NUM_ALG_CONF_04:
		{
			SendParaAlgConf(cmd);
		}
		break;
	case  CMD_NUM_ALG_QUAD_000003:
	case  CMD_NUM_ALG_QUAD_004007:
	case  CMD_NUM_ALG_QUAD_008011:
	case  CMD_NUM_ALG_QUAD_012015:
	case  CMD_NUM_ALG_QUAD_016019:
	case  CMD_NUM_ALG_QUAD_020023:
	case  CMD_NUM_ALG_QUAD_024027:
	case  CMD_NUM_ALG_QUAD_028031:
	case  CMD_NUM_ALG_QUAD_032035:
	case  CMD_NUM_ALG_QUAD_036039:
	case  CMD_NUM_ALG_QUAD_040043:
	case  CMD_NUM_ALG_QUAD_044047:
	case  CMD_NUM_ALG_QUAD_048051:
	case  CMD_NUM_ALG_QUAD_052055:
	case  CMD_NUM_ALG_QUAD_056059:
	case  CMD_NUM_ALG_QUAD_060063:
	case  CMD_NUM_ALG_QUAD_064067:
	case  CMD_NUM_ALG_QUAD_068071:
	case  CMD_NUM_ALG_QUAD_072075:
	case  CMD_NUM_ALG_QUAD_076079:
	case  CMD_NUM_ALG_QUAD_080083:
	case  CMD_NUM_ALG_QUAD_084087:
	case  CMD_NUM_ALG_QUAD_088091:
	case  CMD_NUM_ALG_QUAD_092095:
	case  CMD_NUM_ALG_QUAD_096099:
	case  CMD_NUM_ALG_QUAD_100103:
	case  CMD_NUM_ALG_QUAD_104107:
	case  CMD_NUM_ALG_QUAD_108111:
	case  CMD_NUM_ALG_QUAD_112115:
	case  CMD_NUM_ALG_QUAD_116119:
	case  CMD_NUM_ALG_QUAD_120123:
	case  CMD_NUM_ALG_QUAD_124127:
		{
			SendParaAlgQuad(cmd);
		}
		break;
	case  CMD_NUM_ALG_AREA_000003:
	case  CMD_NUM_ALG_AREA_004007:
	case  CMD_NUM_ALG_AREA_008011:
	case  CMD_NUM_ALG_AREA_012015:
	case  CMD_NUM_ALG_AREA_016019:
	case  CMD_NUM_ALG_AREA_020023:
	case  CMD_NUM_ALG_AREA_024027:
	case  CMD_NUM_ALG_AREA_028031:
		{
			SendParaAlgArea(cmd);		
		}
		break;
	case  CMD_NUM_ALG_LINE_000003:
	case  CMD_NUM_ALG_LINE_004007:
	case  CMD_NUM_ALG_LINE_008011:
	case  CMD_NUM_ALG_LINE_012015:
		{
			SendParaAlgLine(cmd);			
		}
		break;
	case  CMD_NUM_ALG_COUNT_000003:
	case  CMD_NUM_ALG_COUNT_004007:
	case  CMD_NUM_ALG_COUNT_008011:
	case  CMD_NUM_ALG_COUNT_012015:
		{
			SendParaAlgCount(cmd);			
		}
		break;
	case  CMD_NUM_ALG_ENTER_000003:
	case  CMD_NUM_ALG_ENTER_004007:
	case  CMD_NUM_ALG_ENTER_008011:
	case  CMD_NUM_ALG_ENTER_012015:
		{
			SendParaAlgEnter(cmd);				
		}
		break;
	case  CMD_NUM_ALG_OUT_000003:
	case  CMD_NUM_ALG_OUT_004007:
	case  CMD_NUM_ALG_OUT_008011:
	case  CMD_NUM_ALG_OUT_012015:
		{
			SendParaAlgOut(cmd);			
		}
		break;
	
	case  CMD_NUM_ALG_FINDBAG_000003:
	case  CMD_NUM_ALG_FINDBAG_004007:
	case  CMD_NUM_ALG_FINDBAG_008011:
	case  CMD_NUM_ALG_FINDBAG_012015:
		{
			SendParaAlgFindBag(cmd);			
		}
		break;
	case  CMD_NUM_ALG_LOST_000002:
	case  CMD_NUM_ALG_LOST_003005:
		{
			SendParaAlgLost(cmd);			
		}
		break;
	
	case  CMD_NUM_ALG_DIRECT_000003:
	case  CMD_NUM_ALG_DIRECT_004007:
		{
			SendParaAlgDirect(cmd);			
		}
		break;
	case  CMD_NUM_ALG_DIRECT_008011:
	case  CMD_NUM_ALG_DIRECT_012015:
		{
			SendParaAlgDirect(cmd);			
		}
		break;
	
	case  CMD_NUM_ALG_DETECT_000003:
	case  CMD_NUM_ALG_DETECT_004007:
		{
			SendParaAlgDetect(cmd);			
		}
		break;
	case  CMD_NUM_ALG_DETECT_008011:
	case  CMD_NUM_ALG_DETECT_012015:
		{
			SendParaAlgDetect(cmd);			
		}
		break;
	case  CMD_NUM_ALG_PEOPLEDENSE_000003:
	case  CMD_NUM_ALG_PEOPLEDENSE_004007:
	case  CMD_NUM_ALG_PEOPLEDENSE_008011:
	case  CMD_NUM_ALG_PEOPLEDENSE_012015:
		{
			SendParaAlgPeopleDense(cmd);			
		}
		break;

	case  CMD_NUM_ALG_CLUSTERDETE_000003:
	case  CMD_NUM_ALG_CLUSTERDETE_004007:
	case  CMD_NUM_ALG_CLUSTERDETE_008011:
	case  CMD_NUM_ALG_CLUSTERDETE_012015:
		{
			SendParaAlgClusterDete(cmd);			
		}
		break;
	case  CMD_NUM_ALG_MOTIONHISTORY_000003:
	case  CMD_NUM_ALG_MOTIONHISTORY_004007:
	case  CMD_NUM_ALG_MOTIONHISTORY_008011:
	case  CMD_NUM_ALG_MOTIONHISTORY_012015:
		{
			SendParaAlgMotionHistory(cmd);			
		}
		break;

	case  CMD_NUM_ALG_HOVERDETE_000003:
	case  CMD_NUM_ALG_HOVERDETE_004007:
	case  CMD_NUM_ALG_HOVERDETE_008011:
	case  CMD_NUM_ALG_HOVERDETE_012015:
		{
			SendParaAlgHoverDete(cmd);			
		}
		break;
	case  CMD_NUM_ALG_ALARMLINE_000003:
	case  CMD_NUM_ALG_ALARMLINE_004007:
	case  CMD_NUM_ALG_ALARMLINE_008011:
	case  CMD_NUM_ALG_ALARMLINE_012015:
		{
			SendParaAlgAlarmLine(cmd);			
		}
		break;
	case  CMD_NUM_ALG_RUNNING_000003://获取人员奔跑形状8-11个区域配置请求ALG_DETECT_PARA
	case  CMD_NUM_ALG_RUNNING_004007://获取人员奔跑形状12-15个区域配置请求ALG_DETECT_PARA
	case  CMD_NUM_ALG_RUNNING_008011://获取人员奔跑形状12-15个区域配置请求ALG_DETECT_PARA
	case  CMD_NUM_ALG_RUNNING_012015://获取人员奔跑形状12-15个区域配置请求ALG_DETECT_PARA
		{
			SendParaAlgRunning(cmd);			
		}
		break;

	case  CMD_NUM_SYS_CONFIG://获取系统配置请求SYS_CONFIG_PARA
		{
			SendParaSysConfig();
		}
		break;
	case  CMD_NUM_ALARM_YM://获取报警目录信息请求ALARM_YM_PARA
		{
			SendParaAlarmYM();
		}	
		break;
	case  CMD_NUM_PIC_CONTENTS://获取报警照片请求PIC_CONTENTS
		{
			SendParaPicContents(buf);
		}
		break;
	case  CMD_NUM_SYS_STORAGE://获取系统存储参数SYS_STORAGE_PARA
		{
			SendParaSysStorage();
		}
		break;
	case  CMD_NUM_ALARM_DAY://获取报警目录信息(指定年月里面的日消息)ALARM_DAY_PARA
		{
			SendParaAlarmDay();
		}
		break;
	case  CMD_NUM_ALARM_NAME://获取某日内的报警图片名称ALARM_NAME_PARA
		{
			SendParaAlarName();
		}
		break;

	case  CMD_NUM_PTZ_SET://设置服务器云台参数 云台参数(PTZ_PARA)
		{
			PTZ_PARA ptz_para;
			ptz_para = *(PTZ_PARA *)buf;
			FlashParam_SetPtzPara(ptz_para);
			SendParaSetAck(cmd,true);
		}
		break;


	case  CMD_NUM_VIDEO_SET://设置服务器视频一般配置参数 视频源、编码参数、视频色彩配置VIDEO_PARA
		{
#if 1
			VIDEO_PARA video_para;
			video_para = *(VIDEO_PARA *)buf;
			if (video_para.src == VIDEO_SRC_ANALOG && video_para.analoginfo.vframetype != g_stGlobal_Variable.globalflash.videopara.analoginfo.vframetype)
			{
				g_VideoResolutionChanged = true;
			}
			FlashParam_SetVideoPara(video_para);
			SendParaSetAck(cmd,true);
#endif
		}
		break;
	case  CMD_NUM_ALG_SET://设置算法参数配置 ALG_PARA
		{
#if 1
			ALG_PARA alg_para;
			alg_para = *(ALG_PARA *)buf;
			FlashParam_SetAlgPara(alg_para);
			SendParaSetAck(cmd,true);
#endif
		}
		break;
	case CMD_NUM_ALG_CONF_00_SET:
	case CMD_NUM_ALG_CONF_01_SET:
	case CMD_NUM_ALG_CONF_02_SET:
	case CMD_NUM_ALG_CONF_03_SET:
	case CMD_NUM_ALG_CONF_04_SET:
		{
#if 1
			ALG_PARA_CONF_UINT alg_para_conf_uint;
			alg_para_conf_uint = *(ALG_PARA_CONF_UINT*)buf;
			FlashParam_SetAlgParaConf(&alg_para_conf_uint,cmd);
			SendParaSetAck(cmd,true);
#endif
		}
		break;
	case  CMD_NUM_SYS_CONFIG_SET://设置算法参数配置 ALG_PARA
		{
			SYS_CONFIG_PARA sys_config_para;
			sys_config_para = *(SYS_CONFIG_PARA *)buf;
			FlashParam_SetSysConfigPara(sys_config_para);
			SendParaSetAck(CMD_NUM_SYS_CONFIG_RESPONSE,false);
		}
		break;
	case  CMD_NUM_ALG_QUAD_000003_SET://设置回字形状前0-3个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_004007_SET://设置回字形状前4-7个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_008011_SET://设置回字形状前8-11个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_012015_SET://设置回字形状前12-15个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_016019_SET://设置回字形状前16-20个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_020023_SET://设置回字形状前20-23个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_024027_SET://设置回字形状前24-27个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_028031_SET://设置回字形状前28-31个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_032035_SET://设置回字形状前32-35个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_036039_SET://设置回字形状前36-39个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_040043_SET://设置回字形状前40-43个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_044047_SET://设置回字形状前44-47个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_048051_SET://设置回字形状前48-51个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_052055_SET://设置回字形状前52-55个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_056059_SET://设置回字形状前56-59个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_060063_SET://设置回字形状前60-63个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_064067_SET://设置回字形状前64-67个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_068071_SET://设置回字形状前68-71个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_072075_SET://设置回字形状前72-75个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_076079_SET://设置回字形状前76-79个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_080083_SET://设置回字形状前80-83个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_084087_SET://设置回字形状前84-87个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_088091_SET://设置回字形状前88-91个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_092095_SET://设置回字形状前92-95个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_096099_SET://设置回字形状前96-100个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_100103_SET://设置回字形状前101-103个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_104107_SET://设置回字形状前104-107个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_108111_SET://设置回字形状前108-111个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_112115_SET://设置回字形状前112-115个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_116119_SET://设置回字形状前116-119个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_120123_SET://设置回字形状前120-123个区域配置ALG_QUAD_PARA
	case  CMD_NUM_ALG_QUAD_124127_SET://设置回字形状前124-127个区域配置ALG_QUAD_PARA
		{
#if 1
			ALG_QUAD_PARA alg_quad_para;
			alg_quad_para = *(ALG_QUAD_PARA *)buf;
			FlashParam_SetAlgQuadPara(&alg_quad_para,cmd);
			SendParaSetAck(cmd,true);
#endif
		}
		break;
	case  CMD_NUM_ALG_AREA_000003_SET://设置禁区形状0-3个区域配置ALG_AREA_PARA
	case  CMD_NUM_ALG_AREA_004007_SET://设置禁区形状4-7个区域配置ALG_AREA_PARA
	case  CMD_NUM_ALG_AREA_008011_SET://设置禁区形状8-11个区域配置ALG_AREA_PARA
	case  CMD_NUM_ALG_AREA_012015_SET://设置禁区形状12-15个区域配置ALG_AREA_PARA
	case  CMD_NUM_ALG_AREA_016019_SET://设置禁区形状16-20个区域配置ALG_AREA_PARA
	case  CMD_NUM_ALG_AREA_020023_SET://设置禁区形状20-23个区域配置ALG_AREA_PARA
	case  CMD_NUM_ALG_AREA_024027_SET://设置禁区形状24-27个区域配置ALG_AREA_PARA
	case  CMD_NUM_ALG_AREA_028031_SET://设置禁区形状28-31个区域配置ALG_AREA_PARA
		{
#if 1
			ALG_AREA_PARA alg_area_para;
			alg_area_para = *(ALG_AREA_PARA *)buf;	
			FlashParam_SetAlgAreaPara(&alg_area_para,cmd);
			SendParaSetAck(cmd,true);
#endif
		}
		break;
	
	case  CMD_NUM_ALG_LINE_000003_SET://设置拌线形状0-3个区域配置ALG_LINE_PARA
    case  CMD_NUM_ALG_LINE_004007_SET://设置拌线形状4-7个区域配置ALG_LINE_PARA
	case  CMD_NUM_ALG_LINE_008011_SET://设置拌线形状8-11个区域配置ALG_LINE_PARA
	case  CMD_NUM_ALG_LINE_012015_SET://设置拌线形状12-15个区域配置ALG_LINE_PARA
		{
#if 1
			ALG_LINE_PARA alg_line_para;
			alg_line_para = *(ALG_LINE_PARA *)buf;
			FlashParam_SetAlgLinePara(&alg_line_para,cmd);
			SendParaSetAck(cmd,true);
#endif
		}
		break;
	
	case  CMD_NUM_ALG_COUNT_000003_SET://设置计数形状0-3个区域配置ALG_COUNT_PARA
	case  CMD_NUM_ALG_COUNT_004007_SET://设置计数形状4-7个区域配置ALG_COUNT_PARA
	case  CMD_NUM_ALG_COUNT_008011_SET://设置计数形状8-11个区域配置ALG_COUNT_PARA
	case  CMD_NUM_ALG_COUNT_012015_SET://设置计数形状12-15个区域配置ALG_COUNT_PARA
		{
#if 1
			ALG_COUNT_PARA alg_count_para;
			alg_count_para = *(ALG_COUNT_PARA *)buf;
			FlashParam_SetAlgCountPara(&alg_count_para,cmd);
			SendParaSetAck(cmd,true);
#endif
		}
		break;
	
	case  CMD_NUM_ALG_ENTER_000003_SET://设置目标进入形状0-3个区域配置ALG_ENTER_PARA
	case  CMD_NUM_ALG_ENTER_004007_SET://设置目标进入形状4-7个区域配置ALG_ENTER_PARA
	case  CMD_NUM_ALG_ENTER_008011_SET://设置目标进入形状8-11个区域配置ALG_ENTER_PARA
	case  CMD_NUM_ALG_ENTER_012015_SET://设置目标进入形状12-15个区域配置ALG_ENTER_PARA
		{
#if 1
			ALG_ENTER_PARA alg_enter_para;
			alg_enter_para = *(ALG_ENTER_PARA *)buf;
			FlashParam_SetAlgEnterPara(&alg_enter_para,cmd);
			SendParaSetAck(cmd,true);
#endif
		}
		break;
	
	case  CMD_NUM_ALG_OUT_000003_SET://设置目标离开形状0-3个区域配置ALG_OUT_PARA
	case  CMD_NUM_ALG_OUT_004007_SET://设置目标离开形状4-7个区域配置ALG_OUT_PARA
	case  CMD_NUM_ALG_OUT_008011_SET://设置目标离开形状8-11个区域配置ALG_OUT_PARA
	case  CMD_NUM_ALG_OUT_012015_SET://设置目标离开形状12-15个区域配置ALG_OUT_PARA
		{
#if 1
			ALG_OUT_PARA alg_out_para;
			alg_out_para = *(ALG_OUT_PARA *)buf;
			FlashParam_SetAlgOutPara(&alg_out_para,cmd);
			SendParaSetAck(cmd,true);
#endif
		}
		break;
	
	case  CMD_NUM_ALG_FINDBAG_000003_SET://设置物体遗留形状0-2个区域配置ALG_FINDBAG_PARA
	case  CMD_NUM_ALG_FINDBAG_004007_SET://设置物体遗留形状3-5个区域配置ALG_FINDBAG_PARA
	case  CMD_NUM_ALG_FINDBAG_008011_SET://设置物体遗留形状3-5个区域配置ALG_FINDBAG_PARA
	case  CMD_NUM_ALG_FINDBAG_012015_SET://设置物体遗留形状3-5个区域配置ALG_FINDBAG_PARA
		{
#if 1
			ALG_FINDBAG_PARA alg_findbag_para;
			alg_findbag_para = *(ALG_FINDBAG_PARA *)buf;
			FlashParam_SetAlgFindbagPara(&alg_findbag_para,cmd);
			SendParaSetAck(cmd,true);
#endif
		}
		break;
	
	case  CMD_NUM_ALG_LOST_000002_SET://设置物体消失形状0-2个区域配置ALG_LOST_PARA
	case  CMD_NUM_ALG_LOST_003005_SET://设置物体消失形状3-5个区域配置ALG_LOST_PARA
		{
#if 1
			ALG_LOST_PARA alg_lost_para;
			alg_lost_para = *(ALG_LOST_PARA *)buf;
			FlashParam_SetAlgLostPara(&alg_lost_para,cmd);
			SendParaSetAck(cmd,true);
#endif
		}
		break;
	
	case  CMD_NUM_ALG_DIRECT_000003_SET://设置方向报警形状0-3个区域配置ALG_DIRECT_PARA
	case  CMD_NUM_ALG_DIRECT_004007_SET://设置方向报警形状4-7个区域配置ALG_DIRECT_PARA
	case  CMD_NUM_ALG_DIRECT_008011_SET://设置方向报警形状8-11个区域配置ALG_DIRECT_PARA
	case  CMD_NUM_ALG_DIRECT_012015_SET://设置方向报警形状12-15个区域配置ALG_DIRECT_PARA
		{
#if 1
			ALG_DIRECT_PARA alg_direct_para;
			alg_direct_para = *(ALG_DIRECT_PARA *)buf;
			FlashParam_SetAlgDirectPara(&alg_direct_para,cmd);
			SendParaSetAck(cmd,true);
#endif
		}
		break;
	
	case  CMD_NUM_ALG_DETECT_000003_SET://设置入侵侦测形状0-3个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_DETECT_004007_SET://设置入侵侦测形状4-7个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_DETECT_008011_SET://设置入侵侦测形状8-11个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_DETECT_012015_SET://设置入侵侦测形状12-15个区域配置ALG_DETECT_PARA
		{
#if 1
			ALG_DETECT_PARA alg_detect_para;
			alg_detect_para = *(ALG_DETECT_PARA *)buf;
			FlashParam_SetAlgDetectPara(&alg_detect_para,cmd);
			SendParaSetAck(cmd,true);
#endif
		}
		break;
	
	case  CMD_NUM_ALG_PEOPLEDENSE_000003_SET://设置人员密度测形状0-3个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_PEOPLEDENSE_004007_SET://设置人员密度形状4-7个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_PEOPLEDENSE_008011_SET://设置人员密度形状8-11个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_PEOPLEDENSE_012015_SET://设置人员密度形状12-15个区域配置ALG_DETECT_PARA
		{
#if 1
			ALG_PEOPLEDENSE_PARA alg_peopeldense_para;
			alg_peopeldense_para = *(ALG_PEOPLEDENSE_PARA *)buf;
			FlashParam_SetAlgPeopleDensePara(&alg_peopeldense_para,cmd);
			SendParaSetAck(cmd,true);
#endif
		}
		break;
		
	case  CMD_NUM_ALG_CLUSTERDETE_000003_SET://设置人员聚集形状0-3个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_CLUSTERDETE_004007_SET://设置人员聚集形状4-7个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_CLUSTERDETE_008011_SET://设置人员聚集形状8-11个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_CLUSTERDETE_012015_SET://设置人员聚集形状12-15个区域配置ALG_DETECT_PARA
		{
#if 1
			ALG_CLUSTERDETE_PARA alg_clusterdete_para;
			alg_clusterdete_para = *(ALG_CLUSTERDETE_PARA *)buf;
			FlashParam_SetAlgClusterDetePara(&alg_clusterdete_para,cmd);
			SendParaSetAck(cmd,true);
#endif
		}
		break;
		
	case  CMD_NUM_ALG_MOTIONHISTORY_000003_SET://设置夜间起床形状0-3个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_MOTIONHISTORY_004007_SET://设置夜间起床形状4-7个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_MOTIONHISTORY_008011_SET://设置夜间起床形状8-11个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_MOTIONHISTORY_012015_SET://设置夜间起床形状12-15个区域配置ALG_DETECT_PARA
		{
#if 1
			ALG_MOTIONHISTORY_PARA alg_motionhistory_para;
			alg_motionhistory_para = *(ALG_MOTIONHISTORY_PARA *)buf;
			FlashParam_SetAlgMotionHistoryPara(&alg_motionhistory_para,cmd);
			SendParaSetAck(cmd,true);
#endif
		}
		break;
		
	case  CMD_NUM_ALG_HOVERDETE_000003_SET://设置徘徊形状0-3个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_HOVERDETE_004007_SET://设置徘徊形状4-7个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_HOVERDETE_008011_SET://设置徘徊形状8-11个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_HOVERDETE_012015_SET://设置徘徊形状12-15个区域配置ALG_DETECT_PARA
		{
#if 1
			ALG_HOVERDETE_PARA alg_hoverdete_para;
			alg_hoverdete_para = *(ALG_HOVERDETE_PARA *)buf;
			FlashParam_SetAlgHoverDetePara(&alg_hoverdete_para,cmd);
			SendParaSetAck(cmd,true);
#endif
		}
		break;

	case  CMD_NUM_ALG_ALARMLINE_000003_SET://设置摸高形状0-3个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_ALARMLINE_004007_SET://设置摸高形状4-7个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_ALARMLINE_008011_SET://设置摸高形状8-11个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_ALARMLINE_012015_SET://设置摸高形状12-15个区域配置ALG_DETECT_PARA
		{
#if 1
			ALG_ALARMLINE_PARA alg_alarmline_para;
			alg_alarmline_para = *(ALG_ALARMLINE_PARA *)buf;
			FlashParam_SetAlgAlarmLinePara(&alg_alarmline_para,cmd);
			SendParaSetAck(cmd,true);
#endif
		}
		break;

	case  CMD_NUM_ALG_RUNNING_000003_SET://设置奔跑形状0-3个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_RUNNING_004007_SET://设置奔跑形状4-7个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_RUNNING_008011_SET://设置奔跑形状8-11个区域配置ALG_DETECT_PARA
	case  CMD_NUM_ALG_RUNNING_012015_SET://设置奔跑形状12-15个区域配置ALG_DETECT_PARA
		{
#if 1
			ALG_RUNNINGOBJ_PARA alg_running_para;
			alg_running_para = *(ALG_RUNNINGOBJ_PARA *)buf;
			FlashParam_SetAlgRunningPara(&alg_running_para,cmd);
			SendParaSetAck(cmd,true);
#endif
		}
		break;
	case CMD_NUM_ALG_PARA_AUTO_SET:
		{
#if 0
			//TODO: 算法参数自动生成
			//1.解析接收到的应用参数
			CMD_TRANSFER cmd_transfer;
			ALG_CONF_APP_AUTO_PARA alg_conf_app_auto_para;
			alg_conf_app_auto_para = *(ALG_CONF_APP_AUTO_PARA*)buf;
			unsigned int PointFixedRate = D1_WIDTH/alg_conf_app_auto_para.AlgConfAppUint.iImgWithdVal;
			CParamGenerator paramGenration;
			// 			CString strErrInfo;
			// 			strErrInfo.Format("接收到Index= %dBright = %d,Gray = %d,Sense=%d\r\n",
			// 				alg_conf_app_auto_para.AlgParaIndex,
			// 				alg_conf_app_auto_para.AlgConfAppUint.AlgAppBright,
			// 				alg_conf_app_auto_para.AlgConfAppUint.AlgAppGray,
			// 				alg_conf_app_auto_para.AlgConfAppUint.AlgAppSense);
			//			WRITE_LOG(strErrInfo,LOG_TYPE_INFO,LOG_LEVEL_RUN,true);
			paramGenration.Init(alg_conf_app_auto_para.AlgParaIndex,
				alg_conf_app_auto_para.AlgConfAppUint.iImgWithdVal,
				alg_conf_app_auto_para.AlgConfAppUint.iImgHeightVal,
				alg_conf_app_auto_para.AlgConfAppUint.iObjWithdVal/PointFixedRate,
				alg_conf_app_auto_para.AlgConfAppUint.iObjHeightVal/PointFixedRate,
				alg_conf_app_auto_para.AlgConfAppUint.AlgAppBright,
				alg_conf_app_auto_para.AlgConfAppUint.AlgAppGray,
				alg_conf_app_auto_para.AlgConfAppUint.AlgAppSense);
			paramGenration.GetAlgParam((void*)&alg_conf_app_auto_para.AlgConfAppResult);
			//参数生成完成后只要将生成的参数发送到客户端即可 当客户端提交后则可以从新更新到g_stGlobal_Variable
			memset(&cmd_transfer,0x00,sizeof(cmd_transfer));	
			CONSTRUCT_CMD(CMD_NUM_ALG_PARA_AUTO_RESPONSE,(char *)&alg_conf_app_auto_para,sizeof(ALG_CONF_APP_AUTO_PARA),&cmd_transfer);
			TCP_SEND(g_stGlobal_Variable.client_tcpsocket.socket_it,(unsigned char *)&cmd_transfer,sizeof(cmd_transfer));
			//paramGenration.Init();
			//paramGenration.GetAlgParam();
#endif
		}
		break;
	case CMD_NUM_SYS_STORAGE_SET:
		{
#if 0
			SYS_STORAGE_PARA sys_storage_para;
			sys_storage_para = *(SYS_STORAGE_PARA*)buf;
			FlashParam_SetSysStoragePara(sys_storage_para);
			SendParaSetAck(CMD_NUM_SYS_STORAGE_RESPONSE,false);
#endif
		}
		break;
	case  CMD_NUM_PTZ_ACTION_SET://设置云台实时动态参数配置 PTZ_ACTION
		{
#if 1
			PTZ_ACTION_SET ptz_action_set;
			ptz_action_set = *(PTZ_ACTION_SET*)buf;
			switch(ptz_action_set.ptz_action)
			{
			case	PTZ_LEFT:
				{
					if (g_stGlobal_Variable.ptz_ctlhandle.ptz_initd && g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface)
					{
						if (ptz_action_set.ptz_value > 0)
						{
							g_stGlobal_Variable.globalflash.ptzpara.speed = ptz_action_set.ptz_value;
						}
						g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface->PtzSetLeft(g_stGlobal_Variable.globalflash.ptzpara.speed);
					}
				}
				break;
			case	PTZ_RIGHT:
				{
					if (g_stGlobal_Variable.ptz_ctlhandle.ptz_initd && g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface)
					{
						if (ptz_action_set.ptz_value > 0)
						{
							g_stGlobal_Variable.globalflash.ptzpara.speed = ptz_action_set.ptz_value;
						}
						g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface->PtzSetRight(g_stGlobal_Variable.globalflash.ptzpara.speed);
					}
				}
				break;
			case	PTZ_UP:
				{
					if (g_stGlobal_Variable.ptz_ctlhandle.ptz_initd && g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface)
					{
						if (ptz_action_set.ptz_value > 0)
						{
							g_stGlobal_Variable.globalflash.ptzpara.speed = ptz_action_set.ptz_value;
						}
						g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface->PtzSetUp(g_stGlobal_Variable.globalflash.ptzpara.speed);
					}
				}
				break;
			case	PTZ_DOWN:
				{
					if (g_stGlobal_Variable.ptz_ctlhandle.ptz_initd && g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface)
					{
						if (ptz_action_set.ptz_value > 0)
						{
							g_stGlobal_Variable.globalflash.ptzpara.speed = ptz_action_set.ptz_value;
						}
						g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface->PtzSetDown(g_stGlobal_Variable.globalflash.ptzpara.speed);
					}
				}
				break;
			case	PTZ_ZOOMIN:
				{
					if (g_stGlobal_Variable.ptz_ctlhandle.ptz_initd && g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface)
					{
						g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface->PtzSetZoomIn();
					}
				}
				break;
			case	PTZ_ZOOMOUT:
				{
					if (g_stGlobal_Variable.ptz_ctlhandle.ptz_initd && g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface)
					{
						g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface->PtzSetZoomOut();
					}
				}
				break;
			case	PTZ_AUTO_FOCUS:
				{
					if (g_stGlobal_Variable.ptz_ctlhandle.ptz_initd && g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface)
					{
						g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface->PtzSetAutoFocus();
					}
				}
				break;
			case	PTZ_AUTO_IRIS:
				{
					if (g_stGlobal_Variable.ptz_ctlhandle.ptz_initd && g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface)
					{
						g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface->PtzAutoIRIS();
					}
				}
				break;
			case	PTZ_SETPRESET:
				{
					if (g_stGlobal_Variable.ptz_ctlhandle.ptz_initd && g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface)
					{
						//TODO:
						g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface->PtzPreSet(ptz_action_set.ptz_value);
					}
				}
				break;
			case	PTZ_GOTOPRESET:
				{
					if (g_stGlobal_Variable.ptz_ctlhandle.ptz_initd && g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface)
					{
						//TODO:
						g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface->PtzGoToPre(ptz_action_set.ptz_value);
					}
				}
				break;
			case	PTZ_SETSPEED:
				{
					g_stGlobal_Variable.globalflash.ptzpara.speed = ptz_action_set.ptz_value;
				}
				break;
			case	PTZ_ACT_START:
			case	PTZ_ACT_END:
				{
				
				}
				break;
			default:
				break;
			}
			//TODO: //云台联动
#endif
		}
		break;
	case CMD_NUM_VIDEO_ATTRSET_SET:
		{
#if 0
			VIDEO_ATTRSET_STRUCT video_attrset_struct;
			video_attrset_struct = *(VIDEO_ATTRSET_STRUCT *)buf;
			switch (video_attrset_struct.video_attrset)
			{
			case VIDEO_ATTRSET_BRIGHT:
				{
					EteDVR_SetVideoParam(0,0,BRIGHTNESS,(int)video_attrset_struct.video_attrvalue);
					g_stGlobal_Variable.globalflash.videopara.bright = video_attrset_struct.video_attrvalue;
				}
				break;
			case VIDEO_ATTRSET_CONTRAST:
				{
					EteDVR_SetVideoParam(0,0,CONTRAST,(int)video_attrset_struct.video_attrvalue);
					g_stGlobal_Variable.globalflash.videopara.contrast = video_attrset_struct.video_attrvalue;
				}
				break;
			case VIDEO_ATTRSET_SATURATION:
				{
					EteDVR_SetVideoParam(0,0,SATURATION,(int)video_attrset_struct.video_attrvalue);
					g_stGlobal_Variable.globalflash.videopara.saturation = video_attrset_struct.video_attrvalue;
				}
				break;
			case VIDEO_ATTRSET_HUE:
				{
					EteDVR_SetVideoParam(0,0,HUE,(int)video_attrset_struct.video_attrvalue);
					g_stGlobal_Variable.globalflash.videopara.hue = video_attrset_struct.video_attrvalue;
				}
				break;
			default:
				break;
			}

#endif
		}
		break;
	case CMD_NUM_MODE_RUN_SET:
		{
#if 0
			//TODO:接收到切换工作状态消息
			//2.重置算法参数
			//WRITE_LOG(_T("CMD_NUM_MODE_RUN_SET: ResetALGParmbyCurrentTimeIf"),LOG_TYPE_WARNING,LOG_LEVEL_RUN,true);
			if(ResetALGParmbyCurrentTimeIf(true))//设置成功后保存参数
			{
				//1.保存参数
				FlashParam_DownLoad();
				ParseINIFileToXML(0x00000001,"ParamXML\\ptzParam.xml");
				ParseINIFileToXML(0x00000002,"ParamXML\\videoParam.xml");
				ParseINIFileToXML(0x00000004,"ParamXML\\algParam.xml");
				ParseINIFileToXML(0x00000008,"ParamXML\\quadParam.xml");
				ParseINIFileToXML(0x00000010,"ParamXML\\areaParam.xml");
				ParseINIFileToXML(0x00000020,"ParamXML\\lineParam.xml");
				ParseINIFileToXML(0x00000040,"ParamXML\\countParam.xml");
				ParseINIFileToXML(0x00000080,"ParamXML\\enterParam.xml");
				ParseINIFileToXML(0x00000100,"ParamXML\\outParam.xml");
				ParseINIFileToXML(0x00000200,"ParamXML\\lostParam.xml");
				ParseINIFileToXML(0x00000400,"ParamXML\\directParam.xml");
				ParseINIFileToXML(0x00000800,"ParamXML\\detectParam.xml");
				ParseINIFileToXML(0x00001000,"ParamXML\\peopleDenseParam.xml");
				ParseINIFileToXML(0x00002000,"ParamXML\\peopleClusterParam.xml");
				ParseINIFileToXML(0x00004000,"ParamXML\\peopleMotionParam.xml");
				ParseINIFileToXML(0x00008000,"ParamXML\\peopleHoverParam.xml");
				ParseINIFileToXML(0x00010000,"ParamXML\\alarmLineParam.xml");
				ParseINIFileToXML(0x00020000,"ParamXML\\findBagParam.xml");
				ParseINIFileToXML(0x00040000,"ParamXML\\runningParam.xml");
				ParseINIFileToXML(0x00080000,"ParamXML\\sysconfigalgParam.xml");
				ParseINIFileToXML(0x00100000,"ParamXML\\storageParam.xml");
			}
// 			
//			int ALG_index = 0;
// 			ALG_index = ((g_stGlobal_Variable.globalflash.algpara.AlgTimeUsed >= 1 && g_stGlobal_Variable.globalflash.algpara.AlgTimeUsed <= 2) ? g_stGlobal_Variable.globalflash.algpara.AlgTimeUsed - 1 : 0);
// 			g_stGlobal_Variable.globalflash.algpara.AlgTimeUsed = (ALG_TIME_USED)(ALG_index + 1);
			//ALG_SETPARAM(&g_stGlobal_Variable.globalflash,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);

			//3.串口初始化
			if (!g_stGlobal_Variable.ptz_ctlhandle.ptz_initd)
			{
				g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface->PtzInit(g_stGlobal_Variable.globalflash.ptzpara.commport,
					g_stGlobal_Variable.globalflash.ptzpara.combaud);
			}
			//切到预置位
			g_stGlobal_Variable.ptz_ctlhandle.ptz_Interface->PtzGoToPre(PTZ_PREPOINT_NUM_MAX);
			//4.切换调试状态
			//WRITE_LOG(_T("CMD_NUM_MODE_RUN_SET: SwitchMode"),LOG_TYPE_WARNING,LOG_LEVEL_RUN,true);
#if 0
			if (m_pReg && STATE_RUN != m_pReg->GetMode())
			{
				m_pReg->SwitchMode(STATE_RUN);			
			}
#endif
			SendParaSetAck(CMD_NUM_MODE_RUN_RESPONSE,false);
			//WRITE_LOG(_T("CMD_NUM_MODE_RUN_SET: OVER"),LOG_TYPE_WARNING,LOG_LEVEL_RUN,true);
			//回送响应消息
#endif
		}
		break;
	case  CMD_NUM_MODE_DEBUG_SET:
		{
			//TODO:接收到切换调试状态消息
#if 0
			if (m_pReg && STATE_DEBUG != m_pReg->GetMode())
			{
				m_pReg->SwitchMode(STATE_DEBUG);
				g_stGlobal_Variable.globalflash.sysconfigpara.camstate = CAM_STATE_DEBUG;//迁态
			}
#endif
			SendParaSetAck(CMD_NUM_MODE_DEBUG_RESPONSE,false);
		}
		break;
	case  CMD_NUM_VEDIO_REQUEST://设置视频请求
		{
#if 0
			VIDEO_REQUEST_STRUCT video_request_struct = *(VIDEO_REQUEST_STRUCT *)buf;
			UDP_CREATE(&g_stGlobal_Variable.client_udpsocket.socket_it);
			strcpy((char *)g_stGlobal_Variable.client_udpsocket.socket_cip,(char *)video_request_struct.cip);
			g_stGlobal_Variable.client_udpsocket.socket_cport = video_request_struct.iport;
			g_VideoRequestFlag = true;
#endif
		}
		break;
	case  CMD_NUM_VEDIO_STOP://设置视频停止
		{
			if (g_VideoRequestFlag)
			{
				g_VideoRequestFlag = false;
				UDP_CLOSE(g_stGlobal_Variable.client_udpsocket.socket_it);			
			}
		}
		break;
	case  CMD_NUM_KEEPALIVE://心跳消息
		{
			//SendParaSetAck(CMD_NUM_KEEPALIVE_RESPONSE,false);
 			//KillTimer(m_hWnd,IDENT_CLIENT_TIME_ID_DEAD);
 			//SetTimer(m_hWnd,IDENT_CLIENT_TIME_ID_DEAD,IDENT_CLIENT_TIME_VAL_DEAD,TimerOutProc);
		}
		break;
// 	case  CMD_NUM_KEEPALIVE_RESPONSE://心跳消息
// 		{
// 			KillTimer(m_hWnd,IDENT_CLIENT_TIME_ID_DEAD);
// 			SetTimer(m_hWnd,IDENT_CLIENT_TIME_ID_DEAD,IDENT_CLIENT_TIME_VAL_DEAD,TimerOutProc);
// 		}
// 		break;
	case CMD_NUM_DISCONNECT://断开连接
		{
			//KillTimer(m_hWnd,IDENT_CLIENT_TIME_ID_HEARTBEAT);
			//KillTimer(m_hWnd,IDENT_CLIENT_TIME_ID_DEAD);
			SendParaSetAck(CMD_NUM_DISCONNECT_RESPONSE,false);
			//Sleep(1000);//等待一秒
			TCP_CLOSE(g_stGlobal_Variable.client_tcpsocket.socket_it);
			UDP_CLOSE(g_stGlobal_Variable.client_udpsocket.socket_it);
			g_VideoRequestFlag = false;
			g_bIsConnected = false;
			m_IsSvrConnected = false;
		}
		break;
	case CMD_NUM_SIM_ALARM:
		{
			g_SimAlarmOne = true;
		}
		break;
	default:
		break;
	}

	return true;
}
Exemplo n.º 4
0
/* Establish a connection on the TCP layer */
RD_BOOL
tcp_connect(rdpTcp * tcp, char * server, int port)
{
	int sock;
	uint32 option_value;
	socklen_t option_len;

#ifdef IPv6

	int n;
	struct addrinfo hints, *res, *ressave;
	char tcp_port_rdp_s[10];

	printf("connecting to %s:%d\n", server, port);

	snprintf(tcp_port_rdp_s, 10, "%d", port);

	memset(&hints, 0, sizeof(struct addrinfo));
	hints.ai_family = AF_UNSPEC;
	hints.ai_socktype = SOCK_STREAM;

	if ((n = getaddrinfo(server, tcp_port_rdp_s, &hints, &res)))
	{
		ui_error(tcp->iso->mcs->sec->rdp->inst, "getaddrinfo: %s\n", gai_strerror(n));
		return False;
	}

	ressave = res;
	sock = -1;
	while (res)
	{
		sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
		if (!(sock < 0))
		{
			if (connect(sock, res->ai_addr, res->ai_addrlen) == 0)
				break;
			TCP_CLOSE(sock);
			sock = -1;
		}
		res = res->ai_next;
	}
	freeaddrinfo(ressave);

	if (sock == -1)
	{
		ui_error(tcp->iso->mcs->sec->rdp->inst, "%s: unable to connect\n", server);
		return False;
	}

#else /* no IPv6 support */

	struct hostent *nslookup;
	struct sockaddr_in servaddr;

	printf("connecting to %s:%d\n", server, port);

	if ((nslookup = gethostbyname(server)) != NULL)
	{
		memcpy(&servaddr.sin_addr, nslookup->h_addr, sizeof(servaddr.sin_addr));
	}
	else if ((servaddr.sin_addr.s_addr = inet_addr(server)) == INADDR_NONE)
	{
		ui_error(tcp->iso->mcs->sec->rdp->inst, "%s: unable to resolve host\n", server);
		return False;
	}

	if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
	{
		ui_error(tcp->iso->mcs->sec->rdp->inst, "socket: %s\n", TCP_STRERROR);
		return False;
	}

	servaddr.sin_family = AF_INET;
	servaddr.sin_port = htons((uint16) port);

	if (connect(sock, (struct sockaddr *) &servaddr, sizeof(struct sockaddr)) < 0)
	{
		ui_error(tcp->iso->mcs->sec->rdp->inst, "connect: %s\n", TCP_STRERROR);
		TCP_CLOSE(sock);
		return False;
	}

#endif /* IPv6 */

	tcp->sock = sock;

	/* set socket as non blocking */
#ifdef _WIN32
	{
		u_long arg = 1;
		ioctlsocket(tcp->sock, FIONBIO, &arg);
		tcp->wsa_event = WSACreateEvent();
		WSAEventSelect(tcp->sock, tcp->wsa_event, FD_READ);
	}
#else
	option_value = fcntl(tcp->sock, F_GETFL);
	option_value = option_value | O_NONBLOCK;
	fcntl(tcp->sock, F_SETFL, option_value);
#endif

	option_value = 1;
	option_len = sizeof(option_value);
	setsockopt(tcp->sock, IPPROTO_TCP, TCP_NODELAY, (void *) &option_value, option_len);
	/* receive buffer must be a least 16 K */
	if (getsockopt(tcp->sock, SOL_SOCKET, SO_RCVBUF, (void *) &option_value, &option_len) == 0)
	{
		if (option_value < (1024 * 16))
		{
			option_value = 1024 * 16;
			option_len = sizeof(option_value);
			setsockopt(tcp->sock, SOL_SOCKET, SO_RCVBUF, (void *) &option_value,
				   option_len);
		}
	}

	return True;
}
Exemplo n.º 5
0
Arquivo: tcp.c Projeto: jeppeter/vbox
/* Establish a connection on the TCP layer */
RD_BOOL
tcp_connect(char *server)
{
	socklen_t option_len;
	uint32 option_value;
	int i;

#ifdef IPv6

	int n;
	struct addrinfo hints, *res, *ressave;
	char tcp_port_rdp_s[10];

	snprintf(tcp_port_rdp_s, 10, "%d", g_tcp_port_rdp);

	memset(&hints, 0, sizeof(struct addrinfo));
	hints.ai_family = AF_UNSPEC;
	hints.ai_socktype = SOCK_STREAM;

	if ((n = getaddrinfo(server, tcp_port_rdp_s, &hints, &res)))
	{
		error("getaddrinfo: %s\n", gai_strerror(n));
		return False;
	}

	ressave = res;
	g_sock = -1;
	while (res)
	{
		g_sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
		if (!(g_sock < 0))
		{
			if (connect(g_sock, res->ai_addr, res->ai_addrlen) == 0)
				break;
			TCP_CLOSE(g_sock);
			g_sock = -1;
		}
		res = res->ai_next;
	}
	freeaddrinfo(ressave);

	if (g_sock == -1)
	{
		error("%s: unable to connect\n", server);
		return False;
	}

#else /* no IPv6 support */

	struct hostent *nslookup;
	struct sockaddr_in servaddr;

	if ((nslookup = gethostbyname(server)) != NULL)
	{
		memcpy(&servaddr.sin_addr, nslookup->h_addr, sizeof(servaddr.sin_addr));
	}
	else if ((servaddr.sin_addr.s_addr = inet_addr(server)) == INADDR_NONE)
	{
		error("%s: unable to resolve host\n", server);
		return False;
	}

	if ((g_sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
	{
		error("socket: %s\n", TCP_STRERROR);
		return False;
	}

	servaddr.sin_family = AF_INET;
	servaddr.sin_port = htons((uint16) g_tcp_port_rdp);

	if (connect(g_sock, (struct sockaddr *) &servaddr, sizeof(struct sockaddr)) < 0)
	{
		if (!g_reconnect_loop)
			error("connect: %s\n", TCP_STRERROR);

		TCP_CLOSE(g_sock);
		g_sock = -1;
		return False;
	}

#endif /* IPv6 */

	option_value = 1;
	option_len = sizeof(option_value);
	setsockopt(g_sock, IPPROTO_TCP, TCP_NODELAY, (void *) &option_value, option_len);
	/* receive buffer must be a least 16 K */
	if (getsockopt(g_sock, SOL_SOCKET, SO_RCVBUF, (void *) &option_value, &option_len) == 0)
	{
		if (option_value < (1024 * 16))
		{
			option_value = 1024 * 16;
			option_len = sizeof(option_value);
			setsockopt(g_sock, SOL_SOCKET, SO_RCVBUF, (void *) &option_value,
				   option_len);
		}
	}

	g_in.size = 4096;
	g_in.data = (uint8 *) xmalloc(g_in.size);

	for (i = 0; i < STREAM_COUNT; i++)
	{
		g_out[i].size = 4096;
		g_out[i].data = (uint8 *) xmalloc(g_out[i].size);
	}

	return True;
}
Exemplo n.º 6
0
/* Disconnect on the TCP layer */
void
tcp_disconnect(void)
{
    TCP_CLOSE(g_sock);
}