⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ecm.c.bak

📁 有线电视系统前端设备复用器原代码。 用语接受卫星信号
💻 BAK
📖 第 1 页 / 共 5 页
字号:
			{/*不成功,重新尝试*/
				close(g_socket_ecmg);
				tm_wkafter(100);/*by xu*/	
				continue;         /*return for(;;)*/
			}
			else
			{
				g_ecmg_use_masterslave[0]=2;
			}
		}	
		else
		{
			g_ecmg_use_masterslave[0]=1;
			Display("ecmg: Connect master ecmg server OK!");
		}

		tm_set(0,0,0);
#if 0
		 IsKeepAlvie=1;
		 KeepAliveCnt     =2;
		 KeepAliveIdleTime=5;
		 KeepAliveTime    =5;

		 MSL              =5;
		
		 rc=setsockopt(g_socket_ecmg,SOL_SOCKET,SO_KEEPALIVE,(char *)&IsKeepAlvie,sizeof(IsKeepAlvie));
		
		 rc=setsockopt(g_socket_ecmg,IPPROTO_TCP,TCP_KEEPALIVE_CNT,(char *)&KeepAliveCnt ,4);
		 rc=setsockopt(g_socket_ecmg,IPPROTO_TCP,TCP_KEEPALIVE_IDLE,(char *)&KeepAliveIdleTime,sizeof(KeepAliveIdleTime));
		 rc=setsockopt(g_socket_ecmg,IPPROTO_TCP,TCP_KEEPALIVE_INTVL,(char *)&KeepAliveTime,sizeof(KeepAliveTime));
		 rc=setsockopt(g_socket_ecmg,IPPROTO_TCP,TCP_MSL,(char *)&MSL,sizeof(MSL));
#endif
			
		g_ecmg_waitcommand[0]=ECMG2SCS_CHANNEL_STATUS;

			/*发送通道建立请求*/
		rc=ecmgSend(g_socket_ecmg,ECMG2SCS_CHANNEL_SET_UP,0,0);
		if(rc<=0)
		{
			Display("ecmg: Send channel setup message socket error!\r\n");
			close(g_socket_ecmg);
			g_ecmg_connected[0]=0;
			continue;
		}

		haserr=ECMG_NOERROR;
			/*获得当前时间*/
				/*接收通道状态应答*/
		rc=ecmgRecv(g_socket_ecmg,ECMG2SCS_CHANNEL_STATUS,0,g_ca_config.Para_Config[0].Network_Delay*1000*1000,0);
		if(rc<=0) /* socket error */
		{
			close(g_socket_ecmg);
			g_ecmg_connected[0]=0;
			continue;
		}
		haserr=ECMG_NOERROR;
		g_ecmg_waitcommand[0]=ECMG2SCS_STREAM_STATUS;
		for(i=0;i<g_ecmg_stream_status_list[0].streamcount;i++)
		{/*根据列表信息建立多个流,最大为32*/
				/*发送建立流请求*/
			rc=ecmgSend(g_socket_ecmg,ECMG2SCS_STREAM_SET_UP,i,0);
			if(rc<=0)
			{
					haserr=ECMG_SOCKETERROR;
					break;
			}
		}
		if(haserr!=ECMG_NOERROR)
		{
				Display("ecmg: Send stream setup message socket error!\r\n");		
				close(g_socket_ecmg);
				g_ecmg_connected[0]=0;
				continue;
		}
		Display("ecmg: Send stream setup message ok!\r\n");

			/*----------------------------------------------------------------------------------*/
			/* wait for all the stream status message                                           */
			/*----------------------------------------------------------------------------------*/
		haserr=ECMG_NOERROR;
				/*接收流状态应答*/
		rc=ecmgRecv(g_socket_ecmg,ECMG2SCS_STREAM_STATUS,0,g_ca_config.Para_Config[0].Network_Delay*1000*1000,0);
		if(rc<=0) /* socket error */
		{
				haserr=ECMG_SOCKETERROR;
				close(g_socket_ecmg);
				g_ecmg_connected[0]=0;
				continue;				
		}
		Display("ecmg: Receive stream status message ok!\r\n");

 
		g_ecm_data[0].ecmsendflag=0;

		g_ecmg_waitcommand[0]=0;
			
		g_ecmg_connected[0]=1;
 
		while(1)
		{
  #if 1   		
			if(ReceiveQueue("QONE",Q_WAIT,100,Msg)==ERR_TIMEOUT)
			{
				waitTime+=1;
				if((bSendChannelTest==0)&&(waitTime>6))						
				{
				    waitTime=0;
			           rc=ecmgSend(g_socket_ecmg,ECMG2SCS_CHANNEL_TEST,0,0);
			           if(rc<=0)
			           {
                                     ca_Clear_simucrypt_map();			 	 
					  close(g_socket_ecmg);
				         g_ecmg_connected[0]=0;					 
				         break;
			            }
				           bSendChannelTest=1;			  
				 }			  
				if(bSendChannelTest==1)
				{			               
 			              rc=ecmgRecv(g_socket_ecmg,ECMG2SCS_CHANNEL_STATUS,0,10,0);
				       if(rc<0) /* socket error */
				         {
                                           ca_Clear_simucrypt_map();		
						 bSendChannelTest=0;
				               close(g_socket_ecmg);
				               g_ecmg_connected[0]=0;
						 break;		  								
					  }
				      else if(rc==1) /* got the waiting message */									 
				       {
				            waitTime=0;
					     bSendChannelTest=0;
					     continue;
				        }		 
                                    if(waitTime>5)
				        {
                                          ca_Clear_simucrypt_map();		
						bSendChannelTest=0;
				              close(g_socket_ecmg);
				              g_ecmg_connected[0]=0;									   
					       break;
				          }
			       }
				continue;
	        }                            
		waitTime=0;
		bSendChannelTest=0;
		if(g_ecmg_connected[0]==0)
		{
                      break;
		}
	#endif	
		if(Msg[0] == 2)
		 {/*请求断开连接*/
		       ca_Clear_simucrypt_map();		
			close(g_socket_ecmg);
			g_socket_ecmg = 0;
					/*断开连接后,等待任务挂起*/
 			g_ecmg_connected[0]=0;
			tm_wkafter(100);
			break;
		 }				/*------------------------------------------------------------------------------*/
				/* send all the cw to ecmg                                                      */
				/*------------------------------------------------------------------------------*/
		haserr=ECMG_NOERROR;
		g_ecmg_waitcommand[0]=ECMG2SCS_ECM_RESPONSE;
		for(i=0;i<g_ecmg_stream_status_list[0].streamcount;i++)
		{
			rc=ecmgSend(g_socket_ecmg,ECMG2SCS_CW_PROVISION,i,0);
			if(rc<=0)
			{
				haserr=ECMG_SOCKETERROR;
				ca_Clear_simucrypt_map();		
				break;
			}
		}
		if(haserr!=ECMG_NOERROR)
		{
                     ca_Clear_simucrypt_map();		 
			close(g_socket_ecmg);
			g_ecmg_connected[0]=0;
			break;
		}
		haserr=ECMG_NOERROR;
					/*等待接收ECM应答*/
		rc=ecmgRecv(g_socket_ecmg,ECMG2SCS_ECM_RESPONSE,0,10*1000*1000,0);
		if(rc<=0) /* socket error */
		{
                     ca_Clear_simucrypt_map();		
			close(g_socket_ecmg);
			g_socket_ecmg=0;
			g_ecmg_connected[0]=0;
			break;				
		}
				/*---------------------------------------------------------------------*/
		g_ecm_data[0].pqflag = !g_ecm_data[0].pqflag;			
		g_ecmg_waitcommand[0]=0;
		g_ecm_data[0].ecmsendflag=1;
	   }
	/*下一主循环*/	
	}
}


