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

DirectSession.cpp 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include "StdAfx.h"
  2. #include "DirectSession.h"
  3. #include "CallSession.h"
  4. #include "ProxyShell.h"
  5. #include "MC.h"
  6. #include "OneLeg.h"
  7. CDirectSession::CDirectSession(CCallSession* pParent, long SubId, PendingCallInfo* pInfo) : CSubSession(pParent, SubId, pInfo)
  8. {
  9. }
  10. CDirectSession::~CDirectSession(void)
  11. {
  12. }
  13. /*****************************************************************
  14. **【函数名称】 _onDialOK
  15. **【函数功能】 呼叫成功后续处理
  16. **【参数】
  17. **【返回值】
  18. *****************************************************************/
  19. void CDirectSession::_onDialOK( void )
  20. {
  21. COneLeg* pHostLeg = CMC::GetInstance().getCallLeg(m_pInfo->nHostLine);
  22. ASSERT(pHostLeg != NULL);
  23. if(pHostLeg != NULL)
  24. {
  25. bool t_b_a = pHostLeg->accept();
  26. if (t_b_a == false)
  27. {
  28. LOGGER(LOG_CLASS_DEV, LOG_LEVEL_NORMAL, _T("{CDirectSession}: a-leg执行accept失败,caller=%s,callee=%s"), pHostLeg->getCaller(), pHostLeg->getCallee());
  29. return;
  30. }
  31. }
  32. // 主会话中线路替换
  33. switch(m_HostLineParty)
  34. {
  35. case CALL_PARTY_HOST: // 主控线路
  36. {
  37. m_pParent->removeLine(m_pInfo->nAssoLine, CALL_PARTY_PENDING);
  38. m_pParent->insertLine(m_pInfo->nAssoLine, CALL_PARTY_PEER, true);
  39. }
  40. break;
  41. case CALL_PARTY_PEER: // 对端线路
  42. {
  43. m_pParent->removeLine(m_pInfo->nAssoLine, CALL_PARTY_PENDING);
  44. m_pParent->insertLine(m_pInfo->nAssoLine, CALL_PARTY_HOST, true);
  45. }
  46. break;
  47. case CALL_PARTY_MEETING: // 会议线路
  48. {
  49. ASSERT(FALSE);
  50. }
  51. break;
  52. } // end switch
  53. }
  54. /*****************************************************************
  55. **【函数名称】 _onDialCancel
  56. **【函数功能】 呼叫取消处理
  57. **【参数】
  58. **【返回值】
  59. *****************************************************************/
  60. void CDirectSession::_onDialCancel( void )
  61. {
  62. // 如果主控线路还在会话中
  63. //if(m_pParent->isExist(m_pInfo->nHostLine, m_HostLineParty))
  64. //{
  65. // // 如果主控线路初始状态为非空闲
  66. // if(m_pInfo->nHostLineStatus != VIRTUAL_LINE_STATE_FREE)
  67. // {
  68. // CProxyShell::GetInstance().onLineStateUpdated(m_pInfo->nHostLine, m_pParent->id(), SESSION_INVALID_SUB_CALL,
  69. // (VIRTUAL_LINE_STATE)m_pInfo->nHostLineStatus, m_pInfo->szPreCallerNum, m_pInfo->szPreCalleeNum);
  70. // }
  71. // else // 初始为空闲时直接调用挂机操作
  72. // {
  73. // CMC::GetInstance().dropCall(m_pInfo->nHostLine, false);
  74. // }
  75. //}
  76. }
  77. /*****************************************************************
  78. **【函数名称】 _onDialing
  79. **【函数功能】 呼叫振铃处理
  80. **【参数】
  81. **【返回值】
  82. *****************************************************************/
  83. void CDirectSession::_onDialRing( void )
  84. {
  85. COneLeg* pHostLeg = CMC::GetInstance().getCallLeg(m_pInfo->nHostLine);
  86. ASSERT(pHostLeg != NULL);
  87. if(pHostLeg != NULL)
  88. pHostLeg->reply();
  89. }