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

TapiLineFax.cpp 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. #include "StdAfx.h"
  2. #include "TapiLineFax.h"
  3. #include "DevControl.h"
  4. #include "VsControl.h"
  5. #include "TapiOpBase.h"
  6. CTapiLineFax::CTapiLineFax(DWORD DevID, HLINE Handle, DWORD ApiVersion, CString ExtID, HLINEAPP LineApp) : CTapiLine(DevID, Handle, ApiVersion, ExtID, LineApp),
  7. m_AssoTrunkId(CONST_DEV_ID_INVALID)
  8. {
  9. }
  10. CTapiLineFax::~CTapiLineFax(void)
  11. {
  12. }
  13. /*****************************************************************
  14. **【函数名称】 _procDevLinkEventS
  15. **【函数功能】 DevLink S事件后续处理
  16. **【参数】 pInfoS DevLink S事件内容
  17. **【返回值】
  18. ****************************************************************/
  19. void CTapiLineFax::_procDevLinkEventS( DevLinkInfoS* pInfoS )
  20. {
  21. // 保存外线ID
  22. if(pInfoS->nPeerResType == DEV_RES_TYPE_TRUNK)
  23. sscanf_s(pInfoS->szPeerResId, "%lu", &m_AssoTrunkId);
  24. // 状态事件过滤(保持状态不处理;重复的通话事件不处理)
  25. if((pInfoS->nResStatus == INNER_STATE_HELD) ||
  26. (pInfoS->nResStatus == INNER_STATE_TALKING && m_LineStatus == INNER_STATE_TALKING && pInfoS->nDevLinkCallId == m_DevLinkCallId))
  27. {
  28. return;
  29. } // end if
  30. // 通知关联操作
  31. if(m_pCurrTapiOp != NULL && m_AssoTrunkId != CONST_DEV_ID_INVALID)
  32. {
  33. m_pCurrTapiOp->onDevLinkEventS(this, pInfoS);
  34. } // end if
  35. // 保存呼叫信息
  36. m_DevLinkCallId = pInfoS->nDevLinkCallId;
  37. m_LineStatus = pInfoS->nResStatus;
  38. // 线路状态进行分类处理
  39. if(m_LineStatus == INNER_STATE_FREE)
  40. __onHangUp();
  41. // 通知业务逻辑线路状态变化
  42. CDevControl::GetInstance().onEventResState(DEV_RES_TYPE_FAX, m_ExtenID, __ivrStatusToFax(m_LineStatus), pInfoS->szCallerNum, pInfoS->szCalleeNum);
  43. }
  44. /*****************************************************************
  45. **【函数名称】 _procDevLinkEventD
  46. **【函数功能】 DevLink D事件后续处理
  47. **【参数】
  48. **【返回值】
  49. ****************************************************************/
  50. void CTapiLineFax::_procDevLinkEventD( int DevLinkCallId )
  51. {
  52. // 更新DevLink CallId
  53. m_DevLinkCallId = CONST_DEV_LINK_CALL_NULL;
  54. // 通知关联操作
  55. if(m_pCurrTapiOp != NULL)
  56. m_pCurrTapiOp->onDevLinkEventD(this, DevLinkCallId);
  57. // 更新线路状态
  58. if(m_LineStatus != INNER_STATE_FREE)
  59. {
  60. m_LineStatus = INNER_STATE_FREE;
  61. // 通知线路空闲状态
  62. CDevControl::GetInstance().onEventResState(DEV_RES_TYPE_FAX, m_ExtenID, INNER_STATE_FREE);
  63. // 通知VP台挂机
  64. __onHangUp();
  65. } // end if
  66. }
  67. /*****************************************************************
  68. **【函数名称】 _procLineInitStatus
  69. **【函数功能】 初始化线路状态处理
  70. **【参数】
  71. **【返回值】
  72. ****************************************************************/
  73. void CTapiLineFax::_procLineInitStatus( HCALL CallId, DWORD CallState, DWORD CallStateDetail, DWORD CallPrivilege )
  74. {
  75. // 得到活动呼叫状态
  76. if(m_ActiveCall == NULL) // 如果活动呼叫为空
  77. {
  78. m_LineStatus = INNER_STATE_FREE;
  79. }
  80. else // 如果活动呼叫不为空
  81. {
  82. if(CallId == m_ActiveCall) // 如果当前呼叫等于活动呼叫
  83. {
  84. m_LineStatus = _mapTapiCallState(CallState);
  85. }
  86. } // end if(m_hActiveCall)
  87. // 通知线路状态
  88. CDevControl::GetInstance().onEventResState(DEV_RES_TYPE_FAX, m_ExtenID, __ivrStatusToFax(m_LineStatus));
  89. }
  90. /*****************************************************************
  91. **【函数名称】 __onHangUp
  92. **【函数功能】 线路挂机处理函数
  93. **【参数】
  94. **【返回值】
  95. ****************************************************************/
  96. void CTapiLineFax::__onHangUp(void)
  97. {
  98. m_AssoTrunkId = CONST_DEV_ID_INVALID;
  99. // 通知VS, IVR线路释放
  100. CVsControl::GetInstance().notifyLineFree(atoi(m_ExtenID), DEV_RES_TYPE_FAX);
  101. }
  102. /*****************************************************************
  103. **【函数名称】 __ivrStatusToFax
  104. **【函数功能】
  105. **【参数】
  106. **【返回值】
  107. ****************************************************************/
  108. UINT CTapiLineFax::__ivrStatusToFax( UINT IvrState )
  109. {
  110. if(IvrState >= FAX_STATE_BUSY)
  111. return FAX_STATE_BUSY;
  112. return IvrState;
  113. }
  114. /*****************************************************************
  115. **【函数名称】 regist
  116. **【函数功能】 注册线路
  117. **【参数】
  118. **【返回值】
  119. ****************************************************************/
  120. void CTapiLineFax::regist( void )
  121. {
  122. // 通知业务逻辑线路创建事件
  123. CDevControl::GetInstance().onEventResDetail(DEV_RES_TYPE_FAX, m_ExtenID);
  124. CDevControl::GetInstance().onEventResState(DEV_RES_TYPE_FAX, m_ExtenID, m_LineStatus);
  125. // 设置线路可响应的状态事件
  126. HRESULT hRet = ::lineSetStatusMessages(m_Handle, LINE_DEV_STATE_ALL, LINE_ADDRESS_STATE_ALL);
  127. ASSERT(hRet == S_OK);
  128. }
  129. /*****************************************************************
  130. **【函数名称】 redoCallStatus
  131. **【函数功能】 强制重新处理线路状态
  132. **【参数】
  133. **【返回值】
  134. ****************************************************************/
  135. void CTapiLineFax::redoCallStatus( HCALL CallId, DWORD CallState, DWORD CallStateDetail )
  136. {
  137. }
  138. /*****************************************************************
  139. **【函数名称】 setDevLinkHeldId
  140. **【函数功能】 设置当前线路被保持的 DevLinkCallId
  141. **【参数】
  142. **【返回值】
  143. ****************************************************************/
  144. void CTapiLineFax::setDevLinkHeldId( const int DevLinkCallId )
  145. {
  146. }
  147. /*****************************************************************
  148. **【函数名称】 setDevLinkCallId
  149. **【函数功能】 设置当前线路被活动的 DevLinkCallId
  150. **【参数】
  151. **【返回值】
  152. ****************************************************************/
  153. void CTapiLineFax::setDevLinkCallId( const int DevLinkCallId )
  154. {
  155. }