ENDPT_410_ProcessVrgEndptModifyConnection

来源:互联网 发布:国境以南太阳以西知乎 编辑:程序博客网 时间:2024/04/29 11:45
state = GetEndptState( lineId );//获取线路对象//合法性模式校验if (!IsCnxModeSupported(cnxParam->mode, dspNum))return ( EPSTATUS_UNSUPPORTED_MODE );//合法性资源ID校验for( cnxIndex = 0; cnxIndex < VRG_ENDPT_CFG_MAX_CNX_PER_ENDPT; cnxIndex++ )if ((state->cnx[cnxIndex]) && (state->cnx[cnxIndex]->cnxId == cnxId))break;if (cnxIndex == VRG_ENDPT_CFG_MAX_CNX_PER_ENDPT)return ( EPSTATUS_CNX_UNKNOWN );cnx = state->cnx[cnxIndex];//获取资源对象cnx->dataMode = cnxParam->dataMode;if( cnxParam->dataMode == EPDATAMODE_VBD )//如果当前为VBD模式//如果当前配置为动态JB时,给DSP设置静态JB值if(cnx->vrgVoiceJBFixed == VRG_FALSE)hdspVhdSetJitterBuffer( cnx->vhdhdl, VRG_TRUE, 0, cnxParam->JBMax,cnxParam->JBTarget, cnxParam->JBTarget, cnx->ajcCustomReg);else if( ( cnxParam->dataMode == EPDATAMODE_NONE ) )//如果当前为语音模式//给DSP设置动态JB值hdspVhdSetJitterBuffer( cnx->vhdhdl, VRG_FALSE, 0, cnxParam->JBMax,cnxParam->JBTarget, cnxParam->JBTarget, cnx->ajcCustomReg);//保存cnx->vrgVoiceJBFixed = ( cnxParam->dataMode == EPDATAMODE_VBD );cnx->vrgVoiceJBMin = 0;cnx->vrgVoiceJBMax = cnxParam->JBMax;cnx->vrgVoiceJBTarget = cnxParam->JBTarget;cnx->vrgDataJBTarget  = cnxParam->JBTarget;//如果当前已经在T38模式,并且设置了保持当前传真模式时,则不进行处理if( (cnx->vhdMode == NETMODE_FAXRELAY) && (cnxParam->preserveFaxMode) )return ( EPSTATUS_SUCCESS );//设置RTP payload映射表。该函数在《ENDPT_410_ProcessVrgEndptCreateConnection.doc》//中有注释说明,这里不再说明。SetRtpPayloadTypes( cnx, &cnxParam->cnxParmList );//设置当前资源VHD与线路VHD或其它资源VHD的关联。该函数在//《ENDPT_410_ProcessVrgEndptCreateConnection.doc》中有注释说明,这里不再说明。UpdateSBMasks( state->cnx[cnxIndex], cnxParam->mode);//根据上层设置回声消除开关if (cnxParam->echocancel)EcanProcessStm(state, ECANEVT_MDCX_ON);elseEcanProcessStm(state, ECANEVT_MDCX_OFF);//如果当前编码不支持10MS速率,但新的编码类型支持10MS速率if ( IS_NON_10MS_CODEC(cnx->codecType) && (!( IS_NON_10MS_CODEC(cnxParam->cnxParmList.send.codecs[0].type))))//当前线路对象只关联一个资源对象时,复位当前呼叫vrgEndptResetBuildOut( lineId, state->lineVhdHdl );switch( cnxParam->mode )case EPCNXMODE_SNDO://仅发送case EPCNXMODE_RCVO://仅接收case EPCNXMODE_SNDRX://发送/接收case EPCNXMODE_LOOP://环回测试case EPCNXMODE_TEST://连续性测试,不明白case EPCNXMODE_REPLCATE://重复性测试,不明白case EPCNXMODE_CONF://会议模式case EPCNXMODE_TRANSCODE://编码转换模式//如果当前首选发送编码非T38类型时if ( !( cnxParam->cnxParmList.send.codecs[0].type == CODEC_T38 || cnxParam->cnxParmList.send.codecs[0].type == CODEC_T38_MUTE ) )//如果当前编码为VBD冗余,则设置VBD标记if( (cnxParam->cnxParmList.send.codecs[0].type == CODEC_RED) &&(state->cnx[cnxIndex]->vbData.bEnabled == VRG_FALSE) )state->cnx[cnxIndex]->vbData.bEnabled = VRG_TRUE;//如果当前正在T38模式,需要切到VBD模式,是设置VBD标记if( (cnx->dataMode != cnxParam->dataMode) && (cnx->vhdMode == NETMODE_FAXRELAY) )state->cnx[cnxIndex]->vbData.bEnabled = VRG_TRUE;//因为上面是否设置了VBD标记,则控制设置为语音状态还是VBD状态,该函数//在《ENDPT_410_ProcessVrgEndptCreateConnection.doc》中有注释说明,这里不//再说明。SetVoiceMode( state->cnx[cnxIndex], VM_ACTIVE );case EPCNXMODE_INACT://去激活模式//如果当前在非语音状态,或者在T38状态if ( cnx->voiceMode != VM_ACTIVE || cnx->vhdMode == NETMODE_FAXRELAY )SaveConnectionOptions( cnx, cnxParam );//保存部分连接配置选项return ( EPSTATUS_SUCCESS );else//否则在语音状态//如果当前模式有变更,并且非回路测试模式,并且需要给远端放回铃音时if( (state->cnx[cnxIndex]->mode != cnxParam->mode) && (cnxParam->mode != EPCNXMODE_LOOP) && cnx->activeSignal )cnxParam->mode = state->cnx[cnxIndex]->mode;//维持先前连接模式SaveConnectionOptions( cnx, cnxParam );//保存部分连接配置选项else//停止数据包收发,并保存部分连接配置选项。SetRtpMode函数在//《ENDPT_410_ProcessVrgEndptCreateConnection.doc》中有注释说明,这里不//再说明。SetRtpMode( state->cnx[cnxIndex], cnxParam->mode );SaveConnectionOptions( cnx, cnxParam );//检测如果有连接选项改变if ( ConnectionOptionsChanged( cnx, cnxParam ))//如果从T38状态切为非T38状态,则上报T38停止事件if ( ( cnx->codecType == CODEC_T38 || cnx->codecType == CODEC_T38_MUTE ) &&(!( cnxParam->cnxParmList.send.codecs[0].type == CODEC_T38 || cnxParam->cnxParmList.send.codecs[0].type == CODEC_T38_MUTE )) )(*endptConfig.notify)( state->endptArchive, cnx->cnxId, EPEVT_T38_STOP, NULL, 0, -1 );//重新设置所有资源连接相关配置项。该函数在//《ENDPT_410_ProcessVrgEndptCreateConnection.doc》中有注释说明,这里不再说明。SetConnectionOptions( cnx, cnxParam, VRG_FALSE );//如果当前测试模式为TR57,并且为接收、发送模式,则设置当前状态为VBD状态if (state->testMode == TESTMODE_TR57)if ( cnxParam->mode == EPCNXMODE_SNDRX)cnx->vbData.bEnabled = VRG_TRUE;SetVoiceMode( cnx, VM_ACTIVE );//如果当前在环路测试模式,或者当前需要向远端放回铃音,而不设置RTP收发模式//否则需要重新设置RTP收发模式if( (state->cnx[cnxIndex]->mode != cnxParam->mode) && (cnxParam->mode != EPCNXMODE_LOOP) && cnx->activeSignal )VRG_LOG_INFO(( VRG_LOG_MOD_EPT, "ENDPT %d: cnx %d - preserve RTP mode to %d"…)else//设置RTP收发模式。该函数在《ENDPT_410_ProcessVrgEndptCreateConnection.doc》中//有注释说明,这里不再说明。SetRtpMode( state->cnx[cnxIndex], cnxParam->mode );SaveConnectionOptions( cnx, cnxParam );//保存部分连接配置选项

原创粉丝点击