cnx = GetCnxStateFromVHD( evtp->hsxdevhdl ); //获取CNX对象
switch( evtp->hsxevt )
case HAPINET_INGRESSRTPPKT: //向外待发送RTP
endptState = GetEndptState( cnx->lineId ); //获取ENDPT对象
//我们当前来显不是这种模式,暂不看
if ( endptState->classState.classType == CLASS_MSG_OFFHOOK_CLID )
if ( classStmIsIdle( &endptState->classState ) == VRG_FALSE )
return;
//如果非静音传送
if ( (cnx->bMuteAudio == VRG_FALSE) && (cnx->bMuteT38 == VRG_FALSE) )
if (endptState->testMode == TESTMODE_PACKETLOOPBACK)//环回测试,暂不看
……
else
//使用回调函数将RTP包放在接近上层的包队列中,由于上层用户任务来取
epPacket.packetp = (RTPPACKET*) evtp->hsxop2.ref;
epPacket.mediaType = EPMEDIATYPE_RTP;
(*endptConfig.packet)( endptState->endptArchive, cnx->cnxId, &epPacket, evtp->hsxop1 );
case HAPINET_INGRESSRTCPPKT: //向外待发送RTCP
endptState = GetEndptState( cnx->lineId ); //获取ENDPT对象
if (endptState->testMode == TESTMODE_PACKETLOOPBACK)//环回测试,暂不看
……
else
//使用回调函数将RTCP包放在接近上层的包队列中,由于上层用户任务来取
epPacket.packetp = (RTPPACKET*) evtp->hsxop2.ref;
epPacket.mediaType = EPMEDIATYPE_RTCP;
(*endptConfig.packet)( endptState->endptArchive, cnx->cnxId, &epPacket, evtp->hsxop1 );
case HAPIT38_INGRESSPACKET: //向外等发送T38
endptState = GetEndptState( cnx->lineId ); //获取ENDPT对象
//我们当前来显不是这种模式,暂不看
if ( endptState->classState.classType == CLASS_MSG_OFFHOOK_CLID )
if ( classStmIsIdle( &endptState->classState ) == VRG_FALSE )
return;
//如果非静音传送
if ( (cnx->bMuteAudio == VRG_FALSE) && (cnx->bMuteT38 == VRG_FALSE) )
if (endptState->testMode == TESTMODE_PACKETLOOPBACK) //环回测试,暂不看
……
else
//使用回调函数将T38包放在接近上层的包队列中,由于上层用户任务来取
if (( ModeCheck( cnx->mode, SENDMODE )) || ( cnx->activeSignal ))
epPacket.packetp = (RTPPACKET*) evtp->hsxop2.ref;
epPacket.mediaType = EPMEDIATYPE_T38;
(*endptConfig.packet)( endptState->endptArchive, cnx->cnxId, &epPacket, evtp->hsxop1 );
//将资源相关事件放入事件队列中,让事件队理处理任务来处理,包括各种传真信号的检测
//,以及VAD的自动控制都在事件处理任务中完成,流程的后续处理放在//VrgDispatcherTaskMain任务的HapiCnxEventProcess函数中介绍。
PostHapiEvent( VRG_EVT_TYPE_HAPI_CNX, evtp, dspNum );