| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #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;
- if(m_IsOnTrunkMode) // 此时表明VOIP通道工作在中继模式下
- {
- _reportLineStatus(); // 统计线路状态变化
- CSessionHolder::GetInstance().onLineStatusUpdated(this);
- }
- }
|