MiddleWares_YiHe 郑州颐和医院随访系统中间件

CallStringMaker.cpp 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. #include "StdAfx.h"
  2. #include "CallStringMaker.h"
  3. #include "Config.h"
  4. CCallStringMaker::CCallStringMaker(void)
  5. {
  6. }
  7. CCallStringMaker::~CCallStringMaker(void)
  8. {
  9. }
  10. /*****************************************************************
  11. **【函数名称】 __match
  12. **【函数功能】 匹配呼叫字冠
  13. **【参数】
  14. **【返回值】
  15. ****************************************************************/
  16. bool CCallStringMaker::__match( const CString& CalleeNum, TRUNK_MATCH* pTrunkMatch )
  17. {
  18. if(lstrcmp(pTrunkMatch->Prefix, CalleeNum.Left(lstrlen(pTrunkMatch->Prefix))) == 0)
  19. return true;
  20. else
  21. return false;
  22. }
  23. /*****************************************************************
  24. **【函数名称】 __make
  25. **【函数功能】 为中继呼叫生成字符串
  26. **【参数】
  27. **【返回值】
  28. ****************************************************************/
  29. bool CCallStringMaker::__make( CString& CallerNum, CString& CalleeNum, CString& CallString, TRUNK_MATCH* pTrunkMatch )
  30. {
  31. SIP_ACCOUNT* pAccount = CConfig::sipAccount().getAccount(pTrunkMatch->TrunkItemId);
  32. //ASSERT(pAccount != NULL);
  33. if(pAccount == NULL)
  34. {
  35. LOGGER(LOG_LEVEL_WARNING, _T("{CallStringMaker}: 生成呼叫字符串时获取网关账户信息失败, AccountId = %d"), pTrunkMatch->TrunkItemId);
  36. return false;
  37. }
  38. if(CallerNum.GetLength() == 0) // 若主叫号码为空,则用缺省主叫号码
  39. CallerNum = pTrunkMatch->Caller;
  40. CalleeNum = CalleeNum.Mid(lstrlen(pTrunkMatch->Prefix)); // 修正被叫号码(删除出局字冠)
  41. CallString.Format(_T("sofia/gateway/%s/%s"), pAccount->Account, CalleeNum);
  42. return true;
  43. }
  44. /*****************************************************************
  45. **【函数名称】 __make
  46. **【函数功能】 为分机呼叫生成字符串
  47. **【参数】
  48. **【返回值】
  49. ****************************************************************/
  50. bool CCallStringMaker::__make( CString& CalleeNum, CString& CallString )
  51. {
  52. CallString.Format(_T("user/%s"), CalleeNum);
  53. return true;
  54. }
  55. /*****************************************************************
  56. **【函数名称】 makeCallString
  57. **【函数功能】 生成呼叫字符串
  58. **【参数】
  59. **【返回值】
  60. ****************************************************************/
  61. bool CCallStringMaker::makeCallString( CString& CallerNum, CString& CalleeNum, CString& CallString )
  62. {
  63. if (CDevControl::GetInstance().IsRegExten(atoi(CalleeNum))) // 分机
  64. {
  65. return __make(CalleeNum, CallString);
  66. }
  67. CCfgTrunkMatch& Match = CConfig::trunkMatch();
  68. POSITION Pos = Match.GetHeadPosition();
  69. while(Pos != NULL)
  70. {
  71. TRUNK_MATCH* pMatch = Match.GetNext(Pos);
  72. ASSERT(pMatch != NULL);
  73. if(__match(CalleeNum, pMatch))
  74. return __make(CallerNum, CalleeNum, CallString, pMatch);
  75. }
  76. return __make(CalleeNum, CallString);
  77. }
  78. // ych
  79. bool CCallStringMaker::makeCallString(CString& CallerNum, CString& CalleeNum, CString& CallString, TRUNK_MATCH*& pMatch)
  80. {
  81. if (CDevControl::GetInstance().IsRegExten(atoi(CalleeNum))) // 分机
  82. {
  83. return __make(CalleeNum, CallString);
  84. }
  85. CCfgTrunkMatch& Match = CConfig::trunkMatch();
  86. POSITION Pos = Match.GetHeadPosition();
  87. while (Pos != NULL)
  88. {
  89. pMatch = Match.GetNext(Pos);
  90. ASSERT(pMatch != NULL);
  91. if (__match(CalleeNum, pMatch))
  92. return __make(CallerNum, CalleeNum, CallString, pMatch);
  93. }
  94. return __make(CalleeNum, CallString);
  95. }
  96. // ych
  97. bool CCallStringMaker::isMatchPrefix(const CString& CalleeNum)
  98. {
  99. if (CDevControl::GetInstance().IsRegExten(atoi(CalleeNum))) // 分机
  100. {
  101. return false;
  102. }
  103. CCfgTrunkMatch& Match = CConfig::trunkMatch();
  104. POSITION Pos = Match.GetHeadPosition();
  105. while (Pos != NULL)
  106. {
  107. TRUNK_MATCH* pMatch = Match.GetNext(Pos);
  108. ASSERT(pMatch != NULL);
  109. if (__match(CalleeNum, pMatch))
  110. return true;
  111. }
  112. return false;
  113. }
  114. /*****************************************************************
  115. **【函数名称】 makeCallStringWithDefault
  116. **【函数功能】 生成呼叫字符串若失败则用缺省网关账户
  117. **【参数】
  118. **【返回值】
  119. ****************************************************************/
  120. bool CCallStringMaker::makeCallStringWithDefault( CString& CallerNum, CString& CalleeNum, CString& CallString )
  121. {
  122. if (CDevControl::GetInstance().IsRegExten(atoi(CalleeNum))) // 分机
  123. {
  124. return __make(CalleeNum, CallString);
  125. }
  126. CCfgTrunkMatch& Match = CConfig::trunkMatch();
  127. TRUNK_MATCH* pMatchDefault = Match.GetHead();
  128. POSITION Pos = Match.GetHeadPosition();
  129. while(Pos != NULL)
  130. {
  131. TRUNK_MATCH* pMatch = Match.GetNext(Pos);
  132. ASSERT(pMatch != NULL);
  133. if(pMatch->Priority > pMatchDefault->Priority)
  134. pMatchDefault = pMatch;
  135. if(__match(CalleeNum, pMatch))
  136. return __make(CallerNum, CalleeNum, CallString, pMatch);
  137. }
  138. return __make(CallerNum, CalleeNum, CallString, pMatchDefault);
  139. }