| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- #include "StdAfx.h"
- #include "TrunkSession.h"
- #include "CallSession.h"
- #include "ProxyShell.h"
- #include "MC.h"
- #include "OneLeg.h"
- CTrunkSession::CTrunkSession(CCallSession* pParent, long SubId, PendingCallInfo* pInfo) : CSubSession(pParent, SubId, pInfo), m_IsLinked(false)
- {
- }
- CTrunkSession::~CTrunkSession(void)
- {
- }
- /*****************************************************************
- **【函数名称】 onHostLineStateFree
- **【函数功能】 主叫线路空闲处理
- **【参数】
- **【返回值】
- *****************************************************************/
- void CTrunkSession::onHostLineStateFree( void )
- {
- // 断开通道连接
- if(m_IsLinked)
- {
- CMC::GetInstance().bridgeDevice(m_pInfo->nHostLine, m_pInfo->nAssoLine, false);
- m_IsLinked = false;
- }
- }
- /*****************************************************************
- **【函数名称】 onPeerLineStateFree
- **【函数功能】 被叫线路空闲处理
- **【参数】
- **【返回值】
- *****************************************************************/
- void CTrunkSession::onPeerLineStateFree( void )
- {
- // 断开通道连接
- if(m_IsLinked)
- {
- CMC::GetInstance().bridgeDevice(m_pInfo->nHostLine, m_pInfo->nAssoLine, false);
- m_IsLinked = false;
- }
- }
- /*****************************************************************
- **【函数名称】 _onDialCancel
- **【函数功能】 呼叫取消处理
- **【参数】
- **【返回值】
- *****************************************************************/
- void CTrunkSession::_onDialCancel( void )
- {
- // 断开通道连接
- if(m_IsLinked)
- {
- CMC::GetInstance().bridgeDevice(m_pInfo->nHostLine, m_pInfo->nAssoLine, false);
- m_IsLinked = false;
- }
- // 如果主控线路还在会话中
- //if(m_pParent->isExist(m_pInfo->nHostLine, m_HostLineParty))
- //{
- // // 如果主控线路初始状态为非空闲
- // if(m_pInfo->nHostLineStatus != VIRTUAL_LINE_STATE_FREE)
- // {
- // CProxyShell::GetInstance().onLineStateUpdated(m_pInfo->nHostLine, m_pParent->id(), SESSION_INVALID_SUB_CALL,
- // (VIRTUAL_LINE_STATE)m_pInfo->nHostLineStatus, m_pInfo->szPreCallerNum, m_pInfo->szPreCalleeNum);
- // }
- // else // 初始为空闲时直接调用挂机操作
- // {
- // CMC::GetInstance().dropCall(m_pInfo->nHostLine, false);
- // }
- //}
- }
- /*****************************************************************
- **【函数名称】 _onDialOK
- **【函数功能】 呼叫成功后续处理
- **【参数】
- **【返回值】
- *****************************************************************/
- void CTrunkSession::_onDialOK( void )
- {
- COneLeg* pHostLeg = CMC::GetInstance().getCallLeg(m_pInfo->nHostLine);
- ASSERT(pHostLeg != NULL);
- if(pHostLeg != NULL)
- pHostLeg->accept();
- // 主会话中线路替换
- switch(m_HostLineParty)
- {
- case CALL_PARTY_HOST: // 主控线路
- {
- m_pParent->removeLine(m_pInfo->nAssoLine, CALL_PARTY_PENDING);
- m_IsLinked = m_pParent->insertLine(m_pInfo->nAssoLine, CALL_PARTY_PEER, !m_IsLinked);
- }
- break;
- case CALL_PARTY_PEER: // 对端线路
- {
- m_pParent->removeLine(m_pInfo->nAssoLine, CALL_PARTY_PENDING);
- m_IsLinked = m_pParent->insertLine(m_pInfo->nAssoLine, CALL_PARTY_HOST, !m_IsLinked);
- }
- break;
- case CALL_PARTY_MEETING: // 会议线路
- {
- ASSERT(FALSE);
- }
- break;
- } // end switch
- }
- /*****************************************************************
- **【函数名称】 _onDialing
- **【函数功能】 呼叫振铃处理
- **【参数】
- **【返回值】
- *****************************************************************/
- void CTrunkSession::_onDialRing( void )
- {
- COneLeg* pHostLeg = CMC::GetInstance().getCallLeg(m_pInfo->nHostLine);
- ASSERT(pHostLeg != NULL);
- if(pHostLeg != NULL)
- {
- if(!m_IsLinked)
- {
- // 运行到此说明中继线路不送early media,故两通道未建立连接,此时由中间件向分机送回铃音
- pHostLeg->reply();
- }
- }
- }
- /*****************************************************************
- **【函数名称】 _onDialProgressing
- **【函数功能】 呼叫进展处理
- **【参数】
- **【返回值】
- *****************************************************************/
- void CTrunkSession::_onDialProgressing( void )
- {
- COneLeg* pHostLeg = CMC::GetInstance().getCallLeg(m_pInfo->nHostLine);
- ASSERT(pHostLeg != NULL);
- if(pHostLeg != NULL)
- pHostLeg->progress();
- if(!m_IsLinked)
- m_IsLinked = CMC::GetInstance().bridgeDevice(m_pInfo->nHostLine, m_pInfo->nAssoLine, true);
- }
|