linux版本中间件

ChanTrunk.cpp 1.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include "ChanTrunk.h"
  2. #include "FsProxy.h"
  3. #include "Operation.h"
  4. ChanTrunk::ChanTrunk(CFsProxy* pParent, uint32_t ChanNo) : VirtualChan(pParent, ChanNo)
  5. {
  6. }
  7. ChanTrunk::~ChanTrunk()
  8. {
  9. }
  10. bool ChanTrunk::isFree(void) const
  11. {
  12. if (m_State == CHAN_LOGIC_STATE_FREE && m_pOperation != nullptr) {
  13. LOG_WARN(("{ChanTrunk}: 通道[%lu]空闲,操作非空"), m_No);
  14. }
  15. return m_State == CHAN_LOGIC_STATE_FREE && m_pOperation == nullptr;
  16. }
  17. void ChanTrunk::regist(void) const
  18. {
  19. m_pParent->onChanRegist(DEV_RES_TYPE_TRUNK, m_No, m_State);
  20. }
  21. void ChanTrunk::onChanEvent(PCHAN_EVENT_NOTIFY pNotify)
  22. {
  23. if (pNotify == nullptr) return;
  24. switch (pNotify->EventId)
  25. {
  26. case CHANNEL_EVENT_CREATE:
  27. {
  28. _setSession(pNotify->CallId, pNotify->ChanId);
  29. m_CallerNum = pNotify->Caller;
  30. m_CalleeNum = pNotify->Callee;
  31. if (pNotify->Direction == CALL_DIRECTION_INBOUND) // 呼入FS
  32. m_State = CHAN_LOGIC_STATE_ALERTING;
  33. else
  34. m_State = CHAN_LOGIC_STATE_DIALING;
  35. }
  36. break;
  37. case CHANNEL_EVENT_PROGRESS:
  38. case CHANNEL_EVENT_PROGRESS_MEDIA:
  39. {
  40. if (pNotify->Direction == CALL_DIRECTION_OUTBOUND) // FS呼出
  41. m_State = CHAN_LOGIC_STATE_RING_BACK;
  42. else
  43. return;
  44. }
  45. break;
  46. case CHANNEL_EVENT_ANSWER:
  47. {
  48. m_State = CHAN_LOGIC_STATE_TALKING;
  49. }
  50. break;
  51. case CHANNEL_EVENT_HANGUP_COMPLETE:
  52. {
  53. m_State = CHAN_LOGIC_STATE_FREE;
  54. _setSession("", "");
  55. _reset();
  56. }
  57. break;
  58. default:
  59. return;
  60. }
  61. if (m_pOperation != nullptr)
  62. m_pOperation->onHostChanStateUpdated(this);
  63. m_pParent->onChanStateUpdate(pNotify->ChanOpInstance, this);
  64. }
  65. void ChanTrunk::onSessionChanEvent(VirtualChan * pChanSession, PCHAN_EVENT_NOTIFY pNotify)
  66. {
  67. if (pChanSession == nullptr) return;
  68. if (m_pOperation != nullptr)
  69. m_pOperation->onSessionChanStateUpdated(pChanSession);
  70. }