| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #include "ChanTrunk.h"
- #include "FsProxy.h"
- #include "Operation.h"
- ChanTrunk::ChanTrunk(CFsProxy* pParent, uint32_t ChanNo) : VirtualChan(pParent, ChanNo)
- {
- }
- ChanTrunk::~ChanTrunk()
- {
- }
- bool ChanTrunk::isFree(void) const
- {
- if (m_State == CHAN_LOGIC_STATE_FREE && m_pOperation != nullptr) {
- LOG_WARN(("{ChanTrunk}: 通道[%lu]空闲,操作非空"), m_No);
- }
- return m_State == CHAN_LOGIC_STATE_FREE && m_pOperation == nullptr;
- }
- void ChanTrunk::regist(void) const
- {
- m_pParent->onChanRegist(DEV_RES_TYPE_TRUNK, m_No, m_State);
- }
- void ChanTrunk::onChanEvent(PCHAN_EVENT_NOTIFY pNotify)
- {
- if (pNotify == nullptr) return;
- switch (pNotify->EventId)
- {
- case CHANNEL_EVENT_CREATE:
- {
- _setSession(pNotify->CallId, pNotify->ChanId);
- m_CallerNum = pNotify->Caller;
- m_CalleeNum = pNotify->Callee;
- if (pNotify->Direction == CALL_DIRECTION_INBOUND) // 呼入FS
- m_State = CHAN_LOGIC_STATE_ALERTING;
- else
- m_State = CHAN_LOGIC_STATE_DIALING;
- }
- break;
- case CHANNEL_EVENT_PROGRESS:
- case CHANNEL_EVENT_PROGRESS_MEDIA:
- {
- if (pNotify->Direction == CALL_DIRECTION_OUTBOUND) // FS呼出
- m_State = CHAN_LOGIC_STATE_RING_BACK;
- else
- return;
- }
- break;
- case CHANNEL_EVENT_ANSWER:
- {
- m_State = CHAN_LOGIC_STATE_TALKING;
- }
- break;
- case CHANNEL_EVENT_HANGUP_COMPLETE:
- {
- m_State = CHAN_LOGIC_STATE_FREE;
- _setSession("", "");
- _reset();
- }
- break;
- default:
- return;
- }
- if (m_pOperation != nullptr)
- m_pOperation->onHostChanStateUpdated(this);
- m_pParent->onChanStateUpdate(pNotify->ChanOpInstance, this);
- }
- void ChanTrunk::onSessionChanEvent(VirtualChan * pChanSession, PCHAN_EVENT_NOTIFY pNotify)
- {
- if (pChanSession == nullptr) return;
- if (m_pOperation != nullptr)
- m_pOperation->onSessionChanStateUpdated(pChanSession);
- }
|