| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #include "StdAfx.h"
- #include "LogicLineVoip.h"
- #include "CallSession.h"
- #include "SessionHolder.h"
- #include "StatisticsMgr.h"
- CLogicLineVoip::CLogicLineVoip(UINT ResId) : CLogicLine(ResId), m_IsOnTrunkMode(false)
- {
- }
- CLogicLineVoip::~CLogicLineVoip(void)
- {
- }
- /*****************************************************************
- **【函数名称】 onLineStatusUpdated
- **【函数功能】 处理线路状态变化
- **【参数】 EvtInfo: 线路资源状态
- **【返回值】
- ****************************************************************/
- void CLogicLineVoip::onLineStatusUpdated( const EventResStatus &EvtInfo )
- {
- /***********************************************************************
- **由于VOIP通道的特殊性,其即可工作在分机模式下,又可工作在中继模式下。
- **故对其状态的变更要特殊处理。在中继模式下其处理方式和普通数字中继相同,
- **而在分机模式下其通道状态不再通知给统计和会话模块,而由其对应的分机线路
- **通知统计和会话模块,否则会造成重复统计和会话状态维护错误的问题
- *************************************************************************/
- if(m_LineStatus == EvtInfo.nState)
- return;
- switch(EvtInfo.nState)
- {
- case VOIP_EXT_STATE_DISABLED:
- case VOIP_EXT_STATE_FREE:
- case VOIP_EXT_STATE_INIT:
- case VOIP_EXT_STATE_DIALING:
- case VOIP_EXT_STATE_RING_BACK:
- case VOIP_EXT_STATE_ALERTING:
- case VOIP_EXT_STATE_TALKING:
- m_IsOnTrunkMode = false;
- break;
- case VOIP_TRUNK_STATE_DISABLED:
- case VOIP_TRUNK_STATE_FREE:
- case VOIP_TRUNK_STATE_DIALING:
- case VOIP_TRUNK_STATE_RING_BACK:
- case VOIP_TRUNK_STATE_ALERTING:
- case VOIP_TRUNK_STATE_TALKING:
- case VOIP_TRUNK_STATE_UNKNOWN:
- m_IsOnTrunkMode = true;
- break;
- default:
- ASSERT(FALSE);
- }
-
- // 保存线路信息
- m_LineStatus = EvtInfo.nState;
- m_CallerNum = EvtInfo.szCallerNum;
- m_CalleeNum = EvtInfo.szCalleeNum;
-
- ILogger::getInstance().log(LOG_CLASS_DEV, LOG_LEVEL_NORMAL, _T("{LogicLineVoip}: 线路状态, LineId = %lu,State=%d,IsOnTrunkMode=%d,CallId=%lu,Caller=%s,Callee=%s"), m_LineId, m_LineStatus, m_IsOnTrunkMode, m_CallId, m_CallerNum, m_CalleeNum );
- if(m_IsOnTrunkMode) // 此时表明VOIP通道工作在中继模式下
- {
- _reportLineStatus(); // 统计线路状态变化
- CSessionHolder::GetInstance().onLineStatusUpdated(this);
- }
- }
|