void tk_ecmgMgr1(void)
{
	static int     g_socket_ecmg=0;
	struct 	sockaddr_in ECMGAddr;
	unsigned long RcvBufLen;
	int     i,rc;
	int     haserr;
	unsigned short usTempTime;

	unsigned long  Msg[4];
	unsigned long  date,time,tick,olddate,oldtime,oldtick;
	unsigned long waitTime=0;
	unsigned long  bSendChannelTest=0;

	unsigned long   IsKeepAlvie;

	unsigned long   KeepAliveCnt;
	unsigned long   KeepAliveIdleTime;
	unsigned long   KeepAliveTime;

	unsigned long   MSL;
	
	/*重启后应该把原先的连接先断掉*/
	if(g_socket_ecmg)
		close(g_socket_ecmg);
	
	g_ecm_data[1].pqflag=1;
	while(1)
	{
              tm_wkafter(1000);  /*delay 10s*/
              waitTime=0;
		g_ecmg_connected[1]=0;
		g_ecmg_waitcommand[1] = 1;
		/*创建套接口*/
		g_socket_ecmg = socket(AF_INET, SOCK_STREAM, TCP);
		if(g_socket_ecmg == -1) 
		{
		       close(0);
			tm_wkafter(100);/*by xu*/
			continue;
		}
		
		g_ecmg_use_masterslave[1]=0;

		ECMGAddr.sin_family		 = AF_INET;
		ECMGAddr.sin_port		        = htons(g_ca_config.Para_Config[1].ECMG_Master_Port);
		ECMGAddr.sin_addr.s_addr    = htonl(g_ca_config.Para_Config[1].ECMG_Master_IP);
		for(i=0;i<8;i++)
			ECMGAddr.sin_zero[i] = 0;

		/*连接主ECMG*/
		RcvBufLen = 16*1024;
		setsockopt(g_socket_ecmg,SOL_SOCKET,SO_RCVBUF,(char *)&RcvBufLen,4);		
		
		if(connect(g_socket_ecmg,(struct sockaddr *)&ECMGAddr,sizeof(struct sockaddr_in)))
		{/*连接不成功,尝试与从ECMG连接*/
			close(g_socket_ecmg);
			tm_wkafter(100);/*by xu*/
			/*创建套接口*/
			g_socket_ecmg = socket(AF_INET, SOCK_STREAM, TCP);
			if(g_socket_ecmg == -1) 
			{
				close(0);
				tm_wkafter(100);/*by xu*/			 
				continue;                     
			}		
			ECMGAddr.sin_family		 = AF_INET;					 
			ECMGAddr.sin_port		 = htons(g_ca_config.Para_Config[1].ECMG_Slave_Port);			 
			ECMGAddr.sin_addr.s_addr = htonl(g_ca_config.Para_Config[1].ECMG_Slave_IP);	 
			for(i=0;i<8;i++)
				ECMGAddr.sin_zero[i] = 0;	
			/*连接从ECMG*/
			setsockopt(g_socket_ecmg,SOL_SOCKET,SO_RCVBUF,(char *)&RcvBufLen,4);					
			if(connect(g_socket_ecmg,(struct sockaddr *)&ECMGAddr,sizeof(struct sockaddr_in)))
			{/*不成功,重新尝试*/
				close(g_socket_ecmg);
				tm_wkafter(100);/*by xu*/	
				continue;         /*return for(;;)*/
			}
			else
			{
				g_ecmg_use_masterslave[1]=2;
			}
		}	
		else
		{
			g_ecmg_use_masterslave[1]=1;
			Display("ecmg: Connect master ecmg server OK!");
		}
#if 0
		 IsKeepAlvie=1;
		 KeepAliveCnt     =2;
		 KeepAliveIdleTime=5;
		 KeepAliveTime    =5;

		 MSL              =5;
		
		 rc=setsockopt(g_socket_ecmg,SOL_SOCKET,SO_KEEPALIVE,(char *)&IsKeepAlvie,sizeof(IsKeepAlvie));
		
		 rc=setsockopt(g_socket_ecmg,IPPROTO_TCP,TCP_KEEPALIVE_CNT,(char *)&KeepAliveCnt ,4);
		 rc=setsockopt(g_socket_ecmg,IPPROTO_TCP,TCP_KEEPALIVE_IDLE,(char *)&KeepAliveIdleTime,sizeof(KeepAliveIdleTime));
		 rc=setsockopt(g_socket_ecmg,IPPROTO_TCP,TCP_KEEPALIVE_INTVL,(char *)&KeepAliveTime,sizeof(KeepAliveTime));
		 rc=setsockopt(g_socket_ecmg,IPPROTO_TCP,TCP_MSL,(char *)&MSL,sizeof(MSL));
#endif
			

			
		g_ecmg_waitcommand[1]=ECMG2SCS_CHANNEL_STATUS;

			/*发送通道建立请求*/
		rc=ecmgSend(g_socket_ecmg,ECMG2SCS_CHANNEL_SET_UP,0,1);
		if(rc<=0)
		{
			Display("ecmg: Send channel setup message socket error!\r\n");
			close(g_socket_ecmg);
			g_ecmg_connected[0]=0;
			continue;
		}

		haserr=ECMG_NOERROR;
			/*获得当前时间*/
				/*接收通道状态应答*/
		rc=ecmgRecv(g_socket_ecmg,ECMG2SCS_CHANNEL_STATUS,0,g_ca_config.Para_Config[1].Network_Delay*1000*1000,1);
		if(rc<=0) /* socket error */
		{
			close(g_socket_ecmg);
			g_ecmg_connected[1]=0;
			continue;
		}
		haserr=ECMG_NOERROR;
		g_ecmg_waitcommand[1]=ECMG2SCS_STREAM_STATUS;
		for(i=0;i<g_ecmg_stream_status_list[1].streamcount;i++)
		{/*根据列表信息建立多个流,最大为32*/
				/*发送建立流请求*/
		     rc=ecmgSend(g_socket_ecmg,ECMG2SCS_STREAM_SET_UP,i,1);
		     if(rc<=0)
			{
					haserr=ECMG_SOCKETERROR;
					break;
			}
		}
		if(haserr!=ECMG_NOERROR)
		{
				Display("ecmg: Send stream setup message socket error!\r\n");		
				close(g_socket_ecmg);
				g_ecmg_connected[1]=0;
				continue;
		}
		Display("ecmg: Send stream setup message ok!\r\n");

			/*----------------------------------------------------------------------------------*/
			/* wait for all the stream status message                                           */
			/*----------------------------------------------------------------------------------*/
		haserr=ECMG_NOERROR;
				/*接收流状态应答*/
		rc=ecmgRecv(g_socket_ecmg,ECMG2SCS_STREAM_STATUS,0,g_ca_config.Para_Config[1].Network_Delay*1000*1000,1);
		if(rc<=0) /* socket error */
		{
				haserr=ECMG_SOCKETERROR;
				close(g_socket_ecmg);
				g_ecmg_connected[1]=0;
				continue;				
		}
		Display("ecmg: Receive stream status message ok!\r\n");

 
		g_ecm_data[1].ecmsendflag=0;

		g_ecmg_waitcommand[1]=0;
			
		g_ecmg_connected[1]=1;
 
		while(1)
		{
			if(ReceiveQueue("QSEC",Q_WAIT,100,Msg)==ERR_TIMEOUT)
			{
				waitTime+=1;
				if((bSendChannelTest==0)&&(waitTime>6))						

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -