升龙物业 老版本 ocx IPO, 加密狗 转值班电话

LogicLineVoip.cpp 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "StdAfx.h"
  2. #include "LogicLineVoip.h"
  3. #include "CallSession.h"
  4. #include "SessionHolder.h"
  5. #include "StatisticsMgr.h"
  6. CLogicLineVoip::CLogicLineVoip(UINT ResId) : CLogicLine(ResId), m_IsOnTrunkMode(false)
  7. {
  8. }
  9. CLogicLineVoip::~CLogicLineVoip(void)
  10. {
  11. }
  12. /*****************************************************************
  13. **【函数名称】 onLineStatusUpdated
  14. **【函数功能】 处理线路状态变化
  15. **【参数】 EvtInfo: 线路资源状态
  16. **【返回值】
  17. ****************************************************************/
  18. void CLogicLineVoip::onLineStatusUpdated( const EventResStatus &EvtInfo )
  19. {
  20. /***********************************************************************
  21. **由于VOIP通道的特殊性,其即可工作在分机模式下,又可工作在中继模式下。
  22. **故对其状态的变更要特殊处理。在中继模式下其处理方式和普通数字中继相同,
  23. **而在分机模式下其通道状态不再通知给统计和会话模块,而由其对应的分机线路
  24. **通知统计和会话模块,否则会造成重复统计和会话状态维护错误的问题
  25. *************************************************************************/
  26. if(m_LineStatus == EvtInfo.nState)
  27. return;
  28. switch(EvtInfo.nState)
  29. {
  30. case VOIP_EXT_STATE_DISABLED:
  31. case VOIP_EXT_STATE_FREE:
  32. case VOIP_EXT_STATE_INIT:
  33. case VOIP_EXT_STATE_DIALING:
  34. case VOIP_EXT_STATE_RING_BACK:
  35. case VOIP_EXT_STATE_ALERTING:
  36. case VOIP_EXT_STATE_TALKING:
  37. m_IsOnTrunkMode = false;
  38. break;
  39. case VOIP_TRUNK_STATE_DISABLED:
  40. case VOIP_TRUNK_STATE_FREE:
  41. case VOIP_TRUNK_STATE_DIALING:
  42. case VOIP_TRUNK_STATE_RING_BACK:
  43. case VOIP_TRUNK_STATE_ALERTING:
  44. case VOIP_TRUNK_STATE_TALKING:
  45. case VOIP_TRUNK_STATE_UNKNOWN:
  46. m_IsOnTrunkMode = true;
  47. break;
  48. default:
  49. ASSERT(FALSE);
  50. }
  51. // 保存线路信息
  52. m_LineStatus = EvtInfo.nState;
  53. m_CallerNum = EvtInfo.szCallerNum;
  54. m_CalleeNum = EvtInfo.szCalleeNum;
  55. if(m_IsOnTrunkMode) // 此时表明VOIP通道工作在中继模式下
  56. {
  57. _reportLineStatus(); // 统计线路状态变化
  58. CSessionHolder::GetInstance().onLineStatusUpdated(this);
  59. }
  60. }