中间件标准版5.1git,去除基础模块

ChanTrunk.cpp 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. #include "StdAfx.h"
  2. #include "ChanTrunk.h"
  3. #include "FsProxy.h"
  4. #include "Operation.h"
  5. CChanTrunk::CChanTrunk(CFsProxy* pParent, UINT ChanNo) : CVirtualChan(pParent, ChanNo), m_pEslHandle(NULL), m_StopConnect(true)
  6. {
  7. }
  8. CChanTrunk::~CChanTrunk(void)
  9. {
  10. }
  11. /*****************************************************************
  12. **【函数名称】 isFree
  13. **【函数功能】 是否空闲
  14. **【参数】
  15. **【返回值】
  16. *****************************************************************/
  17. bool CChanTrunk::isFree( void ) const
  18. {
  19. return m_State == CHAN_LOGIC_STATE_FREE && m_pOperation == NULL;
  20. }
  21. /*****************************************************************
  22. **【函数名称】 regist
  23. **【函数功能】 注册线路
  24. **【参数】
  25. **【返回值】
  26. *****************************************************************/
  27. void CChanTrunk::regist( void ) const
  28. {
  29. m_pParent->onChanRegist(DEV_RES_TYPE_TRUNK, m_No, m_State);
  30. }
  31. /*****************************************************************
  32. **【函数名称】 onChanEvent
  33. **【函数功能】 通道事件处理
  34. **【参数】
  35. **【返回值】
  36. *****************************************************************/
  37. void CChanTrunk::onChanEvent( PCHAN_EVENT_NOTIFY pNotify )
  38. {
  39. if (pNotify == NULL)
  40. return;
  41. switch(pNotify->EventId)
  42. {
  43. case CHANNEL_EVENT_CREATE:
  44. {
  45. _setSession(pNotify->CallId, pNotify->ChanId);
  46. m_CallerNum = pNotify->Caller;
  47. m_CalleeNum = pNotify->Callee;
  48. if(pNotify->Direction == CALL_DIRECTION_INBOUND) // 呼入FS
  49. m_State = CHAN_LOGIC_STATE_ALERTING;
  50. else
  51. m_State = CHAN_LOGIC_STATE_DIALING;
  52. }
  53. break;
  54. case CHANNEL_EVENT_PROGRESS:
  55. case CHANNEL_EVENT_PROGRESS_MEDIA:
  56. {
  57. if(pNotify->Direction == CALL_DIRECTION_OUTBOUND) // FS呼出
  58. m_State = CHAN_LOGIC_STATE_RING_BACK;
  59. else
  60. return;
  61. }
  62. break;
  63. case CHANNEL_EVENT_ANSWER:
  64. {
  65. m_State = CHAN_LOGIC_STATE_TALKING;
  66. }
  67. break;
  68. case CHANNEL_EVENT_HANGUP_COMPLETE:
  69. {
  70. m_State = CHAN_LOGIC_STATE_FREE;
  71. _setSession(NULL, NULL);
  72. _reset();
  73. m_StopConnect = true;
  74. m_pEslHandle = NULL;
  75. }
  76. break;
  77. default:
  78. return;
  79. }
  80. #ifdef _DEBUG
  81. LOGGER(LOG_LEVEL_NORMAL, _T("{CChanTrunk}: 中继[%lu]状态更新, state = %d"), m_No, m_State);
  82. #endif
  83. if(m_pOperation != NULL)
  84. m_pOperation->onHostChanStateUpdated(this);
  85. m_pParent->onChanStateUpdate(pNotify->ChanOpInstance, this);
  86. }
  87. /*****************************************************************
  88. **【函数名称】 onSessionChanEvent
  89. **【函数功能】 会话关联通道事件处理
  90. **【参数】
  91. **【返回值】
  92. *****************************************************************/
  93. void CChanTrunk::onSessionChanEvent( CVirtualChan* pChanSession, PCHAN_EVENT_NOTIFY pNotify )
  94. {
  95. ASSERT(pChanSession != NULL);
  96. if(m_pOperation != NULL)
  97. m_pOperation->onSessionChanStateUpdated(pChanSession);
  98. }
  99. /*****************************************************************
  100. **【函数名称】 processCallConnect
  101. **【函数功能】 处理呼叫连接
  102. **【参数】
  103. **【返回值】
  104. *****************************************************************/
  105. bool CChanTrunk::processCallConnect( esl_handle_t* pHandle )
  106. {
  107. if(m_pEslHandle != NULL)
  108. {
  109. LOGGER(LOG_LEVEL_WARNING, _T("{ChanTrunk}: 通道[%lu]处理呼叫连接时已被占用, 新呼叫将被忽略"), m_No);
  110. return false;
  111. }
  112. m_pEslHandle = pHandle;
  113. m_State = CHAN_LOGIC_STATE_STANDBY;
  114. if(m_pOperation != NULL)
  115. m_pOperation->onHostChanStateUpdated(this); // 通知任务通道状态
  116. else
  117. m_pParent->onTrunkCallIn(this); // 通知外线呼入
  118. m_StopConnect = false;
  119. return true;
  120. }
  121. /*****************************************************************
  122. **【函数名称】 processCallDisconnect
  123. **【函数功能】 处理呼叫连接中断
  124. **【参数】
  125. **【返回值】
  126. *****************************************************************/
  127. void CChanTrunk::processCallDisconnect( void )
  128. {
  129. m_StopConnect = true;
  130. m_pEslHandle = NULL;
  131. }
  132. /*****************************************************************
  133. **【函数名称】 onAppExecuted
  134. **【函数功能】 处理通道应用执行
  135. **【参数】
  136. **【返回值】
  137. *****************************************************************/
  138. void CChanTrunk::onAppExecuted( PAPP_EXEC_NOTIFY pNotify )
  139. {
  140. if(m_pOperation != NULL)
  141. m_pOperation->onChanAppExecuted(this, pNotify);
  142. }