📄 ecm.c.bak
字号:
{/*不成功,重新尝试*/
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 + -