修改三方通话功能,在发起三方通话时,先保持住主叫,然后再拉回主叫到会议

ProxyDti.cpp 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #include "StdAfx.h"
  2. #include "ProxyDti.h"
  3. #include "ProxyShell.h"
  4. CProxyDti::CProxyDti(CProxyShell* pParent, CRDRID DevId) : CVirtualProxy(pParent, DevId)
  5. {
  6. ASSERT(m_pParent != NULL);
  7. }
  8. CProxyDti::~CProxyDti(void)
  9. {
  10. // 通知业务逻辑线路被删除
  11. ASSERT(m_pParent != NULL);
  12. m_pParent->notifyDevResourceState(DEV_RES_TYPE_TRUNK, m_DevId.toIntId(), TRUNK_STATE_DISABLED);
  13. }
  14. /*****************************************************************
  15. **【函数名称】 __transVirtualState2OuterState
  16. **【函数功能】 映设虚拟线路状态到外部识别的状态
  17. **【参数】 State: 线路状态
  18. **【返回值】
  19. ****************************************************************/
  20. UINT CProxyDti::__transVirtualState2OuterState( VIRTUAL_LINE_STATE State ) const
  21. {
  22. switch(State)
  23. {
  24. case VIRTUAL_LINE_STATE_FREE: return TRUNK_STATE_FREE;
  25. case VIRTUAL_LINE_STATE_DIALING: return TRUNK_STATE_DIALING;
  26. case VIRTUAL_LINE_STATE_RING_BACK: return TRUNK_STATE_RING_BACK;
  27. case VIRTUAL_LINE_STATE_ALERTING: return TRUNK_STATE_ALERTING;
  28. case VIRTUAL_LINE_STATE_TALKING: return TRUNK_STATE_TALKING;
  29. case VIRTUAL_LINE_STATE_DISABLED: return TRUNK_STATE_DISABLED;
  30. default: ASSERT(FALSE);
  31. } // end switch
  32. return TRUNK_STATE_DISABLED;
  33. }
  34. /*****************************************************************
  35. **【函数名称】 _procLineState
  36. **【函数功能】 线路状态变化事件处理
  37. **【参数】 Call 主会话ID
  38. SubCall 子会话ID
  39. State 线路基本状态
  40. lpCallerNum 主叫号码
  41. lpCalleeNum 被叫号码
  42. **【返回值】
  43. ****************************************************************/
  44. void CProxyDti::_procLineState( long Call, long SubCall, VIRTUAL_LINE_STATE State, LPCTSTR lpCallerNum, LPCTSTR lpCalleeNum )
  45. {
  46. // 根据外线状态进行对应的逻辑处理
  47. if((m_State == VIRTUAL_LINE_STATE_FREE && State == VIRTUAL_LINE_STATE_TALKING) ||
  48. (m_State == VIRTUAL_LINE_STATE_ALERTING && State == VIRTUAL_LINE_STATE_TALKING))
  49. {
  50. // 外线来电
  51. m_CallerNum = lpCallerNum;
  52. m_CalleeNum = lpCalleeNum;
  53. ASSERT(m_pParent != NULL);
  54. m_pParent->notifyLineOpEvent(m_DevId.toIntId(), DEV_OP_CALL_IN, lpCallerNum, lpCalleeNum);
  55. LOGGER(LOG_CLASS_DEV, LOG_LEVEL_NORMAL, _T("{CProxyDti}: 外线来电,%d,Caller=%s,Callee=%s"), m_DevId.toIntId(),lpCallerNum, lpCalleeNum);
  56. }
  57. }
  58. /*****************************************************************
  59. **【函数名称】 _notifyLineState
  60. **【函数功能】 通知上层逻辑线路状态变化事件
  61. **【参数】
  62. **【返回值】
  63. ****************************************************************/
  64. void CProxyDti::_notifyLineState( void )
  65. {
  66. // 通知业务逻辑线路状态变化事件
  67. ASSERT(m_pParent != NULL);
  68. m_pParent->notifyDevResourceState(DEV_RES_TYPE_TRUNK, m_DevId.toIntId(), __transVirtualState2OuterState(m_State), m_CallerNum, m_CalleeNum);
  69. }
  70. /*****************************************************************
  71. **【函数名称】 notifyLineInfo
  72. **【函数功能】 通知上层逻辑线路信息
  73. **【参数】
  74. **【返回值】
  75. ****************************************************************/
  76. void CProxyDti::notifyLineInfo( PDU_DEV_TYPE DestType, int DestId ) const
  77. {
  78. // 通知业务逻辑线路状态变化事件
  79. ASSERT(m_pParent != NULL);
  80. m_pParent->notifyResourceDetail(DestType, DestId, DEV_RES_TYPE_TRUNK, m_DevId.toIntId());
  81. m_pParent->notifyDevResourceState(DestType, DestId, DEV_RES_TYPE_TRUNK, m_DevId.toIntId(), __transVirtualState2OuterState(m_State), m_CallerNum, m_CalleeNum);
  82. }
  83. /*****************************************************************
  84. **【函数名称】 notifyLineInfo
  85. **【函数功能】 通知上层逻辑线路信息
  86. **【参数】
  87. **【返回值】
  88. ****************************************************************/
  89. void CProxyDti::notifyLineInfo( void ) const
  90. {
  91. // 通知业务逻辑线路状态变化事件
  92. ASSERT(m_pParent != NULL);
  93. m_pParent->notifyResourceDetail(DEV_RES_TYPE_TRUNK, m_DevId.toIntId());
  94. m_pParent->notifyDevResourceState(DEV_RES_TYPE_TRUNK, m_DevId.toIntId(), __transVirtualState2OuterState(m_State), m_CallerNum, m_CalleeNum);
  95. }